From e40fc849149dd97c248866a4a1d026dda5e57b62 Mon Sep 17 00:00:00 2001 From: Robert Jonsson Date: Mon, 7 Mar 2011 19:01:11 +0000 Subject: clean3 --- attic/muse_qt4_evolution/CMakeLists.txt | 335 + attic/muse_qt4_evolution/COPYING | 280 + attic/muse_qt4_evolution/ChangeLog | 2760 + attic/muse_qt4_evolution/Doxyfile.in | 1271 + attic/muse_qt4_evolution/NEWS | 12 + attic/muse_qt4_evolution/README | 117 + attic/muse_qt4_evolution/Reference | 59 + attic/muse_qt4_evolution/al/CMakeLists.txt | 32 + attic/muse_qt4_evolution/al/al.cpp | 29 + attic/muse_qt4_evolution/al/al.h | 34 + attic/muse_qt4_evolution/al/dsp.cpp | 120 + attic/muse_qt4_evolution/al/dsp.h | 83 + attic/muse_qt4_evolution/al/dspSSE.cpp | 531 + attic/muse_qt4_evolution/al/dspXMM.cpp | 115 + attic/muse_qt4_evolution/al/marker.cpp | 86 + attic/muse_qt4_evolution/al/marker.h | 67 + attic/muse_qt4_evolution/al/pos.cpp | 616 + attic/muse_qt4_evolution/al/pos.h | 129 + attic/muse_qt4_evolution/al/sig.cpp | 407 + attic/muse_qt4_evolution/al/sig.h | 103 + attic/muse_qt4_evolution/al/tempo.cpp | 393 + attic/muse_qt4_evolution/al/tempo.h | 101 + attic/muse_qt4_evolution/al/xml.cpp | 362 + attic/muse_qt4_evolution/al/xml.h | 69 + attic/muse_qt4_evolution/all.h | 123 + attic/muse_qt4_evolution/awl/CMakeLists.txt | 112 + attic/muse_qt4_evolution/awl/aslider.cpp | 241 + attic/muse_qt4_evolution/awl/aslider.h | 135 + attic/muse_qt4_evolution/awl/awl.cpp | 27 + attic/muse_qt4_evolution/awl/awl.h | 30 + attic/muse_qt4_evolution/awl/awlplugin.cpp | 127 + attic/muse_qt4_evolution/awl/awlplugin.h | 273 + attic/muse_qt4_evolution/awl/checkbox.cpp | 36 + attic/muse_qt4_evolution/awl/checkbox.h | 55 + attic/muse_qt4_evolution/awl/clock.xpm | 24 + attic/muse_qt4_evolution/awl/combobox.cpp | 36 + attic/muse_qt4_evolution/awl/combobox.h | 55 + attic/muse_qt4_evolution/awl/drawbar.cpp | 130 + attic/muse_qt4_evolution/awl/drawbar.h | 54 + attic/muse_qt4_evolution/awl/fastlog.h | 39 + attic/muse_qt4_evolution/awl/floatentry.cpp | 317 + attic/muse_qt4_evolution/awl/floatentry.h | 112 + attic/muse_qt4_evolution/awl/knob.cpp | 281 + attic/muse_qt4_evolution/awl/knob.h | 85 + attic/muse_qt4_evolution/awl/ltest.cpp | 14 + attic/muse_qt4_evolution/awl/metronom.xpm | 24 + attic/muse_qt4_evolution/awl/midimeter.cpp | 137 + attic/muse_qt4_evolution/awl/midimeter.h | 56 + attic/muse_qt4_evolution/awl/midimslider.cpp | 143 + attic/muse_qt4_evolution/awl/midimslider.h | 56 + attic/muse_qt4_evolution/awl/midipanentry.cpp | 47 + attic/muse_qt4_evolution/awl/midipanentry.h | 48 + attic/muse_qt4_evolution/awl/midipanknob.cpp | 37 + attic/muse_qt4_evolution/awl/midipanknob.h | 55 + attic/muse_qt4_evolution/awl/midivolentry.cpp | 50 + attic/muse_qt4_evolution/awl/midivolentry.h | 47 + attic/muse_qt4_evolution/awl/mslider.cpp | 273 + attic/muse_qt4_evolution/awl/mslider.h | 68 + attic/muse_qt4_evolution/awl/panentry.cpp | 35 + attic/muse_qt4_evolution/awl/panentry.h | 40 + attic/muse_qt4_evolution/awl/panknob.cpp | 38 + attic/muse_qt4_evolution/awl/panknob.h | 46 + attic/muse_qt4_evolution/awl/pitchedit.cpp | 89 + attic/muse_qt4_evolution/awl/pitchedit.h | 50 + attic/muse_qt4_evolution/awl/pitchlabel.cpp | 106 + attic/muse_qt4_evolution/awl/pitchlabel.h | 51 + attic/muse_qt4_evolution/awl/posedit.cpp | 441 + attic/muse_qt4_evolution/awl/posedit.h | 72 + attic/muse_qt4_evolution/awl/poslabel.cpp | 100 + attic/muse_qt4_evolution/awl/poslabel.h | 56 + attic/muse_qt4_evolution/awl/sigedit.cpp | 224 + attic/muse_qt4_evolution/awl/sigedit.h | 66 + attic/muse_qt4_evolution/awl/slider.cpp | 251 + attic/muse_qt4_evolution/awl/slider.h | 81 + attic/muse_qt4_evolution/awl/tcanvas.cpp | 1871 + attic/muse_qt4_evolution/awl/tcanvas.h | 293 + attic/muse_qt4_evolution/awl/tempoedit.cpp | 88 + attic/muse_qt4_evolution/awl/tempoedit.h | 55 + attic/muse_qt4_evolution/awl/tempolabel.cpp | 72 + attic/muse_qt4_evolution/awl/tempolabel.h | 48 + attic/muse_qt4_evolution/awl/utils.cpp | 48 + attic/muse_qt4_evolution/awl/utils.h | 29 + attic/muse_qt4_evolution/awl/volentry.cpp | 37 + attic/muse_qt4_evolution/awl/volentry.h | 41 + attic/muse_qt4_evolution/awl/volknob.cpp | 39 + attic/muse_qt4_evolution/awl/volknob.h | 46 + attic/muse_qt4_evolution/awl/volslider.cpp | 85 + attic/muse_qt4_evolution/awl/volslider.h | 57 + attic/muse_qt4_evolution/cmake/TargetDoc.cmake | 125 + attic/muse_qt4_evolution/cmake/UsePkgConfig1.cmake | 45 + attic/muse_qt4_evolution/config.h.in | 29 + attic/muse_qt4_evolution/doc/README.de | 69 + attic/muse_qt4_evolution/doc/README.instruments | 108 + attic/muse_qt4_evolution/doc/README.ladspaguis | 63 + attic/muse_qt4_evolution/doc/README.realtime | 19 + attic/muse_qt4_evolution/doc/README.shortcuts | 159 + attic/muse_qt4_evolution/doc/README.softsynth | 86 + attic/muse_qt4_evolution/doc/README.translate | 57 + attic/muse_qt4_evolution/doc/dimpl.odt | Bin 0 -> 37053 bytes attic/muse_qt4_evolution/doc/manual-de.odt | Bin 0 -> 50551 bytes attic/muse_qt4_evolution/doc/pics/main0.png | Bin 0 -> 34023 bytes attic/muse_qt4_evolution/doc/pics/main1.png | Bin 0 -> 69465 bytes attic/muse_qt4_evolution/doc/pics/main2.png | Bin 0 -> 39892 bytes attic/muse_qt4_evolution/doc/pics/mixer1.png | Bin 0 -> 23134 bytes attic/muse_qt4_evolution/doc/pics/pianoroll1.png | Bin 0 -> 35895 bytes attic/muse_qt4_evolution/doc/pics/pianoroll2.png | Bin 0 -> 37144 bytes .../muse_qt4_evolution/doc/pics/select_project.png | Bin 0 -> 40300 bytes .../doc/pics/select_template.png | Bin 0 -> 31420 bytes attic/muse_qt4_evolution/grepmidi/CMakeLists.txt | 24 + attic/muse_qt4_evolution/grepmidi/grepmidi.cpp | 348 + .../muse_qt4_evolution/midiplugins/CMakeLists.txt | 36 + .../midiplugins/drumglue/CMakeLists.txt | 50 + .../midiplugins/drumglue/drumglue.cpp | 250 + .../midiplugins/drumglue/drumglue.h | 86 + .../midiplugins/drumglue/drumgluegui.cpp | 68 + .../midiplugins/drumglue/drumgluegui.h | 41 + .../midiplugins/drumglue/drumgluegui.ui | 91 + .../midiplugins/drumglue/globalinstrumentview.cpp | 153 + .../midiplugins/drumglue/globalinstrumentview.h | 41 + .../midiplugins/drumglue/globalinstrumentview.ui | 102 + .../midiplugins/drumglue/outputinstrumentview.cpp | 45 + .../midiplugins/drumglue/outputinstrumentview.h | 31 + .../midiplugins/drumglue/outputinstrumentview.ui | 292 + .../midiplugins/dump/CMakeLists.txt | 40 + attic/muse_qt4_evolution/midiplugins/dump/dump.cpp | 48 + attic/muse_qt4_evolution/midiplugins/dump/dump.h | 28 + .../midiplugins/filter/CMakeLists.txt | 49 + .../midiplugins/filter/ctrlcombo.cpp | 56 + .../midiplugins/filter/ctrlcombo.h | 24 + .../midiplugins/filter/filter.cpp | 167 + .../muse_qt4_evolution/midiplugins/filter/filter.h | 51 + .../midiplugins/filter/filtergui.cpp | 187 + .../midiplugins/filter/filtergui.h | 57 + .../midiplugins/filter/filtergui.ui | 269 + .../midiplugins/libmidiplugin/CMakeLists.txt | 26 + .../midiplugins/libmidiplugin/evdata.h | 64 + .../midiplugins/libmidiplugin/mempi.cpp | 81 + .../midiplugins/libmidiplugin/mempi.h | 97 + .../midiplugins/libmidiplugin/midievent.cpp | 21 + .../midiplugins/libmidiplugin/midievent.h | 87 + .../midiplugins/metronom/CMakeLists.txt | 46 + .../midiplugins/metronom/metronom.cpp | 167 + .../midiplugins/metronom/metronom.h | 53 + .../midiplugins/metronom/metronomgui.cpp | 75 + .../midiplugins/metronom/metronomgui.h | 36 + .../midiplugins/metronom/metronomgui.ui | 150 + .../midiplugins/splitlayer/CMakeLists.txt | 45 + .../midiplugins/splitlayer/splitlayer.cpp | 209 + .../midiplugins/splitlayer/splitlayer.h | 69 + .../midiplugins/splitlayer/splitlayergui.cpp | 263 + .../midiplugins/splitlayer/splitlayergui.h | 65 + .../midiplugins/transform/CMakeLists.txt | 45 + .../midiplugins/transform/transform.cpp | 904 + .../midiplugins/transform/transform.h | 126 + .../midiplugins/transform/transform.ui | 616 + .../midiplugins/trigg/CMakeLists.txt | 47 + .../muse_qt4_evolution/midiplugins/trigg/trigg.cpp | 131 + attic/muse_qt4_evolution/midiplugins/trigg/trigg.h | 49 + .../midiplugins/trigg/trigggui.cpp | 56 + .../midiplugins/trigg/trigggui.h | 48 + .../midiplugins/trigg/trigggui.ui | 109 + attic/muse_qt4_evolution/muse.pro | 240 + attic/muse_qt4_evolution/muse/CMakeLists.txt | 226 + attic/muse_qt4_evolution/muse/aboutbox.ui | 612 + attic/muse_qt4_evolution/muse/arranger.cpp | 1382 + attic/muse_qt4_evolution/muse/arranger.h | 175 + attic/muse_qt4_evolution/muse/astrip.cpp | 791 + attic/muse_qt4_evolution/muse/astrip.h | 101 + attic/muse_qt4_evolution/muse/audio.cpp | 655 + attic/muse_qt4_evolution/muse/audio.h | 306 + attic/muse_qt4_evolution/muse/audiodev.h | 57 + attic/muse_qt4_evolution/muse/audiogroup.cpp | 47 + attic/muse_qt4_evolution/muse/audiogroup.h | 46 + attic/muse_qt4_evolution/muse/audioinput.cpp | 131 + attic/muse_qt4_evolution/muse/audioinput.h | 53 + attic/muse_qt4_evolution/muse/audiooutput.cpp | 191 + attic/muse_qt4_evolution/muse/audiooutput.h | 55 + attic/muse_qt4_evolution/muse/audioprefetch.cpp | 199 + attic/muse_qt4_evolution/muse/audioprefetch.h | 54 + attic/muse_qt4_evolution/muse/audiotrack.cpp | 582 + attic/muse_qt4_evolution/muse/audiotrack.h | 105 + attic/muse_qt4_evolution/muse/audiowriteback.cpp | 101 + attic/muse_qt4_evolution/muse/audiowriteback.h | 44 + attic/muse_qt4_evolution/muse/auxplugin.cpp | 190 + attic/muse_qt4_evolution/muse/auxplugin.h | 84 + attic/muse_qt4_evolution/muse/canvas.cpp | 1187 + attic/muse_qt4_evolution/muse/canvas.h | 124 + .../muse_qt4_evolution/muse/cliplist/cliplist.cpp | 251 + attic/muse_qt4_evolution/muse/cliplist/cliplist.h | 47 + attic/muse_qt4_evolution/muse/cobject.cpp | 55 + attic/muse_qt4_evolution/muse/cobject.h | 46 + attic/muse_qt4_evolution/muse/conf.cpp | 694 + attic/muse_qt4_evolution/muse/conf.h | 46 + attic/muse_qt4_evolution/muse/configmidifile.ui | 153 + attic/muse_qt4_evolution/muse/configtrack.cpp | 265 + attic/muse_qt4_evolution/muse/configtrack.h | 61 + attic/muse_qt4_evolution/muse/configtrack.ui | 299 + attic/muse_qt4_evolution/muse/ctrl.cpp | 450 + attic/muse_qt4_evolution/muse/ctrl.h | 236 + attic/muse_qt4_evolution/muse/ctrl/CMakeLists.txt | 46 + .../muse/ctrl/configmidictrl.cpp | 202 + .../muse_qt4_evolution/muse/ctrl/configmidictrl.h | 51 + .../muse_qt4_evolution/muse/ctrl/configmidictrl.ui | 204 + attic/muse_qt4_evolution/muse/ctrl/ctrldialog.cpp | 191 + attic/muse_qt4_evolution/muse/ctrl/ctrldialog.h | 49 + attic/muse_qt4_evolution/muse/ctrl/ctrldialog.ui | 126 + attic/muse_qt4_evolution/muse/ctrl/ctrledit.cpp | 184 + attic/muse_qt4_evolution/muse/ctrl/ctrledit.h | 76 + attic/muse_qt4_evolution/muse/ctrl/ctrleditor.cpp | 492 + attic/muse_qt4_evolution/muse/ctrl/ctrleditor.h | 76 + .../muse/ctrl/definemidictrl.cpp | 110 + .../muse_qt4_evolution/muse/ctrl/definemidictrl.h | 51 + .../muse_qt4_evolution/muse/ctrl/definemidictrl.ui | 285 + attic/muse_qt4_evolution/muse/debug.h | 44 + attic/muse_qt4_evolution/muse/default_click.h | 1213 + attic/muse_qt4_evolution/muse/device.h | 56 + attic/muse_qt4_evolution/muse/driver.h | 64 + attic/muse_qt4_evolution/muse/dssihost.cpp | 891 + attic/muse_qt4_evolution/muse/dssihost.h | 121 + attic/muse_qt4_evolution/muse/dummyaudio.cpp | 294 + attic/muse_qt4_evolution/muse/editor.cpp | 38 + attic/muse_qt4_evolution/muse/editor.h | 44 + attic/muse_qt4_evolution/muse/esettings.cpp | 773 + attic/muse_qt4_evolution/muse/esettings.h | 361 + attic/muse_qt4_evolution/muse/evdata.h | 85 + attic/muse_qt4_evolution/muse/event.cpp | 222 + attic/muse_qt4_evolution/muse/event.h | 139 + attic/muse_qt4_evolution/muse/eventbase.h | 100 + attic/muse_qt4_evolution/muse/eventlist.cpp | 93 + attic/muse_qt4_evolution/muse/exportmidi.cpp | 376 + attic/muse_qt4_evolution/muse/exportmidi.h | 41 + attic/muse_qt4_evolution/muse/exportmididialog.ui | 176 + attic/muse_qt4_evolution/muse/extmidieditor.cpp | 422 + attic/muse_qt4_evolution/muse/extmidieditor.h | 120 + attic/muse_qt4_evolution/muse/fastlog.h | 38 + attic/muse_qt4_evolution/muse/fifo.cpp | 183 + attic/muse_qt4_evolution/muse/fifo.h | 105 + attic/muse_qt4_evolution/muse/gconfig.cpp | 121 + attic/muse_qt4_evolution/muse/gconfig.h | 133 + attic/muse_qt4_evolution/muse/globaldefs.h | 37 + attic/muse_qt4_evolution/muse/globals.cpp | 133 + attic/muse_qt4_evolution/muse/globals.h | 86 + attic/muse_qt4_evolution/muse/gui.h | 54 + attic/muse_qt4_evolution/muse/help.cpp | 101 + attic/muse_qt4_evolution/muse/help.h | 36 + attic/muse_qt4_evolution/muse/helper.cpp | 47 + attic/muse_qt4_evolution/muse/helper.h | 27 + attic/muse_qt4_evolution/muse/icons.cpp | 341 + attic/muse_qt4_evolution/muse/icons.h | 134 + attic/muse_qt4_evolution/muse/importmidi.cpp | 589 + attic/muse_qt4_evolution/muse/importmidi.h | 46 + attic/muse_qt4_evolution/muse/importmidi.ui | 200 + .../muse/instruments/CMakeLists.txt | 41 + .../muse/instruments/editinstrument.cpp | 844 + .../muse/instruments/editinstrument.h | 70 + .../muse/instruments/editinstrument.ui | 998 + .../muse/instruments/midictrledit.cpp | 418 + .../muse/instruments/midictrledit.h | 58 + .../muse/instruments/minstrument.cpp | 631 + .../muse/instruments/minstrument.h | 160 + attic/muse_qt4_evolution/muse/jack.cpp | 886 + attic/muse_qt4_evolution/muse/jackaudio.h | 90 + attic/muse_qt4_evolution/muse/ladspa.h | 599 + attic/muse_qt4_evolution/muse/ladspaplugin.cpp | 235 + attic/muse_qt4_evolution/muse/ladspaplugin.h | 127 + attic/muse_qt4_evolution/muse/liste/CMakeLists.txt | 48 + .../muse_qt4_evolution/muse/liste/ctrllistedit.cpp | 569 + attic/muse_qt4_evolution/muse/liste/ctrllistedit.h | 96 + .../muse_qt4_evolution/muse/liste/ctrllistedit.ui | 334 + .../muse_qt4_evolution/muse/liste/ieventdialog.cpp | 428 + attic/muse_qt4_evolution/muse/liste/ieventdialog.h | 117 + attic/muse_qt4_evolution/muse/liste/listedit.cpp | 298 + attic/muse_qt4_evolution/muse/liste/listedit.h | 98 + .../muse_qt4_evolution/muse/liste/partlistedit.cpp | 434 + attic/muse_qt4_evolution/muse/liste/partlistedit.h | 79 + .../muse_qt4_evolution/muse/liste/partlistedit.ui | 166 + .../muse/liste/tracklistedit.cpp | 65 + .../muse_qt4_evolution/muse/liste/tracklistedit.h | 50 + .../muse_qt4_evolution/muse/liste/tracklistedit.ui | 146 + .../muse_qt4_evolution/muse/marker/CMakeLists.txt | 45 + .../muse_qt4_evolution/muse/marker/markerview.cpp | 413 + attic/muse_qt4_evolution/muse/marker/markerview.h | 98 + .../muse_qt4_evolution/muse/master/CMakeLists.txt | 37 + attic/muse_qt4_evolution/muse/master/master.cpp | 233 + attic/muse_qt4_evolution/muse/master/master.h | 63 + .../muse_qt4_evolution/muse/master/masteredit.cpp | 302 + attic/muse_qt4_evolution/muse/master/masteredit.h | 107 + attic/muse_qt4_evolution/muse/midi.cpp | 633 + attic/muse_qt4_evolution/muse/midi.h | 68 + attic/muse_qt4_evolution/muse/midictrl.cpp | 372 + attic/muse_qt4_evolution/muse/midictrl.h | 168 + .../muse/midiedit/CMakeLists.txt | 71 + attic/muse_qt4_evolution/muse/midiedit/citem.cpp | 82 + attic/muse_qt4_evolution/muse/midiedit/citem.h | 70 + attic/muse_qt4_evolution/muse/midiedit/cmd.h | 32 + attic/muse_qt4_evolution/muse/midiedit/dcanvas.cpp | 723 + attic/muse_qt4_evolution/muse/midiedit/dcanvas.h | 77 + .../muse_qt4_evolution/muse/midiedit/drumedit.cpp | 450 + attic/muse_qt4_evolution/muse/midiedit/drumedit.h | 93 + attic/muse_qt4_evolution/muse/midiedit/drummap.cpp | 219 + attic/muse_qt4_evolution/muse/midiedit/drummap.h | 81 + attic/muse_qt4_evolution/muse/midiedit/ecanvas.cpp | 1549 + attic/muse_qt4_evolution/muse/midiedit/ecanvas.h | 173 + .../muse_qt4_evolution/muse/midiedit/gatetime.cpp | 105 + attic/muse_qt4_evolution/muse/midiedit/gatetime.h | 62 + attic/muse_qt4_evolution/muse/midiedit/gatetime.ui | 85 + attic/muse_qt4_evolution/muse/midiedit/midicmd.cpp | 135 + attic/muse_qt4_evolution/muse/midiedit/midicmd.h | 81 + attic/muse_qt4_evolution/muse/midiedit/midicmd.ui | 76 + .../muse/midiedit/midieditor.cpp | 444 + .../muse_qt4_evolution/muse/midiedit/midieditor.h | 147 + .../muse/midiedit/miditracker.cpp | 234 + .../muse_qt4_evolution/muse/midiedit/miditracker.h | 76 + .../muse_qt4_evolution/muse/midiedit/pianoroll.cpp | 526 + attic/muse_qt4_evolution/muse/midiedit/pianoroll.h | 126 + .../muse_qt4_evolution/muse/midiedit/prcanvas.cpp | 773 + attic/muse_qt4_evolution/muse/midiedit/prcanvas.h | 75 + .../muse/midiedit/quantconfig.cpp | 68 + .../muse_qt4_evolution/muse/midiedit/quantconfig.h | 42 + .../muse/midiedit/quantconfig.ui | 151 + .../muse/midiedit/trackpattern.cpp | 627 + .../muse/midiedit/trackpattern.h | 261 + .../muse_qt4_evolution/muse/midiedit/velocity.cpp | 108 + attic/muse_qt4_evolution/muse/midiedit/velocity.h | 62 + attic/muse_qt4_evolution/muse/midiedit/velocity.ui | 86 + attic/muse_qt4_evolution/muse/midievent.cpp | 129 + attic/muse_qt4_evolution/muse/midievent.h | 100 + attic/muse_qt4_evolution/muse/midieventbase.cpp | 159 + attic/muse_qt4_evolution/muse/midieventbase.h | 76 + attic/muse_qt4_evolution/muse/midififo.cpp | 103 + attic/muse_qt4_evolution/muse/midififo.h | 92 + attic/muse_qt4_evolution/muse/midifile.cpp | 673 + attic/muse_qt4_evolution/muse/midifile.h | 121 + attic/muse_qt4_evolution/muse/midiinport.cpp | 241 + attic/muse_qt4_evolution/muse/midiinport.h | 67 + attic/muse_qt4_evolution/muse/midiout.cpp | 398 + attic/muse_qt4_evolution/muse/midiout.h | 67 + attic/muse_qt4_evolution/muse/midioutport.cpp | 262 + attic/muse_qt4_evolution/muse/midioutport.h | 70 + attic/muse_qt4_evolution/muse/midiplugin.cpp | 625 + attic/muse_qt4_evolution/muse/midiplugin.h | 168 + attic/muse_qt4_evolution/muse/midiportinfo.ui | 92 + attic/muse_qt4_evolution/muse/midirack.cpp | 208 + attic/muse_qt4_evolution/muse/midirack.h | 48 + attic/muse_qt4_evolution/muse/midirc.cpp | 180 + attic/muse_qt4_evolution/muse/midirc.h | 65 + attic/muse_qt4_evolution/muse/midisynti.cpp | 225 + attic/muse_qt4_evolution/muse/midisynti.h | 62 + attic/muse_qt4_evolution/muse/miditrack.cpp | 716 + attic/muse_qt4_evolution/muse/miditrack.h | 127 + attic/muse_qt4_evolution/muse/miditrackbase.cpp | 136 + attic/muse_qt4_evolution/muse/miditrackbase.h | 53 + attic/muse_qt4_evolution/muse/miditrackinfo.ui | 292 + attic/muse_qt4_evolution/muse/miditransform.cpp | 1534 + attic/muse_qt4_evolution/muse/miditransform.h | 113 + attic/muse_qt4_evolution/muse/mixer.cpp | 397 + attic/muse_qt4_evolution/muse/mixer.h | 95 + attic/muse_qt4_evolution/muse/mstrip.cpp | 1211 + attic/muse_qt4_evolution/muse/mstrip.h | 191 + attic/muse_qt4_evolution/muse/mtc.cpp | 131 + attic/muse_qt4_evolution/muse/mtc.h | 68 + attic/muse_qt4_evolution/muse/muse.cpp | 3029 + attic/muse_qt4_evolution/muse/muse.h | 318 + attic/muse_qt4_evolution/muse/muse.qrc | 85 + attic/muse_qt4_evolution/muse/part.cpp | 361 + attic/muse_qt4_evolution/muse/part.h | 151 + attic/muse_qt4_evolution/muse/partdrag.cpp | 199 + attic/muse_qt4_evolution/muse/partdrag.h | 69 + attic/muse_qt4_evolution/muse/pipeline.cpp | 221 + attic/muse_qt4_evolution/muse/pipeline.h | 59 + attic/muse_qt4_evolution/muse/plugin.cpp | 466 + attic/muse_qt4_evolution/muse/plugin.h | 218 + attic/muse_qt4_evolution/muse/plugingui.cpp | 770 + attic/muse_qt4_evolution/muse/plugingui.h | 122 + attic/muse_qt4_evolution/muse/port.h | 76 + attic/muse_qt4_evolution/muse/preferences.cpp | 932 + attic/muse_qt4_evolution/muse/preferences.h | 79 + attic/muse_qt4_evolution/muse/preferences.ui | 2400 + attic/muse_qt4_evolution/muse/projectdialog.cpp | 471 + attic/muse_qt4_evolution/muse/projectdialog.h | 73 + attic/muse_qt4_evolution/muse/projectdialog.ui | 269 + .../muse_qt4_evolution/muse/projectpropsdialog.cpp | 64 + attic/muse_qt4_evolution/muse/projectpropsdialog.h | 46 + .../muse_qt4_evolution/muse/projectpropsdialog.ui | 188 + attic/muse_qt4_evolution/muse/rack.cpp | 445 + attic/muse_qt4_evolution/muse/rack.h | 66 + attic/muse_qt4_evolution/muse/revision.cpp | 27 + attic/muse_qt4_evolution/muse/revision.h | 1 + attic/muse_qt4_evolution/muse/route.cpp | 417 + attic/muse_qt4_evolution/muse/route.h | 108 + attic/muse_qt4_evolution/muse/routedialog.cpp | 196 + attic/muse_qt4_evolution/muse/routedialog.h | 53 + attic/muse_qt4_evolution/muse/routedialog.ui | 170 + attic/muse_qt4_evolution/muse/selectfilter.h | 51 + attic/muse_qt4_evolution/muse/seqmsg.cpp | 621 + attic/muse_qt4_evolution/muse/shortcuts.cpp | 1169 + attic/muse_qt4_evolution/muse/shortcuts.h | 135 + attic/muse_qt4_evolution/muse/song.cpp | 1552 + attic/muse_qt4_evolution/muse/song.h | 416 + attic/muse_qt4_evolution/muse/songfile.cpp | 489 + attic/muse_qt4_evolution/muse/songpart.cpp | 371 + attic/muse_qt4_evolution/muse/songtrack.cpp | 715 + attic/muse_qt4_evolution/muse/strip.cpp | 123 + attic/muse_qt4_evolution/muse/strip.h | 75 + attic/muse_qt4_evolution/muse/style.qss | 66 + attic/muse_qt4_evolution/muse/sync.cpp | 499 + attic/muse_qt4_evolution/muse/sync.h | 37 + attic/muse_qt4_evolution/muse/synth.cpp | 588 + attic/muse_qt4_evolution/muse/synth.h | 227 + attic/muse_qt4_evolution/muse/templatedialog.cpp | 259 + attic/muse_qt4_evolution/muse/templatedialog.h | 51 + attic/muse_qt4_evolution/muse/templatedialog.ui | 188 + attic/muse_qt4_evolution/muse/thread.cpp | 354 + attic/muse_qt4_evolution/muse/thread.h | 109 + attic/muse_qt4_evolution/muse/ticksynth.cpp | 181 + attic/muse_qt4_evolution/muse/ticksynth.h | 29 + attic/muse_qt4_evolution/muse/tllineedit.cpp | 70 + attic/muse_qt4_evolution/muse/tllineedit.h | 48 + attic/muse_qt4_evolution/muse/tlswidget.cpp | 355 + attic/muse_qt4_evolution/muse/tlswidget.h | 83 + attic/muse_qt4_evolution/muse/tlwidget.cpp | 641 + attic/muse_qt4_evolution/muse/tlwidget.h | 105 + attic/muse_qt4_evolution/muse/tlwlayout.cpp | 144 + attic/muse_qt4_evolution/muse/tlwlayout.h | 51 + attic/muse_qt4_evolution/muse/track.cpp | 1062 + attic/muse_qt4_evolution/muse/track.h | 345 + attic/muse_qt4_evolution/muse/trackdrag.cpp | 61 + attic/muse_qt4_evolution/muse/trackdrag.h | 42 + attic/muse_qt4_evolution/muse/trackinfo.cpp | 553 + attic/muse_qt4_evolution/muse/trackinfo.h | 203 + attic/muse_qt4_evolution/muse/transport.cpp | 411 + attic/muse_qt4_evolution/muse/transport.h | 74 + attic/muse_qt4_evolution/muse/transport.ui | 856 + attic/muse_qt4_evolution/muse/transpose.cpp | 92 + attic/muse_qt4_evolution/muse/transpose.h | 40 + attic/muse_qt4_evolution/muse/transpose.ui | 193 + attic/muse_qt4_evolution/muse/trelement.h | 63 + attic/muse_qt4_evolution/muse/undo.cpp | 614 + attic/muse_qt4_evolution/muse/undo.h | 103 + attic/muse_qt4_evolution/muse/value.cpp | 73 + attic/muse_qt4_evolution/muse/vst.cpp | 1063 + attic/muse_qt4_evolution/muse/vst.h | 172 + attic/muse_qt4_evolution/muse/wave.cpp | 1087 + attic/muse_qt4_evolution/muse/wave.h | 162 + .../muse/waveedit/CMakeLists.txt | 34 + .../muse_qt4_evolution/muse/waveedit/waveedit.cpp | 289 + attic/muse_qt4_evolution/muse/waveedit/waveedit.h | 88 + .../muse_qt4_evolution/muse/waveedit/waveview.cpp | 1124 + attic/muse_qt4_evolution/muse/waveedit/waveview.h | 127 + attic/muse_qt4_evolution/muse/waveevent.cpp | 137 + attic/muse_qt4_evolution/muse/waveevent.h | 61 + attic/muse_qt4_evolution/muse/wavetrack.cpp | 427 + attic/muse_qt4_evolution/muse/wavetrack.h | 84 + .../muse_qt4_evolution/muse/widgets/CMakeLists.txt | 88 + attic/muse_qt4_evolution/muse/widgets/action.h | 42 + attic/muse_qt4_evolution/muse/widgets/bigtime.cpp | 267 + attic/muse_qt4_evolution/muse/widgets/bigtime.h | 64 + .../muse/widgets/cliplisteditorbase.h | 138 + .../muse/widgets/cliplisteditorbase.ui | 146 + .../muse_qt4_evolution/muse/widgets/comboQuant.cpp | 69 + attic/muse_qt4_evolution/muse/widgets/comboQuant.h | 43 + attic/muse_qt4_evolution/muse/widgets/combobox.cpp | 81 + attic/muse_qt4_evolution/muse/widgets/combobox.h | 57 + attic/muse_qt4_evolution/muse/widgets/comment.cpp | 91 + attic/muse_qt4_evolution/muse/widgets/comment.h | 69 + attic/muse_qt4_evolution/muse/widgets/comment.ui | 97 + .../muse_qt4_evolution/muse/widgets/ctrlcombo.cpp | 68 + attic/muse_qt4_evolution/muse/widgets/ctrlcombo.h | 32 + attic/muse_qt4_evolution/muse/widgets/dentry.cpp | 208 + attic/muse_qt4_evolution/muse/widgets/dentry.h | 79 + .../muse/widgets/doublelabel.cpp | 144 + .../muse_qt4_evolution/muse/widgets/doublelabel.h | 68 + .../muse/widgets/editmetadialogbase.cpp | 110 + .../muse/widgets/editmetadialogbase.ui | 137 + .../muse/widgets/fdialogbuttons.ui | 167 + .../muse_qt4_evolution/muse/widgets/filedialog.cpp | 193 + attic/muse_qt4_evolution/muse/widgets/filedialog.h | 65 + .../muse_qt4_evolution/muse/widgets/floatlabel.cpp | 144 + attic/muse_qt4_evolution/muse/widgets/floatlabel.h | 68 + attic/muse_qt4_evolution/muse/widgets/fontsel.cpp | 138 + attic/muse_qt4_evolution/muse/widgets/fontsel.h | 57 + .../muse/widgets/greendotbutton.h | 38 + attic/muse_qt4_evolution/muse/widgets/intlabel.h | 56 + .../muse_qt4_evolution/muse/widgets/menutitle.cpp | 50 + attic/muse_qt4_evolution/muse/widgets/menutitle.h | 41 + attic/muse_qt4_evolution/muse/widgets/midisync.cpp | 128 + attic/muse_qt4_evolution/muse/widgets/midisync.h | 49 + attic/muse_qt4_evolution/muse/widgets/midisync.ui | 711 + .../muse/widgets/mittransposebase.h | 111 + .../muse/widgets/mittransposebase.ui | 112 + .../muse/widgets/mixdowndialog.cpp | 133 + .../muse/widgets/mixdowndialog.h | 48 + .../muse/widgets/mixdowndialog.ui | 212 + attic/muse_qt4_evolution/muse/widgets/noteinfo.cpp | 207 + attic/muse_qt4_evolution/muse/widgets/noteinfo.h | 68 + .../muse/widgets/outportcombo.cpp | 52 + .../muse_qt4_evolution/muse/widgets/outportcombo.h | 39 + .../muse_qt4_evolution/muse/widgets/quantcombo.cpp | 80 + attic/muse_qt4_evolution/muse/widgets/quantcombo.h | 46 + .../muse/widgets/rastercombo.cpp | 82 + .../muse_qt4_evolution/muse/widgets/rastercombo.h | 46 + .../muse_qt4_evolution/muse/widgets/recordbutton.h | 38 + .../muse/widgets/shortcutcapturedialog.cpp | 97 + .../muse/widgets/shortcutcapturedialog.h | 52 + .../muse/widgets/shortcutcapturedialog.ui | 162 + .../muse/widgets/shortcutconfig.cpp | 167 + .../muse/widgets/shortcutconfig.h | 50 + .../muse/widgets/shortcutconfig.ui | 180 + attic/muse_qt4_evolution/muse/widgets/siglabel.cpp | 165 + attic/muse_qt4_evolution/muse/widgets/siglabel.h | 50 + .../muse/widgets/simplebutton.cpp | 65 + .../muse_qt4_evolution/muse/widgets/simplebutton.h | 41 + attic/muse_qt4_evolution/muse/widgets/splitter.cpp | 107 + attic/muse_qt4_evolution/muse/widgets/splitter.h | 62 + .../muse/widgets/synthwizardbase.h | 58 + attic/muse_qt4_evolution/muse/widgets/tb1.cpp | 180 + attic/muse_qt4_evolution/muse/widgets/tb1.h | 71 + attic/muse_qt4_evolution/muse/widgets/tools.cpp | 100 + attic/muse_qt4_evolution/muse/widgets/tools.h | 58 + .../muse/widgets/transformbase.ui | 993 + attic/muse_qt4_evolution/muse/widgets/utils.cpp | 451 + attic/muse_qt4_evolution/muse/widgets/utils.h | 58 + .../muse/widgets/wtrackinfobase.ui | 166 + attic/muse_qt4_evolution/muse/xpm/activeoff.svg | 120 + attic/muse_qt4_evolution/muse/xpm/activeon.svg | 120 + .../muse/xpm/addtrack_addmiditrack.xpm | 26 + .../muse/xpm/addtrack_audiogroup.xpm | 35 + .../muse/xpm/addtrack_audioinput.xpm | 33 + .../muse/xpm/addtrack_audiooutput.xpm | 44 + .../muse/xpm/addtrack_auxsend.xpm | 28 + .../muse/xpm/addtrack_drumtrack.xpm | 41 + .../muse/xpm/addtrack_wavetrack.xpm | 36 + .../muse/xpm/audio_bounce_to_file.xpm | 24 + .../muse/xpm/audio_bounce_to_track.xpm | 27 + .../muse/xpm/audio_restartaudio.xpm | 69 + attic/muse_qt4_evolution/muse/xpm/back.xpm | 27 + attic/muse_qt4_evolution/muse/xpm/bold.xpm | 16 + attic/muse_qt4_evolution/muse/xpm/buttondown.xpm | 27 + attic/muse_qt4_evolution/muse/xpm/cafter.xpm | 29 + attic/muse_qt4_evolution/muse/xpm/cliplistS.xpm | 28 + attic/muse_qt4_evolution/muse/xpm/cmark.xpm | 23 + attic/muse_qt4_evolution/muse/xpm/config.xpm | 36 + attic/muse_qt4_evolution/muse/xpm/configure.xpm | 36 + attic/muse_qt4_evolution/muse/xpm/ctrl.xpm | 27 + attic/muse_qt4_evolution/muse/xpm/cut.xpm | 29 + attic/muse_qt4_evolution/muse/xpm/darkgreendot.svg | 117 + attic/muse_qt4_evolution/muse/xpm/delete.xpm | 27 + attic/muse_qt4_evolution/muse/xpm/down.xpm | 15 + attic/muse_qt4_evolution/muse/xpm/draw.xpm | 25 + attic/muse_qt4_evolution/muse/xpm/edit_drumms.xpm | 45 + attic/muse_qt4_evolution/muse/xpm/edit_list.xpm | 31 + .../muse/xpm/edit_mastertrack.xpm | 38 + attic/muse_qt4_evolution/muse/xpm/edit_midi.xpm | 26 + .../muse_qt4_evolution/muse/xpm/edit_pianoroll.xpm | 28 + .../muse_qt4_evolution/muse/xpm/edit_track_add.xpm | 24 + .../muse_qt4_evolution/muse/xpm/edit_track_del.xpm | 25 + attic/muse_qt4_evolution/muse/xpm/editcopy.xpm | 102 + attic/muse_qt4_evolution/muse/xpm/editcut.xpm | 33 + attic/muse_qt4_evolution/muse/xpm/editcutS.xpm | 24 + attic/muse_qt4_evolution/muse/xpm/editmute.xpm | 33 + attic/muse_qt4_evolution/muse/xpm/editpaste.xpm | 210 + attic/muse_qt4_evolution/muse/xpm/fforward.xpm | 17 + attic/muse_qt4_evolution/muse/xpm/filenew.png | Bin 0 -> 575 bytes attic/muse_qt4_evolution/muse/xpm/filenewS.xpm | 29 + attic/muse_qt4_evolution/muse/xpm/fileopen.png | Bin 0 -> 887 bytes attic/muse_qt4_evolution/muse/xpm/filesave.png | Bin 0 -> 762 bytes attic/muse_qt4_evolution/muse/xpm/flag.xpm | 28 + attic/muse_qt4_evolution/muse/xpm/flagS.xpm | 19 + attic/muse_qt4_evolution/muse/xpm/folder_new.png | Bin 0 -> 1278 bytes attic/muse_qt4_evolution/muse/xpm/forward.xpm | 28 + attic/muse_qt4_evolution/muse/xpm/frewind.xpm | 17 + attic/muse_qt4_evolution/muse/xpm/glue.xpm | 49 + attic/muse_qt4_evolution/muse/xpm/greendot.svg | 117 + attic/muse_qt4_evolution/muse/xpm/gv.xpm | 23 + attic/muse_qt4_evolution/muse/xpm/home.xpm | 27 + attic/muse_qt4_evolution/muse/xpm/initS.xpm | 23 + attic/muse_qt4_evolution/muse/xpm/inputpluginS.xpm | 22 + attic/muse_qt4_evolution/muse/xpm/italic.xpm | 16 + attic/muse_qt4_evolution/muse/xpm/listS.xpm | 26 + attic/muse_qt4_evolution/muse/xpm/lmark.xpm | 23 + attic/muse_qt4_evolution/muse/xpm/localoffS.xpm | 22 + attic/muse_qt4_evolution/muse/xpm/lock.xpm | 86 + attic/muse_qt4_evolution/muse/xpm/loop.xpm | 29 + attic/muse_qt4_evolution/muse/xpm/master.xpm | 15 + attic/muse_qt4_evolution/muse/xpm/mastertrackS.xpm | 25 + .../muse/xpm/mastertrack_graphic.xpm | 28 + .../muse/xpm/mastertrack_list.xpm | 27 + attic/muse_qt4_evolution/muse/xpm/meta.xpm | 27 + .../muse/xpm/midi_edit_instrument.xpm | 27 + .../muse/xpm/midi_init_instr.xpm | 28 + .../muse_qt4_evolution/muse/xpm/midi_local_off.xpm | 105 + attic/muse_qt4_evolution/muse/xpm/midi_plugS.xpm | 22 + .../muse/xpm/midi_reset_instr.xpm | 55 + .../muse_qt4_evolution/muse/xpm/midi_transform.xpm | 30 + .../muse_qt4_evolution/muse/xpm/midi_transpose.xpm | 31 + attic/muse_qt4_evolution/muse/xpm/midiin.xpm | 23 + .../muse_qt4_evolution/muse/xpm/miditransformS.xpm | 22 + .../muse_qt4_evolution/muse/xpm/miditransposeS.xpm | 25 + attic/muse_qt4_evolution/muse/xpm/minus.xpm | 24 + attic/muse_qt4_evolution/muse/xpm/mixerS.xpm | 21 + attic/muse_qt4_evolution/muse/xpm/mixeraudioS.xpm | 22 + attic/muse_qt4_evolution/muse/xpm/mono.svg | 70 + attic/muse_qt4_evolution/muse/xpm/muse_icon.xpm | 411 + .../muse/xpm/muse_icon_64x64.png | Bin 0 -> 7493 bytes .../muse_qt4_evolution/muse/xpm/mutebutton_off.xpm | 165 + .../muse_qt4_evolution/muse/xpm/mutebutton_on.xpm | 352 + .../muse_qt4_evolution/muse/xpm/newmutebutton.xpm | 69 + attic/muse_qt4_evolution/muse/xpm/off.svg | 114 + attic/muse_qt4_evolution/muse/xpm/off.xpm | 25 + attic/muse_qt4_evolution/muse/xpm/on.svg | 114 + attic/muse_qt4_evolution/muse/xpm/pafter.xpm | 29 + attic/muse_qt4_evolution/muse/xpm/panic.xpm | 50 + attic/muse_qt4_evolution/muse/xpm/pencil.xpm | 27 + attic/muse_qt4_evolution/muse/xpm/piano.xpm | 24 + attic/muse_qt4_evolution/muse/xpm/pitch.xpm | 28 + attic/muse_qt4_evolution/muse/xpm/play.xpm | 17 + attic/muse_qt4_evolution/muse/xpm/plus.xpm | 21 + attic/muse_qt4_evolution/muse/xpm/pointer.xpm | 28 + attic/muse_qt4_evolution/muse/xpm/punchin.xpm | 17 + attic/muse_qt4_evolution/muse/xpm/punchout.xpm | 18 + attic/muse_qt4_evolution/muse/xpm/quant.xpm | 28 + attic/muse_qt4_evolution/muse/xpm/recordOff.svg | 117 + attic/muse_qt4_evolution/muse/xpm/recordOn.svg | 117 + attic/muse_qt4_evolution/muse/xpm/redo.xpm | 92 + attic/muse_qt4_evolution/muse/xpm/resetS.xpm | 22 + attic/muse_qt4_evolution/muse/xpm/rmark.xpm | 23 + attic/muse_qt4_evolution/muse/xpm/select.xpm | 21 + attic/muse_qt4_evolution/muse/xpm/select_all.xpm | 21 + .../muse/xpm/select_all_parts_on_track.xpm | 39 + .../muse/xpm/select_deselect_all.xpm | 22 + .../muse/xpm/select_inside_loop.xpm | 21 + .../muse/xpm/select_invert_selection.xpm | 21 + .../muse/xpm/select_outside_loop.xpm | 21 + .../muse/xpm/settings_appearance_settings.xpm | 66 + .../muse/xpm/settings_configureshortcuts.xpm | 36 + .../muse/xpm/settings_follow_song.xpm | 30 + .../muse/xpm/settings_globalsettings.xpm | 89 + .../muse/xpm/settings_metronome.xpm | 99 + .../muse/xpm/settings_midifileexport.xpm | 30 + .../muse/xpm/settings_midiport_softsynths.xpm | 29 + .../muse/xpm/settings_midisync.xpm | 53 + attic/muse_qt4_evolution/muse/xpm/solobutton.xpm | 39 + .../muse_qt4_evolution/muse/xpm/solobutton_off.xpm | 146 + .../muse_qt4_evolution/muse/xpm/solobutton_on.xpm | 300 + attic/muse_qt4_evolution/muse/xpm/speaker.xpm | 23 + attic/muse_qt4_evolution/muse/xpm/splash.png | Bin 0 -> 45374 bytes attic/muse_qt4_evolution/muse/xpm/start.xpm | 17 + attic/muse_qt4_evolution/muse/xpm/steprec.xpm | 24 + attic/muse_qt4_evolution/muse/xpm/stereo.svg | 68 + attic/muse_qt4_evolution/muse/xpm/stick.xpm | 33 + attic/muse_qt4_evolution/muse/xpm/stop.xpm | 17 + attic/muse_qt4_evolution/muse/xpm/sysex.xpm | 27 + attic/muse_qt4_evolution/muse/xpm/toc.xpm | 27 + attic/muse_qt4_evolution/muse/xpm/track_add.xpm | 23 + attic/muse_qt4_evolution/muse/xpm/track_delete.xpm | 23 + attic/muse_qt4_evolution/muse/xpm/underlined.xpm | 16 + attic/muse_qt4_evolution/muse/xpm/undo.xpm | 93 + attic/muse_qt4_evolution/muse/xpm/up.xpm | 15 + .../muse/xpm/view_bigtime_window.xpm | 22 + .../muse_qt4_evolution/muse/xpm/view_cliplist.xpm | 32 + attic/muse_qt4_evolution/muse/xpm/view_marker.xpm | 37 + attic/muse_qt4_evolution/muse/xpm/view_mixer.xpm | 26 + .../muse/xpm/view_transport_window.xpm | 24 + attic/muse_qt4_evolution/muse/xpm/wave.xpm | 33 + attic/muse_qt4_evolution/packaging/muse_icon.png | Bin 0 -> 7493 bytes attic/muse_qt4_evolution/packaging/muse_mdk.spec | 274 + attic/muse_qt4_evolution/pch.txt | 68 + attic/muse_qt4_evolution/plugins/CMakeLists.txt | 22 + .../plugins/doublechorus/CMakeLists.txt | 33 + .../plugins/doublechorus/doublechorus.cpp | 173 + .../plugins/doublechorus/doublechorusmodel.cpp | 214 + .../plugins/doublechorus/doublechorusmodel.h | 72 + .../plugins/doublechorus/simplechorusmodel.cpp | 157 + .../plugins/doublechorus/simplechorusmodel.h | 96 + .../plugins/freeverb/CMakeLists.txt | 33 + .../muse_qt4_evolution/plugins/freeverb/allpass.h | 47 + attic/muse_qt4_evolution/plugins/freeverb/comb.h | 63 + .../plugins/freeverb/denormals.h | 38 + .../plugins/freeverb/freeverb.cpp | 166 + .../muse_qt4_evolution/plugins/freeverb/readme.txt | 147 + .../plugins/freeverb/revmodel.cpp | 232 + .../muse_qt4_evolution/plugins/freeverb/revmodel.h | 79 + attic/muse_qt4_evolution/plugins/freeverb/tuning.h | 60 + .../plugins/pandelay/CMakeLists.txt | 33 + .../plugins/pandelay/ladspapandelay.cpp | 100 + .../plugins/pandelay/ladspapandelay.h | 55 + .../plugins/pandelay/pandelay.cpp | 170 + .../plugins/pandelay/pandelaymodel.cpp | 154 + .../plugins/pandelay/pandelaymodel.h | 93 + attic/muse_qt4_evolution/share/CMakeLists.txt | 22 + .../share/instruments/Access_Virus.idf | 1045 + .../share/instruments/Alesis-Ion.idf | 731 + .../share/instruments/Alesis-QS-78R.idf | 700 + .../share/instruments/AlesisQS6.idf | 658 + .../share/instruments/CMakeLists.txt | 22 + .../share/instruments/Hammond_XB-1.idf | 88 + .../muse_qt4_evolution/share/instruments/MC303.idf | 528 + .../muse_qt4_evolution/share/instruments/MC505.idf | 560 + .../share/instruments/Quasimidi-Sirius.idf | 735 + .../share/instruments/Roland-E28.idf | 320 + .../share/instruments/Roland-JV-1010-All.idf | 1502 + .../share/instruments/Roland-JV-1010-Catagory.idf | 1234 + .../share/instruments/Roland-JV-1010-Country.idf | 297 + .../share/instruments/Roland-JV-1010-Presets.idf | 971 + .../share/instruments/Roland-JV-1010-Session.idf | 326 + .../share/instruments/Roland-SCD70.idf | 1513 + .../share/instruments/Roland-XP30.idf | 1592 + .../share/instruments/Roland_FantomXR.idf | 1419 + .../share/instruments/Roland_SRX-02.idf | 66 + .../share/instruments/Roland_SRX-09.idf | 454 + .../share/instruments/Waldorf_Microwave-I.idf | 141 + .../share/instruments/Yamaha-P50m.idf | 75 + .../share/instruments/Yamaha-P80.idf | 71 + .../share/instruments/Yamaha-PSR275.idf | 585 + .../share/instruments/Yamaha-PSR530.idf | 759 + .../share/instruments/Yamaha-S90.idf | 4304 + .../share/instruments/ZynAdd-1_4.idf | 22 + .../share/instruments/emuproteus2000.idf | 1088 + attic/muse_qt4_evolution/share/instruments/gm.idf | 209 + attic/muse_qt4_evolution/share/instruments/gs.idf | 236 + .../muse_qt4_evolution/share/instruments/ns5r.idf | 568 + attic/muse_qt4_evolution/share/instruments/xg.idf | 629 + .../muse_qt4_evolution/share/locale/CMakeLists.txt | 21 + attic/muse_qt4_evolution/share/locale/muse_de.qm | Bin 0 -> 64327 bytes attic/muse_qt4_evolution/share/locale/muse_de.ts | 5804 + attic/muse_qt4_evolution/share/locale/muse_es.qm | Bin 0 -> 53833 bytes attic/muse_qt4_evolution/share/locale/muse_es.ts | 11154 ++ attic/muse_qt4_evolution/share/locale/muse_fr.qm | Bin 0 -> 53135 bytes attic/muse_qt4_evolution/share/locale/muse_fr.ts | 9584 + attic/muse_qt4_evolution/share/locale/muse_ru.qm | Bin 0 -> 50217 bytes attic/muse_qt4_evolution/share/locale/muse_ru.ts | 7823 + .../muse_qt4_evolution/share/locale/muse_sv_SE.qm | Bin 0 -> 59265 bytes .../muse_qt4_evolution/share/locale/muse_sv_SE.ts | 12410 ++ attic/muse_qt4_evolution/share/plugins/1050.ui | 297 + attic/muse_qt4_evolution/share/plugins/1436.ui | 1090 + attic/muse_qt4_evolution/share/plugins/2142.ui | 525 + .../share/plugins/CMakeLists.txt | 22 + .../share/templates/CMakeLists.txt | 30 + attic/muse_qt4_evolution/share/templates/audio.med | 395 + .../muse_qt4_evolution/share/templates/default.med | 132 + attic/muse_qt4_evolution/share/templates/empty.med | 10 + .../muse_qt4_evolution/share/templates/midiGM.med | 409 + .../share/templates/monorecord.med | 430 + attic/muse_qt4_evolution/share/templates/ns5r.med | 266 + attic/muse_qt4_evolution/share/templates/synti.med | 353 + .../share/wallpapers/CMakeLists.txt | 22 + attic/muse_qt4_evolution/share/wallpapers/gray.gif | Bin 0 -> 6699 bytes .../share/wallpapers/gray_rock.gif | Bin 0 -> 23780 bytes .../share/wallpapers/gray_stucco.gif | Bin 0 -> 20903 bytes .../muse_qt4_evolution/share/wallpapers/paper1.jpg | Bin 0 -> 1662 bytes .../muse_qt4_evolution/share/wallpapers/paper2.jpg | Bin 0 -> 1875 bytes .../muse_qt4_evolution/share/wallpapers/stone1.gif | Bin 0 -> 1252 bytes attic/muse_qt4_evolution/synti/CMakeLists.txt | 42 + attic/muse_qt4_evolution/synti/README | 14 + attic/muse_qt4_evolution/synti/deicsonze/ARCH_ALIN | 24945 +++ .../synti/deicsonze/CMakeLists.txt | 59 + attic/muse_qt4_evolution/synti/deicsonze/README | 57 + .../synti/deicsonze/SutulaBank.dei | 177644 ++++++++++++++++++ attic/muse_qt4_evolution/synti/deicsonze/TODO | 13 + .../synti/deicsonze/deicsonze.cpp | 4356 + .../muse_qt4_evolution/synti/deicsonze/deicsonze.h | 603 + .../synti/deicsonze/deicsonzefilter.cpp | 67 + .../synti/deicsonze/deicsonzefilter.h | 59 + .../synti/deicsonze/deicsonzegui.cpp | 4545 + .../synti/deicsonze/deicsonzegui.h | 562 + .../synti/deicsonze/deicsonzegui.ui | 10237 + .../synti/deicsonze/deicsonzeplugin.cpp | 499 + .../synti/deicsonze/deicsonzeplugin.h | 40 + .../synti/deicsonze/deicsonzepreset.cpp | 1194 + .../synti/deicsonze/deicsonzepreset.h | 563 + .../synti/deicsonze/pics/SHold.fig | 12 + .../synti/deicsonze/pics/SHold.png | Bin 0 -> 394 bytes .../synti/deicsonze/pics/algo1.fig | 31 + .../synti/deicsonze/pics/algo1.png | Bin 0 -> 1010 bytes .../synti/deicsonze/pics/algo2.fig | 29 + .../synti/deicsonze/pics/algo2.png | Bin 0 -> 1840 bytes .../synti/deicsonze/pics/algo3.fig | 29 + .../synti/deicsonze/pics/algo3.png | Bin 0 -> 1841 bytes .../synti/deicsonze/pics/algo4.fig | 29 + .../synti/deicsonze/pics/algo4.png | Bin 0 -> 1952 bytes .../synti/deicsonze/pics/algo5.fig | 34 + .../synti/deicsonze/pics/algo5.png | Bin 0 -> 1542 bytes .../synti/deicsonze/pics/algo6.fig | 37 + .../synti/deicsonze/pics/algo6.png | Bin 0 -> 1672 bytes .../synti/deicsonze/pics/algo7.fig | 35 + .../synti/deicsonze/pics/algo7.png | Bin 0 -> 1623 bytes .../synti/deicsonze/pics/algo8.fig | 34 + .../synti/deicsonze/pics/algo8.png | Bin 0 -> 1631 bytes .../synti/deicsonze/pics/sawUp.fig | 13 + .../synti/deicsonze/pics/sawUp.png | Bin 0 -> 416 bytes .../synti/deicsonze/pics/square.fig | 14 + .../synti/deicsonze/pics/square.png | Bin 0 -> 354 bytes .../synti/deicsonze/pics/triangl.fig | 13 + .../synti/deicsonze/pics/triangl.png | Bin 0 -> 435 bytes .../synti/deicsonze/pics/wave1.fig | 29 + .../synti/deicsonze/pics/wave1.gnuplot | 2 + .../synti/deicsonze/pics/wave1.png | Bin 0 -> 569 bytes .../synti/deicsonze/pics/wave2.fig | 31 + .../synti/deicsonze/pics/wave2.gnuplot | 2 + .../synti/deicsonze/pics/wave2.png | Bin 0 -> 543 bytes .../synti/deicsonze/pics/wave3.fig | 29 + .../synti/deicsonze/pics/wave3.gnuplot | 2 + .../synti/deicsonze/pics/wave3.png | Bin 0 -> 539 bytes .../synti/deicsonze/pics/wave4.fig | 29 + .../synti/deicsonze/pics/wave4.gnuplot | 2 + .../synti/deicsonze/pics/wave4.png | Bin 0 -> 532 bytes .../synti/deicsonze/pics/wave5.fig | 29 + .../synti/deicsonze/pics/wave5.gnuplot | 2 + .../synti/deicsonze/pics/wave5.png | Bin 0 -> 576 bytes .../synti/deicsonze/pics/wave6.fig | 29 + .../synti/deicsonze/pics/wave6.gnuplot | 2 + .../synti/deicsonze/pics/wave6.png | Bin 0 -> 550 bytes .../synti/deicsonze/pics/wave7.fig | 29 + .../synti/deicsonze/pics/wave7.gnuplot | 2 + .../synti/deicsonze/pics/wave7.png | Bin 0 -> 596 bytes .../synti/deicsonze/pics/wave8.fig | 29 + .../synti/deicsonze/pics/wave8.gnuplot | 2 + .../synti/deicsonze/pics/wave8.png | Bin 0 -> 591 bytes .../muse_qt4_evolution/synti/fluid/CMakeLists.txt | 50 + attic/muse_qt4_evolution/synti/fluid/fluid.cpp | 518 + attic/muse_qt4_evolution/synti/fluid/fluid.h | 80 + attic/muse_qt4_evolution/synti/fluid/fluidgui.cpp | 68 + attic/muse_qt4_evolution/synti/fluid/fluidgui.h | 31 + attic/muse_qt4_evolution/synti/fluid/fluidgui.ui | 115 + .../synti/fluidsynth/CMakeLists.txt | 51 + .../muse_qt4_evolution/synti/fluidsynth/README.txt | 45 + attic/muse_qt4_evolution/synti/fluidsynth/TODO | 13 + .../synti/fluidsynth/fluidsynthgui.cpp | 596 + .../synti/fluidsynth/fluidsynthgui.h | 136 + .../synti/fluidsynth/fluidsynthgui.ui | 641 + .../synti/fluidsynth/fluidsynti.cpp | 1174 + .../synti/fluidsynth/fluidsynti.h | 141 + .../synti/libsynti/CMakeLists.txt | 39 + attic/muse_qt4_evolution/synti/libsynti/evdata.h | 66 + attic/muse_qt4_evolution/synti/libsynti/gui.cpp | 124 + attic/muse_qt4_evolution/synti/libsynti/gui.h | 72 + attic/muse_qt4_evolution/synti/libsynti/mess.cpp | 123 + attic/muse_qt4_evolution/synti/libsynti/mess.h | 105 + attic/muse_qt4_evolution/synti/libsynti/mess2.cpp | 128 + attic/muse_qt4_evolution/synti/libsynti/mess2.h | 57 + .../synti/libsynti/midievent.cpp | 21 + .../muse_qt4_evolution/synti/libsynti/midievent.h | 55 + attic/muse_qt4_evolution/synti/libsynti/mono.cpp | 47 + attic/muse_qt4_evolution/synti/libsynti/mono.h | 47 + attic/muse_qt4_evolution/synti/libsynti/poly.cpp | 35 + attic/muse_qt4_evolution/synti/libsynti/poly.h | 39 + attic/muse_qt4_evolution/synti/mus/CMakeLists.txt | 28 + attic/muse_qt4_evolution/synti/mus/mus.cpp | 276 + .../muse_qt4_evolution/synti/organ/CMakeLists.txt | 50 + attic/muse_qt4_evolution/synti/organ/organ.cpp | 621 + attic/muse_qt4_evolution/synti/organ/organ.h | 151 + attic/muse_qt4_evolution/synti/organ/organgui.cpp | 184 + attic/muse_qt4_evolution/synti/organ/organgui.h | 48 + attic/muse_qt4_evolution/synti/organ/organgui.ui | 791 + attic/muse_qt4_evolution/synti/organ/reverb.cpp | 163 + attic/muse_qt4_evolution/synti/organ/reverb.h | 204 + attic/muse_qt4_evolution/synti/organ/routing.cpp | 1343 + attic/muse_qt4_evolution/synti/s1/CMakeLists.txt | 34 + attic/muse_qt4_evolution/synti/s1/s1.cpp | 156 + .../synti/simpledrums/CMakeLists.txt | 52 + attic/muse_qt4_evolution/synti/simpledrums/COPYING | 3 + attic/muse_qt4_evolution/synti/simpledrums/README | 43 + .../synti/simpledrums/ReleaseNotes.txt | 18 + .../muse_qt4_evolution/synti/simpledrums/common.h | 110 + .../synti/simpledrums/simpledrums.cpp | 1719 + .../synti/simpledrums/simpledrums.h | 173 + .../synti/simpledrums/simpledrumsgui.cpp | 881 + .../synti/simpledrums/simpledrumsgui.h | 206 + .../synti/simpledrums/simpledrumsguibase.ui | 23 + .../synti/simpledrums/ssplugin.cpp | 456 + .../synti/simpledrums/ssplugin.h | 171 + .../synti/simpledrums/sspluginchooserbase.ui | 106 + .../synti/simpledrums/ssplugingui.cpp | 530 + .../synti/simpledrums/ssplugingui.h | 198 + attic/muse_qt4_evolution/synti/vam/CMakeLists.txt | 50 + attic/muse_qt4_evolution/synti/vam/COPYING | 340 + attic/muse_qt4_evolution/synti/vam/ChangeLog | 16 + attic/muse_qt4_evolution/synti/vam/README | 42 + attic/muse_qt4_evolution/synti/vam/TODO | 3 + attic/muse_qt4_evolution/synti/vam/vam.cpp | 801 + attic/muse_qt4_evolution/synti/vam/vam.h | 37 + attic/muse_qt4_evolution/synti/vam/vamgui.cpp | 618 + attic/muse_qt4_evolution/synti/vam/vamgui.h | 77 + attic/muse_qt4_evolution/synti/vam/vamgui.ui | 1535 + .../synti/zynaddsubfx/CMakeLists.txt | 100 + attic/muse_qt4_evolution/synti/zynaddsubfx/COPYING | 347 + .../synti/zynaddsubfx/DSP/AnalogFilter.C | 358 + .../synti/zynaddsubfx/DSP/AnalogFilter.h | 72 + .../synti/zynaddsubfx/DSP/FFTwrapper.C | 99 + .../synti/zynaddsubfx/DSP/FFTwrapper.h | 59 + .../synti/zynaddsubfx/DSP/Filter.C | 72 + .../synti/zynaddsubfx/DSP/Filter.h | 51 + .../synti/zynaddsubfx/DSP/Filter_.h | 42 + .../synti/zynaddsubfx/DSP/FormantFilter.C | 163 + .../synti/zynaddsubfx/DSP/FormantFilter.h | 67 + .../synti/zynaddsubfx/DSP/SVFilter.C | 152 + .../synti/zynaddsubfx/DSP/SVFilter.h | 67 + .../synti/zynaddsubfx/Effects/Alienwah.C | 244 + .../synti/zynaddsubfx/Effects/Alienwah.h | 77 + .../synti/zynaddsubfx/Effects/Chorus.C | 277 + .../synti/zynaddsubfx/Effects/Chorus.h | 73 + .../synti/zynaddsubfx/Effects/Distorsion.C | 384 + .../synti/zynaddsubfx/Effects/Distorsion.h | 73 + .../synti/zynaddsubfx/Effects/DynamicFilter.C | 318 + .../synti/zynaddsubfx/Effects/DynamicFilter.h | 72 + .../synti/zynaddsubfx/Effects/EQ.C | 198 + .../synti/zynaddsubfx/Effects/EQ.h | 58 + .../synti/zynaddsubfx/Effects/Echo.C | 240 + .../synti/zynaddsubfx/Effects/Echo.h | 71 + .../synti/zynaddsubfx/Effects/Effect.C | 24 + .../synti/zynaddsubfx/Effects/Effect.h | 61 + .../synti/zynaddsubfx/Effects/EffectLFO.C | 110 + .../synti/zynaddsubfx/Effects/EffectLFO.h | 50 + .../synti/zynaddsubfx/Effects/EffectMgr.C | 292 + .../synti/zynaddsubfx/Effects/EffectMgr.h | 87 + .../synti/zynaddsubfx/Effects/Phaser.C | 260 + .../synti/zynaddsubfx/Effects/Phaser.h | 70 + .../synti/zynaddsubfx/Effects/Reverb.C | 438 + .../synti/zynaddsubfx/Effects/Reverb.h | 127 + .../synti/zynaddsubfx/Input/ALSAMidiIn.C | 96 + .../synti/zynaddsubfx/Input/ALSAMidiIn.h | 42 + .../synti/zynaddsubfx/Input/MidiIn.C | 73 + .../synti/zynaddsubfx/Input/MidiIn.h | 42 + .../synti/zynaddsubfx/Input/NULLMidiIn.C | 43 + .../synti/zynaddsubfx/Input/NULLMidiIn.h | 40 + .../synti/zynaddsubfx/Input/OSSMidiIn.C | 115 + .../synti/zynaddsubfx/Input/OSSMidiIn.h | 48 + .../synti/zynaddsubfx/Input/WINMidiIn.C | 83 + .../synti/zynaddsubfx/Input/WINMidiIn.h | 34 + .../synti/zynaddsubfx/Misc/Bank.C | 565 + .../synti/zynaddsubfx/Misc/Bank.h | 100 + .../synti/zynaddsubfx/Misc/Config.C | 303 + .../synti/zynaddsubfx/Misc/Config.h | 67 + .../synti/zynaddsubfx/Misc/Dump.C | 99 + .../synti/zynaddsubfx/Misc/Dump.h | 43 + .../synti/zynaddsubfx/Misc/Master.C | 680 + .../synti/zynaddsubfx/Misc/Master.h | 167 + .../synti/zynaddsubfx/Misc/Microtonal.C | 514 + .../synti/zynaddsubfx/Misc/Microtonal.h | 111 + .../synti/zynaddsubfx/Misc/Part.C | 881 + .../synti/zynaddsubfx/Misc/Part.h | 176 + .../synti/zynaddsubfx/Misc/Util.C | 112 + .../synti/zynaddsubfx/Misc/Util.h | 45 + .../synti/zynaddsubfx/Misc/XMLwrapper.C | 533 + .../synti/zynaddsubfx/Misc/XMLwrapper.h | 175 + .../synti/zynaddsubfx/Output/Recorder.C | 138 + .../synti/zynaddsubfx/Output/Recorder.h | 52 + .../synti/zynaddsubfx/Params/ADnoteParameters.C | 637 + .../synti/zynaddsubfx/Params/ADnoteParameters.h | 282 + .../synti/zynaddsubfx/Params/Controller.C | 300 + .../synti/zynaddsubfx/Params/Controller.h | 179 + .../synti/zynaddsubfx/Params/EnvelopeParams.C | 227 + .../synti/zynaddsubfx/Params/EnvelopeParams.h | 86 + .../synti/zynaddsubfx/Params/FilterParams.C | 344 + .../synti/zynaddsubfx/Params/FilterParams.h | 100 + .../synti/zynaddsubfx/Params/LFOParams.C | 91 + .../synti/zynaddsubfx/Params/LFOParams.h | 64 + .../synti/zynaddsubfx/Params/PADnoteParameters.C | 742 + .../synti/zynaddsubfx/Params/PADnoteParameters.h | 169 + .../synti/zynaddsubfx/Params/Presets.C | 129 + .../synti/zynaddsubfx/Params/Presets.h | 58 + .../synti/zynaddsubfx/Params/PresetsStore.C | 181 + .../synti/zynaddsubfx/Params/PresetsStore.h | 63 + .../synti/zynaddsubfx/Params/SUBnoteParameters.C | 238 + .../synti/zynaddsubfx/Params/SUBnoteParameters.h | 105 + .../synti/zynaddsubfx/Seq/MIDIEvents.C | 85 + .../synti/zynaddsubfx/Seq/MIDIEvents.h | 66 + .../synti/zynaddsubfx/Seq/MIDIFile.C | 389 + .../synti/zynaddsubfx/Seq/MIDIFile.h | 90 + .../synti/zynaddsubfx/Seq/Sequencer.C | 165 + .../synti/zynaddsubfx/Seq/Sequencer.h | 84 + .../synti/zynaddsubfx/Synth/ADnote.C | 984 + .../synti/zynaddsubfx/Synth/ADnote.h | 258 + .../synti/zynaddsubfx/Synth/Envelope.C | 165 + .../synti/zynaddsubfx/Synth/Envelope.h | 58 + .../synti/zynaddsubfx/Synth/LFO.C | 145 + .../synti/zynaddsubfx/Synth/LFO.h | 52 + .../synti/zynaddsubfx/Synth/OscilGen.C | 1182 + .../synti/zynaddsubfx/Synth/OscilGen.h | 176 + .../synti/zynaddsubfx/Synth/PADnote.C | 342 + .../synti/zynaddsubfx/Synth/PADnote.h | 106 + .../synti/zynaddsubfx/Synth/Resonance.C | 231 + .../synti/zynaddsubfx/Synth/Resonance.h | 68 + .../synti/zynaddsubfx/Synth/SUBnote.C | 419 + .../synti/zynaddsubfx/Synth/SUBnote.h | 98 + .../synti/zynaddsubfx/UI/ADnoteUI.fl | 1107 + .../synti/zynaddsubfx/UI/BankUI.fl | 352 + .../synti/zynaddsubfx/UI/CMakeLists.txt | 54 + .../synti/zynaddsubfx/UI/ConfigUI.fl | 443 + .../synti/zynaddsubfx/UI/EffUI.fl | 2310 + .../synti/zynaddsubfx/UI/EnvelopeUI.fl | 851 + .../synti/zynaddsubfx/UI/FilterUI.fl | 624 + .../synti/zynaddsubfx/UI/LFOUI.fl | 176 + .../synti/zynaddsubfx/UI/MasterUI.fl | 1798 + .../synti/zynaddsubfx/UI/MicrotonalUI.fl | 270 + .../synti/zynaddsubfx/UI/OscilGenUI.fl | 1131 + .../synti/zynaddsubfx/UI/PADnoteUI.fl | 1086 + .../synti/zynaddsubfx/UI/PartUI.fl | 1086 + .../synti/zynaddsubfx/UI/PresetsUI.fl | 200 + .../synti/zynaddsubfx/UI/ResonanceUI.fl | 392 + .../synti/zynaddsubfx/UI/SUBnoteUI.fl | 449 + .../synti/zynaddsubfx/UI/SeqUI.fl | 73 + .../synti/zynaddsubfx/UI/VirKeyboard.fl | 400 + .../synti/zynaddsubfx/UI/WidgetPDial.fl | 131 + .../zynaddsubfx/banks/Arpeggios/0001-Arpeggio1.xiz | Bin 0 -> 2199 bytes .../zynaddsubfx/banks/Arpeggios/0002-Arpeggio2.xiz | Bin 0 -> 1984 bytes .../zynaddsubfx/banks/Arpeggios/0003-Arpeggio3.xiz | Bin 0 -> 2015 bytes .../zynaddsubfx/banks/Arpeggios/0004-Arpeggio4.xiz | Bin 0 -> 2300 bytes .../zynaddsubfx/banks/Arpeggios/0005-Arpeggio5.xiz | Bin 0 -> 2125 bytes .../zynaddsubfx/banks/Arpeggios/0006-Aporggio6.xiz | Bin 0 -> 2287 bytes .../zynaddsubfx/banks/Arpeggios/0007-Arpeggio7.xiz | Bin 0 -> 3361 bytes .../zynaddsubfx/banks/Arpeggios/0008-Arpeggio8.xiz | Bin 0 -> 2077 bytes .../zynaddsubfx/banks/Arpeggios/0009-Arpeggio9.xiz | Bin 0 -> 2245 bytes .../banks/Arpeggios/0010-Arpeggio10.xiz | Bin 0 -> 2093 bytes .../banks/Arpeggios/0011-Arpeggio11.xiz | Bin 0 -> 2142 bytes .../zynaddsubfx/banks/Arpeggios/0033-Sequence1.xiz | Bin 0 -> 1958 bytes .../zynaddsubfx/banks/Arpeggios/0034-Sequence2.xiz | Bin 0 -> 2148 bytes .../banks/Arpeggios/0036-Echoed Synth.xiz | Bin 0 -> 2109 bytes .../zynaddsubfx/banks/Arpeggios/0037-Echo FX.xiz | Bin 0 -> 1986 bytes .../banks/Arpeggios/0039-Soft Arpeggio1.xiz | Bin 0 -> 2135 bytes .../banks/Arpeggios/0040-Soft Arpeggio2.xiz | Bin 0 -> 2093 bytes .../banks/Arpeggios/0041-Soft Arpeggio3.xiz | Bin 0 -> 1987 bytes .../banks/Arpeggios/0042-Soft Arpeggio4.xiz | Bin 0 -> 2183 bytes .../banks/Arpeggios/0043-Soft Arpeggio5.xiz | Bin 0 -> 2131 bytes .../banks/Arpeggios/0065-Hyper Organ1.xiz | Bin 0 -> 2247 bytes .../banks/Arpeggios/0066-Hyper Arpeggio.xiz | Bin 0 -> 1976 bytes .../banks/Arpeggios/0068-Glass Arpeggio.xiz | Bin 0 -> 2165 bytes .../synti/zynaddsubfx/banks/Bass/0001-Bass 1.xiz | Bin 0 -> 1758 bytes .../synti/zynaddsubfx/banks/Bass/0002-Bass 2.xiz | Bin 0 -> 1843 bytes .../banks/Bass/0003-Bass 3 _analog_.xiz | Bin 0 -> 3124 bytes .../synti/zynaddsubfx/banks/Bass/0004-Bass 4.xiz | Bin 0 -> 1838 bytes .../synti/zynaddsubfx/banks/Bass/0005-Bass 5.xiz | Bin 0 -> 1774 bytes .../zynaddsubfx/banks/Bass/0006-Analogue Bass.xiz | Bin 0 -> 1832 bytes .../synti/zynaddsubfx/banks/Bass/0033-Wah Bass.xiz | Bin 0 -> 1824 bytes .../zynaddsubfx/banks/Bass/0035-FM Bass 1.xiz | Bin 0 -> 2001 bytes .../zynaddsubfx/banks/Bass/0036-FM Bass 2.xiz | Bin 0 -> 2031 bytes .../zynaddsubfx/banks/Brass/0001-FM Thrumpet.xiz | Bin 0 -> 2098 bytes .../zynaddsubfx/banks/Brass/0003-Synth Brazz 1.xiz | Bin 0 -> 1950 bytes .../zynaddsubfx/banks/Brass/0004-Synth Brazz 2.xiz | Bin 0 -> 2018 bytes .../zynaddsubfx/banks/Brass/0005-Synth Brass 3.xiz | Bin 0 -> 2158 bytes .../zynaddsubfx/banks/Brass/0006-Synth Brass 4.xiz | Bin 0 -> 2236 bytes .../zynaddsubfx/banks/Brass/0007-Synth Brass 5.xiz | Bin 0 -> 2337 bytes .../zynaddsubfx/banks/Brass/0008-Brass Pad.xiz | Bin 0 -> 1855 bytes .../zynaddsubfx/banks/Brass/0009-Wah Brass.xiz | Bin 0 -> 1904 bytes .../zynaddsubfx/banks/Brass/0010-Solo Synth1.xiz | Bin 0 -> 1777 bytes .../synti/zynaddsubfx/banks/Brass/0011-Brazz 1.xiz | Bin 0 -> 2108 bytes .../synti/zynaddsubfx/banks/Brass/0012-Brazz 2.xiz | Bin 0 -> 2400 bytes .../banks/Brass/0033-Analog Brass 1.xiz | Bin 0 -> 1767 bytes .../banks/Brass/0034-Analog Brass 2.xiz | Bin 0 -> 1810 bytes .../banks/Brass/0035-Analog Brass 3.xiz | Bin 0 -> 2149 bytes .../banks/Brass/0036-Analog Brass 4.xiz | Bin 0 -> 2128 bytes .../zynaddsubfx/banks/Brass/0065-Simple Brass.xiz | Bin 0 -> 1806 bytes .../zynaddsubfx/banks/Brass/0066-Fat Brass.xiz | Bin 0 -> 2114 bytes .../banks/Choir and Voice/0001-AHH Choir 1.xiz | Bin 0 -> 3771 bytes .../banks/Choir and Voice/0002-AHH Choir 2.xiz | Bin 0 -> 3823 bytes .../banks/Choir and Voice/0003-EHH Choir 1.xiz | Bin 0 -> 3746 bytes .../banks/Choir and Voice/0004-Voice OOH.xiz | Bin 0 -> 2134 bytes .../banks/Choir and Voice/0005-Choir Pad1.xiz | Bin 0 -> 1738 bytes .../banks/Choir and Voice/0006-Choir Pad2.xiz | Bin 0 -> 1744 bytes .../banks/Choir and Voice/0007-Choir Pad3.xiz | Bin 0 -> 3571 bytes .../banks/Choir and Voice/0008-Choir Pad4.xiz | Bin 0 -> 1725 bytes .../banks/Choir and Voice/0009-Choir Pad5.xiz | Bin 0 -> 1072 bytes .../banks/Choir and Voice/0010-Choir Pad6.xiz | Bin 0 -> 1723 bytes .../banks/Choir and Voice/0033-Choir.xiz | Bin 0 -> 1008 bytes .../Choir and Voice/0034-Slow Morph_Choir.xiz | Bin 0 -> 1088 bytes .../banks/Choir and Voice/0035-Wah Choir.xiz | Bin 0 -> 1159 bytes .../banks/Choir and Voice/0036-Eooooo.xiz | Bin 0 -> 1893 bytes .../banks/Choir and Voice/0037-Voiced Synth.xiz | Bin 0 -> 3428 bytes .../banks/Choir and Voice/0039-Ohh Choir.xiz | Bin 0 -> 1716 bytes .../banks/Choir and Voice/0065-Vocal Morph 1.xiz | Bin 0 -> 2763 bytes .../banks/Choir and Voice/0066-Vocal Morph 2.xiz | Bin 0 -> 2692 bytes .../banks/Choir and Voice/0067-Vocal Morph 3.xiz | Bin 0 -> 2774 bytes .../banks/Choir and Voice/0068-Vocal Morph 4.xiz | Bin 0 -> 2792 bytes .../banks/Choir and Voice/0069-Vocal Morph 5.xiz | Bin 0 -> 2869 bytes .../banks/Choir and Voice/0070-Vocal Morph 6.xiz | Bin 0 -> 2668 bytes .../banks/Choir and Voice/0071-Vocal Morph 7.xiz | Bin 0 -> 3102 bytes .../zynaddsubfx/banks/Drums/0001-Drums Kit1.xiz | Bin 0 -> 4765 bytes .../synti/zynaddsubfx/banks/Dual/.qped | 21 + .../synti/zynaddsubfx/banks/Dual/0001-Layered1.xiz | Bin 0 -> 5615 bytes .../synti/zynaddsubfx/banks/Dual/0002-Layered2.xiz | Bin 0 -> 3015 bytes .../zynaddsubfx/banks/Dual/0005-Organ and Saw.xiz | Bin 0 -> 2112 bytes .../banks/Dual/0007-Organ Choir Pad1.xiz | Bin 0 -> 3642 bytes .../banks/Dual/0008-Organ Choir Pad2.xiz | Bin 0 -> 2264 bytes .../banks/Dual/0033-Rhodes Strings1.xiz | Bin 0 -> 2795 bytes .../banks/Dual/0034-Rhodes Strings2.xiz | Bin 0 -> 3096 bytes .../banks/Dual/0035-Rhodes Strings3.xiz | Bin 0 -> 4909 bytes .../banks/Dual/0036-Rhodes Strings4.xiz | Bin 0 -> 2711 bytes .../banks/Dual/0065-Dream of the Saw.xiz | Bin 0 -> 2348 bytes .../zynaddsubfx/banks/Fantasy/0001-Emptyness1.xiz | Bin 0 -> 1814 bytes .../zynaddsubfx/banks/Fantasy/0002-Emptyness2.xiz | Bin 0 -> 1830 bytes .../zynaddsubfx/banks/Fantasy/0003-Space Synth.xiz | Bin 0 -> 2146 bytes .../zynaddsubfx/banks/Fantasy/0004-Weird Pad.xiz | Bin 0 -> 1332 bytes .../banks/Fantasy/0006-Space SynthBrass.xiz | Bin 0 -> 2326 bytes .../banks/Fantasy/0008-Space Voice1.xiz | Bin 0 -> 3058 bytes .../banks/Fantasy/0009-Space Voice2.xiz | Bin 0 -> 3199 bytes .../banks/Fantasy/0010-Space Voice3.xiz | Bin 0 -> 2501 bytes .../banks/Fantasy/0011-Space Choir1.xiz | Bin 0 -> 1839 bytes .../banks/Fantasy/0012-Space Choir2.xiz | Bin 0 -> 1796 bytes .../banks/Fantasy/0014-Glass Voices.xiz | Bin 0 -> 1268 bytes .../banks/Fantasy/0015-Strange Voice.xiz | Bin 0 -> 1980 bytes .../banks/Fantasy/0033-ImpossibleDream1.xiz | Bin 0 -> 2575 bytes .../banks/Fantasy/0034-ImpossibleDream2.xiz | Bin 0 -> 3215 bytes .../banks/Fantasy/0035-ImpossibleDream3.xiz | Bin 0 -> 2774 bytes .../banks/Fantasy/0036-ImpossibleDream4.xiz | Bin 0 -> 2492 bytes .../banks/Fantasy/0037-ImpossibleDream5.xiz | Bin 0 -> 2647 bytes .../banks/Fantasy/0040-Delayed Echo.xiz | Bin 0 -> 2383 bytes .../banks/Fantasy/0041-Fade Down Echo.xiz | Bin 0 -> 2400 bytes .../banks/Fantasy/0042-Rhodes Space1.xiz | Bin 0 -> 2960 bytes .../banks/Fantasy/0043-Rhodes Space2.xiz | Bin 0 -> 2973 bytes .../banks/Fantasy/0065-Long SpaceChoir1.xiz | Bin 0 -> 3468 bytes .../banks/Fantasy/0066-Long SpaceChoir2.xiz | Bin 0 -> 1881 bytes .../banks/Guitar/0001-Dist Guitar 1.xiz | Bin 0 -> 2183 bytes .../banks/Guitar/0002-Dist Guitar 2.xiz | Bin 0 -> 2373 bytes .../banks/Guitar/0003-Dist Guitar 3.xiz | Bin 0 -> 2387 bytes .../banks/Guitar/0004-Dist Guitar 4.xiz | Bin 0 -> 2415 bytes .../banks/Guitar/0005-Dist Guitar 5.xiz | Bin 0 -> 2521 bytes .../banks/Guitar/0033-Trash Guitar 1.xiz | Bin 0 -> 2407 bytes .../banks/Guitar/0034-Trash Guitar 2.xiz | Bin 0 -> 2458 bytes .../synti/zynaddsubfx/banks/Guitar/0035-Short.xiz | Bin 0 -> 2332 bytes .../banks/Guitar/0065-Clean Guitar1.xiz | Bin 0 -> 2009 bytes .../synti/zynaddsubfx/banks/Misc/0001-Memories.xiz | Bin 0 -> 2329 bytes .../synti/zynaddsubfx/banks/Misc/0002-Bells 1.xiz | Bin 0 -> 1778 bytes .../synti/zynaddsubfx/banks/Misc/0003-Bells 2.xiz | Bin 0 -> 1797 bytes .../synti/zynaddsubfx/banks/Misc/0004-Bells 3.xiz | Bin 0 -> 1777 bytes .../zynaddsubfx/banks/Misc/0006-SuperSaw 1.xiz | Bin 0 -> 2020 bytes .../zynaddsubfx/banks/Misc/0007-SuperSaw 2.xiz | Bin 0 -> 2094 bytes .../zynaddsubfx/banks/Misc/0008-SuperSaw 3.xiz | Bin 0 -> 2035 bytes .../zynaddsubfx/banks/Misc/0009-SuperSaw 4.xiz | Bin 0 -> 2152 bytes .../zynaddsubfx/banks/Misc/0010-SuperSaw 5.xiz | Bin 0 -> 1753 bytes .../zynaddsubfx/banks/Misc/0033-Trash Synth 1.xiz | Bin 0 -> 2104 bytes .../zynaddsubfx/banks/Misc/0034-Trash Synth 2.xiz | Bin 0 -> 2179 bytes .../zynaddsubfx/banks/Misc/0035-Trash Synth 3.xiz | Bin 0 -> 2175 bytes .../zynaddsubfx/banks/Noises/0001-Synth Effect.xiz | Bin 0 -> 2032 bytes .../zynaddsubfx/banks/Noises/0002-Ioioioioioi.xiz | Bin 0 -> 2179 bytes .../synti/zynaddsubfx/banks/Noises/0003-Noise1.xiz | Bin 0 -> 1030 bytes .../synti/zynaddsubfx/banks/Noises/0004-Noise2.xiz | Bin 0 -> 2896 bytes .../synti/zynaddsubfx/banks/Noises/0006-Wind.xiz | Bin 0 -> 1030 bytes .../banks/Noises/0033-Metal Sound 1.xiz | Bin 0 -> 1737 bytes .../banks/Noises/0034-Metal Sound 2.xiz | Bin 0 -> 1763 bytes .../banks/Noises/0035-Metal Sound 3.xiz | Bin 0 -> 1814 bytes .../banks/Noises/0037-Metal Sound 4.xiz | Bin 0 -> 1743 bytes .../banks/Noises/0038-Metal Sound 5.xiz | Bin 0 -> 1847 bytes .../zynaddsubfx/banks/Noises/0065-Short noise.xiz | Bin 0 -> 1800 bytes .../synti/zynaddsubfx/banks/Organ/0001-Organ 1.xiz | Bin 0 -> 1948 bytes .../synti/zynaddsubfx/banks/Organ/0002-Organ 2.xiz | Bin 0 -> 2050 bytes .../synti/zynaddsubfx/banks/Organ/0003-Organ 3.xiz | Bin 0 -> 2145 bytes .../synti/zynaddsubfx/banks/Organ/0004-Organ 4.xiz | Bin 0 -> 1935 bytes .../synti/zynaddsubfx/banks/Organ/0005-Organ 5.xiz | Bin 0 -> 1941 bytes .../synti/zynaddsubfx/banks/Organ/0006-Organ 6.xiz | Bin 0 -> 2053 bytes .../synti/zynaddsubfx/banks/Organ/0007-Organ 7.xiz | Bin 0 -> 2078 bytes .../synti/zynaddsubfx/banks/Organ/0008-Organ 8.xiz | Bin 0 -> 3466 bytes .../synti/zynaddsubfx/banks/Organ/0009-Organ 9.xiz | Bin 0 -> 1932 bytes .../zynaddsubfx/banks/Organ/0010-Organ 10.xiz | Bin 0 -> 1926 bytes .../zynaddsubfx/banks/Organ/0011-Organ 11.xiz | Bin 0 -> 2060 bytes .../banks/Organ/0033-Cathedral Organ1.xiz | Bin 0 -> 2029 bytes .../banks/Organ/0034-Cathedral Organ2.xiz | Bin 0 -> 2116 bytes .../banks/Organ/0035-Cathedral Organ3.xiz | Bin 0 -> 1991 bytes .../banks/Organ/0037-Church Organ 1.xiz | Bin 0 -> 1748 bytes .../banks/Organ/0038-Church Organ 2.xiz | Bin 0 -> 3212 bytes .../banks/Organ/0039-Church Organ 3.xiz | Bin 0 -> 1979 bytes .../banks/Organ/0041-Church Organ Soft.xiz | Bin 0 -> 1849 bytes .../zynaddsubfx/banks/Organ/0065-Nice Organ 1.xiz | Bin 0 -> 1839 bytes .../zynaddsubfx/banks/Organ/0066-Nice Organ 2.xiz | Bin 0 -> 1942 bytes .../zynaddsubfx/banks/Organ/0067-Sub_Organ.xiz | Bin 0 -> 988 bytes .../zynaddsubfx/banks/Organ/0068-Square Organ.xiz | Bin 0 -> 1898 bytes .../zynaddsubfx/banks/Organ/0069-Soft Organ 1.xiz | Bin 0 -> 1935 bytes .../zynaddsubfx/banks/Organ/0070-Soft Organ 2.xiz | Bin 0 -> 1932 bytes .../zynaddsubfx/banks/Organ/0071-Synth Organ.xiz | Bin 0 -> 2138 bytes .../zynaddsubfx/banks/Organ/0072-Fantasy Organ.xiz | Bin 0 -> 2372 bytes .../banks/Organ/0097-Accordion Pad 1.xiz | Bin 0 -> 3337 bytes .../banks/Organ/0098-Accordion Pad 2.xiz | Bin 0 -> 1991 bytes .../banks/Organ/0099-Synth Accordion1.xiz | Bin 0 -> 1894 bytes .../banks/Organ/0100-Synth Accordion2.xiz | Bin 0 -> 2075 bytes .../zynaddsubfx/banks/Organ/0101-Accordion 1.xiz | Bin 0 -> 2134 bytes .../synti/zynaddsubfx/banks/Pads/0001-Sine Pad.xiz | Bin 0 -> 971 bytes .../zynaddsubfx/banks/Pads/0002-sin2x pad.xiz | Bin 0 -> 1742 bytes .../zynaddsubfx/banks/Pads/0003-Analog Pad 1.xiz | Bin 0 -> 1794 bytes .../zynaddsubfx/banks/Pads/0004-Analog Pad 2.xiz | Bin 0 -> 6572 bytes .../zynaddsubfx/banks/Pads/0005-Square Pad 1.xiz | Bin 0 -> 1876 bytes .../zynaddsubfx/banks/Pads/0006-Square Pad 2.xiz | Bin 0 -> 1943 bytes .../zynaddsubfx/banks/Pads/0008-Resonance Pad1.xiz | Bin 0 -> 1941 bytes .../zynaddsubfx/banks/Pads/0009-Resonance Pad2.xiz | Bin 0 -> 2207 bytes .../zynaddsubfx/banks/Pads/0033-Synth Pad 1.xiz | Bin 0 -> 1744 bytes .../zynaddsubfx/banks/Pads/0034-Synth Pad 2.xiz | Bin 0 -> 1757 bytes .../zynaddsubfx/banks/Pads/0035-Synth Pad 3.xiz | Bin 0 -> 1731 bytes .../zynaddsubfx/banks/Pads/0036-Synth Pad 4.xiz | Bin 0 -> 3172 bytes .../synti/zynaddsubfx/banks/Pads/0065-Soft Pad.xiz | Bin 0 -> 1734 bytes .../zynaddsubfx/banks/Pads/0066-Flanged Pad 1.xiz | Bin 0 -> 1828 bytes .../zynaddsubfx/banks/Plucked/0001-Plucked 1.xiz | Bin 0 -> 2017 bytes .../zynaddsubfx/banks/Plucked/0002-Plucked 2.xiz | Bin 0 -> 2173 bytes .../zynaddsubfx/banks/Plucked/0003-Plucked 3.xiz | Bin 0 -> 1839 bytes .../zynaddsubfx/banks/Plucked/0004-Plucked 4.xiz | Bin 0 -> 3443 bytes .../zynaddsubfx/banks/Plucked/0005-Plucked 5.xiz | Bin 0 -> 2147 bytes .../zynaddsubfx/banks/Plucked/0006-Plucked 6.xiz | Bin 0 -> 3441 bytes .../banks/Plucked/0033-Plucked String1.xiz | Bin 0 -> 3539 bytes .../banks/Plucked/0034-Plucked String2.xiz | Bin 0 -> 3551 bytes .../zynaddsubfx/banks/Plucked/0036-Plucked Wah.xiz | Bin 0 -> 2389 bytes .../banks/Reed and Wind/0001-Flute 1.xiz | Bin 0 -> 1688 bytes .../banks/Reed and Wind/0002-Flute 2.xiz | Bin 0 -> 2794 bytes .../banks/Reed and Wind/0003-Flute 3.xiz | Bin 0 -> 2798 bytes .../banks/Reed and Wind/0005-FM Reed.xiz | Bin 0 -> 1899 bytes .../banks/Reed and Wind/0006-Clarinet.xiz | Bin 0 -> 3290 bytes .../banks/Reed and Wind/0007-Breathy1.xiz | Bin 0 -> 3369 bytes .../banks/Reed and Wind/0033-Reed 1.xiz | Bin 0 -> 3250 bytes .../banks/Reed and Wind/0034-Reed 2.xiz | Bin 0 -> 3283 bytes .../banks/Reed and Wind/0035-Reed 3.xiz | Bin 0 -> 3193 bytes .../banks/Reed and Wind/0036-Reed 4.xiz | Bin 0 -> 3299 bytes .../banks/Reed and Wind/0037-Reed 5.xiz | Bin 0 -> 3276 bytes .../banks/Reed and Wind/0038-Reed 6.xiz | Bin 0 -> 3290 bytes .../banks/Reed and Wind/0039-Reed 7.xiz | Bin 0 -> 1806 bytes .../banks/Reed and Wind/0065-Fat Reed1.xiz | Bin 0 -> 1854 bytes .../banks/Reed and Wind/0066-Fat Reed2.xiz | Bin 0 -> 3618 bytes .../banks/Reed and Wind/0067-Fat Reed3 square.xiz | Bin 0 -> 3549 bytes .../zynaddsubfx/banks/Rhodes/0001-DX Rhodes 1.xiz | Bin 0 -> 2130 bytes .../zynaddsubfx/banks/Rhodes/0002-DX Rhodes 2.xiz | Bin 0 -> 2104 bytes .../zynaddsubfx/banks/Rhodes/0003-DX Rhodes 3.xiz | Bin 0 -> 2274 bytes .../zynaddsubfx/banks/Rhodes/0004-DX Rhodes 4.xiz | Bin 0 -> 2132 bytes .../zynaddsubfx/banks/Rhodes/0005-DX Rhodes 5.xiz | Bin 0 -> 2147 bytes .../zynaddsubfx/banks/Rhodes/0007-Dig Rhodes.xiz | Bin 0 -> 2337 bytes .../banks/Rhodes/0008-Synth Rhodes1.xiz | Bin 0 -> 2157 bytes .../banks/Rhodes/0009-Synth Rhodes2.xiz | Bin 0 -> 1991 bytes .../banks/Rhodes/0010-Synth Rhodes3.xiz | Bin 0 -> 2410 bytes .../zynaddsubfx/banks/Rhodes/0012-Ice Rhodes1.xiz | Bin 0 -> 2128 bytes .../zynaddsubfx/banks/Rhodes/0013-Ice Rhodes2.xiz | Bin 0 -> 2129 bytes .../zynaddsubfx/banks/Rhodes/0014-Ice Rhodes3.xiz | Bin 0 -> 2160 bytes .../zynaddsubfx/banks/Rhodes/0033-FM Rhodes 1.xiz | Bin 0 -> 2212 bytes .../zynaddsubfx/banks/Rhodes/0034-FM Rhodes 2.xiz | Bin 0 -> 2111 bytes .../zynaddsubfx/banks/Rhodes/0035-FM Rhodes 3.xiz | Bin 0 -> 2139 bytes .../zynaddsubfx/banks/Rhodes/0036-FM Rhodes 4.xiz | Bin 0 -> 2473 bytes .../zynaddsubfx/banks/Rhodes/0037-FM Rhodes 5.xiz | Bin 0 -> 2164 bytes .../zynaddsubfx/banks/Rhodes/0038-FM Rhodes 6.xiz | Bin 0 -> 2082 bytes .../zynaddsubfx/banks/Rhodes/0041-Soft Rhodes.xiz | Bin 0 -> 2271 bytes .../zynaddsubfx/banks/Rhodes/0042-Hard Rhodes1.xiz | Bin 0 -> 2550 bytes .../zynaddsubfx/banks/Rhodes/0043-Hard Rhodes2.xiz | Bin 0 -> 2133 bytes .../zynaddsubfx/banks/Rhodes/0044-Echo Rhodes.xiz | Bin 0 -> 2406 bytes .../banks/Rhodes/0045-A long time ago.xiz | Bin 0 -> 2313 bytes .../zynaddsubfx/banks/Rhodes/0065-Steel Rhodes.xiz | Bin 0 -> 2513 bytes .../banks/Splited/0001-Strings and Reed1.xiz | Bin 0 -> 4170 bytes .../banks/Splited/0002-Strings and Reed2.xiz | Bin 0 -> 4202 bytes .../banks/Splited/0003-Strings and Flute.xiz | Bin 0 -> 3368 bytes .../banks/Splited/0033-Choir and Reed.xiz | Bin 0 -> 5546 bytes .../banks/Strings/0001-Saw Strings 1.xiz | Bin 0 -> 1931 bytes .../banks/Strings/0002-Saw Strings 2.xiz | Bin 0 -> 2083 bytes .../banks/Strings/0003-Saw Strings 3.xiz | Bin 0 -> 2030 bytes .../banks/Strings/0004-Saw Strings 4.xiz | Bin 0 -> 2191 bytes .../banks/Strings/0005-Saw Strings 5.xiz | Bin 0 -> 1983 bytes .../banks/Strings/0006-Saw Strings 6.xiz | Bin 0 -> 2072 bytes .../banks/Strings/0007-Saw Strings 7.xiz | Bin 0 -> 1981 bytes .../banks/Strings/0008-Saw Strings 8.xiz | Bin 0 -> 2002 bytes .../banks/Strings/0011-Strings Pad1.xiz | Bin 0 -> 1716 bytes .../banks/Strings/0012-Strings Pad2.xiz | Bin 0 -> 1726 bytes .../banks/Strings/0013-Strings Pad3.xiz | Bin 0 -> 1726 bytes .../zynaddsubfx/banks/Strings/0016-Sweep Pad 1.xiz | Bin 0 -> 1738 bytes .../banks/Strings/0017-Sweep Pad 1 Fat.xiz | Bin 0 -> 1742 bytes .../zynaddsubfx/banks/Strings/0018-Sweep Pad 2.xiz | Bin 0 -> 1757 bytes .../banks/Strings/0019-Sweep Pad 3Wah.xiz | Bin 0 -> 1712 bytes .../zynaddsubfx/banks/Strings/0020-Sweep Pad 4.xiz | Bin 0 -> 1723 bytes .../zynaddsubfx/banks/Strings/0033-Strings1.xiz | Bin 0 -> 2211 bytes .../banks/Strings/0034-Dark Strings.xiz | Bin 0 -> 1977 bytes .../zynaddsubfx/banks/Strings/0035-Octave Pad.xiz | Bin 0 -> 2281 bytes .../zynaddsubfx/banks/Strings/0036-Fast Attack.xiz | Bin 0 -> 2258 bytes .../zynaddsubfx/banks/Strings/0038-Fat Saw.xiz | Bin 0 -> 2051 bytes .../synti/zynaddsubfx/banks/Strings/0041-Saw 1.xiz | Bin 0 -> 1824 bytes .../synti/zynaddsubfx/banks/Strings/0042-Saw 2.xiz | Bin 0 -> 1803 bytes .../synti/zynaddsubfx/banks/Strings/0043-Saw 3.xiz | Bin 0 -> 1829 bytes .../zynaddsubfx/banks/Strings/0044-Saw Pad.xiz | Bin 0 -> 1758 bytes .../banks/Strings/0045-Soft Saw Pad.xiz | Bin 0 -> 1889 bytes .../zynaddsubfx/banks/Strings/0046-Echoed Saw.xiz | Bin 0 -> 1962 bytes .../banks/Strings/0047-Vibratto Saw1.xiz | Bin 0 -> 1864 bytes .../synti/zynaddsubfx/banks/Strings/0048-Wah1.xiz | Bin 0 -> 2006 bytes .../banks/Strings/0050-Synth Violin 1.xiz | Bin 0 -> 3207 bytes .../banks/Strings/0051-Synth Violin 2 Fat.xiz | Bin 0 -> 3584 bytes .../banks/Strings/0065-Simple Strings.xiz | Bin 0 -> 1825 bytes .../banks/Strings/0066-Dual Strings.xiz | Bin 0 -> 2469 bytes .../banks/Strings/0067-Dual StringsOct.xiz | Bin 0 -> 2505 bytes .../zynaddsubfx/banks/Synth/0001-Soft Synth 1.xiz | Bin 0 -> 2177 bytes .../zynaddsubfx/banks/Synth/0002-Soft Synth 2.xiz | Bin 0 -> 2121 bytes .../zynaddsubfx/banks/Synth/0004-Pulse Pad 1.xiz | Bin 0 -> 1928 bytes .../zynaddsubfx/banks/Synth/0005-Pulse Pad 2.xiz | Bin 0 -> 1949 bytes .../banks/Synth/0007-Analog Filter 1.xiz | Bin 0 -> 1847 bytes .../banks/Synth/0008-Analog Filter 2.xiz | Bin 0 -> 2028 bytes .../zynaddsubfx/banks/Synth/0033-Phased Pad 1.xiz | Bin 0 -> 1971 bytes .../zynaddsubfx/banks/Synth/0034-Phased Pad 2.xiz | Bin 0 -> 1959 bytes .../zynaddsubfx/banks/Synth/0035-Phased Pad 3.xiz | Bin 0 -> 2237 bytes .../banks/Synth/0037-Resonance Synth.xiz | Bin 0 -> 1986 bytes .../banks/Synth/0039-Multi-phase synth.xiz | Bin 0 -> 2093 bytes .../zynaddsubfx/banks/Synth/0065-Computer Lead.xiz | Bin 0 -> 1800 bytes .../banks/Synth/0067-Detuned Harmonic.xiz | Bin 0 -> 1851 bytes .../zynaddsubfx/banks/Synth/0097-FM Synth.xiz | Bin 0 -> 2652 bytes .../banks/SynthPiano/0001-Soft Piano 1.xiz | Bin 0 -> 1105 bytes .../banks/SynthPiano/0002-Soft Piano 2.xiz | Bin 0 -> 1067 bytes .../banks/SynthPiano/0004-Fantasy Bell.xiz | Bin 0 -> 2137 bytes .../banks/SynthPiano/0005-Synth Piano1.xiz | Bin 0 -> 1867 bytes .../banks/SynthPiano/0006-Synth Piano2.xiz | Bin 0 -> 1935 bytes .../banks/SynthPiano/0007-Termollo1.xiz | Bin 0 -> 1891 bytes .../banks/SynthPiano/0008-Termollo2.xiz | Bin 0 -> 1993 bytes .../banks/SynthPiano/0009-Termollo3.xiz | Bin 0 -> 1872 bytes .../zynaddsubfx/banks/SynthPiano/0011-Drop1.xiz | Bin 0 -> 1708 bytes .../zynaddsubfx/banks/SynthPiano/0012-Drop2.xiz | Bin 0 -> 1862 bytes .../banks/SynthPiano/0033-Analog Piano 1.xiz | Bin 0 -> 1809 bytes .../banks/SynthPiano/0034-Analog Piano 2.xiz | Bin 0 -> 1981 bytes .../banks/SynthPiano/0035-Analog Piano 3.xiz | Bin 0 -> 1887 bytes .../banks/SynthPiano/0037-FM Synth1.xiz | Bin 0 -> 2208 bytes .../banks/SynthPiano/0039-BinaryPiano1.xiz | Bin 0 -> 1772 bytes .../banks/SynthPiano/0040-BinaryPiano2.xiz | Bin 0 -> 1788 bytes .../banks/SynthPiano/0065-Synth Piano 1.xiz | Bin 0 -> 1738 bytes .../banks/SynthPiano/0066-Synth Piano 2.xiz | Bin 0 -> 1772 bytes .../banks/SynthPiano/0067-Synth Piano 3.xiz | Bin 0 -> 1808 bytes .../banks/SynthPiano/0068-Synth Piano 3 fat.xiz | Bin 0 -> 1815 bytes .../banks/SynthPiano/0069-Synth Piano 3 det.xiz | Bin 0 -> 1810 bytes .../banks/SynthPiano/0070-Synth Piano 4.xiz | Bin 0 -> 1946 bytes .../banks/SynthPiano/0071-Synth Piano 5.xiz | Bin 0 -> 2962 bytes .../muse_qt4_evolution/synti/zynaddsubfx/globals.h | 212 + .../muse_qt4_evolution/synti/zynaddsubfx/main.cpp | 462 + 1314 files changed, 471408 insertions(+) create mode 100644 attic/muse_qt4_evolution/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/COPYING create mode 100644 attic/muse_qt4_evolution/ChangeLog create mode 100644 attic/muse_qt4_evolution/Doxyfile.in create mode 100644 attic/muse_qt4_evolution/NEWS create mode 100644 attic/muse_qt4_evolution/README create mode 100644 attic/muse_qt4_evolution/Reference create mode 100644 attic/muse_qt4_evolution/al/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/al/al.cpp create mode 100644 attic/muse_qt4_evolution/al/al.h create mode 100644 attic/muse_qt4_evolution/al/dsp.cpp create mode 100644 attic/muse_qt4_evolution/al/dsp.h create mode 100644 attic/muse_qt4_evolution/al/dspSSE.cpp create mode 100644 attic/muse_qt4_evolution/al/dspXMM.cpp create mode 100644 attic/muse_qt4_evolution/al/marker.cpp create mode 100644 attic/muse_qt4_evolution/al/marker.h create mode 100644 attic/muse_qt4_evolution/al/pos.cpp create mode 100644 attic/muse_qt4_evolution/al/pos.h create mode 100644 attic/muse_qt4_evolution/al/sig.cpp create mode 100644 attic/muse_qt4_evolution/al/sig.h create mode 100644 attic/muse_qt4_evolution/al/tempo.cpp create mode 100644 attic/muse_qt4_evolution/al/tempo.h create mode 100644 attic/muse_qt4_evolution/al/xml.cpp create mode 100644 attic/muse_qt4_evolution/al/xml.h create mode 100644 attic/muse_qt4_evolution/all.h create mode 100644 attic/muse_qt4_evolution/awl/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/awl/aslider.cpp create mode 100644 attic/muse_qt4_evolution/awl/aslider.h create mode 100644 attic/muse_qt4_evolution/awl/awl.cpp create mode 100644 attic/muse_qt4_evolution/awl/awl.h create mode 100644 attic/muse_qt4_evolution/awl/awlplugin.cpp create mode 100644 attic/muse_qt4_evolution/awl/awlplugin.h create mode 100644 attic/muse_qt4_evolution/awl/checkbox.cpp create mode 100644 attic/muse_qt4_evolution/awl/checkbox.h create mode 100644 attic/muse_qt4_evolution/awl/clock.xpm create mode 100644 attic/muse_qt4_evolution/awl/combobox.cpp create mode 100644 attic/muse_qt4_evolution/awl/combobox.h create mode 100644 attic/muse_qt4_evolution/awl/drawbar.cpp create mode 100644 attic/muse_qt4_evolution/awl/drawbar.h create mode 100644 attic/muse_qt4_evolution/awl/fastlog.h create mode 100644 attic/muse_qt4_evolution/awl/floatentry.cpp create mode 100644 attic/muse_qt4_evolution/awl/floatentry.h create mode 100644 attic/muse_qt4_evolution/awl/knob.cpp create mode 100644 attic/muse_qt4_evolution/awl/knob.h create mode 100644 attic/muse_qt4_evolution/awl/ltest.cpp create mode 100644 attic/muse_qt4_evolution/awl/metronom.xpm create mode 100644 attic/muse_qt4_evolution/awl/midimeter.cpp create mode 100644 attic/muse_qt4_evolution/awl/midimeter.h create mode 100644 attic/muse_qt4_evolution/awl/midimslider.cpp create mode 100644 attic/muse_qt4_evolution/awl/midimslider.h create mode 100644 attic/muse_qt4_evolution/awl/midipanentry.cpp create mode 100644 attic/muse_qt4_evolution/awl/midipanentry.h create mode 100644 attic/muse_qt4_evolution/awl/midipanknob.cpp create mode 100644 attic/muse_qt4_evolution/awl/midipanknob.h create mode 100644 attic/muse_qt4_evolution/awl/midivolentry.cpp create mode 100644 attic/muse_qt4_evolution/awl/midivolentry.h create mode 100644 attic/muse_qt4_evolution/awl/mslider.cpp create mode 100644 attic/muse_qt4_evolution/awl/mslider.h create mode 100644 attic/muse_qt4_evolution/awl/panentry.cpp create mode 100644 attic/muse_qt4_evolution/awl/panentry.h create mode 100644 attic/muse_qt4_evolution/awl/panknob.cpp create mode 100644 attic/muse_qt4_evolution/awl/panknob.h create mode 100644 attic/muse_qt4_evolution/awl/pitchedit.cpp create mode 100644 attic/muse_qt4_evolution/awl/pitchedit.h create mode 100644 attic/muse_qt4_evolution/awl/pitchlabel.cpp create mode 100644 attic/muse_qt4_evolution/awl/pitchlabel.h create mode 100644 attic/muse_qt4_evolution/awl/posedit.cpp create mode 100644 attic/muse_qt4_evolution/awl/posedit.h create mode 100644 attic/muse_qt4_evolution/awl/poslabel.cpp create mode 100644 attic/muse_qt4_evolution/awl/poslabel.h create mode 100644 attic/muse_qt4_evolution/awl/sigedit.cpp create mode 100644 attic/muse_qt4_evolution/awl/sigedit.h create mode 100644 attic/muse_qt4_evolution/awl/slider.cpp create mode 100644 attic/muse_qt4_evolution/awl/slider.h create mode 100644 attic/muse_qt4_evolution/awl/tcanvas.cpp create mode 100644 attic/muse_qt4_evolution/awl/tcanvas.h create mode 100644 attic/muse_qt4_evolution/awl/tempoedit.cpp create mode 100644 attic/muse_qt4_evolution/awl/tempoedit.h create mode 100644 attic/muse_qt4_evolution/awl/tempolabel.cpp create mode 100644 attic/muse_qt4_evolution/awl/tempolabel.h create mode 100644 attic/muse_qt4_evolution/awl/utils.cpp create mode 100644 attic/muse_qt4_evolution/awl/utils.h create mode 100644 attic/muse_qt4_evolution/awl/volentry.cpp create mode 100644 attic/muse_qt4_evolution/awl/volentry.h create mode 100644 attic/muse_qt4_evolution/awl/volknob.cpp create mode 100644 attic/muse_qt4_evolution/awl/volknob.h create mode 100644 attic/muse_qt4_evolution/awl/volslider.cpp create mode 100644 attic/muse_qt4_evolution/awl/volslider.h create mode 100644 attic/muse_qt4_evolution/cmake/TargetDoc.cmake create mode 100644 attic/muse_qt4_evolution/cmake/UsePkgConfig1.cmake create mode 100644 attic/muse_qt4_evolution/config.h.in create mode 100644 attic/muse_qt4_evolution/doc/README.de create mode 100644 attic/muse_qt4_evolution/doc/README.instruments create mode 100644 attic/muse_qt4_evolution/doc/README.ladspaguis create mode 100644 attic/muse_qt4_evolution/doc/README.realtime create mode 100644 attic/muse_qt4_evolution/doc/README.shortcuts create mode 100644 attic/muse_qt4_evolution/doc/README.softsynth create mode 100644 attic/muse_qt4_evolution/doc/README.translate create mode 100644 attic/muse_qt4_evolution/doc/dimpl.odt create mode 100644 attic/muse_qt4_evolution/doc/manual-de.odt create mode 100644 attic/muse_qt4_evolution/doc/pics/main0.png create mode 100644 attic/muse_qt4_evolution/doc/pics/main1.png create mode 100644 attic/muse_qt4_evolution/doc/pics/main2.png create mode 100644 attic/muse_qt4_evolution/doc/pics/mixer1.png create mode 100644 attic/muse_qt4_evolution/doc/pics/pianoroll1.png create mode 100644 attic/muse_qt4_evolution/doc/pics/pianoroll2.png create mode 100644 attic/muse_qt4_evolution/doc/pics/select_project.png create mode 100644 attic/muse_qt4_evolution/doc/pics/select_template.png create mode 100644 attic/muse_qt4_evolution/grepmidi/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/grepmidi/grepmidi.cpp create mode 100644 attic/muse_qt4_evolution/midiplugins/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/midiplugins/drumglue/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/midiplugins/drumglue/drumglue.cpp create mode 100644 attic/muse_qt4_evolution/midiplugins/drumglue/drumglue.h create mode 100644 attic/muse_qt4_evolution/midiplugins/drumglue/drumgluegui.cpp create mode 100644 attic/muse_qt4_evolution/midiplugins/drumglue/drumgluegui.h create mode 100644 attic/muse_qt4_evolution/midiplugins/drumglue/drumgluegui.ui create mode 100644 attic/muse_qt4_evolution/midiplugins/drumglue/globalinstrumentview.cpp create mode 100644 attic/muse_qt4_evolution/midiplugins/drumglue/globalinstrumentview.h create mode 100644 attic/muse_qt4_evolution/midiplugins/drumglue/globalinstrumentview.ui create mode 100644 attic/muse_qt4_evolution/midiplugins/drumglue/outputinstrumentview.cpp create mode 100644 attic/muse_qt4_evolution/midiplugins/drumglue/outputinstrumentview.h create mode 100644 attic/muse_qt4_evolution/midiplugins/drumglue/outputinstrumentview.ui create mode 100644 attic/muse_qt4_evolution/midiplugins/dump/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/midiplugins/dump/dump.cpp create mode 100644 attic/muse_qt4_evolution/midiplugins/dump/dump.h create mode 100644 attic/muse_qt4_evolution/midiplugins/filter/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/midiplugins/filter/ctrlcombo.cpp create mode 100644 attic/muse_qt4_evolution/midiplugins/filter/ctrlcombo.h create mode 100644 attic/muse_qt4_evolution/midiplugins/filter/filter.cpp create mode 100644 attic/muse_qt4_evolution/midiplugins/filter/filter.h create mode 100644 attic/muse_qt4_evolution/midiplugins/filter/filtergui.cpp create mode 100644 attic/muse_qt4_evolution/midiplugins/filter/filtergui.h create mode 100644 attic/muse_qt4_evolution/midiplugins/filter/filtergui.ui create mode 100644 attic/muse_qt4_evolution/midiplugins/libmidiplugin/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/midiplugins/libmidiplugin/evdata.h create mode 100644 attic/muse_qt4_evolution/midiplugins/libmidiplugin/mempi.cpp create mode 100644 attic/muse_qt4_evolution/midiplugins/libmidiplugin/mempi.h create mode 100644 attic/muse_qt4_evolution/midiplugins/libmidiplugin/midievent.cpp create mode 100644 attic/muse_qt4_evolution/midiplugins/libmidiplugin/midievent.h create mode 100644 attic/muse_qt4_evolution/midiplugins/metronom/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/midiplugins/metronom/metronom.cpp create mode 100644 attic/muse_qt4_evolution/midiplugins/metronom/metronom.h create mode 100644 attic/muse_qt4_evolution/midiplugins/metronom/metronomgui.cpp create mode 100644 attic/muse_qt4_evolution/midiplugins/metronom/metronomgui.h create mode 100644 attic/muse_qt4_evolution/midiplugins/metronom/metronomgui.ui create mode 100644 attic/muse_qt4_evolution/midiplugins/splitlayer/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/midiplugins/splitlayer/splitlayer.cpp create mode 100644 attic/muse_qt4_evolution/midiplugins/splitlayer/splitlayer.h create mode 100644 attic/muse_qt4_evolution/midiplugins/splitlayer/splitlayergui.cpp create mode 100644 attic/muse_qt4_evolution/midiplugins/splitlayer/splitlayergui.h create mode 100644 attic/muse_qt4_evolution/midiplugins/transform/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/midiplugins/transform/transform.cpp create mode 100644 attic/muse_qt4_evolution/midiplugins/transform/transform.h create mode 100644 attic/muse_qt4_evolution/midiplugins/transform/transform.ui create mode 100644 attic/muse_qt4_evolution/midiplugins/trigg/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/midiplugins/trigg/trigg.cpp create mode 100644 attic/muse_qt4_evolution/midiplugins/trigg/trigg.h create mode 100644 attic/muse_qt4_evolution/midiplugins/trigg/trigggui.cpp create mode 100644 attic/muse_qt4_evolution/midiplugins/trigg/trigggui.h create mode 100644 attic/muse_qt4_evolution/midiplugins/trigg/trigggui.ui create mode 100644 attic/muse_qt4_evolution/muse.pro create mode 100644 attic/muse_qt4_evolution/muse/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/muse/aboutbox.ui create mode 100644 attic/muse_qt4_evolution/muse/arranger.cpp create mode 100644 attic/muse_qt4_evolution/muse/arranger.h create mode 100644 attic/muse_qt4_evolution/muse/astrip.cpp create mode 100644 attic/muse_qt4_evolution/muse/astrip.h create mode 100644 attic/muse_qt4_evolution/muse/audio.cpp create mode 100644 attic/muse_qt4_evolution/muse/audio.h create mode 100644 attic/muse_qt4_evolution/muse/audiodev.h create mode 100644 attic/muse_qt4_evolution/muse/audiogroup.cpp create mode 100644 attic/muse_qt4_evolution/muse/audiogroup.h create mode 100644 attic/muse_qt4_evolution/muse/audioinput.cpp create mode 100644 attic/muse_qt4_evolution/muse/audioinput.h create mode 100644 attic/muse_qt4_evolution/muse/audiooutput.cpp create mode 100644 attic/muse_qt4_evolution/muse/audiooutput.h create mode 100644 attic/muse_qt4_evolution/muse/audioprefetch.cpp create mode 100644 attic/muse_qt4_evolution/muse/audioprefetch.h create mode 100644 attic/muse_qt4_evolution/muse/audiotrack.cpp create mode 100644 attic/muse_qt4_evolution/muse/audiotrack.h create mode 100644 attic/muse_qt4_evolution/muse/audiowriteback.cpp create mode 100644 attic/muse_qt4_evolution/muse/audiowriteback.h create mode 100644 attic/muse_qt4_evolution/muse/auxplugin.cpp create mode 100644 attic/muse_qt4_evolution/muse/auxplugin.h create mode 100644 attic/muse_qt4_evolution/muse/canvas.cpp create mode 100644 attic/muse_qt4_evolution/muse/canvas.h create mode 100644 attic/muse_qt4_evolution/muse/cliplist/cliplist.cpp create mode 100644 attic/muse_qt4_evolution/muse/cliplist/cliplist.h create mode 100644 attic/muse_qt4_evolution/muse/cobject.cpp create mode 100644 attic/muse_qt4_evolution/muse/cobject.h create mode 100644 attic/muse_qt4_evolution/muse/conf.cpp create mode 100644 attic/muse_qt4_evolution/muse/conf.h create mode 100644 attic/muse_qt4_evolution/muse/configmidifile.ui create mode 100644 attic/muse_qt4_evolution/muse/configtrack.cpp create mode 100644 attic/muse_qt4_evolution/muse/configtrack.h create mode 100644 attic/muse_qt4_evolution/muse/configtrack.ui create mode 100644 attic/muse_qt4_evolution/muse/ctrl.cpp create mode 100644 attic/muse_qt4_evolution/muse/ctrl.h create mode 100644 attic/muse_qt4_evolution/muse/ctrl/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/muse/ctrl/configmidictrl.cpp create mode 100644 attic/muse_qt4_evolution/muse/ctrl/configmidictrl.h create mode 100644 attic/muse_qt4_evolution/muse/ctrl/configmidictrl.ui create mode 100644 attic/muse_qt4_evolution/muse/ctrl/ctrldialog.cpp create mode 100644 attic/muse_qt4_evolution/muse/ctrl/ctrldialog.h create mode 100644 attic/muse_qt4_evolution/muse/ctrl/ctrldialog.ui create mode 100644 attic/muse_qt4_evolution/muse/ctrl/ctrledit.cpp create mode 100644 attic/muse_qt4_evolution/muse/ctrl/ctrledit.h create mode 100644 attic/muse_qt4_evolution/muse/ctrl/ctrleditor.cpp create mode 100644 attic/muse_qt4_evolution/muse/ctrl/ctrleditor.h create mode 100644 attic/muse_qt4_evolution/muse/ctrl/definemidictrl.cpp create mode 100644 attic/muse_qt4_evolution/muse/ctrl/definemidictrl.h create mode 100644 attic/muse_qt4_evolution/muse/ctrl/definemidictrl.ui create mode 100644 attic/muse_qt4_evolution/muse/debug.h create mode 100644 attic/muse_qt4_evolution/muse/default_click.h create mode 100644 attic/muse_qt4_evolution/muse/device.h create mode 100644 attic/muse_qt4_evolution/muse/driver.h create mode 100644 attic/muse_qt4_evolution/muse/dssihost.cpp create mode 100644 attic/muse_qt4_evolution/muse/dssihost.h create mode 100644 attic/muse_qt4_evolution/muse/dummyaudio.cpp create mode 100644 attic/muse_qt4_evolution/muse/editor.cpp create mode 100644 attic/muse_qt4_evolution/muse/editor.h create mode 100644 attic/muse_qt4_evolution/muse/esettings.cpp create mode 100644 attic/muse_qt4_evolution/muse/esettings.h create mode 100644 attic/muse_qt4_evolution/muse/evdata.h create mode 100644 attic/muse_qt4_evolution/muse/event.cpp create mode 100644 attic/muse_qt4_evolution/muse/event.h create mode 100644 attic/muse_qt4_evolution/muse/eventbase.h create mode 100644 attic/muse_qt4_evolution/muse/eventlist.cpp create mode 100644 attic/muse_qt4_evolution/muse/exportmidi.cpp create mode 100644 attic/muse_qt4_evolution/muse/exportmidi.h create mode 100644 attic/muse_qt4_evolution/muse/exportmididialog.ui create mode 100644 attic/muse_qt4_evolution/muse/extmidieditor.cpp create mode 100644 attic/muse_qt4_evolution/muse/extmidieditor.h create mode 100644 attic/muse_qt4_evolution/muse/fastlog.h create mode 100644 attic/muse_qt4_evolution/muse/fifo.cpp create mode 100644 attic/muse_qt4_evolution/muse/fifo.h create mode 100644 attic/muse_qt4_evolution/muse/gconfig.cpp create mode 100644 attic/muse_qt4_evolution/muse/gconfig.h create mode 100644 attic/muse_qt4_evolution/muse/globaldefs.h create mode 100644 attic/muse_qt4_evolution/muse/globals.cpp create mode 100644 attic/muse_qt4_evolution/muse/globals.h create mode 100644 attic/muse_qt4_evolution/muse/gui.h create mode 100644 attic/muse_qt4_evolution/muse/help.cpp create mode 100644 attic/muse_qt4_evolution/muse/help.h create mode 100644 attic/muse_qt4_evolution/muse/helper.cpp create mode 100644 attic/muse_qt4_evolution/muse/helper.h create mode 100644 attic/muse_qt4_evolution/muse/icons.cpp create mode 100644 attic/muse_qt4_evolution/muse/icons.h create mode 100644 attic/muse_qt4_evolution/muse/importmidi.cpp create mode 100644 attic/muse_qt4_evolution/muse/importmidi.h create mode 100644 attic/muse_qt4_evolution/muse/importmidi.ui create mode 100644 attic/muse_qt4_evolution/muse/instruments/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/muse/instruments/editinstrument.cpp create mode 100644 attic/muse_qt4_evolution/muse/instruments/editinstrument.h create mode 100644 attic/muse_qt4_evolution/muse/instruments/editinstrument.ui create mode 100644 attic/muse_qt4_evolution/muse/instruments/midictrledit.cpp create mode 100644 attic/muse_qt4_evolution/muse/instruments/midictrledit.h create mode 100644 attic/muse_qt4_evolution/muse/instruments/minstrument.cpp create mode 100644 attic/muse_qt4_evolution/muse/instruments/minstrument.h create mode 100644 attic/muse_qt4_evolution/muse/jack.cpp create mode 100644 attic/muse_qt4_evolution/muse/jackaudio.h create mode 100644 attic/muse_qt4_evolution/muse/ladspa.h create mode 100644 attic/muse_qt4_evolution/muse/ladspaplugin.cpp create mode 100644 attic/muse_qt4_evolution/muse/ladspaplugin.h create mode 100644 attic/muse_qt4_evolution/muse/liste/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/muse/liste/ctrllistedit.cpp create mode 100644 attic/muse_qt4_evolution/muse/liste/ctrllistedit.h create mode 100644 attic/muse_qt4_evolution/muse/liste/ctrllistedit.ui create mode 100644 attic/muse_qt4_evolution/muse/liste/ieventdialog.cpp create mode 100644 attic/muse_qt4_evolution/muse/liste/ieventdialog.h create mode 100644 attic/muse_qt4_evolution/muse/liste/listedit.cpp create mode 100644 attic/muse_qt4_evolution/muse/liste/listedit.h create mode 100644 attic/muse_qt4_evolution/muse/liste/partlistedit.cpp create mode 100644 attic/muse_qt4_evolution/muse/liste/partlistedit.h create mode 100644 attic/muse_qt4_evolution/muse/liste/partlistedit.ui create mode 100644 attic/muse_qt4_evolution/muse/liste/tracklistedit.cpp create mode 100644 attic/muse_qt4_evolution/muse/liste/tracklistedit.h create mode 100644 attic/muse_qt4_evolution/muse/liste/tracklistedit.ui create mode 100644 attic/muse_qt4_evolution/muse/marker/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/muse/marker/markerview.cpp create mode 100644 attic/muse_qt4_evolution/muse/marker/markerview.h create mode 100644 attic/muse_qt4_evolution/muse/master/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/muse/master/master.cpp create mode 100644 attic/muse_qt4_evolution/muse/master/master.h create mode 100644 attic/muse_qt4_evolution/muse/master/masteredit.cpp create mode 100644 attic/muse_qt4_evolution/muse/master/masteredit.h create mode 100644 attic/muse_qt4_evolution/muse/midi.cpp create mode 100644 attic/muse_qt4_evolution/muse/midi.h create mode 100644 attic/muse_qt4_evolution/muse/midictrl.cpp create mode 100644 attic/muse_qt4_evolution/muse/midictrl.h create mode 100644 attic/muse_qt4_evolution/muse/midiedit/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/muse/midiedit/citem.cpp create mode 100644 attic/muse_qt4_evolution/muse/midiedit/citem.h create mode 100644 attic/muse_qt4_evolution/muse/midiedit/cmd.h create mode 100644 attic/muse_qt4_evolution/muse/midiedit/dcanvas.cpp create mode 100644 attic/muse_qt4_evolution/muse/midiedit/dcanvas.h create mode 100644 attic/muse_qt4_evolution/muse/midiedit/drumedit.cpp create mode 100644 attic/muse_qt4_evolution/muse/midiedit/drumedit.h create mode 100644 attic/muse_qt4_evolution/muse/midiedit/drummap.cpp create mode 100644 attic/muse_qt4_evolution/muse/midiedit/drummap.h create mode 100644 attic/muse_qt4_evolution/muse/midiedit/ecanvas.cpp create mode 100644 attic/muse_qt4_evolution/muse/midiedit/ecanvas.h create mode 100644 attic/muse_qt4_evolution/muse/midiedit/gatetime.cpp create mode 100644 attic/muse_qt4_evolution/muse/midiedit/gatetime.h create mode 100644 attic/muse_qt4_evolution/muse/midiedit/gatetime.ui create mode 100644 attic/muse_qt4_evolution/muse/midiedit/midicmd.cpp create mode 100644 attic/muse_qt4_evolution/muse/midiedit/midicmd.h create mode 100644 attic/muse_qt4_evolution/muse/midiedit/midicmd.ui create mode 100644 attic/muse_qt4_evolution/muse/midiedit/midieditor.cpp create mode 100644 attic/muse_qt4_evolution/muse/midiedit/midieditor.h create mode 100644 attic/muse_qt4_evolution/muse/midiedit/miditracker.cpp create mode 100644 attic/muse_qt4_evolution/muse/midiedit/miditracker.h create mode 100644 attic/muse_qt4_evolution/muse/midiedit/pianoroll.cpp create mode 100644 attic/muse_qt4_evolution/muse/midiedit/pianoroll.h create mode 100644 attic/muse_qt4_evolution/muse/midiedit/prcanvas.cpp create mode 100644 attic/muse_qt4_evolution/muse/midiedit/prcanvas.h create mode 100644 attic/muse_qt4_evolution/muse/midiedit/quantconfig.cpp create mode 100644 attic/muse_qt4_evolution/muse/midiedit/quantconfig.h create mode 100644 attic/muse_qt4_evolution/muse/midiedit/quantconfig.ui create mode 100644 attic/muse_qt4_evolution/muse/midiedit/trackpattern.cpp create mode 100644 attic/muse_qt4_evolution/muse/midiedit/trackpattern.h create mode 100644 attic/muse_qt4_evolution/muse/midiedit/velocity.cpp create mode 100644 attic/muse_qt4_evolution/muse/midiedit/velocity.h create mode 100644 attic/muse_qt4_evolution/muse/midiedit/velocity.ui create mode 100644 attic/muse_qt4_evolution/muse/midievent.cpp create mode 100644 attic/muse_qt4_evolution/muse/midievent.h create mode 100644 attic/muse_qt4_evolution/muse/midieventbase.cpp create mode 100644 attic/muse_qt4_evolution/muse/midieventbase.h create mode 100644 attic/muse_qt4_evolution/muse/midififo.cpp create mode 100644 attic/muse_qt4_evolution/muse/midififo.h create mode 100644 attic/muse_qt4_evolution/muse/midifile.cpp create mode 100644 attic/muse_qt4_evolution/muse/midifile.h create mode 100644 attic/muse_qt4_evolution/muse/midiinport.cpp create mode 100644 attic/muse_qt4_evolution/muse/midiinport.h create mode 100644 attic/muse_qt4_evolution/muse/midiout.cpp create mode 100644 attic/muse_qt4_evolution/muse/midiout.h create mode 100644 attic/muse_qt4_evolution/muse/midioutport.cpp create mode 100644 attic/muse_qt4_evolution/muse/midioutport.h create mode 100644 attic/muse_qt4_evolution/muse/midiplugin.cpp create mode 100644 attic/muse_qt4_evolution/muse/midiplugin.h create mode 100644 attic/muse_qt4_evolution/muse/midiportinfo.ui create mode 100644 attic/muse_qt4_evolution/muse/midirack.cpp create mode 100644 attic/muse_qt4_evolution/muse/midirack.h create mode 100644 attic/muse_qt4_evolution/muse/midirc.cpp create mode 100644 attic/muse_qt4_evolution/muse/midirc.h create mode 100644 attic/muse_qt4_evolution/muse/midisynti.cpp create mode 100644 attic/muse_qt4_evolution/muse/midisynti.h create mode 100644 attic/muse_qt4_evolution/muse/miditrack.cpp create mode 100644 attic/muse_qt4_evolution/muse/miditrack.h create mode 100644 attic/muse_qt4_evolution/muse/miditrackbase.cpp create mode 100644 attic/muse_qt4_evolution/muse/miditrackbase.h create mode 100644 attic/muse_qt4_evolution/muse/miditrackinfo.ui create mode 100644 attic/muse_qt4_evolution/muse/miditransform.cpp create mode 100644 attic/muse_qt4_evolution/muse/miditransform.h create mode 100644 attic/muse_qt4_evolution/muse/mixer.cpp create mode 100644 attic/muse_qt4_evolution/muse/mixer.h create mode 100644 attic/muse_qt4_evolution/muse/mstrip.cpp create mode 100644 attic/muse_qt4_evolution/muse/mstrip.h create mode 100644 attic/muse_qt4_evolution/muse/mtc.cpp create mode 100644 attic/muse_qt4_evolution/muse/mtc.h create mode 100644 attic/muse_qt4_evolution/muse/muse.cpp create mode 100644 attic/muse_qt4_evolution/muse/muse.h create mode 100644 attic/muse_qt4_evolution/muse/muse.qrc create mode 100644 attic/muse_qt4_evolution/muse/part.cpp create mode 100644 attic/muse_qt4_evolution/muse/part.h create mode 100644 attic/muse_qt4_evolution/muse/partdrag.cpp create mode 100644 attic/muse_qt4_evolution/muse/partdrag.h create mode 100644 attic/muse_qt4_evolution/muse/pipeline.cpp create mode 100644 attic/muse_qt4_evolution/muse/pipeline.h create mode 100644 attic/muse_qt4_evolution/muse/plugin.cpp create mode 100644 attic/muse_qt4_evolution/muse/plugin.h create mode 100644 attic/muse_qt4_evolution/muse/plugingui.cpp create mode 100644 attic/muse_qt4_evolution/muse/plugingui.h create mode 100644 attic/muse_qt4_evolution/muse/port.h create mode 100644 attic/muse_qt4_evolution/muse/preferences.cpp create mode 100644 attic/muse_qt4_evolution/muse/preferences.h create mode 100644 attic/muse_qt4_evolution/muse/preferences.ui create mode 100644 attic/muse_qt4_evolution/muse/projectdialog.cpp create mode 100644 attic/muse_qt4_evolution/muse/projectdialog.h create mode 100644 attic/muse_qt4_evolution/muse/projectdialog.ui create mode 100644 attic/muse_qt4_evolution/muse/projectpropsdialog.cpp create mode 100644 attic/muse_qt4_evolution/muse/projectpropsdialog.h create mode 100644 attic/muse_qt4_evolution/muse/projectpropsdialog.ui create mode 100644 attic/muse_qt4_evolution/muse/rack.cpp create mode 100644 attic/muse_qt4_evolution/muse/rack.h create mode 100644 attic/muse_qt4_evolution/muse/revision.cpp create mode 100644 attic/muse_qt4_evolution/muse/revision.h create mode 100644 attic/muse_qt4_evolution/muse/route.cpp create mode 100644 attic/muse_qt4_evolution/muse/route.h create mode 100644 attic/muse_qt4_evolution/muse/routedialog.cpp create mode 100644 attic/muse_qt4_evolution/muse/routedialog.h create mode 100644 attic/muse_qt4_evolution/muse/routedialog.ui create mode 100644 attic/muse_qt4_evolution/muse/selectfilter.h create mode 100644 attic/muse_qt4_evolution/muse/seqmsg.cpp create mode 100644 attic/muse_qt4_evolution/muse/shortcuts.cpp create mode 100644 attic/muse_qt4_evolution/muse/shortcuts.h create mode 100644 attic/muse_qt4_evolution/muse/song.cpp create mode 100644 attic/muse_qt4_evolution/muse/song.h create mode 100644 attic/muse_qt4_evolution/muse/songfile.cpp create mode 100644 attic/muse_qt4_evolution/muse/songpart.cpp create mode 100644 attic/muse_qt4_evolution/muse/songtrack.cpp create mode 100644 attic/muse_qt4_evolution/muse/strip.cpp create mode 100644 attic/muse_qt4_evolution/muse/strip.h create mode 100644 attic/muse_qt4_evolution/muse/style.qss create mode 100644 attic/muse_qt4_evolution/muse/sync.cpp create mode 100644 attic/muse_qt4_evolution/muse/sync.h create mode 100644 attic/muse_qt4_evolution/muse/synth.cpp create mode 100644 attic/muse_qt4_evolution/muse/synth.h create mode 100644 attic/muse_qt4_evolution/muse/templatedialog.cpp create mode 100644 attic/muse_qt4_evolution/muse/templatedialog.h create mode 100644 attic/muse_qt4_evolution/muse/templatedialog.ui create mode 100644 attic/muse_qt4_evolution/muse/thread.cpp create mode 100644 attic/muse_qt4_evolution/muse/thread.h create mode 100644 attic/muse_qt4_evolution/muse/ticksynth.cpp create mode 100644 attic/muse_qt4_evolution/muse/ticksynth.h create mode 100644 attic/muse_qt4_evolution/muse/tllineedit.cpp create mode 100644 attic/muse_qt4_evolution/muse/tllineedit.h create mode 100644 attic/muse_qt4_evolution/muse/tlswidget.cpp create mode 100644 attic/muse_qt4_evolution/muse/tlswidget.h create mode 100644 attic/muse_qt4_evolution/muse/tlwidget.cpp create mode 100644 attic/muse_qt4_evolution/muse/tlwidget.h create mode 100644 attic/muse_qt4_evolution/muse/tlwlayout.cpp create mode 100644 attic/muse_qt4_evolution/muse/tlwlayout.h create mode 100644 attic/muse_qt4_evolution/muse/track.cpp create mode 100644 attic/muse_qt4_evolution/muse/track.h create mode 100644 attic/muse_qt4_evolution/muse/trackdrag.cpp create mode 100644 attic/muse_qt4_evolution/muse/trackdrag.h create mode 100644 attic/muse_qt4_evolution/muse/trackinfo.cpp create mode 100644 attic/muse_qt4_evolution/muse/trackinfo.h create mode 100644 attic/muse_qt4_evolution/muse/transport.cpp create mode 100644 attic/muse_qt4_evolution/muse/transport.h create mode 100644 attic/muse_qt4_evolution/muse/transport.ui create mode 100644 attic/muse_qt4_evolution/muse/transpose.cpp create mode 100644 attic/muse_qt4_evolution/muse/transpose.h create mode 100644 attic/muse_qt4_evolution/muse/transpose.ui create mode 100644 attic/muse_qt4_evolution/muse/trelement.h create mode 100644 attic/muse_qt4_evolution/muse/undo.cpp create mode 100644 attic/muse_qt4_evolution/muse/undo.h create mode 100644 attic/muse_qt4_evolution/muse/value.cpp create mode 100644 attic/muse_qt4_evolution/muse/vst.cpp create mode 100644 attic/muse_qt4_evolution/muse/vst.h create mode 100644 attic/muse_qt4_evolution/muse/wave.cpp create mode 100644 attic/muse_qt4_evolution/muse/wave.h create mode 100644 attic/muse_qt4_evolution/muse/waveedit/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/muse/waveedit/waveedit.cpp create mode 100644 attic/muse_qt4_evolution/muse/waveedit/waveedit.h create mode 100644 attic/muse_qt4_evolution/muse/waveedit/waveview.cpp create mode 100644 attic/muse_qt4_evolution/muse/waveedit/waveview.h create mode 100644 attic/muse_qt4_evolution/muse/waveevent.cpp create mode 100644 attic/muse_qt4_evolution/muse/waveevent.h create mode 100644 attic/muse_qt4_evolution/muse/wavetrack.cpp create mode 100644 attic/muse_qt4_evolution/muse/wavetrack.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/muse/widgets/action.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/bigtime.cpp create mode 100644 attic/muse_qt4_evolution/muse/widgets/bigtime.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/cliplisteditorbase.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/cliplisteditorbase.ui create mode 100644 attic/muse_qt4_evolution/muse/widgets/comboQuant.cpp create mode 100644 attic/muse_qt4_evolution/muse/widgets/comboQuant.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/combobox.cpp create mode 100644 attic/muse_qt4_evolution/muse/widgets/combobox.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/comment.cpp create mode 100644 attic/muse_qt4_evolution/muse/widgets/comment.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/comment.ui create mode 100644 attic/muse_qt4_evolution/muse/widgets/ctrlcombo.cpp create mode 100644 attic/muse_qt4_evolution/muse/widgets/ctrlcombo.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/dentry.cpp create mode 100644 attic/muse_qt4_evolution/muse/widgets/dentry.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/doublelabel.cpp create mode 100644 attic/muse_qt4_evolution/muse/widgets/doublelabel.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/editmetadialogbase.cpp create mode 100644 attic/muse_qt4_evolution/muse/widgets/editmetadialogbase.ui create mode 100644 attic/muse_qt4_evolution/muse/widgets/fdialogbuttons.ui create mode 100644 attic/muse_qt4_evolution/muse/widgets/filedialog.cpp create mode 100644 attic/muse_qt4_evolution/muse/widgets/filedialog.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/floatlabel.cpp create mode 100644 attic/muse_qt4_evolution/muse/widgets/floatlabel.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/fontsel.cpp create mode 100644 attic/muse_qt4_evolution/muse/widgets/fontsel.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/greendotbutton.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/intlabel.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/menutitle.cpp create mode 100644 attic/muse_qt4_evolution/muse/widgets/menutitle.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/midisync.cpp create mode 100644 attic/muse_qt4_evolution/muse/widgets/midisync.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/midisync.ui create mode 100644 attic/muse_qt4_evolution/muse/widgets/mittransposebase.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/mittransposebase.ui create mode 100644 attic/muse_qt4_evolution/muse/widgets/mixdowndialog.cpp create mode 100644 attic/muse_qt4_evolution/muse/widgets/mixdowndialog.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/mixdowndialog.ui create mode 100644 attic/muse_qt4_evolution/muse/widgets/noteinfo.cpp create mode 100644 attic/muse_qt4_evolution/muse/widgets/noteinfo.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/outportcombo.cpp create mode 100644 attic/muse_qt4_evolution/muse/widgets/outportcombo.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/quantcombo.cpp create mode 100644 attic/muse_qt4_evolution/muse/widgets/quantcombo.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/rastercombo.cpp create mode 100644 attic/muse_qt4_evolution/muse/widgets/rastercombo.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/recordbutton.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/shortcutcapturedialog.cpp create mode 100644 attic/muse_qt4_evolution/muse/widgets/shortcutcapturedialog.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/shortcutcapturedialog.ui create mode 100644 attic/muse_qt4_evolution/muse/widgets/shortcutconfig.cpp create mode 100644 attic/muse_qt4_evolution/muse/widgets/shortcutconfig.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/shortcutconfig.ui create mode 100644 attic/muse_qt4_evolution/muse/widgets/siglabel.cpp create mode 100644 attic/muse_qt4_evolution/muse/widgets/siglabel.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/simplebutton.cpp create mode 100644 attic/muse_qt4_evolution/muse/widgets/simplebutton.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/splitter.cpp create mode 100644 attic/muse_qt4_evolution/muse/widgets/splitter.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/synthwizardbase.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/tb1.cpp create mode 100644 attic/muse_qt4_evolution/muse/widgets/tb1.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/tools.cpp create mode 100644 attic/muse_qt4_evolution/muse/widgets/tools.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/transformbase.ui create mode 100644 attic/muse_qt4_evolution/muse/widgets/utils.cpp create mode 100644 attic/muse_qt4_evolution/muse/widgets/utils.h create mode 100644 attic/muse_qt4_evolution/muse/widgets/wtrackinfobase.ui create mode 100644 attic/muse_qt4_evolution/muse/xpm/activeoff.svg create mode 100644 attic/muse_qt4_evolution/muse/xpm/activeon.svg create mode 100644 attic/muse_qt4_evolution/muse/xpm/addtrack_addmiditrack.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/addtrack_audiogroup.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/addtrack_audioinput.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/addtrack_audiooutput.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/addtrack_auxsend.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/addtrack_drumtrack.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/addtrack_wavetrack.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/audio_bounce_to_file.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/audio_bounce_to_track.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/audio_restartaudio.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/back.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/bold.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/buttondown.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/cafter.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/cliplistS.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/cmark.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/config.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/configure.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/ctrl.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/cut.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/darkgreendot.svg create mode 100644 attic/muse_qt4_evolution/muse/xpm/delete.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/down.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/draw.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/edit_drumms.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/edit_list.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/edit_mastertrack.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/edit_midi.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/edit_pianoroll.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/edit_track_add.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/edit_track_del.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/editcopy.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/editcut.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/editcutS.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/editmute.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/editpaste.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/fforward.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/filenew.png create mode 100644 attic/muse_qt4_evolution/muse/xpm/filenewS.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/fileopen.png create mode 100644 attic/muse_qt4_evolution/muse/xpm/filesave.png create mode 100644 attic/muse_qt4_evolution/muse/xpm/flag.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/flagS.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/folder_new.png create mode 100644 attic/muse_qt4_evolution/muse/xpm/forward.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/frewind.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/glue.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/greendot.svg create mode 100644 attic/muse_qt4_evolution/muse/xpm/gv.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/home.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/initS.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/inputpluginS.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/italic.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/listS.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/lmark.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/localoffS.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/lock.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/loop.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/master.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/mastertrackS.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/mastertrack_graphic.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/mastertrack_list.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/meta.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/midi_edit_instrument.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/midi_init_instr.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/midi_local_off.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/midi_plugS.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/midi_reset_instr.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/midi_transform.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/midi_transpose.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/midiin.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/miditransformS.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/miditransposeS.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/minus.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/mixerS.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/mixeraudioS.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/mono.svg create mode 100644 attic/muse_qt4_evolution/muse/xpm/muse_icon.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/muse_icon_64x64.png create mode 100644 attic/muse_qt4_evolution/muse/xpm/mutebutton_off.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/mutebutton_on.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/newmutebutton.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/off.svg create mode 100644 attic/muse_qt4_evolution/muse/xpm/off.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/on.svg create mode 100644 attic/muse_qt4_evolution/muse/xpm/pafter.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/panic.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/pencil.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/piano.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/pitch.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/play.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/plus.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/pointer.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/punchin.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/punchout.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/quant.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/recordOff.svg create mode 100644 attic/muse_qt4_evolution/muse/xpm/recordOn.svg create mode 100644 attic/muse_qt4_evolution/muse/xpm/redo.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/resetS.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/rmark.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/select.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/select_all.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/select_all_parts_on_track.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/select_deselect_all.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/select_inside_loop.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/select_invert_selection.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/select_outside_loop.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/settings_appearance_settings.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/settings_configureshortcuts.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/settings_follow_song.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/settings_globalsettings.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/settings_metronome.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/settings_midifileexport.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/settings_midiport_softsynths.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/settings_midisync.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/solobutton.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/solobutton_off.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/solobutton_on.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/speaker.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/splash.png create mode 100644 attic/muse_qt4_evolution/muse/xpm/start.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/steprec.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/stereo.svg create mode 100644 attic/muse_qt4_evolution/muse/xpm/stick.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/stop.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/sysex.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/toc.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/track_add.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/track_delete.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/underlined.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/undo.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/up.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/view_bigtime_window.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/view_cliplist.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/view_marker.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/view_mixer.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/view_transport_window.xpm create mode 100644 attic/muse_qt4_evolution/muse/xpm/wave.xpm create mode 100644 attic/muse_qt4_evolution/packaging/muse_icon.png create mode 100755 attic/muse_qt4_evolution/packaging/muse_mdk.spec create mode 100644 attic/muse_qt4_evolution/pch.txt create mode 100644 attic/muse_qt4_evolution/plugins/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/plugins/doublechorus/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/plugins/doublechorus/doublechorus.cpp create mode 100644 attic/muse_qt4_evolution/plugins/doublechorus/doublechorusmodel.cpp create mode 100644 attic/muse_qt4_evolution/plugins/doublechorus/doublechorusmodel.h create mode 100644 attic/muse_qt4_evolution/plugins/doublechorus/simplechorusmodel.cpp create mode 100644 attic/muse_qt4_evolution/plugins/doublechorus/simplechorusmodel.h create mode 100644 attic/muse_qt4_evolution/plugins/freeverb/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/plugins/freeverb/allpass.h create mode 100644 attic/muse_qt4_evolution/plugins/freeverb/comb.h create mode 100644 attic/muse_qt4_evolution/plugins/freeverb/denormals.h create mode 100644 attic/muse_qt4_evolution/plugins/freeverb/freeverb.cpp create mode 100644 attic/muse_qt4_evolution/plugins/freeverb/readme.txt create mode 100644 attic/muse_qt4_evolution/plugins/freeverb/revmodel.cpp create mode 100644 attic/muse_qt4_evolution/plugins/freeverb/revmodel.h create mode 100644 attic/muse_qt4_evolution/plugins/freeverb/tuning.h create mode 100644 attic/muse_qt4_evolution/plugins/pandelay/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/plugins/pandelay/ladspapandelay.cpp create mode 100644 attic/muse_qt4_evolution/plugins/pandelay/ladspapandelay.h create mode 100644 attic/muse_qt4_evolution/plugins/pandelay/pandelay.cpp create mode 100644 attic/muse_qt4_evolution/plugins/pandelay/pandelaymodel.cpp create mode 100644 attic/muse_qt4_evolution/plugins/pandelay/pandelaymodel.h create mode 100644 attic/muse_qt4_evolution/share/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/share/instruments/Access_Virus.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/Alesis-Ion.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/Alesis-QS-78R.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/AlesisQS6.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/share/instruments/Hammond_XB-1.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/MC303.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/MC505.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/Quasimidi-Sirius.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/Roland-E28.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/Roland-JV-1010-All.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/Roland-JV-1010-Catagory.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/Roland-JV-1010-Country.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/Roland-JV-1010-Presets.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/Roland-JV-1010-Session.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/Roland-SCD70.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/Roland-XP30.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/Roland_FantomXR.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/Roland_SRX-02.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/Roland_SRX-09.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/Waldorf_Microwave-I.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/Yamaha-P50m.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/Yamaha-P80.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/Yamaha-PSR275.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/Yamaha-PSR530.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/Yamaha-S90.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/ZynAdd-1_4.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/emuproteus2000.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/gm.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/gs.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/ns5r.idf create mode 100644 attic/muse_qt4_evolution/share/instruments/xg.idf create mode 100644 attic/muse_qt4_evolution/share/locale/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/share/locale/muse_de.qm create mode 100644 attic/muse_qt4_evolution/share/locale/muse_de.ts create mode 100644 attic/muse_qt4_evolution/share/locale/muse_es.qm create mode 100644 attic/muse_qt4_evolution/share/locale/muse_es.ts create mode 100644 attic/muse_qt4_evolution/share/locale/muse_fr.qm create mode 100644 attic/muse_qt4_evolution/share/locale/muse_fr.ts create mode 100644 attic/muse_qt4_evolution/share/locale/muse_ru.qm create mode 100644 attic/muse_qt4_evolution/share/locale/muse_ru.ts create mode 100644 attic/muse_qt4_evolution/share/locale/muse_sv_SE.qm create mode 100644 attic/muse_qt4_evolution/share/locale/muse_sv_SE.ts create mode 100644 attic/muse_qt4_evolution/share/plugins/1050.ui create mode 100644 attic/muse_qt4_evolution/share/plugins/1436.ui create mode 100644 attic/muse_qt4_evolution/share/plugins/2142.ui create mode 100644 attic/muse_qt4_evolution/share/plugins/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/share/templates/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/share/templates/audio.med create mode 100644 attic/muse_qt4_evolution/share/templates/default.med create mode 100644 attic/muse_qt4_evolution/share/templates/empty.med create mode 100644 attic/muse_qt4_evolution/share/templates/midiGM.med create mode 100644 attic/muse_qt4_evolution/share/templates/monorecord.med create mode 100644 attic/muse_qt4_evolution/share/templates/ns5r.med create mode 100644 attic/muse_qt4_evolution/share/templates/synti.med create mode 100644 attic/muse_qt4_evolution/share/wallpapers/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/share/wallpapers/gray.gif create mode 100644 attic/muse_qt4_evolution/share/wallpapers/gray_rock.gif create mode 100644 attic/muse_qt4_evolution/share/wallpapers/gray_stucco.gif create mode 100644 attic/muse_qt4_evolution/share/wallpapers/paper1.jpg create mode 100644 attic/muse_qt4_evolution/share/wallpapers/paper2.jpg create mode 100644 attic/muse_qt4_evolution/share/wallpapers/stone1.gif create mode 100644 attic/muse_qt4_evolution/synti/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/synti/README create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/ARCH_ALIN create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/README create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/SutulaBank.dei create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/TODO create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/deicsonze.cpp create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/deicsonze.h create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/deicsonzefilter.cpp create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/deicsonzefilter.h create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/deicsonzegui.cpp create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/deicsonzegui.h create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/deicsonzegui.ui create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/deicsonzeplugin.cpp create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/deicsonzeplugin.h create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/deicsonzepreset.cpp create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/deicsonzepreset.h create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/SHold.fig create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/SHold.png create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/algo1.fig create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/algo1.png create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/algo2.fig create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/algo2.png create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/algo3.fig create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/algo3.png create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/algo4.fig create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/algo4.png create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/algo5.fig create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/algo5.png create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/algo6.fig create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/algo6.png create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/algo7.fig create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/algo7.png create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/algo8.fig create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/algo8.png create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/sawUp.fig create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/sawUp.png create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/square.fig create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/square.png create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/triangl.fig create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/triangl.png create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/wave1.fig create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/wave1.gnuplot create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/wave1.png create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/wave2.fig create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/wave2.gnuplot create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/wave2.png create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/wave3.fig create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/wave3.gnuplot create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/wave3.png create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/wave4.fig create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/wave4.gnuplot create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/wave4.png create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/wave5.fig create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/wave5.gnuplot create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/wave5.png create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/wave6.fig create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/wave6.gnuplot create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/wave6.png create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/wave7.fig create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/wave7.gnuplot create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/wave7.png create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/wave8.fig create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/wave8.gnuplot create mode 100644 attic/muse_qt4_evolution/synti/deicsonze/pics/wave8.png create mode 100644 attic/muse_qt4_evolution/synti/fluid/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/synti/fluid/fluid.cpp create mode 100644 attic/muse_qt4_evolution/synti/fluid/fluid.h create mode 100644 attic/muse_qt4_evolution/synti/fluid/fluidgui.cpp create mode 100644 attic/muse_qt4_evolution/synti/fluid/fluidgui.h create mode 100644 attic/muse_qt4_evolution/synti/fluid/fluidgui.ui create mode 100644 attic/muse_qt4_evolution/synti/fluidsynth/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/synti/fluidsynth/README.txt create mode 100644 attic/muse_qt4_evolution/synti/fluidsynth/TODO create mode 100644 attic/muse_qt4_evolution/synti/fluidsynth/fluidsynthgui.cpp create mode 100644 attic/muse_qt4_evolution/synti/fluidsynth/fluidsynthgui.h create mode 100644 attic/muse_qt4_evolution/synti/fluidsynth/fluidsynthgui.ui create mode 100644 attic/muse_qt4_evolution/synti/fluidsynth/fluidsynti.cpp create mode 100644 attic/muse_qt4_evolution/synti/fluidsynth/fluidsynti.h create mode 100644 attic/muse_qt4_evolution/synti/libsynti/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/synti/libsynti/evdata.h create mode 100644 attic/muse_qt4_evolution/synti/libsynti/gui.cpp create mode 100644 attic/muse_qt4_evolution/synti/libsynti/gui.h create mode 100644 attic/muse_qt4_evolution/synti/libsynti/mess.cpp create mode 100644 attic/muse_qt4_evolution/synti/libsynti/mess.h create mode 100644 attic/muse_qt4_evolution/synti/libsynti/mess2.cpp create mode 100644 attic/muse_qt4_evolution/synti/libsynti/mess2.h create mode 100644 attic/muse_qt4_evolution/synti/libsynti/midievent.cpp create mode 100644 attic/muse_qt4_evolution/synti/libsynti/midievent.h create mode 100644 attic/muse_qt4_evolution/synti/libsynti/mono.cpp create mode 100644 attic/muse_qt4_evolution/synti/libsynti/mono.h create mode 100644 attic/muse_qt4_evolution/synti/libsynti/poly.cpp create mode 100644 attic/muse_qt4_evolution/synti/libsynti/poly.h create mode 100644 attic/muse_qt4_evolution/synti/mus/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/synti/mus/mus.cpp create mode 100644 attic/muse_qt4_evolution/synti/organ/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/synti/organ/organ.cpp create mode 100644 attic/muse_qt4_evolution/synti/organ/organ.h create mode 100644 attic/muse_qt4_evolution/synti/organ/organgui.cpp create mode 100644 attic/muse_qt4_evolution/synti/organ/organgui.h create mode 100644 attic/muse_qt4_evolution/synti/organ/organgui.ui create mode 100644 attic/muse_qt4_evolution/synti/organ/reverb.cpp create mode 100644 attic/muse_qt4_evolution/synti/organ/reverb.h create mode 100644 attic/muse_qt4_evolution/synti/organ/routing.cpp create mode 100644 attic/muse_qt4_evolution/synti/s1/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/synti/s1/s1.cpp create mode 100644 attic/muse_qt4_evolution/synti/simpledrums/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/synti/simpledrums/COPYING create mode 100644 attic/muse_qt4_evolution/synti/simpledrums/README create mode 100644 attic/muse_qt4_evolution/synti/simpledrums/ReleaseNotes.txt create mode 100644 attic/muse_qt4_evolution/synti/simpledrums/common.h create mode 100644 attic/muse_qt4_evolution/synti/simpledrums/simpledrums.cpp create mode 100644 attic/muse_qt4_evolution/synti/simpledrums/simpledrums.h create mode 100644 attic/muse_qt4_evolution/synti/simpledrums/simpledrumsgui.cpp create mode 100644 attic/muse_qt4_evolution/synti/simpledrums/simpledrumsgui.h create mode 100644 attic/muse_qt4_evolution/synti/simpledrums/simpledrumsguibase.ui create mode 100644 attic/muse_qt4_evolution/synti/simpledrums/ssplugin.cpp create mode 100644 attic/muse_qt4_evolution/synti/simpledrums/ssplugin.h create mode 100644 attic/muse_qt4_evolution/synti/simpledrums/sspluginchooserbase.ui create mode 100644 attic/muse_qt4_evolution/synti/simpledrums/ssplugingui.cpp create mode 100644 attic/muse_qt4_evolution/synti/simpledrums/ssplugingui.h create mode 100644 attic/muse_qt4_evolution/synti/vam/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/synti/vam/COPYING create mode 100644 attic/muse_qt4_evolution/synti/vam/ChangeLog create mode 100644 attic/muse_qt4_evolution/synti/vam/README create mode 100644 attic/muse_qt4_evolution/synti/vam/TODO create mode 100644 attic/muse_qt4_evolution/synti/vam/vam.cpp create mode 100644 attic/muse_qt4_evolution/synti/vam/vam.h create mode 100644 attic/muse_qt4_evolution/synti/vam/vamgui.cpp create mode 100644 attic/muse_qt4_evolution/synti/vam/vamgui.h create mode 100644 attic/muse_qt4_evolution/synti/vam/vamgui.ui create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/COPYING create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/DSP/AnalogFilter.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/DSP/AnalogFilter.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/DSP/FFTwrapper.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/DSP/FFTwrapper.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/DSP/Filter.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/DSP/Filter.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/DSP/Filter_.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/DSP/FormantFilter.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/DSP/FormantFilter.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/DSP/SVFilter.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/DSP/SVFilter.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Effects/Alienwah.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Effects/Alienwah.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Effects/Chorus.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Effects/Chorus.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Effects/Distorsion.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Effects/Distorsion.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Effects/DynamicFilter.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Effects/DynamicFilter.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Effects/EQ.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Effects/EQ.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Effects/Echo.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Effects/Echo.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Effects/Effect.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Effects/Effect.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Effects/EffectLFO.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Effects/EffectLFO.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Effects/EffectMgr.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Effects/EffectMgr.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Effects/Phaser.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Effects/Phaser.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Effects/Reverb.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Effects/Reverb.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Input/ALSAMidiIn.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Input/ALSAMidiIn.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Input/MidiIn.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Input/MidiIn.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Input/NULLMidiIn.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Input/NULLMidiIn.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Input/OSSMidiIn.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Input/OSSMidiIn.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Input/WINMidiIn.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Input/WINMidiIn.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Bank.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Bank.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Config.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Config.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Dump.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Dump.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Master.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Master.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Microtonal.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Microtonal.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Part.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Part.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Util.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Util.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/XMLwrapper.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/XMLwrapper.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Output/Recorder.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Output/Recorder.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Params/ADnoteParameters.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Params/ADnoteParameters.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Params/Controller.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Params/Controller.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Params/EnvelopeParams.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Params/EnvelopeParams.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Params/FilterParams.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Params/FilterParams.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Params/LFOParams.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Params/LFOParams.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Params/PADnoteParameters.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Params/PADnoteParameters.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Params/Presets.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Params/Presets.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Params/PresetsStore.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Params/PresetsStore.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Params/SUBnoteParameters.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Params/SUBnoteParameters.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Seq/MIDIEvents.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Seq/MIDIEvents.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Seq/MIDIFile.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Seq/MIDIFile.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Seq/Sequencer.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Seq/Sequencer.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Synth/ADnote.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Synth/ADnote.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Synth/Envelope.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Synth/Envelope.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Synth/LFO.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Synth/LFO.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Synth/OscilGen.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Synth/OscilGen.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Synth/PADnote.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Synth/PADnote.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Synth/Resonance.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Synth/Resonance.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Synth/SUBnote.C create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Synth/SUBnote.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/UI/ADnoteUI.fl create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/UI/BankUI.fl create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/UI/CMakeLists.txt create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/UI/ConfigUI.fl create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/UI/EffUI.fl create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/UI/EnvelopeUI.fl create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/UI/FilterUI.fl create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/UI/LFOUI.fl create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/UI/MasterUI.fl create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/UI/MicrotonalUI.fl create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/UI/OscilGenUI.fl create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/UI/PADnoteUI.fl create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/UI/PartUI.fl create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/UI/PresetsUI.fl create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/UI/ResonanceUI.fl create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/UI/SUBnoteUI.fl create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/UI/SeqUI.fl create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/UI/VirKeyboard.fl create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/UI/WidgetPDial.fl create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Arpeggios/0001-Arpeggio1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Arpeggios/0002-Arpeggio2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Arpeggios/0003-Arpeggio3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Arpeggios/0004-Arpeggio4.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Arpeggios/0005-Arpeggio5.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Arpeggios/0006-Aporggio6.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Arpeggios/0007-Arpeggio7.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Arpeggios/0008-Arpeggio8.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Arpeggios/0009-Arpeggio9.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Arpeggios/0010-Arpeggio10.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Arpeggios/0011-Arpeggio11.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Arpeggios/0033-Sequence1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Arpeggios/0034-Sequence2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Arpeggios/0036-Echoed Synth.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Arpeggios/0037-Echo FX.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Arpeggios/0039-Soft Arpeggio1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Arpeggios/0040-Soft Arpeggio2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Arpeggios/0041-Soft Arpeggio3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Arpeggios/0042-Soft Arpeggio4.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Arpeggios/0043-Soft Arpeggio5.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Arpeggios/0065-Hyper Organ1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Arpeggios/0066-Hyper Arpeggio.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Arpeggios/0068-Glass Arpeggio.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Bass/0001-Bass 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Bass/0002-Bass 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Bass/0003-Bass 3 _analog_.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Bass/0004-Bass 4.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Bass/0005-Bass 5.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Bass/0006-Analogue Bass.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Bass/0033-Wah Bass.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Bass/0035-FM Bass 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Bass/0036-FM Bass 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Brass/0001-FM Thrumpet.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Brass/0003-Synth Brazz 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Brass/0004-Synth Brazz 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Brass/0005-Synth Brass 3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Brass/0006-Synth Brass 4.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Brass/0007-Synth Brass 5.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Brass/0008-Brass Pad.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Brass/0009-Wah Brass.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Brass/0010-Solo Synth1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Brass/0011-Brazz 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Brass/0012-Brazz 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Brass/0033-Analog Brass 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Brass/0034-Analog Brass 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Brass/0035-Analog Brass 3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Brass/0036-Analog Brass 4.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Brass/0065-Simple Brass.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Brass/0066-Fat Brass.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Choir and Voice/0001-AHH Choir 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Choir and Voice/0002-AHH Choir 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Choir and Voice/0003-EHH Choir 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Choir and Voice/0004-Voice OOH.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Choir and Voice/0005-Choir Pad1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Choir and Voice/0006-Choir Pad2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Choir and Voice/0007-Choir Pad3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Choir and Voice/0008-Choir Pad4.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Choir and Voice/0009-Choir Pad5.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Choir and Voice/0010-Choir Pad6.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Choir and Voice/0033-Choir.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Choir and Voice/0034-Slow Morph_Choir.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Choir and Voice/0035-Wah Choir.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Choir and Voice/0036-Eooooo.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Choir and Voice/0037-Voiced Synth.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Choir and Voice/0039-Ohh Choir.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Choir and Voice/0065-Vocal Morph 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Choir and Voice/0066-Vocal Morph 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Choir and Voice/0067-Vocal Morph 3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Choir and Voice/0068-Vocal Morph 4.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Choir and Voice/0069-Vocal Morph 5.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Choir and Voice/0070-Vocal Morph 6.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Choir and Voice/0071-Vocal Morph 7.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Drums/0001-Drums Kit1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Dual/.qped create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Dual/0001-Layered1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Dual/0002-Layered2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Dual/0005-Organ and Saw.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Dual/0007-Organ Choir Pad1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Dual/0008-Organ Choir Pad2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Dual/0033-Rhodes Strings1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Dual/0034-Rhodes Strings2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Dual/0035-Rhodes Strings3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Dual/0036-Rhodes Strings4.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Dual/0065-Dream of the Saw.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Fantasy/0001-Emptyness1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Fantasy/0002-Emptyness2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Fantasy/0003-Space Synth.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Fantasy/0004-Weird Pad.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Fantasy/0006-Space SynthBrass.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Fantasy/0008-Space Voice1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Fantasy/0009-Space Voice2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Fantasy/0010-Space Voice3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Fantasy/0011-Space Choir1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Fantasy/0012-Space Choir2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Fantasy/0014-Glass Voices.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Fantasy/0015-Strange Voice.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Fantasy/0033-ImpossibleDream1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Fantasy/0034-ImpossibleDream2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Fantasy/0035-ImpossibleDream3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Fantasy/0036-ImpossibleDream4.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Fantasy/0037-ImpossibleDream5.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Fantasy/0040-Delayed Echo.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Fantasy/0041-Fade Down Echo.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Fantasy/0042-Rhodes Space1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Fantasy/0043-Rhodes Space2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Fantasy/0065-Long SpaceChoir1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Fantasy/0066-Long SpaceChoir2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Guitar/0001-Dist Guitar 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Guitar/0002-Dist Guitar 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Guitar/0003-Dist Guitar 3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Guitar/0004-Dist Guitar 4.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Guitar/0005-Dist Guitar 5.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Guitar/0033-Trash Guitar 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Guitar/0034-Trash Guitar 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Guitar/0035-Short.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Guitar/0065-Clean Guitar1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Misc/0001-Memories.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Misc/0002-Bells 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Misc/0003-Bells 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Misc/0004-Bells 3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Misc/0006-SuperSaw 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Misc/0007-SuperSaw 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Misc/0008-SuperSaw 3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Misc/0009-SuperSaw 4.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Misc/0010-SuperSaw 5.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Misc/0033-Trash Synth 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Misc/0034-Trash Synth 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Misc/0035-Trash Synth 3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Noises/0001-Synth Effect.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Noises/0002-Ioioioioioi.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Noises/0003-Noise1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Noises/0004-Noise2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Noises/0006-Wind.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Noises/0033-Metal Sound 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Noises/0034-Metal Sound 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Noises/0035-Metal Sound 3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Noises/0037-Metal Sound 4.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Noises/0038-Metal Sound 5.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Noises/0065-Short noise.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0001-Organ 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0002-Organ 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0003-Organ 3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0004-Organ 4.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0005-Organ 5.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0006-Organ 6.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0007-Organ 7.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0008-Organ 8.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0009-Organ 9.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0010-Organ 10.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0011-Organ 11.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0033-Cathedral Organ1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0034-Cathedral Organ2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0035-Cathedral Organ3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0037-Church Organ 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0038-Church Organ 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0039-Church Organ 3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0041-Church Organ Soft.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0065-Nice Organ 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0066-Nice Organ 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0067-Sub_Organ.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0068-Square Organ.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0069-Soft Organ 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0070-Soft Organ 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0071-Synth Organ.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0072-Fantasy Organ.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0097-Accordion Pad 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0098-Accordion Pad 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0099-Synth Accordion1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0100-Synth Accordion2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Organ/0101-Accordion 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Pads/0001-Sine Pad.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Pads/0002-sin2x pad.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Pads/0003-Analog Pad 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Pads/0004-Analog Pad 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Pads/0005-Square Pad 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Pads/0006-Square Pad 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Pads/0008-Resonance Pad1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Pads/0009-Resonance Pad2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Pads/0033-Synth Pad 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Pads/0034-Synth Pad 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Pads/0035-Synth Pad 3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Pads/0036-Synth Pad 4.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Pads/0065-Soft Pad.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Pads/0066-Flanged Pad 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Plucked/0001-Plucked 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Plucked/0002-Plucked 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Plucked/0003-Plucked 3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Plucked/0004-Plucked 4.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Plucked/0005-Plucked 5.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Plucked/0006-Plucked 6.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Plucked/0033-Plucked String1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Plucked/0034-Plucked String2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Plucked/0036-Plucked Wah.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Reed and Wind/0001-Flute 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Reed and Wind/0002-Flute 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Reed and Wind/0003-Flute 3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Reed and Wind/0005-FM Reed.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Reed and Wind/0006-Clarinet.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Reed and Wind/0007-Breathy1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Reed and Wind/0033-Reed 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Reed and Wind/0034-Reed 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Reed and Wind/0035-Reed 3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Reed and Wind/0036-Reed 4.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Reed and Wind/0037-Reed 5.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Reed and Wind/0038-Reed 6.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Reed and Wind/0039-Reed 7.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Reed and Wind/0065-Fat Reed1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Reed and Wind/0066-Fat Reed2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Reed and Wind/0067-Fat Reed3 square.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Rhodes/0001-DX Rhodes 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Rhodes/0002-DX Rhodes 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Rhodes/0003-DX Rhodes 3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Rhodes/0004-DX Rhodes 4.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Rhodes/0005-DX Rhodes 5.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Rhodes/0007-Dig Rhodes.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Rhodes/0008-Synth Rhodes1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Rhodes/0009-Synth Rhodes2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Rhodes/0010-Synth Rhodes3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Rhodes/0012-Ice Rhodes1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Rhodes/0013-Ice Rhodes2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Rhodes/0014-Ice Rhodes3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Rhodes/0033-FM Rhodes 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Rhodes/0034-FM Rhodes 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Rhodes/0035-FM Rhodes 3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Rhodes/0036-FM Rhodes 4.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Rhodes/0037-FM Rhodes 5.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Rhodes/0038-FM Rhodes 6.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Rhodes/0041-Soft Rhodes.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Rhodes/0042-Hard Rhodes1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Rhodes/0043-Hard Rhodes2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Rhodes/0044-Echo Rhodes.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Rhodes/0045-A long time ago.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Rhodes/0065-Steel Rhodes.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Splited/0001-Strings and Reed1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Splited/0002-Strings and Reed2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Splited/0003-Strings and Flute.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Splited/0033-Choir and Reed.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0001-Saw Strings 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0002-Saw Strings 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0003-Saw Strings 3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0004-Saw Strings 4.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0005-Saw Strings 5.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0006-Saw Strings 6.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0007-Saw Strings 7.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0008-Saw Strings 8.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0011-Strings Pad1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0012-Strings Pad2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0013-Strings Pad3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0016-Sweep Pad 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0017-Sweep Pad 1 Fat.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0018-Sweep Pad 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0019-Sweep Pad 3Wah.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0020-Sweep Pad 4.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0033-Strings1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0034-Dark Strings.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0035-Octave Pad.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0036-Fast Attack.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0038-Fat Saw.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0041-Saw 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0042-Saw 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0043-Saw 3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0044-Saw Pad.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0045-Soft Saw Pad.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0046-Echoed Saw.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0047-Vibratto Saw1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0048-Wah1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0050-Synth Violin 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0051-Synth Violin 2 Fat.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0065-Simple Strings.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0066-Dual Strings.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Strings/0067-Dual StringsOct.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Synth/0001-Soft Synth 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Synth/0002-Soft Synth 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Synth/0004-Pulse Pad 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Synth/0005-Pulse Pad 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Synth/0007-Analog Filter 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Synth/0008-Analog Filter 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Synth/0033-Phased Pad 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Synth/0034-Phased Pad 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Synth/0035-Phased Pad 3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Synth/0037-Resonance Synth.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Synth/0039-Multi-phase synth.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Synth/0065-Computer Lead.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Synth/0067-Detuned Harmonic.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/Synth/0097-FM Synth.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/SynthPiano/0001-Soft Piano 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/SynthPiano/0002-Soft Piano 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/SynthPiano/0004-Fantasy Bell.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/SynthPiano/0005-Synth Piano1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/SynthPiano/0006-Synth Piano2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/SynthPiano/0007-Termollo1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/SynthPiano/0008-Termollo2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/SynthPiano/0009-Termollo3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/SynthPiano/0011-Drop1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/SynthPiano/0012-Drop2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/SynthPiano/0033-Analog Piano 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/SynthPiano/0034-Analog Piano 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/SynthPiano/0035-Analog Piano 3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/SynthPiano/0037-FM Synth1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/SynthPiano/0039-BinaryPiano1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/SynthPiano/0040-BinaryPiano2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/SynthPiano/0065-Synth Piano 1.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/SynthPiano/0066-Synth Piano 2.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/SynthPiano/0067-Synth Piano 3.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/SynthPiano/0068-Synth Piano 3 fat.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/SynthPiano/0069-Synth Piano 3 det.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/SynthPiano/0070-Synth Piano 4.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/banks/SynthPiano/0071-Synth Piano 5.xiz create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/globals.h create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/main.cpp (limited to 'attic/muse_qt4_evolution') diff --git a/attic/muse_qt4_evolution/CMakeLists.txt b/attic/muse_qt4_evolution/CMakeLists.txt new file mode 100644 index 00000000..2d0f8a98 --- /dev/null +++ b/attic/muse_qt4_evolution/CMakeLists.txt @@ -0,0 +1,335 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2008 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +project(muse) +CMAKE_MINIMUM_REQUIRED(VERSION 2.4.1) +if (COMMAND cmake_policy) + cmake_policy(SET CMP0003 NEW) +endif(COMMAND cmake_policy) + +# set libdir if not use -DCMAKE_INSTALL_LIBDIR +if (NOT CMAKE_INSTALL_LIBDIR) + SET(CMAKE_INSTALL_LIBDIR "lib") +endif (NOT CMAKE_INSTALL_LIBDIR) + +#set(CMAKE_BUILD_TYPE debug) +#set(CMAKE_BUILD_TYPE release) + +# for debugging the make system uncomment next line: +# set(CMAKE_VERBOSE_MAKEFILE ON) + +set(CMAKE_INCLUDE_CURRENT_DIR TRUE) +set(CMAKE_BUILD_WITH_INSTALL_RPATH ON) +set(CMAKE_SKIP_RULE_DEPENDENCY TRUE) + +# The MusE version number. +SET(MusE_VERSION_MAJOR 2) +SET(MusE_VERSION_MINOR 0) +SET(MusE_VERSION_PATCH 1) +SET(MusE_VERSION "2.0.1") +SET(MusE_VERSION_FULL "2.0.1") +SET(MusE_INSTALL_NAME "muse-2.0") + +include ( ${PROJECT_SOURCE_DIR}/cmake/UsePkgConfig1.cmake ) +include ( ${PROJECT_SOURCE_DIR}/cmake/TargetDoc.cmake) + +option ( ENABLE_DSSI "enable Disposable Soft Synth Interface" ON) +option ( ENABLE_VST "enable VST/win support" OFF) +option ( ENABLE_FLUID "enable fluidsynth softsynth plugins" ON) +option ( ENABLE_ZYNADDSUBFX "enable zyaddsubfx softsynth plugin" ON) + +## +## Just print a notice if this is OS X +## +if (APPLE) + message("OS X found.") +else (APPLE) + if (UNIX) + message("Unix (probably linux) found") + endif(UNIX) + +endif (APPLE) + +## +## look for Qt4 +## + +set(QT_MIN_VERSION "4.3.0") +set(QT_USE_QTXML TRUE) +set(QT_USE_QTDESIGNER TRUE) +set(QT_USE_QTNSPLUGIN TRUE) +set(QT_USE_QTSVG TRUE) + +find_package(Qt4) + +if (NOT QT4_FOUND) + message(FATAL_ERROR "Fatal error: QT (version >= 4.3.0) required.\n" + "Cmake tries to detect QT4 by searching for 'qmake' in your PATH\n" + "If you have QT4 installed, make sure qmake is found in your PATH." + ) +endif (NOT QT4_FOUND) + +include(${QT_USE_FILE}) + +## +## find doxygen +## TODO + +## +## alsa >= 0.9.0 +## + +if (APPLE) + message("Disabling ALSA support due to OS X build.") +else (APPLE) +PKGCONFIG (alsa 0.9.0 ALSA_INCDIR ALSA_LIBDIR ALSA_LIB ALSA_CPP ) +if (NOT ALSA_INCDIR) + message(FATAL_ERROR "Fatal error: ALSA >= 1.0.0 required") +else (NOT ALSA_INCDIR) + message("Alsa found.") +endif (NOT ALSA_INCDIR) +endif (APPLE) + +## +## find packages for zyaddsubfx +## +## fftw3 +## mxml +## fltk + fluid +## +## problems with FLTK/CMake: +## - fltk is not found on kubuntu/ubuntu +## - cmake version > 2.4 crashes +## - there is an annoying (and wrong) usage message from cmake concerning FLTK +## + +if (ENABLE_ZYNADDSUBFX) + # HACK: + set (FLTK_INCLUDE_DIR "/usr/include") + set(FLTK_FLUID_EXECUTABLE "/usr/bin/fluid") + + include (FindFLTK) + if (NOT FLTK_FOUND) + message("fltk toolkit not found, zynaddsubfx not build") + set(ENABLE_ZYNADDSUBFX OFF) + else (NOT FLTK_FOUND) + message("fltk toolkit found") + endif (NOT FLTK_FOUND) + + PKGCONFIG (mxml 2.0 MXML_INCDIR MXML_LIBDIR MXML_LIB MXML_CPP ) + if (NOT MXML_INCDIR) + message("mxml >= 2.0 not found, zynaddsubfx not build") + set(ENABLE_ZYNADDSUBFX OFF) + else (NOT MXML_INCDIR) + message("mxml found.") + endif (NOT MXML_INCDIR) + # + # check for fftw3 library + # + PKGCONFIG (fftw3 3.1.2 FFTW_INCDIR FFTW_LIBDIR FFTW_LIB FFTW_CPP ) + if (NOT FFTW_INCDIR) + message("fftw3 >= 3.1.2 not found, zynaddsubfx not build") + set(ENABLE_ZYNADDSUBFX OFF) + else (NOT FFTW_INCDIR) + message("fftw3 found.") + endif (NOT FFTW_INCDIR) +endif (ENABLE_ZYNADDSUBFX) + + +## +## find sndfile >= 1.0.0 +## + +PKGCONFIG (sndfile 1.0.0 SNDFILE_INCDIR SNDFILE_LIBDIR SNDFILE_LIB SNDFILE_CPP ) +if (NOT SNDFILE_INCDIR) + message(FATAL_ERROR "Fatal error: libsndfile >= 1.0.0 required") +else (NOT SNDFILE_INCDIR) + message("sndfile found.") +endif (NOT SNDFILE_INCDIR) + +## +## find libsamplerate >= 0.1.0 +## + +PKGCONFIG (samplerate 0.1.0 SAMPLERATE_INCDIR SAMPLERATE_LIBDIR SAMPLERATE_LIB SAMPLERATE_CPP ) +if (NOT SAMPLERATE_INCDIR) + message(FATAL_ERROR "Fatal error: libsamplerate >= 0.1.0 required") +else (NOT SAMPLERATE_INCDIR) + message("samplerate found") +endif (NOT SAMPLERATE_INCDIR) + +## +## find jack >= 0.103.0 +## + +PKGCONFIG (jack 0.107.0 JACK_INCDIR JACK_LIBDIR JACK_LIB JACK_CPP ) +if (NOT JACK_INCDIR) + PKGCONFIG (jack 0.103.0 JACK_INCDIR JACK_LIBDIR JACK_LIB JACK_CPP ) + if (NOT JACK_INCDIR) + message(FATAL_ERROR "Fatal error: JACK >= 0.103 required") + else (NOT JACK_INCDIR) + message("JACK 0.103 found") + set(JACK103 ON) + endif (NOT JACK_INCDIR) +else (NOT JACK_INCDIR) + message("JACK 0.107 found") + set(JACK107 ON) +endif (NOT JACK_INCDIR) + +## +## check for dssi +## dssi >= 0.9.0 +## liblo >= 0.23 +## + +if (ENABLE_DSSI) + PKGCONFIG (dssi 0.9.0 DSSI_INCDIR DSSI_LIBDIR DSSI_LIB DSSI_CPP ) + if (NOT DSSI_INCDIR) + message("Error: dssi >= 0.9.0 not found, disabling feature") + set ( ENABLE_DSSI OFF ) + else (NOT DSSI_INCDIR) + PKGCONFIG (liblo 0.23 LIBLO_INCDIR LIBLO_LIBDIR LIBLO_LIB LIBLO_CPP ) + if (NOT LIBLO_INCDIR) + message("Error: liblo >= 0.23 not found, disabling DSSI") + set ( ENABLE_DSSI OFF ) + else (NOT LIBLO_INCDIR) + message("liblo >= 0.23 found.") + set (DSSI_SUPPORT TRUE) + message("DSSI enabled") + endif (NOT LIBLO_INCDIR) + endif (NOT DSSI_INCDIR) +else (ENABLE_DSSI) + message("DSSI disabled") +endif (ENABLE_DSSI) + +if (ENABLE_VST) + message("VST support enabled") + set (VST_SUPPORT TRUE) +else (ENABLE_VST) + message("VST support disabled") + set (VST_SUPPORT FALSE) +endif (ENABLE_VST) + +## +## TODO +## +## Optimizations +## + +SET (USE_SSE false) + +## +## check for fluidsynth +## + +if ( ENABLE_FLUID ) + PKGCONFIG (fluidsynth 1.0.0 FLUID_INCDIR FLUID_LIBDIR FLUID_LIB FLUID_CPP ) + if (NOT FLUID_INCDIR) + message("Error: fluidsynth >= 0.9.0 not found, disabling feature") + set ( ENABLE_FLUID OFF ) + else (NOT FLUID_INCDIR) + message("Fluidsynth found") + endif (NOT FLUID_INCDIR) +endif ( ENABLE_FLUID ) + +# +# produce config.h file +# +configure_file ( + ${PROJECT_SOURCE_DIR}/config.h.in + ${PROJECT_BINARY_DIR}/config.h + ) + +add_custom_command( + OUTPUT ${PROJECT_BINARY_DIR}/all.h + COMMAND cp ${PROJECT_SOURCE_DIR}/all.h ${PROJECT_BINARY_DIR}/all.h + DEPENDS ${PROJECT_SOURCE_DIR}/all.h + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + ) + +add_custom_command( + OUTPUT ${PROJECT_BINARY_DIR}/all-pic.h + COMMAND cp ${PROJECT_SOURCE_DIR}/all.h ${PROJECT_BINARY_DIR}/all-pic.h + DEPENDS ${PROJECT_SOURCE_DIR}/all.h + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + ) + +add_custom_command( + OUTPUT ${PROJECT_BINARY_DIR}/all-pic-debug.h + COMMAND cp ${PROJECT_SOURCE_DIR}/all.h ${PROJECT_BINARY_DIR}/all-pic-debug.h + DEPENDS ${PROJECT_SOURCE_DIR}/all.h + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + ) + +include_directories( + . + ${PROJECT_SOURCE_DIR} + ${PROJECT_SOURCE_DIR}/muse + ${PROJECT_SOURCE_DIR}/muse/widgets + ${PROJECT_BINARY_DIR} + ${PROJECT_BINARY_DIR}/muse + ${PROJECT_BINARY_DIR}/muse/widgets + ${PROJECT_BINARY_DIR}/muse/instruments + ${PROJECT_BINARY_DIR}/muse/ctrl + + ${ALSA_INCDIR} + ${JACK_INCDIR} + ${SNDFILE_INCDIR} + ${SAMPLERATE_INCDIR} + ${LIBLO_INCDIR} + ${DSSI_INCDIR} + ) + +# include (pch.txt) + +# +# If the cmake version includes cpack, use it +# +IF(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake") + + IF(EXISTS "${CMAKE_ROOT}/Modules/InstallRequiredSystemLibraries.cmake") + SET(CMAKE_INSTALL_MFC_LIBRARIES 1) + INCLUDE(InstallRequiredSystemLibraries) + ENDIF(EXISTS "${CMAKE_ROOT}/Modules/InstallRequiredSystemLibraries.cmake") + + SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MusE is a virtual audio studio environment") + SET(CPACK_PACKAGE_VENDOR "Werner Schweer and others") + SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING") + SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING") + SET(CPACK_PACKAGE_VERSION_MAJOR "${MusE_VERSION_MAJOR}") + SET(CPACK_PACKAGE_VERSION_MINOR "${MusE_VERSION_MINOR}") + SET(CPACK_PACKAGE_VERSION_PATCH "${MusE_VERSION_PATCH}") + SET(CPACK_PACKAGE_INSTALL_DIRECTORY "CMake ${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}") + SET(CPACK_SOURCE_PACKAGE_FILE_NAME "${MusE_INSTALL_NAME}") + + SET(CPACK_SYSTEM_NAME ${CMAKE_SYSTEM_NAME}) + + SET(CPACK_PACKAGE_FILE_NAME "${CPACK_SOURCE_PACKAGE_FILE_NAME}-${CPACK_SYSTEM_NAME}") + SET(CPACK_STRIP_FILES "bin/muse;bin/grepmidi") + SET(CPACK_PACKAGE_EXECUTABLES "muse" "MusE" "grepmidi" "grepmidi") + INCLUDE(CPack) +ENDIF(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake") + +set(CMAKE_CXX_FLAGS "-Wl,-rpath,${QT_LIBRARY_DIR} -Wall -Wextra -Winvalid-pch -fno-exceptions") +set(CMAKE_CXX_FLAGS_RELEASE "-O2 -fomit-frame-pointer -ffast-math -fstrength-reduce") +set(CMAKE_CXX_FLAGS_DEBUG "-g -DQT_DEBUG") + +subdirs(al awl grepmidi plugins midiplugins muse share synti) + diff --git a/attic/muse_qt4_evolution/COPYING b/attic/muse_qt4_evolution/COPYING new file mode 100644 index 00000000..5a965fbc --- /dev/null +++ b/attic/muse_qt4_evolution/COPYING @@ -0,0 +1,280 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS diff --git a/attic/muse_qt4_evolution/ChangeLog b/attic/muse_qt4_evolution/ChangeLog new file mode 100644 index 00000000..d02cd328 --- /dev/null +++ b/attic/muse_qt4_evolution/ChangeLog @@ -0,0 +1,2760 @@ +5.7. (ws) + - fix midi metronome output routing +29.6. (ws) + - fix sending proper note off's at stop +27.6. (ws) + JACK cleanups and implementation of JACK midi input +25.6. (ws) + As part of a major code cleanup i removed ALSA midi. This also removes the + need for a realtime timer (JACK midi and MusE are competing for it) and simplifies + a lot of other code. +2.3. (ws) + - dssi plugins: fix count of LADSPA ports +21.02. (fn) + - "Ported" simpledrums to Qt4 - it builds, runs, produces sound (and + compiler warnings); review is welcome. The GUI is rather large now. +21.1. (ws) + - fix: recorded midi events were echoed to midi output even if the "monitor" + switch was "off" + - speedups for midi recording; recorded events are shown in "realtime" +18.1. (ws) + - Remove font & style configuration. Fonts and other things are configured in + QT style sheets. The application style sheet is configurable. Default is + the build-in file "style.qss". +17.1.2008 (ws) + - use QSettings to save/restore main window geometry + - do not change geometry of main window when changing project + - fix crash: loading another song, then Settings->Preferences + - added svn revision number to "About" box + - changed version number to 2.0.1, install to muse-2.0 + - routing pulldown menu in mixer will stay if SHIFT is pressed while clicking; + this allows for fast selection of more than one routing targets +30.12. (rj) + - added drum filter mux plugin. Useful when driving a sampled drumkit + with multi sampled drums. Especially if they also have multiple keys + for variations of each drum. +20.10. (ng) + - I replaced double by float in Pos::msf method at file pos.cc + and that prevents the segfault that occurs when launching muse. + Although float precision should be fine that hack obviously hasn't + fixed the bug, just hide it! + - Initialize _timeType with AL::Tick in tcanvas.cc because it was used + uninitialized. +9.10. (ws) + - extend cmake scripts to automatically distinguish between jackd 0.103.0 + as distributed with (k)ubuntu and current jackd 0.107.0 + - fixes for texexec + - do not automatically build documentation; new make targets "program_doc" and + "manual" +22.9. (ws) + - fixed wavetrack playback +17.9. (rj) + - changed to start/stop toggle without rewinding since this seems + like the popular choice (actually I have to agree) + - some keyboard navigation beginnings...nothing working yet + - added some debug messages +17.6. (ws) + - organ synthesizer plugin update +9.6. (ws) + - added new Drawbar() widget to awl lib + - install libawlplugin.so into qt designer plugin library +29.5. (ws) + - update to current JACK (changes in midi interface) +26.05 (ng) + - update CMakeLists.txt to check that Qt4 > 4.3.0 and jack > 0.103.0 +23.5. (ws) + - midi import fixes +19.04 (ws) + - disable routing buttons in mixer strip when in off state + - fixed crash when removing track from mixer + - framework for importing muse0.9 projectfiles + - align buffer in dummy audio driver so that the sse routines + do not choke; same for AuxPluginF, Pipeline, Fifo +18.04 (ws) + - simplify mixer strip geometry manager + - changed track list layout: track name now always uses one + textline; remove configure option for track name size + - fix ctrl dialog for plugin provided controller +17.04 (ws) + - replace some heartBeat signal/slot connections with + direct calls for better performance +16.04 (ws) + - added some sse routines to optimize mixing +15.03 (ng) + - update IV miditracker +06.03 (ws) + - did some optimizations to meter display; mixer still uses + a lot of cpu cycles +04.03 (ng) + - update III miditracker +02.02 (ng) + - updated partlistedit, direct editing of time & parameters on list edit +01.02 (ng) + - changed PanDelay, time delay is calculated with BPM and beat ratio +27.01 + (ws) + - changed DSSI initialization making whysynth work + (ng) + - added operator== for EventBase, MidiEventBase and PosLen + - modified Event::operator== to match on the content instead of the pointer + - added insert note event and delete note and sysex event in List Editor +23.01 (ng) + - added insert sysex event update I + - replaced bzip2 by Qt compression in deicsonze + - added sysex tramission for DSSI synth +19.01 (ng) + - fixed bug to prevent muse from halting when trying to load a non-ladpsa plugin (by Willy Foobar) +06.01 (ng) + - added panDelay plugin FX + - added panDelay in DeicsOnze + +*********************** +* Happy new year 2007 * +*********************** + +29.12 (ng) + - fixed sync LFO Deicsonze + - update II miditracker (not working yet) +27.12 (ng) + - deleted getBankName and getPatchInfo of zynaddsubfx + - add gradient color for the tracks +26.12 (ng) + - changed MessSynthIF::populatePatchPopup to make is work with banks + - added getPatchInfo of DeicsOnze +15.12 (ws) + - make slider.maxValue configurable + - pixel tuning for graphical controller editor +13.12 (ws) + - changed (again) midi/audio time synchronisation + - fix: record midi controller only in controller list + (ns) DeicsOnze 0.5.5 + - added filter for low quality +12.12 (ws) + - added possibility to define a new midicontroller + (ng) + - add save project as... (not sure it's complete yet?) + - take off the last redundent presets in deicsonze +10.12 (ng) + - items in pianoroll play the right pitch (event.pitch + transpose) + - items in pianoroll are displayed correctly according to Y zoom + - selection in the pianoroll are dragged correctly + - fix RouteNode::write(Xml& xml, const char* label) xml.put --> xml.tagE + - fix eventCanvas::genCanvasPopup(), uncheck unselected action +08.12 (ws) + - first version of midi instrument editor (*.idf files) + (ng) deicsonze + - fix LFO and Ctrl modulation +07.12 (ws) + - xml lib cleanups +06.12 (ng) deicsonze + - fix pitchbend + - fix some logarithm volume issues + - fix sustain pedal +04.12 (ng) + - fix deicsonze FX plugin bugs + - add AbstractSlider::setMinLogValue(), AbstractSlider::setMaxLogValue() + - modify AbstractSlider::value() so that it returns min instead of 0 + - and VolSlider::value() still returns 0 for min + - add reset Ctrl button in DeicsOnze +29.11 (ws) + - shift+mouse wheel changes horizontal magnification while current + position stays at cursor position +28.11 (ws) + - application spanning drag&drop of parts + - cut/copy/paste for parts +24.11 (ws) + - added new make target: "doxy" to generate doxygen source + documentation +21.11 (ws) + - fixed DSSI support +21.11 (ng) + - add color gradient to meterslider + - update miditracker (not working yet) + - check mxml >= 2.0 for zynaddsubfx + - fix deicsonze FX plugin bug +16.11 (ws) + - implemented controller editor part of new list editor +12.11 (ws) + - the internationalization files (*.qm) are now part of the + MusE image via the qt resource system. Installing them is not + necessary anymore. +10.11 (ws) + - implemented splitlayer midi plugin + - replaced meter in midi input strip by activity "leds" for all + midi channels +8.11 (ws) + - removed the suboptimal "MidiChannel" concept. MidiChannels are + now merged with MidiTracks. +5.11 (ws) + - simplified midi input routing + - added "Monitor" button to midi track mixer strip +31.10 (ws) + - MESS: + - remove useless QWidget parameter in instantiate() + - getInitData() and getControllerInfo() + are no longer const; + - Added getBankName() to interface to allow for simple structuring + of patches. + - queue midi events which cannot be send to busy(locked) software + synthesizer + - zynaddsubfx: implement locking, showGui(), and getControllerInfo(); + cache patch names +29.10 (ws) + - fixed crash after some time of midi recording: made midi + input queue thread safe. +27.10 (ws) + - added a MESS port of the Zynaddsubfx software synthesizer +25.10 (ws) + - make default path for midi- and wave import configurable +23.10 (ws) + - simple jack midi output now works +20.10 (ws) + - add first support for jack midi + - jack autostart +18.10 (ws) + - added routing for jack midi ports. Fixes for "mus". +17.10 (ws) + - added new program "mus". Mus is a wrapper to operate MusE MESS + synthesizer standalone with JACK audio/midi interface. The + plan is to use them to test the upcoming jack midi implementation. +15.10 (ng) + - DeicsOnze 0.5, add FX send + - fix installation path for freeverb + - fix ladspa checkbox parameter + - add LADSPA plugin doublechorus +12.10 (ws) + - added post fader plugins for mixer + - removed special aux send track type. Aux send is now implemented as + a special build in audio plugin. + - many routing changes +5.10 (ws) + - QT4.2 is now minimum required version + - changed font selector in "preferences" to QFontCombobox + - replace "lauchBrowser()" with "QDesktopServices::openUrl()" + - fix for drag&drop for audio plugins +4.10 (rj) + - Select the right item when items are stacked on top of each other, for + pianoroll and arranger (rj) + - Print error message when name2route called in error (rj) +4.10 (ws) + - misc fixes for graphical controller editor + - patch for x86_64-biarch systems from Detlef Reichelt +1.10 (ws) + - changed locking of audio and midi sequencer thread (in my setup this + results in xrun free operation at 2.9 msec latency (kernel 2.6.18-rt5) +26.9 (ng) DeicsOnze 0.4.5 + - add four level of quality +24.9 (ng) DeicsOnze 0.4.3 + - add monophony + - finish to clean SutulaBank.dei +23.9 (ng) DeicsOnze 0.4.2 + - add pitch envelope (but does not sound yet like DeicsOnze's) + - keep cleaning SutulaBank.dei +17.9 (ng) DeicsOnze 0.4.1 + - add optimization -O3, execution twice faster, but compilation longer + - add portamento + - started to clean SutulaBank.dei +5.9 (ws) + - midi import fixes + - change german documentation encoding to utf8 + - dont assume system encoding is isoLatin1, first patches + (ubuntu and others use utf8) +4.9 + (ws) + - remove html documentation and replace with *pdf version + (ng) + * DeicsOnze 0.4 + - 16 instances (one per channel) + - stereo + - font size config + - load pixmap background config + - lots of bugs corrected + * add wallpaper paper2.jpg + * add miditracker (not working yet) +3.9 (rj) + * added red line to the left of track to identify selected track + * various fixes, adding controllers etc +31.8 (ws) + * plugin racks can now hold an unlimited number of plugins +29.8 (ws) + * fixed drawing of y-magnified pianoroll canvas +28.8 (ws) + * added simple midi event dump plugin + * add midi plugin rack to midi port strips + * supply correct position information to midi plugins in midi input + strips + * fixed: playing synti from midi track +22.8 (rj) + * playing with midi plugins, one new example plugin: trigg +29.7 (ws) + * fixed drawing of waveform in wave track. Concurrent wave file + accesses from gui and rt task produced distortions ("crackling"). +25.7 (ng) DeicsOnze + * add panic button +28.6. (ws) + * updated README + * small fixes to build system +23.6. (ws) + * new project property dialog to edit the project comment +22.6. (ws) + * fix: get reference count right when undo "split part" + * implement: rename part + * fix loading of cloned midi parts +21.6. (ws) + * show controller name in controller canvas of midi editor + * fix save/restore of controller editors in midi editor + * fixed handling of midi channel selection flag +19.6. (ws) + * fixed: mono plugins on stereo tracks work only on one channel + * fixed drawing of cutted wave part +14.6. (ws) + * fix build of libawlplugin.so; works for "release" build +12.6. (ws) + * drag&drop of wave files with automatic sample rate conversion if + necessary +9.6. (ws) + * clicking on controller event in controller editor changed + controller value (fixed rounding error and start offset for drag) +8.6. + * implemented deviceId for MidiPort +3.6. (rj) + * fixed plugin drag&drop problem + * enabled tool shortcuts in arranger +1.6. (ws) + * fix crash when loading new song (old song has midi channels, new + song has not) + * drag/drop of projects in project dialog + * added Roland JV-1010 instrument definitions from f.fabre +29.5 (ws) + * the list of available software synthesizer in + edit->AddTrack->AddSoftSynth was always empty + * properly ignore close event in MusE::closeEvent() if the + user aborts operation +25.5 (ws) + * remove automation buttons from midi track in arranger +25.5 (rj) + * buckle up, bumpy road ahead + * partial support for MAC OS X + includes some build adjustments, more -fPIC and added + libraries, still builds on linux so I hope it's mostly ok. +20.5 (ws) + * new controller select dialog + * build libsynti.a with -fPIC for athlon64 systems +19.5 (ws) + * install libawlplugin.so to make LADSPA plugin guis work + * added project creation time and song len (in sec) to project file +18.5 (ws) + * added "Muse templates" and "User templates" to template list + in template dialog +15.5 (rj) + * Fixed hardcoded refs to qt in CMakeLists.txt +11.5 (ws) + * implemented new project handling; first docs in doc/man/de +3.5 (ws) + * moved build system to cmake + * moved repository to svn +23.4 (ws) + * fix obscure "off by one" bug in arranger ruler bar numbering +22.4 (ws) + * fixed software synthesizer regressions + * return zeroed buffer if audio input strip is "off" + * mixer strips in arranger: dont show vertical space used + for horizontal alignment in mixer view +21.4 (ws) + * fix "aux send" audio strips + * fixed performance problem when redrawing canvas in play + mode (using QRegion instead of QRect results in 100% cpu load) +20.4 (ws) + * remove StatusBar widget from musebase.ui +24.3 (aw) + * velocity of a pressed key on the virtual keyboard depends on x +12.1 (ws) + * dont allow movement of events in midi editors beyond left part + margin + * small fixes to midi editors: ctrl-click, ctrl+shift drag etc. + * restrict event moves in midi editors to positions >= 0 to avoid + crashes +6.2 (ws) + * added man files +5.2 (ws) + * new: "auto fill" parts +3.2 (ws) + * fix mute instrument in drum editor + * fix eraser tool in midi editors + * left/right buttons in arranger didn't work + * fix Del shortcut in arranger + * fix: shift click in time ruler added two marker +1.2 (ws) + * fix tempo entry in transport window + * add TempoEdit and TempoLabel to Qt designer widget lib + * misc fixes and updates to master editor + * corner widget for arranger + * various small painting fixes in controller editor + (aw) DeicsOnze + * add quick attack, release and modulation control + * add choose number of voices 1 to 64 + * add choose input channel number + * add save, save as default and load configuration + * fix note off bug (but maybe not completly) + * add initial load set path in configTab + * replace ARCH_ALIN by SutulaBank.dei + * delete redundant presets (2000 presets -> 1457 presets) +28.1 (ws) + * make tool selection in midi editors persistent + * add "draw tool" to arranger available tools + * add "draw tool" to drum editor available tools + * implement "draw tool" for controller editor +27.1 (ws) + * implement "single pitch velocity controller" for drum editor + * misc gui updates for pianoroll and drum editor +26.1 (ws) + * track "clone" function for wave tracks + * cut&past of event lists for drum editor and pianoroll editor + * add "delta mode" changes for drum editor + * fix selection mechanism in drum editor + * reclaim JACK time master; qjackctrl now shows bar/beat/tick and + tempo + * snap locator positioning to raster +25.1 (ws) + * replace FILE with QFile + * Xml class is now based on QTextStream + * fix functions in drumedit + * fix shortcuts in pianoroll and drumedit +24.1 (ws) + * lots of small usability fixes + * use Qt property system to organize save/restore of toplevel + properties +23.1 (ws) + * extend Part with editor properties + * make initial values of editors configurable + * removed GraphMidiEditor and ExtMidiEditor, replaced with MidiEditor + * removed MidiPart and WavePart, replaced with Part + * midi editor: events can only be created inside of current part +22.1 (ws) + * highlight area of current part in midi editors +21.1 (ws) + * remove unconnected wave files on exit +19.1 (ws) + * implement remove part with eraser tool in arranger + * implement local double buffering for TimeCanvas, which is + for unknown reason still faster than the Qt provided +18.1 (ws) + * much faster drawing with Qt::WA_PaintOnScreen widget flag + * New implementation of audioprefetch fifo, hopefully more + robust. Old implementation could not deal well with + fifo underflows. +17.1 (ws) + * make trackinfo and mixerstrip in arranger persistent + * fix display of cursor mark in ruler + * fix buffer management for audio input strips +16.1 (ws) + * overhaul audio routing & processing; this hopefully fixes + several routing problems +14.1 (ws) + * treat a midi recording as on undoable event + * compute the right realtime priorities for the midi thread + and the watchdog thread depending on JACK priority. Unfortunately + a lot of code had to be changed for this mainly because you can + get the JACK realtime priority only if the JACK client thread is + already running (e.g. on the first jack callback). + (rj) + * Added support for drag&drop of plugins in plugin-rack +13.1 (ws) + * implement mute buttons for drum editor instruments + * small gui alignments in arranger + * fix rubber tool in pianoroll editor and drum editor + * fix: arranger scissor tool + (rj) + * handle jack disconnection + * minor timer changes +12.1 (ws) + * fix filtering of MidiInput strips in Mixer + * a lot of small fixes and cleanups +11.1 (ws) + * more code for miditrack track info + * implement mixer strip and track info as dockable widgets + * fix background image for arranger canvas +10.1 (ws) + * grab focus when dragging in arranger ruler + * fix: attempt to draw part on empty arranger canvas + * implemented the Qt resource system; moved *.png files to + resource file (muse icon & splash screen) + * added two top level files: + - TODO + - Reference, should countain a list of implemented + features +9.1 (ws) + * fix qt4 detection in m4/qt.m4 +8.1 (ws) + * fix midi recording: added missing timestamps for event types other + than note on/off + * install libawlplugin.so at $(pkglibdir)/designer; let MusE look at + that path; to use QT Designer to generate new ladspa guis, + libawlplugin.so and libawlplugin_debug.so must be copied manually to + $QTDIR/plugins/designer + * drumeditor: highlight current instrument + * fix crash in drumeditor when opening controller panel + * treat double click on drumeditor instrument name as mouse click + (rj) + * Added plugin gui 1436, and changed plugin gui for 1050 and 2142 + * Added ability for gui-factory to iterate child objects for + frames +7.1 (ws) + * several fixes for drum editor + * when clicking on instrument name in drumeditor, play note similar + to pianoroll editor + * implement mouse wheel for tracklist in arranger and in TimeCanvas +6.1 (ws) + * compile awl lib with -fPIC. This allows linking with dll's (as the + deicsonze synth plugin) on 64 bit systems + (rj) + * fix for automation-data in song, now stored without using locale +4.1 (ws) + * more robust handling of audioprefetch for seeking while play +4.1 (aw) + * Qt4 port for DeicsOnze load presets + * add brightness controler in DeicsOnze +3.1 (rj) + * fixed search box in plugin dialog +2.1 (ws) + * fix recording of note off events when part does not start at zero +31.12 (ws) + * fixes for audio prefetch thread +30.12 (ws) + * automatic peak reset in mixer meter display; new config parameter + "peak hold time" + (aw) + * DeicsOnze Qt4 port completed +29.12 (ws) + * fix save/restore of track mute flag + * more drawing properties for Awl::Knob + * more widgets for libawlplugin.so: PanKnob, MidiPanKnob + * fix Awl::Knob drawing + (aw) + * DeicsOnze Qt4 popup menu port +27.12 (aw) + * Qt4 port for DeicsOnze in progress +26.12 (ws) + * add debug version libawlplugin_debug.so + * return of the libawlplugin.so for qt designer +21.12 (ws) + * pianpercu.deioroll: fixes for event editing +20.12 (ws) + * make dssi compilable again + * draw tick marks in meter slider +19.12 (ws) + * implement smooth nonlinear xmag for time canvas + * software synthesizer are playable again with pianoroll keyboard + * fix drawing of pianoroll events, when time axis is frames instead of + ticks + * fix drawing of clock ruler + * fix drawing of pianoroll event when using pencil tool + * remove obsolete givertcap and suid install options +18.12 (ws) + * fix reading sysex for eventList, this enables synti state restore + * changed recordFlag semantic for wave tracks: if recordFlag is on, + the channel meter shows the input signal + * allow record toggle only when in stop state +17.12 (ws) + * align recorded parts to arranger snap values + * fix wave display in arranger parts + * reorganized and simplified audio record flag handling, fixing some + audio recording bugs + * audio fifo: changed write fifo handling + * added "atomic" counter for x86_64 architecture; removing generic + mutex version which is not suitable for realtime operation +16.12 (ws) + * added new thread "audiowriteback" which is exclusive responsible for + writing all recorded audio data + * make all syntis compilable & loadable +15.12 (ws) + * fixed bug in audio write fifo handling: sometimes audio blocks were + not written to disk +12.12 (ws) + * removed obsolete "Toplevel" class +10.12 (ws) + * port master track (tempo track) editor to qt4 +7.12 (ws) + * fix "config midi file export" + * port "configure shortcut dialog" to qt4 + * arranger canvas background color and pixmap are configurable again +6.12 (ws) + * fix start help browser + * fix "about" box + * fix song loading: midi channel track sometimes appears twice + in arranger track list +5.12 (ws) + * midi sync: interpret mmc messages in slave mode + * move undo/redo processing to midi sequencer context to prevent + seg fault on "redo delete midi input" + * fix undo/redo delete track + * fix for dragging tracks in arranger track list + * fix for midi input: out routing + * second attempt to fix seg fault when removing midi input track +4.12 (ws) + * continue playing a track if record button for track is switched on + * do not reset track record buttons on stop + * fix seg fault when removing midi input track +2.12 (ws) + * start the watchdog thread with realTimePriority+1 to be more + set_rtlimit friendly + * changed default realTimePriority to 70 + * fix: controller subtracks for midi channel got lost on song load +29.11 (ws) + * make midi channel controller editable in midi track context + * port arranger part colors + * fix configuration of tracklist colors +28.11 (ws) + * proper align top labels in mixer strip + * with the help of trolltech, setting the label background does + work again + * more fiddling with geometry management in arranger mixer view +25.11 (ws) + * ia64 fix for fastlog.h + * misc changes to make valgrind happy + * some ia64 compilation fixes +24.11 (ws) + * found out how to create menu titles in qt4, added to mixer routing + menus +23.11 (ws) + * unify creating controller list in ctrl/ctrleditor.c + * enable tempo and timesig editing in transport + * new class TimeSignature in AL +21.11 (ws) + * ported "fluid" synth to qt4 + * cosmetic changes in arranger track list + * small fixes in drawing slider handle +20.11 (ws) + * fix: dont create two audio parts per recording +18.11 (ws) + * remember only path of last imported wave file in lastWavePath + * fixes for audio routing to jack +17.11 (ws) + * port midi input filter to qt4 + * extended info in midi channel info: show midi port values + * added template for missing midisynth trackinfo + * implement midi master volume (port volume) + * more easy slider dragging: you dont have to hit the slider knob + * when creating a new midi track, show also midi channel of default + route + * when creating a new midi track, add default routes to all midi + inputs + * in function "copy track": dont add default route to new midi track +16.11 (ws) + * reanimate midi metronom plugin + * if imported midifile is type GM/GS or XG, this overrides the + configured preferred instrument + * fix for arranger tracklist layout manager + * fix buildsystem for non debug build + * make routing more robust; dont crash if configured route does + not exist +15.11 (ws) + * fix Route()== operator + * fix: insert new tracks at right position + * new Function "copy track" in arranger tracklist context menu + * new config values for global settings to set preferences + for midi input and output. This preferences should allow to play + midi files without editing: + - create midi input strip when loading a midi file + - connect all input devices to created midi input strip + - connect all midi tracks to created input strip + - default midi input port + - default midi output port +14.11 (ws) + * arranger file list: switch back to normal state after drag & drop + operation + * fix crash when removing selected track in arranger + * added (non working) code for posix timer (exploring the + hi resolution timer patch). It looks that the timer code interferes + with QT-timers. +12.11 (ws) + * fix: sequencer running far too fast before first seek + * fix crash on song load: properly stop sequencer before loading + * controller view: show "current value line" (shown when automation + mode READ is off) even if there are no controller events + * fix: remove controller events with right button mouse click + * new: update wave parts while recording +11.11 (ws) + * removed obsolete cmdAddRecordedEvents() + * make controller track height in arranger persistent +10.11 (ws) + * Yamaha-S90.idf fix + * misc fixes to controller editing + * optimize event drawing in pianoroll editor + * first build muse/ctrl then muse/arranger + * pianoroll editor: while dragging an event, repaint of all following + events was missing +9.11 (ws) + * controller painting is now done in new class CtrlEditor + * ported midiplugin "metronom" to qt4 +8.11 (ml) + * fixed drawing of events in pianoroll - not all fishes in the pond yet however +8.11 (ws) + * start to merge controller handling in arranger and midieditor + * removed more widgets from TLWidget and TLSWidget simplifying the + widget tree; +7.11 (ws) + * removed obsolete files cswidget.h cswidget.cpp + * removed SFrame() class from arranger (sframe.cpp, sframe.h) +6.11 (ws) + * when reading arranger splitter sizes from *.med file, assure that + splitter size for mixer strip and info panel are not zero to avoid + weird geometry manager behaviour + * fix midi input filter + * fix midi plugin dialog + * fix a typo in part drag +5.11 (ws) + * fix: make sure to send all note offs at loop end + * fix on/off switch in track list + * fix initial state of mute buttons in mixer + * make controller number in arranger subtrack persistent + * fixed handling of patch groups in populatePatchPopup() + * fix problem with instrument patch name in TrackInfo + * make Splitter sizes in Arranger persistent + * do not send *.idf configured instrument initialization for every + channel, send only once for every midi port + * make midi channel controller available to midi track + * fix controller selection in arranger + * added "auto repeat" to forward and rewind buttons + * fix: update track list widget geometry after config change + * fix: "follow" function can also move canvas backwarts + * fix: also move slider when "follow" function decides to move canvas + * ConfigTrackList: connect OK and Cancel buttons +4.11 (ws) + * stage2 of qt4 port effort: all qt3 compatibility flags/libs are now + removed; a lot of functionality is commented out and will be + activated again in further updates +3.11 (ws) + * fix "bounce to track" (record button in audio out mixer strip) + * fix BigTime display +2.11 (ws) + * new: drag wave files to arranger canvas (into wave tracks) + * fix moving parts between tracks + * fix right mouse click context menu in arranger track list + * start track drag in arranger track list after QApplication::startDragDistance() + mouse move or QApplication::startDragTime() is elapsed + * added hack to get arbitrary background colors for QLabel widgets + * fix: disable ymag in arranger + * make follow mode actions checkable + * save followMode enum in global configuration file + * implemented follow mode in TimeCanvas() + * moved followMode flag from Song() to TimeCanvas() + * dont create MidiChannel tracks during song load + * replaced configtrackbase.ui3 by configtrackbase.ui +1.11 (ws) + * fix display of active key in pianoroll keyboard + * adjust song len at end of recording + * fixed geometry management of arranger track list + * fixed reading of midi parts in songfile + * fixed transport states handling + * fixed midi recording: save note velicity and controller position +31.10 (ws) + * new: update midi parts and events while recording + +12.10 (ws) + * many changes all over the code: + - eleminated old View->Canvas classes and replaced with + TimeCanvas + - TimeCanvas now has a button to switch between "metronom view" + (measure/beat/tick) and "clock view" (min/sec) + - update arranger and drum editor for metronom/clock view +24.09 (ws) + * fixes for pianoroll editor and drum editor +23.09 (ws) + * rename all *.ui files to *.ui3 to prepare for porting to native + qt4 + * some arranger fixes (PartCanvas/TimeCanvas) +22.9 (ws) + * new widget hierarchy for arranger + * the big port to qt4 (chunk 1) +12.9 + * moved muse.pro to top directory (ws) +21.9 + * added continuous update of _nextPlayEvent in order to not delete + events that should be played in future process-calls (ml) +18.9 + * plugin gui now updated in automation read mode (ml) +7.8 + * ported waveeditor fixes from 0.7 to head (ml) +6.8. + * fixed midioutput process erase event bug, added midiport output routing (ml) +29.7. + * Fixed autoconf bug, unable to build without fluidsynth.h (rj) + * Added raise() for several configuration dialogs that only open + one instance. (rj) +17.7. (ws) + * implemented direct routing from midi input port to synti + * implemented input routing button for synti mixer strip + * when creating software synti add default route from + first midi port output to synti midi input + * remove all routes when deleting software synthesizer +16.7. (ws) + * fixed bug in midi pipeline (loosing midi events) + * fixed routing to software synthesizer + * implemented meter display for MidiChannel and MidiPort + * fix MidiInPort initialization + * audio routing fix + * make functions in MempiHost virtual, so they can be acessed by midi + plugin with MempiHost class pointer + * remove awl dependency pitch2string() from midi plugin "transform" + * fixed initial _offset in CanvasWidget +14.7 + * Updated DeicsOnze to version 0.3 (aw) + - added change color config + - fixed bug load bank and prog number conflict + - added amplitude and pitch envelope graph + - fixed wrong oscWave in algo7-8 noticed by Dave Beanie + - fixed bug delete + - fixed bug selection when more than 20 presets + - added pics in the combo boxes for algorithm, OSC and LFO wave + - added save & load in the MusE project +13.7 + * Added patches from Daniel Kobras to correct error in listeditor and + erros in old html docs. (rj) + * Added uppercase filters to midi import (rj) +12.7 + * Added quick search to LADSPA plugin dialog (rj) +04.7. + * Added Idf files by Steve D for Roland FantomXR, SRX-02 and SRX-09 (rj) + +21.06. + - do not link plugins against libaw and libawl (ws) +14.6. + - increase EVENT_FIFO_SIZE from 32 to 128 + - default to not show midi tracks in mixer + - implement missing "showMidiSyntiPorts" tag when reading *.med files + - after loading a midi file (*.mid), dont overwrite with *.med xml file + when pressing "save", instead call "save as" + - implement midi metronom as "midi synthesizer" plugin + - midi synthesizer plugin interface +26.5. + * *.idf files now allow definition of drum maps for patches + overriding the default GM drum map (ws) +24.5. + * added Roland E-28 idf file from Jonathan Woithe (rj) +23.5. + * converted "midi input transform" into midi plugin (ws) +16.5. + * handle identical alsa midi port names (ws) + * Updated ladspa-gui for newer version of tap-reverb (rj) +12.5. + * new midi plugin infrastructure ("MEMPI") (ws) +6.5 + * added a second configurable mixer (ws) +4.5 + * removed non functional LADCCA support (ws) +3.5 + * removed settings->midiPorts dialog (ws) + * more updates to midi routing (ws) +1.5 + * simpledrums: fixed issue with clearing of sampledata, I hope (ml) +30.4 + * fluidsynth: bankno is saved to project, switched to hbank from lbank (ml) +29.4 + * major update: (ws) + * new midi routing code + * new track types for midi input and output + * Added Yamaha-PSR275 instrument file by Petr Mazanec (rj) +27.4 + * fixed patch-info issue in Fluidsynth (bug 1191214) (ml) +26.4 + * added framework for design&implementation manual (ws) +25.4 + * update mixer, when midi channel changes (ws) +18.4 + * removed file ltmain.sh; this file is now created by "libtoolize" + command in autogen.sh (ws) +17.4 + * Re-added handling of different ports than normal when using drumtracks (ml) +16.4 + * Fixed bug 1152441, filename can now have several dots (ml) + * Fixed bug 1183980: fluidsynth pitch controller wasn't given to MusE from the synth (ml) +28.3 + * Temporary fix for raster in the arranger, would be better to have unified handling for raster-values (ml) + * Fixed internationalization for shortcuts + misc shortcut work (ml) + * Added fix from 0.7-branch for midi import problem w overflow (ml) +27.3 + * Bugfix for mapping of drumtrack record data (ml) + * Fixed softsynth crackle bug, removed things that appears to be unused in MessSynthIF::getData (ml) +26.3 + * More controller-pane fixes + fixes for the editor settings (ml) +25.3 + * Some updates on the controller-pane (when used in the pianoroll) (ml) +12.3 + * Midi clock slave-sync improvements added from 0.7-branch (ml) +27.2 + * fix midi recording regression (wrong timestamp()) (ws) + * add hack to fst to enable newer wine libraries (ws) +26.2 + * Added Roland-SCD70.idf from Emiliano Grilli (rj) +12.2 + * DeicsOnze : numerous and names following the internal changes + * DeicsOnze : communication deicsonze<->deicsonzegui with midi events + * DeicsOnze : Communication with MusE for automation +09.2 + * fixed bug with sending start play w/ midi-clock (rj) +26.1 + * new cmd line option "-m MIDI only mode"; renamed options: + "-i trace midi input", "-o trace midi output" (ws) +21.1 + * DSSI synth plugin framework (ws) +20.1 + * fixed LADSPA default value calculation for ranges dependend + on LADSPA_HINT_SAMPLERATE (ws) +19.1 + * added automation for plugins (ws) +18.1 + * fixed track renaming in arranger (ws) + * some L&F changes in arranger window (ws) + * fixes in midi controller handling (ws) +17.1 + * DeicsOnze : category, subcategory, preset organized following + hbank, lbank, prog (aw) + * DeicsOnze : add popup menu to new, delete, load and save (aw) + * DeicsOnze : add load method for preset and subcategory (aw) +14.1 + * enable/disable controller objects in ChannelInfo and Mixer + according to automation status (ws) + * change name of config file to contain release version; this + allows for different MusE versions installed parallel (ws) + * added OK/Cancel to Midi Input Filter dialog (ws) + * remove DRUM track type. Drum tracks are now ordinary midi tracks + with toggle "useDrumTrack" switched on (ws) + * new "Monitor" button which resembles old "midiTrough" functionality. + Midi Input to a track is echoed to the track output device, if + "Monitor" is switched on. This is independent of the track record + status. + * patch from Erwin Scheuch-Heilig to allow for libtool >= 1.4 (ws) +13.1 + * removed defunct clip list editor (ws) + * removed redundant master list editor (ws) + * removed obsolet key.c key.h (ws) + * new libray al as base lib for awl (ws) + * renamed awl include files (ws) +12.1 + * added hex/dec switch to list editor (ws) + * added named SysEx strings to midi instrument definition file (idf) + for use with list editor (ws) + * removed midi "song type" (ws) +11.1 + * added updated muse.pro and muse_ru.ts from Alexandre Prokoudine (ws) +10.1 + * ZynAdd instrument def file added (ml) +7.1 + * add icons for selection operations in pianoroll editor (ws) + * update song len after manipulating part in arranger (ws) + * initialize horizontal magnification in arranger for new song (ws) + * use snap value when drawing new part in arranger (ws) + * more code for list editor (ws) +5.1 + * Changes to the list editor (ws) +2.1 + * Drumeditor static default init settings added for width, height, quant + raster (ml) + * Missing kbd shortcut initialization for undo+redo added to listedit (ml) + * Pianoroll static default init settings added for width, height, quant + raster (ml) + * Mastertrack listeditor updates ported from REL07 (ml) +25.12 + * shortcuts in arranger on their way back (ml) +23.12. + * fixed: controller panes in pianoroll editor are not resizable + after MusE restart anymore (ws) +22.12. + * unify controller editing in arranger and pianoroll window (ws) +18.12. + * changed backup logic: 1. write temp file + 2. rename name to backup name 3. rename temp file to name + Step 2 i only performed once per session/songfile. + * changed install path for from $prefix/share/muse/ to + $prefix/share/muse-0.8/ and from $prefix/lib/muse to + $prefix/lib/muse-0.8 to allow for parallel installation + of old and new MusE versions +17.12. + * added slider for vertical magnification to arranger track list (ws) + * added "off" button to arranger track list (ws) +15.12. + * fixed bug #1085738: synth name problems (ws) +14.12. + * horizontal position in arranger is now persistent (ws) + * Disable of fluidsynth works (rj) + * Added test for libsamplerate (rj) + * Reenabled --enable-suid-install (rj) + * Added alsa timer (not enabled yet) (rj) +12.12. + * sync again audio prefetch when changing loop markers (ws) +9.12 + * Now autogen.sh requires libtool = 1.4, 1.5 does not generate + softsynths correctly (rj) +4.12 + * Added another IDF from Christoph Eckert for Alesis QSR,QS7 and QS8 (rj) +1.12 + * fix import of type 0 midi files (ws) + * horizontal magnification in arranger is now persistent (ws) +30.11 + * fix midi controller handling (ws) + * Added IDF files from Christoph Eckert for Access Virus, + Hammond XB and Waldorf Microwave (rj) +24.11 + * deicsonze, updates from a-lin + * simpledrums, ladspa support and fx-handling added, channel on/off added - no gui + for loading effects yet though... (ml) +18.11 + * simpledrums, updates & fixes (ml) +14.11 + * simpledrums - init data and reinitialization of synth state + added (ml) +09.11 + * simpledrums resampling of samples added w libsamplerate (ml) +08.11 + * Added simpledrums synth (ml) +01.11 + * Added Alin Weiller's DeicsOnze synthesizer (ws) +26.10 + * loading soundfonts manually adds them to first available + channel (ml) + * added new shortcuts for proll + drumedit: ctrl+left/rightarrow + moves selected events along the timeline by rasterval (ml) +25.10 + * changed shortcut texts to use static const array values + to make it possible to translate them with Qt linguist (ml) + * readded saving of settings on open editors (ml) +23.10 + * updates and fixes on settings (ml) +21.10 + * added the new CVS splash screen! *muha* +11.10 + * changed awl lib for using c++ namespace (ws) + * misc updates for automation (ws) +27.9 + * new dialog to add/remove midi controller for + automation (ws) +25.9 + * added metronome volume to "Metronome Config" (ws) +18.9 + * Added Alesis-Ion.idf from Sebastian Gutsfeld (rj) + * unified midi & audio controller (ws) +15.9 + * applied patch from Sebastian Gutsfeld to enable midi NRPN14 and + RPN14 type controller (ws) + * simplified xml write interface (removed "level") (ws) +14.9 (ws) + * replaced xml reader by Qt dom functions + * complete redesign of arranger +07.09 + * added Quasimidi-Sirius.idf from Nicolas Jouanne + * added icon adapted by Emiliano Grilli ;-) +31.08 + * double click on empty effect slot popups "New Plugin" dialog (ws) + * updated README.ladspaguis + * fixed instrument patch name update in channel info (ws) + * added "F" button to configure "follow song" for every pianoroll + editor (ws) +30.08 + * remove input routing button from synthesizer mixer strip (ws) + * add configure options to show only certain track types in + mixer (ws) + * add "Add Soft Synth" to "CreateTrack" menu in arranger, mixer + and tracklist popup (ws) + * fixed "prefetch(): invalid write position" bug (ws) +28.08 (ws) + * set caption of main window when importing midi + * add midi file types to "load file" file dialog + * default for configure ladcca is now "no" + * default for configure suid install is now "no" + * use awl lib for customized plugin guis (Freeverb 1050.ui and + Tap Reverberator 2142.ui) + * create designer plugin for awl library + * extend awl lib for use with customized plugin guis: new + widgets AwlCheckBox and AwlComboBox +25.08 + * fixes for ladspa plugin logarithmic sliders (ws) + * midi track info is now synchronous with mixer; patch names + are working again (ws) + * calling jack process() once before starting jack prevents + zombification on startup (warming up caches?) (ws) +24.08 + * config settings saved for open editors reimplemented (ml) + * automatically assign a free midi port to every new + created software synthesizer (ws) + * midi port configuration can now be reached by right clicking + in port column of arranger tracklist (ws) + * toggling soft synthesizer gui in arranger tracklist moved to the + track name context menu (right click) (ws) + * fixed crash on undo "delete vsti track" (ws) +23.08 + * doubleclick on volume slider sets value to "off" (ws) + * implement toggle behaviour for marker list (ws) + * fix crash in list editor - create new controller (ws) + * fix crash when vsti synti has more outputs than mixer strip has + channels (ws) + * increase required JACK version to 0.98.0 (ws) +21.08 + * native GUIs for VST plugins (ws) +20.08 + * VST plugins (ws) +19.08 + * new infrastructure for VST plugins (ws) +16.08 + * fix midi import: tick values of tempo/signature + and marker events are now properly converted to internal + resolution (ws) + * fix record flag in midi mixer (ws) + * fix awl setEnabled(); disable some more widgets in audio + strip in "off" state (ws) + * fixed solo & mute for midi in mixer (ws) + * fixed midi activity display in mixer (ws) + * new awl widgets: AwlMeterSlider(), AwlMidiMeterSlider() (ws) + * in automation mode "AutoOff" recorded midi controller volume, pan, + reverb send, chorus send and aux send are not send to midi + output. (ws) +14.08 + * fixes to midi mixer (ws) + * fixed project path in file dialogs when MusE has just been started (rj) +13.08 + * new configuration flag "useJackFreewheel" Settings->globalSettings + (ws) + * fix bounce operation (ws) +12.08 + * fix stereo/mono switching in audio mixer (ws) + * fixed "prefetch: NO BUFFER" warning during recording (ws) + * midi mixer + awl library fixes (ws) +09.08 + * Added automatic rec-enabling of selected tracks in a hopefully + intelligent way (rj) +02.08 + * stored editorsettings now saved (ml) +31.07 + * more updates on midieditor settings (ml) +30.07 + * added default route to output track (ws) +28.07 + * optimized mixer gui handling (ws) + * added new audio widget library awl, new look for mixer (ws) + * fixed core on creating new aux track; bug caused by introduction + of new audio metronome (ws) +27.07 + * first step against new handling of settings for midieditors w respect to parts (ml) +21.07 + * new feature: audio metronome (ws) + * reorganized Synth & SynthI classes (ws) +20.07 + * updated muse/muse.pro and share/locale files (ws) + * Added missing include to vst.cpp (rj) +18.07 + ======================================== + * 0.7.0 tagged ! (rj) + ======================================== + * output fifo warning only if cmd line "-D" switch is set (ws) +17.07 + * fixed separate handling of recorded events vs played events (ml) +15.07. + * do not start the disk helper thread in realtime mode (ws) + * check for JACK thread really running in SCHED_FIFO mode, if not + (as on my system with kernel 2.6.7 and nptl) try to set it. (ws) + * removed some exit() and abort() calls to react somewhat more gracefully to + to internal errors (ws) +14.07. + * fixed -V (no vst instruments) option (ws) + * do not save midi controller information in ~/.MusE file (ws) + * another try to fix midi loop handling: Loop len now should be + sample accurat. The loop is shifted left at most one audio + cycle to meet the requirement of loop end matching audio cycle + end. When JACK transport is in "JackTransportStarting" mode, + MusE internally continues rolling, so there are no repeated + cycles anymore (ws) + * Added message boxes when alsa and jack fails to initialize (rj) + * Disabled solobuttons in mixer (rj) +13.07. + * added new icons for the mixer solo/mute (js) + * added refresh for the solo/mute icons (rj) + * added icons for drum-/listeditor in the arranger on rightclick (js) +12.07. + * fixed typo in loop handling (ws) + * added patch from Daniel Schmidt to be able to configure + MusE without X being available (rj) + * Removed geometry data etc from templates (rj) +11.07. + * disabled midi mtc sync as its not implemented; disabled + midi sync slave modes as they are currently not working (ws) + * enabled sending midi clock (ws) +28.06. + * splitted removeTrack()/insertTrack() into three phases: pre realtime + actions - realtime actions - post realtime actions; this allows + to move memory allocations out of realtime task (ws) + * changed undo/redo of tracks: synti instances are now really deleted on + delete track (ws) + * jack connection changes with qjackctrl are now recognized by MusE (ws) +27.06. + * applied patch from John Check to add a panic button to pianoroll + editor (ws) +28.06. + ======================================== + * 0.7.0pre4 tagged - one more (rj) + ======================================== +26.06. + * Some packaging additions, icon, spec files. + (only mdk at the moment) (rj) +25.06. + * fixed midi timing bug (ws) +19.06. + * don't catch SIGCHLD, this interferes with vstInit() (ws) + * "givertcap" was not found when not in current directory (ws) + * impl. "all notes off" for organ synti (ws) +18.06. + * disabled buttons for not implemented functions (ws) + * added muse/wave/solo button in the trackinfo ;-) (js) +15.06. + * enabled some midi sync code (ws) +14.09. + * dialogs for change of drummap when converting miditrack to drumtrack + or changing port. redirection of keyevents from tlist to canvas (ml) +13.09. + * save/restore parameter for VST synthesizer (ws) + * automatic trackchange in tracklist when selecting parts in arranger (ml) + * added modify velocity to drumeditor + bugfix for modify velocity (ml) + * save/restore parameter for VST synthesizer (ws) +12.09. + * fixed backup command when filename contains spaces (ws) + * fixed midi step recording (ws) + * fixed bug in arranger: pressing enter after renaming part started + editor (ws) +09.06. + * added support for VST/windows software synthesizer (ws) + * delayed loading for software synthesizer: syntis are loaded, when + they are instantiated the first time (ws) +08.06. + * fixed --enable-rtcap configuration option (ws) +07.06. + * increased "dimension" in memory.h to make MusE work on 64 bit + architectures as requested from Simone Piunno (ws) + * added aux send for syntis (ws) + * added info box which explains why when MusE gets kicked by Jack (rj) +06.06 + * added instrument definition for roland MC-505 from Wim VW (ws) +05.06 + * Added backup creating save patch from Levi D.Burton (rj) +01.06 + * transpose + grid patch added (alin weiller) + * fixed moving events in drum editor (ws) + * added new config option: disable splash screen (ws) +31.05 + * fixed crash in pianoroll when using shortcuts for selecting + quant values when quant was set to 1 (no quant) (ws) + * fixed a crash when moving an event to tick positions < 0 (ws) + * fixed: selecting a note in pianoroll editor and changing a value + with note-info toolbar crashed MusE (ws) + * bugfix arranger: fix for selecting part -> ignore global accelerators (ml) + * bugfix for arranger selection of part above/below when using keyboard (ml) + * added pianoroll velocity variation patch (alin weiller) +30.05 + * hopefully a fix for drum in & outmap-issues in midi.cpp (ml) +25.05. + * shortcuts for "arrowing around" in arranger added (ml) + * 0.7.0pre3 tagged - the last!!! I hope (rj) +24.05. + * fixed a crash on new -> load template (ws) + * FluidSynth: added support for drumpatches (equiv to midichan 10 patches) (ml) +23.05. + * exit if rtc open() fails (ws) + * changed default start behaviour to open default.med template (rj) +18.05. + * added many new/redone icons (js) + * changed aboutbox.ui for qt 3.2 compatibility + * changed app.cpp (added the icons) +17.07. + * added stereo/mono icons to mixer (ws) + * added a first version of an icon for muse and adapted aboutbox to the same. + (graphics by Joachim Schiele) (rj) + * Improved handling of browser for help system (rj) +16.07. + * Added FluidSynth fix for ignoring preset selection of soundfonts that don't exist (ml) + * fix midi import of pitch bend events (ws) + * fix pitch bend handling (ws) + * enlarge PitchLabel width so that 14 bit controller values can be + displayed without clipping (ws) +15.07. + * removed some debug messages (ws) +12.07. + * show one more measure in pianoroll and drum editor (ws) + * renamed controller name "Hold1" to "Sustain" in *idf files (ws) +11.07. + * New try at fixing help browser on all systems (rj) +10.07. + * updated muse.pro and translation sources (share/locacle/*.ts) (ws) + * list editor: implemented input mode for program change messages (ws) +09.07. + * fixed "edit - delete track" hangs MusE - bug (ws) +07.07. + * fixed routing for stereo LADSPA plugins used in mono strips (ws) + * midi import: first resolve note on/of then transform ticks to internal + resolution (ws) +06.06. + * set global automation default to "true", set midi track automation to + "read" (ws) + * enable auxSend chorusSend and reverbSend in midi mixer strip if + corresponding controllers are added (ws) + * init automationType for midi tracks (ws) + * fixed gm.idf instrument definition file (ws) + * implemented "Add New Controller" in list editor / edit controller (ws) + * save current midi controller values in *.med file (ws) +05.05. + * updated roland-XP30.idf instrument definition (Sverre H. Huseby) +04.05. + * 0.7.0pre2 tagged (rj) +03.05. + * fixed a cut/glue bug probably introduced at 24.04 (ws) + * fixed compilation of musewidgetsplugin.so (ws) + * changed splash screen handling, used QTimer instead of background thread (ws) +02.05. + * Added first version of splash screen (rj) +01.05. + * Updated LADCCA support to (almost) usable condition (rj) +30.04. + * Added zoom scaling in drum editor, same as piano roll (rj) +29.04. + * Disabled Random Rhythm Generator (rj) + * Took a stab at fixing up shortcuts (rj) + * Fixed crash bug when clicking Channel Info and there was no info (rj) +28.04. + * Added single key shortcuts for edit tools (rj) + * added shortcut for Marker editor (rj) + * and fixed some shortcut inconsistencies (rj) +27.04. + * update marker list on tempo change (ws) + * allow adding markers from the ruler with shift-click (rj) +26.04. + * added missing header file(s) (ws) +25.04. + * fixed aux processing: stereo -> mono aux (ws) + * metronom now sends proper note off events (ws) +24.04. + * deactivated clip list editor. (ws) + * after loading of template, treat current project as "untitled" (ws) + * removed data structure "Clip". All information are now in WaveEvent; + this simplifies the structure a lot and makes reference counting more + reliable. Unfortunatly this also means a new incompatible *.med file + version. (ws) + * changed reference counting of Event class; simplified and more reliable (ws) +21.04. + * fixed some synchronisation issues between mixer and trackinfo window (ws) + * fix update of mixer after removal of aux strip (ws) +20.04. + * Added shortcuts to bug reporting tool, homepage, + and updated AboutBox (rj) +19.04. + * fixed QT version check in m4/qt.m4 (ws) +18.04. + * add samplerate initialization to fluidsynth (ws) + * compilation fix: added missing include in fluid.cpp (ws) +17.04. + * File->New crashed when current project had selected audio track (ws) + +15.04. + * 0.7.0pre1 * tagged for prerelease (rj) + * arranger: fast repeated pastes now works more reliable (no more stacked + parts) (ws) + * Thread(): crashed, when poll() returned more than one ready file descriptor + and the corresponding callback routine manipulates the list + of file descriptors. This happened timing dependend and only in real time + mode. (ws) + * fixed Fifo() get() (ws) + * small extension in soft synth interface (Mess()): added return values + for processEvent() +14.4. + * fixed pan range for midi mixer strips + * renaming soft synth instances + save/restore should now work + * fixed fluid "gui" + * changed CTRL_VAL_UNKNONW as it conflicts with valid + values for CTRL_PROGRAM (ws) +13.4. + * dont crash on missing LADSPA plugin (ws) + * set metronome precount default to "false". Precount is not + implemented. (ws) + * fixed crash when toggling stereo or pre buttons in mixer (ws) + * synchronize channel number in mixer/arranger-tracklist (ws) + * changed all float printf("%f") to equivalent qt-string + routines; dont localize decimal point so that the + strings can be properly parsed; this should fix some + save/restore problems in localized MusE versions (ws) +12.4 + - arranger/portinfo: fix update of instrument names (ws) + - fluid synth: enable drumsets (ws) + - fixed crash on inserting meta/ctrl/aftertouch in list + editor (ws) + - fixed crash in arranger when moving mouse+Alt after + removing a track (ws) +11.4 - fixed initialization of Pan after load of new song (ws) + - fixed graphical master track editor (ws) + - fixed Qt-Version check (ws) + - small qt3.2 compatibility changes (string->toInt() conversion) (ws) +10.4 - made plugin selector remember the previous selection type (rj) +4.4 - drag & drop import of wave files (rj) + - drag & drop import of mid files (rj) +3.4 - reactivated vam synthesizer + - fixed initialization bug in s1 synthesizer demo code (ws) + - added another vertical line in drum editor +2.4 - integrated new icons (ws) + - increased required QT-Version to 3.2 in configure.ac (ws) +1.4 - added vertikal line in track list as suggested by Joachim Schiele + - fixed synchronisation issue between mixer and tracklist (changing midi channel can + add/remove mixer strip) (ws) + - Changed pan range to -1 +1 (rj) + - added new icons from Joachim Schiele (not integrated) (ws) + - Support for showing only selected plugins in plugin dialog (rj) +31.3 - Added various compile fixes needed by debian (rj) +29.3 - Updated mc303 instrument file from Conrad Berh�ster (rj) +25.3 - bugfix for pos increase/decrease shortcut (ml) +24.3 - bugfix for mtscale redraw area when window is scrolled left + - bugfix for arranger shortcuts (ml) +23.3 - added position seek to drumeditor + arranger. + - increase/decrease pitch of selected notes in drumeditor with ctrl+up/down + - added quantize shortcut keys (1-8) in drumeditor (ml) +21.3 - added shortcut for pitch increase and decrease of sel notes, in pianoroll (Ctrl+Up/Down) + - moved shortcut handling for pianoroll + drumeditor to EventCanvas + - leftmost note selected when opening proll/drumeditor (ml) +16.3 - added shortcut for iterative quantize in p-roll. added shortcuts for + selection of notes in p-roll and drumeditor: left/right arrows moves + selection, holding down shift adds to current selection (ml) + - bugfix, moved blocking of signals on startup to exclude loading of project since + a bunch of widgets didn't get updated (ml) +12.3 - bugfix for menu initialization of "add track"-menu shortcuts (ml) + - added some regular 7-bit controllers to Fluidsynth (ml) +6.3 - Fluidsynti chorus operational again, controlled by NRPNs and + automatic gui-update here too. (ml) + - Fluidsynti reverb restored. Reverb is now controlled by NRPNs. + Automatic updates of gui when controller-changes occur. Unloading + of soundfonts restored. (ml) +4.3 - Fluidsynti playback restored. Gain restored. (ml) +3.3 - Fluidsynti major rewrite, not fully functioning though (ml) + - fixed crash on reload song with open mixer + - fixed crash on saving *.med: dont save aux values for channels + which have no aux send (like aux strips) + - remove empty record wav files on MusE exit + - fixed crash on undo controller editing (ws) +28.2 - more icons from Joachim Schiele (ws) + - fixed crash with mouse wheel events in arranger track list + - fixed some routing related crashes +25.2 - show mixer strip in trackinfo window for audio tracks (ws) +24.2 - compatibility patch to read midi tracks from old 1.0 *.med + files (ws) + - implemented quick input routing from jack (ws) + - added some new icons form Joachim Schiele (ws) +23.2 - implemented quick output routing to jack; some routing + fixes (ws) +22.2 - added instrument map for yamaha PSR 530 keyboard from + Lalit Chhabra (ml) + - misc compilation fixes from Joost Yervante (ws) +21.2 - added drum map for Yamaha DX200 from Joost Yervante Damad (ws) + - "quick routing" buttons in mixer (ws) +17.2 - install musewidgetsplugin.so in PREFIX/lib/muse/qtplugins/designer + and add this path to qt library path in application (ws) +16.2 - trackinfo geometry management changes (ws) +14.2 - added volume controller to organ, so that the organ + synthesizer volume can be controlled in the mixer midi strip (ws) +13.2 + - optimized "organ" software synthesizer: precomputed frequency + tables, integer envelope generator based on bresenham algorithm; + added "velocity" switch; (ws) + - changed VAM synthesizer for new interface (ws) + +12.2 - controller movements in software synthesizer gui's are now + send as midi events to MusE and can be recorded/replayed/edited + (currently only working for "organ" synti) (ws) + - changed software synth interface (again) (ws) + +11.2 - expanded trackInfo by default (rj) + - added some graphics to trackInfo :) (rj) + - changed "White" to "Default" (still white though) (rj) + - fixed trackInfo updating for tracks without their own trackInfo (rj) + - added lousy fix to update trackInfo when a track is deleted. + it's lousy because it's updating the trackInfo even though the + removed track wasn't highlighted, can place you in a tight spot + at times. I added it anyway because it removes a crash problem. + a better fix would be preferable. (rj) + - fixed mouse wheel functionality on knobs and sliders in mixer. (rj) + +8.2 - propagate track name changes to mixer (ws) + - enforce unique track name when user renames tracks (ws) + - implement one to many audio routing (ws) + - fixed bug in route dialog refresh after inserting new strip (ws) + - fixed aux send volume (ws) + +4.2 - added missing activate() to LADSPA plugin initialisation. + This fixes crashes with some plugins (plugins who use activate() + to allocate memory) (ws) + -fixed user definable LADSPA guis using QT-designer; added another + example *.ui file for "Toms'Audio Plugins" TAP-Reverberator (ws) +1.2 + - logarithmic values were initially wrong for spin boxes in + LADSPA guis (ws) + - On-the-fly-change of shortcuts in Listeditor, Drumeditor. Added selection + shortcuts to Drumeditor (ML) + - Added on-the-fly-change for shortcuts in pianoroll (connected to + configChanged-signal) (ML) + +30.1 save geometry of LADSPA plugin guis; + fixed missing mixer refresh after adding an auxSend strip (ws) +29.1 mixer strip automation types OFF, READ, WRITE and TOUCH + implemented; automated controller so far: volume, pan (ws) +27.1 more code for automation; + better reference counting for audio Clip; Clips with zero + reference are not saved in *.med file anymore (ws) +26.1 - removed obsolete driver/midirawin* (ws) +25.1 - removed obsolete raw midi devices & serial midi; all devices + are now handled by ALSA (ws) +24.1 - changed "Configure" to "Settings"; changed "Display" to "View" + for better standard compliance (ws) +23.1 - enabled controller editing in midi list editor (ws) +19.1 - added new dir/lib libsynti to collect common code + for all software synthesizer (ws) +18.1 - ported VAM software synthesizer to new MESS interface + (not complete) (ws) + - events send from synth gui are not echoed back anymore +17.1 - drumedit: changed "keyFilter" to "drumInstrument"; use + it to handle drum instrument specific NRPN controllers (as defined + in XG standard (ws) + - move drum instrument select status from drumMap to drum editor. + This allows for independent selections in different drum + editors. (ws) + - extend midi controller definitions in *.idf files for + drum instrument specific NRPN controllers (controller number + contains pitch value) (ws) + +16.1 - Added small fix to editctrlbase.ui to make it compile (RJ) + - Updated various revision info in README (RJ) + +15.1 - Corrected appearance of buttons in Metronome window (FN) + +9.1 + - "record" button in midi ChannelInfo; pressing this button + inserts changes in hbank/lbank/program/pan/volume as + controller events into song + - pianoroll editor: new "multi select mode": If more than one + event is selected, the event info spinboxes are set to zero. + Entered Values are interpreted as offsets and added to all + selected events. + - some fixes and performance enhancements to "MidiTransformator" (ws) + - fixed saving of drum tracks (ws) +8.1 + - changed arranger shortcuts + shortcut-configurator to use configChanged; all arranger menu shortcuts + redefinable on-the-fly. most menu options configurable (ML) + - now possible to toggle mixer window (ML) + - changed Ctrl+A in arranger to be used for select all instead of "Save As" for the sake of uniformity (ML) +5.1 + - new config (Config->GlobalSettings) option: + - start with empty song + - start with last song + - start with configured init song +2.1 + - smf type 0 export (ws) +31.12 + - midi export; fixes to midi controller handling (ws) +30.12 + - added dynamic shortcuts for all menu options in the arranger (will hopefully + work fine when config is loaded before menus are built) (ML) + - added check and prevention of conflicting shortcut sequences inside + respective categories, global shortcuts and misc "reserved" + shortcuts (ML) + - capture dialog grabs/releases keyboard (ML) +26.12 + - faster update of mixer (ws) +22.12 + - added dummy audio driver; this permits running MusE + without suid root and without RT priority when started + with "-d" option; this is for debugging & to get + normal core dumps (ws) +20.12 + - Reverb + chorus grayout-problem in fluidsynthgui removed. Some QT-designer files changed to 3.2 (ML) + - More shortcut updates: Added a dialog for capturing shortcuts (ML) +18.12 (ws) + - "declicked" s1 demo synthesizer + - make organ controller values persistent + - fixed integer overflow in organ synti controller values +17.12 (ws) + - new: mouse wheel events for track list values + - track colors in tracklist configurable in "appearance settings" + - more configuration options in "appearance settings" + part colors are now configurable + - ~/.MusE now contains only configuration data; this + settings are not replicated in *.med files any more +10.12 + - more shortcut stuff in the dummy shortcut config window (ML) + - new "load song" option: load all/load song data only (omit config data) (ws) + - new "File" function: load template; this function initializes current + song with another song (template) + - new option while importing a midi file: replace/add to project +9.12 + - More shurtcut stuff + dummy config dialog (ML) +2.12 + - Bugfixes in pianoroll for insert at current location and seek before + beginning of song (ML) + - fixed crash on "New" or loading new project +(ws) - "bounce to track" now works "faster than realtime" with JACK + freewheel mode (JACK 0.91.0 cvs required) + - mixer automation for gain & pan; some basic functions + - preparation for adding imported midifile to current project +1.12 + - More shortcut preparations (ML) +27.11 + - Added mouse wheel handling for knobs and sliders + shift modifier available for extreme slow motion. (RJ) +25.11 + - drummapping for recorded events (not heard on record playback echo yet) (ML) + - misc updates& fixes for track handling (ws) + - removed activity column in tracklist; will be replaced by + mixer meter display (ws) + - midi record flag can be set again, enabling midi recording +24.11 + - Added first steps for uniform handling of shortcuts (ML) +23.11 + - some mixer updates(ws) +22.11 + - fixed software synth handling; looping is only possible + on segment boundaries (ws) +20.11 + - Bugfix for drummaps and keyfilter in drumeditor (ML) + - apply drum map when importing midi (ws) + - retain track ordering across save/load (ws) + - wave files in the project directory are stored with + relative path, all others now with absolute path (ws) +16.11 + - Map outputted drumnotes according to drumMap index (Mathias Lundgren) + +14.11. (ws) + - JACK transport interface implemented + - finally removed ALSA driver; JACK now required; + - default to RT-mode on start (-R option is removed); -d (debug) + starts without RT + +12.11. (ws): + - removed midi mixer; first code to integrate midi mixer + into audio mixer; mixer moved to pulldown menu "Display" + - mixer strips are handled like tracks in arranger (prepare + for automation) + - track type cannot changed anymore in arranger track list; + also removed double click creation of tracks which makes + no sense anymore + - integrated "atomic" patches from Daniel Kobras +09.11. - audio routing fixes; mono/stereo switching for input/output + strips should now work; audio recording to tracks (ws) +08.11. - aux send audio mixer strips (ws) + - Arrowing up and down update in arranger (Mathias Lundgren) +07.11. - Fluidsynth compile problem w. Debian/qt/stl/gcc fixed (Mathias Lundgren) + - "Double undo"-bug fixed in Pianoroll (Mathias Lundgren) +04.11. - many changes to audio mixer and audio routing; implement + framework for new audio features (ws) +31.10. + - museProject set correctly when loading song on startup (RJ) + - save dialog added when adding first wave track (RJ) + - load/save of wave files handled with relative paths (to project) (RJ) + - Updated swedish translation (Robert Jonsson) + - Merged softsynth and midiconfig dialogs as in old tree(Robert Jonsson) + - Some museProject issues(Robert Jonsson) + - updated new midi controller implementation (ws) + +29.10. (ws) + - update soft synthesizer organ/fluid/fluidsynth; extent MESS + interface + - update from 0.6.2 (Mathias Lundgren): + - Various drumeditor-related updates including: Horizontal splitter + offset stored. Fixed length command added (Alt+L). Bugfix for selection + of events inside/outside locators. Initialization of drummap doesn't overwrite + entries loaded from project file. + - Alt+P sets locators to selected notes in PianoRoll and DrumEditor + - CTRL+Leftclick on an item in the Arranger, PianoRoll or DrumEditor selects all + parts/notes on the same track/same pitch + - Pressing Enter in the Arranger now opens the appropriate editor for the + part (Mathias Lundgren) + - The midithread now maps keys on a drumtrack according to the drummap. + - Cursor up/down (Mathias Lundgren) + - currently selected drum (Mathias Lundgren) + - fixed compilation error in givertcap.c (andrew) + - removed iiwu soft synth temporarily from compilation until + ported to new "mess" interface + - added missing file ltmain.sh + - create new cvs at sourceforge.net +------------- + - removed obsolete score editor + - changed midi controller handling + - new process structure + - redesign of "mess" software synthesizer; removed alsa + - new midifile import/export + - fork from cvs; new file structure +0.6.2(omuse): + - added first version of (incomplete) french translation from + - removed stk based soft synthesizer + share/rawwaves + - removed sound font + - fixed bug in midi recording when recording starts with a note off; + also the recorded part len was miscomputed when the recording ends with + a pressed key (missing note off event) + - added new allocator for SEventList and MPEventList (memory.cpp, memory.h) + to make sure the midi RT-thread does not call malloc/new/free/delete + - added misc build patches from Daniel Kobras + - make selection of alsa audio device an command line argument + (-A xxx default: hw:0) + - fixed "edit->select->allInLoop" + - fixed track height after renaming track +0.6.1: + - fixed "Cakewalk Style" display in arranger + - added russian translation from Alexandre Prokoudinek + - arranger: tracks are now independent vertical resizable + - arranger: implement part rename from popup menu + - arranger: show part name in parts in addition to events + - audio mixer: interpret min slider position as "off" + - audio mixer: added value entry for pan (Robert Jonsson) + - audio: some routing fixes + - audio mixer: enable data entry for slider label + - ladspa plugin gui: replaced value label with data entry + to allow numerical entry of parameter values + - pianoroll: added undo/redo to edit menu + accel. keys + - ctrl editor: implemented changing (painting) of pitch + events + - added macros for big endian machines in midi.h + - added spain translation (Albert Gonzales) +0.6.0: + - added swedish translations (Robert Jonsson) + - fixed editing of pitch events in list editor + - fixed crash in score editor + - check tempo entry values; dont allow invalid values which could + crash MusE + - fixed not functioning "Abort" button in MidiTransform dialog + - fixed Ctrl-editing in drum editor + - fixed "Group" audio routing + - fixed editing of pitch values in parts not beginning at tick zero + - fixed "unexpected EOF" after dragging of events in midieditor + - fixed cut&paste in midieditor + - implemented deleting multiple selected parts in arranger with Del key + - fixed audio pan pots in mono->stereo conversion + - changed iiwu to fluidsynth (thanks to Helio Chissini de Castro) + - new popupmenu: click with right button in empty tracklist + - LADSPA plugin guis are generated at runtime from qt-designer *.ui + (xml-)files; testfile is "freeverb.ui" for freeverb plugin; + - added "Slider"+"DoubleLabel" to musewidgetsplugin to make widgets + available in QT-Designer + - renamed poseditplugin.so to musewidgetsplugin.so + - fixed midi ctrl editor + - sparate sync device into txSyncDevice and rxSyncDevice. RxSyncDevice + can be configured to "all". + - use macros for atomically inc/dec count in lockfree + Fifo implementation +0.6.0pre8: + - prepared for internationalization: + - created muse.pro + - removed all implicit type conversions char* -> QString + - added several missing translations tr() + - Part text is now colored depending on background (FN) + - fixed "bounce to file" fifo handling + - disable transport buttons in slave mode + - calculate correct size for new part after midi recording + - fixed crash when reloading song while audio mixer is open + - implemented "bypass" function for LADSPA plugin gui's + - changed obsolete qt header file names + - implemented external midi instrument definition files (*.idf) + (examples are in */share/muse/instruments) + - implemented moving plugins up/down in effect rack + - fixed: renaming wave track switched track to mono + - implemented LADSPA "LOGARYTHMIC" and "INT" hints + - disable record button for tracks with no input routed to + - implemented LADSPA "TOGGLED" port as QCheckBox in plugin gui + - changed algorithm for zeroing denormalized floats in freeverb + plugin; now it works again for gcc3.x and optimization flags + turned on +0.6.0pre7: + - prevent creation of empty wave files when switching the + record button in audio mixer on/off; wave files are only + preserved when you actually record something into it + - made plugin guis persistent + - fixed scissor operation on wave parts + - added missing code for "bounce to file" + - fixed "bounce to track" + - removed/changed obsolete qt code + - update for current iiwu cvs + - fixed initialisation bug in wave editor + - dont link iiwu libs static + - (bh) added ladcca support + - fixed midifile export + - arranger, pianoroll editor, drum editor: tool popup menu + with right mouse button click + - update iiwu to current cvs version + - implement trackinfo patch names for iiwu + - fixed "appearance settings" + - added keyboard shortcut "Del" to delete events in pianoroll + and drum editor + - "Asterisk" key in keypad now toggles record mode +0.6.0pre6: + - fixed len of new created event in pianoroll editor + - extend font selection in "apearance settings" + - Added shortcuts for "Select All", "Unselect All" and "Invert + Selection" in PianoRoll editor (FN) + - Fixed Event coloring and shortcut ("e") key (FN) +0.6.0pre5: + - fixed midi seek & tempo map + - implemented global tempo change +0.6.0pre4: + - fixed tempo handling + - pianoroll editor/drum editor: fixed changing of note position + - transport: some geometry/font changes; time signature can now + be changed by mouse wheel + - fixed glue/scissor tool + - catch sigchld signal again so we know when a softsynth gui exits + +0.6.0pre3 + - fixed drawing of drum parts in drum editor + - on reading *.med files reject events which dont't fit into part (more robust + handling of defective med files) + - remove also synth gui when removing synth + - implemented some of Frank Neumann's usability suggestions: + - a "Copy Part" sets the current location marker after the marked part + - "Del" removes part if a part is selected instead of whole track + - new Keyboard Accelerator "C" toggles metronome click + - removed channel info for selected notes in pianoroll editor and + drum editor + - navigate between parts with left/right buttons in arranger window + - implemented changing note position for selected note in "note info" toolbar + - fixed: changing "loop" flag in transport window does not change "loop" flag in + other windows + - call pcm_wait() in alsa driver with sane values + - fixed: after load song seq did not run with rtc + - filenames for audio recording to tracks are now generated + automatically; every recording goes into separate file + - (bh) updated build system to use automake 1.7 + - fixe Midi->DefineController "Cancel" + - new function: Midi->DefineController load+replace and load+merge + - fixed MFile write: close() was missing; this fixes a.o. saving of + midi controller sets + - make organ synth aware of project directory for saving presets + - fixed load/restore presets for LADSPA plugins + - changed organ default values for envelope generator + - more fixes for alsa driver (less xrun errors) + - lokal allokator for soft syth midi events implemented + - enable sample rates != 44100 for iiwu (JACK has 48000 default) + - cleanup soft synth instantiation: call alsaScanMidiPorts only one time + - small audio buffer handling optimizations + - some thread cleanups + - fixed audio mixer geometry handling + - another fix for RT thread handling in iiwu + - fixed recording of pitch events (not tested) + - load iiwu sound fonts in a background helper thread to + avoid being thrown out by JACK + - fixed RT thread handling; now muse+iiwu+jack works + - honour LADSPA default hints for controller ports + - removed some restrictions for LADSPA plugins + - fixed tempo entry in transport window + - added high priority watchdog process to avoid system freezes + - updated "iiwu" synth to use peter hanappes libiiwusynth + iiwu now remembers last used sound font + - fixed cut&paste for midi parts + - fixed cut function for midi parts +0.6.0pre2: + - audio mixer: reset meter on mute + - changed input routing to allow monitoring while recording + - removed superfluous second init() call for soft syntis + - fixes for mono/stereo conversion + - ensure all wave files are properly closed on exit + - fixed segfault on second cliplist open + - fixed wave part split function + - fixed ALSA/JACK configuration bug + - event time positions are again stored as absolute time positions + to enhance compatibility with older "*.med" files + - changed panic button: instead of sending lots of note off + events only "all sound off" controller events are send for all + ports/channels + - fixed error on importing midi files when there are more + than one track assigned to a midi channel + - found another memory corruption bug in sysex handling + - fixed precount in metronome + - space key again stops play/record + - fixed stop/play in transport window + - prohibit change of mono/stereo for input strip + - convert mono/stereo on the fly for wave parts + - fixed crash when pressing play in empty song + - audio loop fixed + - _midiThruFlag not always initialized + +0.6.0pre1: + - attached midi mixer again + - fixed metronome: loop mode, measure/beat configurable + - moved part colorisation into part popup menu + - added global midi pitch shifter in addition to track pitch shift; this + allows for simple pitch transforming the whole song. Drum tracks are not + pitch shifted. + - fixed fatal error in soft synth handling resulting in sporadic + core dumps + - removed sf directory (sound file stuff) and replaced + it with the real thing: libsndfile 1.0.0 + - removed bogus kde stuff: kde.h onlyqt.h desk.h + - JACK Audio support + - AUDIO & ALSA now required + - fixed memory corruption with sysex events + - simplified organ soft synth parameter handling + - removed illegal controller message optimizations + - implementation of "panic" button + - first instantiated synti did'nt show up in port list + - size of resized drum and pianoroll editor windows are now remembered + - fixed crash when configuring null audio device + - removing soft synth instance did not stop midi thread; alsa client + was not removed + - (bh) lots of buid system changes and general cleanups + - (bh) removed the use of the UICBASES make variable; .ui files can + now be added straight into _SOURCES make variables with the new + SUFFIXES support in automake 1.6 + - (bh) upped minimum automake version to 1.6 + - (bh) removed the use of the MOCBASES make variable; header files that + need to be run through moc are now detected automatically + - (bh) new iiwusynth softsynth + - (bh) removed support for oss and alsa 0.5 + - clone parts implemented (also called "alias parts" or "ghost parts") + (dragging part with Alt-Key pressed in opposit to Shift Key which + produces a normal copy); + needed many internal changes; hope not to much is broken + - mastertrack: new spin widget for changing midi signature + - fixed midi thread initialization after loading new file + - stopped sequencer before loading new file; this should fix occational + core dumps on New/Load/ImportMidi + - some cleanups with file load/save operations + - Config->MidiPorts->otherRaw (device name pulldown): enabled OpenFile + Button for DevicePath field: At least current Qt can now handle devices. + - implemented: + - structure pulldown menu: + - global split + - global cut (mastertrack cut not implem.) + - global insert (without m.t.) + - implemented part mute + - added pitch transposition to pianoroll widget keyboard (Tim Westbrock) + - Save(As) behavior patch from Tim Westbrock +0.5.3: + - updated stk library to version 4.0; adapted stk synthesizer + - added SECURITY advice from J�n Nettingsmeier + - several compilation & portability fixes from Takashi Iwai + - fixed keyboard entry in pianoroll editor + - midi now runs synchronous with audio + - midi record time stamps now again synchronous to play position + - fixed trackinfo geometry (hopefully) + - pianoroll: fixed endless loop if record was pressed + without any mididevices configured (reported by Ola Andersson) + - default to english help if help for $LANG not available + (Ola Andersson) + - detect misconfigured ALSA system (Ola Andersson) + - updated demo app "rasen.med" to current xml format +0.5.2: + - fixed: rtc clock resolution settings in Config->GlobalSettings + - fixed: crash on second start of Edit->Marker + - more consequent implementation of -a (no audio) command + line parameter: no softsynth and LADSPA plugin loading; + disable audio menu + - fixed sending spurious midi controller settings on startup + when track info is active + - first code for "random rhythm generator" port from JAZZ++ + - fixed start offset of midi recording + - pianoroll editor: fixed selection update + - appearance setting "font size" now persistent + - does not crash anymore if no ALSA system found. (ALSA is still + needed to compile MusE) + - fixed: multiple recordings: clear events form first recording + in record buffer + - fixed: crash when removing last track with open + trackinfo + - (bh) added beginnings of alsa midi patchbay + - changed suid handling: now MusE runs with normal user uid + and switches only to root uid for some special operations + - fixed mixdown file output + - fixed lock on startup when wave file was missing + - arranger: open tracktype pulldown with left mouse click + (was opened on right click) + - arranger: don't scale pixmap symbols + - added share/rawwaves to cvs repository (needed by stk synthi) + - changed software synthesizer interface "mess": moved more + common synth functionality to "mess.c"; changed synti's to new + interface + - removed obsolete "short name" in controller type dialog + - CtrlCanvas: always draw location marker on top of grid + - fixed: TrackInfo: velocity + - fixed: alsa midi: "pitch change" interpreted as "channel aftertouch" + - fixed some midi controller bugs + - implemented new parameter save/restore interface for soft + synthesizer (applied to "organ") + - (ws) fixed lost controller events on midi import + - (ws) fixed crash when removing soft synth in use + - (ws) appearanceSettings: changing font size now works better + - (Bob) files now include "config.h" instead of relying on -DALSA, + -DALSACVS, -DINSTDIR and -DAUDIO + - (Bob) Added 'delete preset' button to vam's gui and made it + remember what preset file it loaded + - Mess: added new class MessMono() which implements some + monophone synthesizer features. This is used in the + simple demo synthi s1 + - if you try to exit MusE and abort this process, MusE was + left in an unusable state + - loop end was not calculated correct; event at loop end + was played + - muse now again stops at end of song in play mode +0.5.1: + - fixed crash: SaveConfig after Config->SoftSynth->AddSoftSynth + - changed default audioSegmentSize from 256 to 512 + - eliminated message: "input type 66 not handled" + - SoftSynth gui was startet with uid root + - save project: warn if file open fails + - removed trace message "unrecognized event 42" (Sensing Midi Event + from external keyboard). Anyway MusE does not handle midi sensing + events. + - changed geometry for trackInfo panel + - more code for 14 bit controller events + - install "rawwaves" for stk synti into right place preventing + crash on start + - fixed another crash when load soft synth configuration + - fixed Midi Position Label (was -1 beat/measure off) + - fixed problem with lost note off events + - generate "note on" events with velocity zero instead of + "note off" events +0.5.0: + - pianoroll editor: caption is changed when current part + changes + - new software synthesizer adapted from: + STK: A ToolKit of Audio Synthesis Classes and Instruments in C++ + Version 3.2 + By Perry R. Cook, 1995-2000 + and Gary P. Scavone, 1997-2000. + http://www-ccrma.stanford.edu/software/stk/ + - added presets to "Organ" software synthesizer + - changed midi routing for software synthesizer: + - controller changes from gui can be recorded + - new midi thread implementation + - speaker button in pianoroll editor implemented: + if on events are played if clicked + - new Menu: Midi->InputPlugins + - demo plugin "Transpose" + - moved Config->MidiRemote to Midi->InputPlugins + - moved Config->MidiInputFilter to Midi->InputPlugins + - moved Config->MidiInputTransform to Midi->InputPlugins + - as usual some bug fixes of old and new bugs + - master editor: fixed: locator bars sometimes invisible + - master editor: new tempo spin box to change tempo at current + position +0.4.16: + - new software synthesizer adapted: + "Organ - Additive Organ Synthesizer Voice" from David A. Bartold + - new simple demo Synthesizer S1 + - remove the hardcoded qt path "/usr/qt3" (0.4.15) + - fixed many bugs + - new: implemented line draw tool in controller editor +0.4.15: + - qt3.0 now required + - many gui/widget changes + - fixed segfault when pasting wave parts + - changed (again) default magnification in wave-view + - implemented prefetch thread for playing audio files + - fixed: iiwu did not play with ALSA 0.6 + - fixed: handle audio underruns for ALSA 0.6 +0.4.14: + - some makefile and compilation changes + - audio play: noise between audioparts during playback + - dont stop at end of song when "loop" is active + - default magnification in wave-view set to 1 + - fixed a audio route initialization bug + - new metronome configuration: precount configuration added +0.4.13: + - avoid "disconnect error" on startup + - wave view: y magnification now persistent + - small gui enhancements to reduce flicker + - make install: now creates gui dir + - implemented 8 bit wave input format + - fixed another source of audio crashes +0.4.12: + - audio play: mixing buffer was only partly cleared resulting + in random noise + - fixed: core after removing soft synth instance + - set default master volume to 1 + - fixed some audio routing bugs + - drumedit: added missing display update after drum map loading + - drumedit: fixed: when loading external drum map, velocity values + got zero + - drumedit: fixed: core some time after loading external drum map +0.4.11: + - iiwu: in GM-mode dontt allow drum channel program changes; + also ignore bank select messages + - set GM-Mode resets synth + - some changes in drum channel handling + - substantial changes in audio implementation + - reimplemented audio configuration + - miditransform: val2 transforms fixed +0.4.10: + - iiwu: implemented sustain, ctrl:expression + - iiwu: changed sync audio/midi; this fixes some timing issues + - iiwu: fixed: core when loading new sound font while playing + - split RT thread into separate midi & audio thread + - fixed some bugs: crash on midi recording + - some new functions in pianoroll editor + - added/integrated Tommi Ilmonens "givertcap" + - iiwu: some fixes for ALSA 0.9beta + - arranger: voice name popup in channel info works again +0.4.9: + - fixed some memory leaks + - before loading a new song all synthesizer instances are + now removed + - reorganized installation: + - there is a toplevel installation directory + (default /usr/muse); the environment variable MUSE + points to this directory + - architecture dependent files go into + $(MUSE)/lib, architecture independent files + into $(MUSE)/share + - MidiSync: MC ticks are now also send in stop mode + (if configured) + - after "Start" is send, sequencer starts on next + midi clock tick + - iiwu: fixed core dump on save if no soundfont loaded + - iiwu: high resolution buffer size independent midi event + processing +0.4.8: + - faster display updates + - some changes for better compatibility with different + environments (compiler, lib) + - fixes for ALSA 0.5.11 + - fixed core dump while removing soft synth instance + - fixed some bugs with iiwu+gui + - fixed: TransportWindow: tempochanges while masterflag is off + - fixed: all tempochanges are now saved in songfile +0.4.7: + - ALSA 0.5.11 compiles again + - MESSS gui interface, first try: + -every midi instrument can have an associated + GUI (currently only impl. for MESSS soft synths). + The GUI is startet as a separate process connected + to the midi instrument. The gui sends midi commands + (sysex) to stdout. This midi data stream is connected + to the midi instrument port. + - test implem. can load sound fonts into iiwu synthi + - fixed a bug in loading big sound fonts + - waveedit: waveform display works again + - some iiwu changes +0.4.6: + - completed midi input architecture: every midi track has now + assigned input port+channel. Channel can be 1-16 or "all". + This allows for routing of different midi channels to + different tracks while recording. + - changed max number of midi ports from 8 to 16 + - fixed serveral bugs iiwu software synthesizer + - fixed compilation problems with some ALSA versions + - fixed: changing track name changed record flag + - fixed: remove midi editor if associated track is removed + - fixed: initial state of solo button in arranger + - fixed: hard to reproduce core while deleting track + - new command line option to set real time priority + - max number of midi ports is now 16 + - audio recording from master to file now works: + - configure Audio->MixdownFile (only wave/16bit) + - switch on record button in audio mixer master strip + - play + - fixed: graphic master editor: missing display refresh + after signature change + - changed midiThruFlag: removed from Config->MidiPorts; + "midi thru" now is associated with a track, if set all input + to that track is echoet to track port/channel + +0.4.5: + MESSS: (MusE Experimental Software Synthesizer interface Spec): + A software synthesizer is implemented as a dynamic + loadable library (*.so file) with two interfaces to the + outside world: + + - a LADSPA interface for audio output + - a midi sequencer interface registered to ALSA + + MusE searches all available synths and presents a list + in Config->SoftSynthesizer. To use a synthesizer you have + to create an instance. Several instances of an synt can be + created and used. Every instance creates + + a) an alsa midi sequencer port (look at Config->MidiPorts) + b) a new strip in the audio mixer + + As a demo i ported a stripped down version of the iiwu + software synthesizer (http://www.iiwu.org) to MusE. + Setup info is in README.softsynth + +0.4.4: + - fixed cakewalk style event display in arranger + - track comments are handled as 0xf text meta events in + midi files + - fixed: follow song in pianoroll/drumedit (daniel mack) + - fixed: refresh in list editor + - implemented 14 Bit controller in list editor + - new patch form Takashi Iwai enables MusE to compile + with ALSA 0.9.0beta5 and current cvs version + +0.4.3: + - new: Config->MidiInputTransform + - new: comments for tracks: click with right button on track + name in arrange window + - fixed: score editor sometimes eats up all memory on start; + machine was unusable for some minutes until muse crashes + - fixed some other smaller bugs + - patch from Takashi Iwai for latest (cvs-) ALSA + - fixed: score postscript generation (printer & preview output) + +0.4.2: + - added few missing display updates (bugs introduced + with 0.4.1 drawing optimizations) + - pianoroll editor: + - fixed: edit->DeleteEvents + - drum editor: + - implemented: edit->DeleteEvents + - use different cursor shapes while using + Glue- Cut- and Rubber tools +0.4.1: + - some small Changes for compiling MusE with gcc 3.0 + - track info values (transposition, velocity etc) + are now applied when exporting to midi file + - better geometry management for ctrl panel + - pianoroll editor / drum editor now allow for more than + one ctrl panel + - new: load/save midi controller sets + - automatic creation of midi controller sets on + midi import + - new: active(used) midi controllers for current + parts in editor window are now marked in controller list + - fixed: parts in open editors are not restored correctly + - many drawing optimizations; scrolling is now much + faster/smoother +0.4.0: + - input configurable for every track + (you can record from more than one midi input device + to different tracks) + - you have to switch on the "record enable" flag for + every track you want to record to + - Note "h" is now called "b" unless you set + the environment variable "LANGUAGE" to "de" + - Changes from Daniel Mack: + - bigtime window now shows hour:minute:sec:frame + - configurable snap grid for arranger + - configurable font size + - again "tick underflow" + +0.3.20: + - "bigtime" widget from Daniel Mack + - fixed global accelerator keys f11/f12 (toggle transport & + bigtime window) + - fixed: score editor: try placing notes in the right margin of the + last row gave core dump + - score editor: different cursor shapes + - new try on missing midi sync ticks (producing "tick underflow" + trace messages) + - score editor: some small enhancements +0.3.19: + - several small bugfixes from Daniel Mack + - fixed "make install" + - if you have trouble compiling ALSA audio: + change "AUDIO = yes" to "AUDIO = no" in make.inc + - some fixes/enhancements from Brian K: + - fixed: score editor: no more "EVENT not found" during subsequent + edits of a selected note + - scrubbing with rubber tool in score editor + - new part appearance option +0.3.18: + - fixed: Export Midifile +0.3.17: + - simple audio recording + - midi sync slave: received "start" did not reset pos to tick 0 + - fixed several bugs in screen update and synchronisation between + different midi editors + - new: Configure->Appearance dialog from Daniel Mack +0.3.16: + - "follow song" now works in both directions + - MidiTransformator: implemented missing "Copy" and "Extract" functions + - fixed: reset sustain at stop only for channels which really had sustain + set + - fixed several bugs in midi sync code; needs more testing + - received "set song position" from alsa midi driver now + handled in sync slave mode + - transport buttons are now disabled in "external midi + sync" mode + - fixed: do not send midi "start" "stop" "continue" etc. as sync slave + - fixed: several small bugs i cannot remember +0.3.15: + - fixed: some typos in "MidiTransformator" + - fixed: core at end of midi recording from external + sequencer as sync slave + - replaced midi "continue" message with "start" + when running as midi sync master + known bug: midi clock output only if seq plays, + should be send always even if seq stops + not implemented: cannot change tempo as sync slave + +0.3.14: + - fixed: core: typo in "undo add track" + - fixed: core: "undo remove event" + - selection of events is now a global attribute: if you select + an event in an editor, the same event is selected in all + open editors + - new: Midi Transformator (look at edit->MidiTransform) + (not all operators and operations are implemented yet) +0.3.13: + - fixed: TimeScale was wrong when using signature changes + - fixed: enforce left marker <= right marker + - new: mono wave tracks + - more usable LADSPA plugins to play with + - several small changes/bug fixes +0.3.12: + - fixed: synchronisation of tempo/signature changes with sequencer rt-thread + - fixed: track parameter were added again and again in loop mode + - new: tempo/signature changes undo/redo + - new: midi "transpose" function from Daniel Mack + (Arranger: edit->midi->transpose) +0.3.11: + - fixed: fixed serious bug in wave file handling + - simple audio play with ALSA 0.9.x + - fixed: editing events -> core (introduced in 0.3.10) +0.3.10: + - fixed: core while deleting controller events + - new: extended configuration of raw (serial) midi interfaces + - fixed: some memory leaks + - changed for ALSA 0.9.0 beta2 +0.3.9: + - some smaller fixes + - fixed: core: missing MidiController() Initialization + - fixed: pressing another mouse button while "drawing" an event + in a canvas with left mouse button pressed gives core +0.3.8: + - fixed: correct update of midi port table on song change + - CtrlEditor: controllers can(must) now be configured + - List Editor: corrected handling of meta/sysex strings + - changed: combined pitch high/low to single value ranging + from -8192 +8191; editable with controller editor + - ALSA 0.9.0beta1 works for midi; as far as i tested it, this + alsa version has no more problems with OSS raw midi emulation + - new: colored activity display in arranger (Daniel Mack) + - new: context sensitive extensions to "right mouse click + pulldown menues" for arranger parts (Daniel Mack) + - new: gui prototypes for extendend configuration of raw midi + devices and audio mixdown file selection + - fixed: quirks with OSS midi devices configuration +0.3.7: + - start porting to ALSA 0.6.0 cvs version + - fixed: option -M produces midi output trace for alsa midi + - fixed: pianoroll and drum editor now accept input focus + and then honour some keyboard shortcuts + - fixed: score editor: core when inserting small rests + - new: "ruler" for pianoroll, drum editor and part editor + - fixed: midi recording: event len always 1 tick (bug introduced + in 0.3.6) + - midi port config: show only available raw midi devices + - fixed: tempomap/tempo save/restore + - fixed: initialize master button to saved value + - some smaller changes: + - midi recording: new parts begin at record start instead + of first event + - missing note offs are insertet virtually at record end + - recording takes place on selected track - selected part + and not on selected part if on different track +0.3.6: + - fixed: markerList: click in list -> core + - fixed: stop at end of song only if not recording + - fixed: events of zero length crash the sequencer + - fixed: missing note off events for metronome + - fixed: gui: changing port/channel in trackinfo updates tracklist + - new: midi recording & loop +0.3.5: + - fixed: midi recording with alsa was broken + - fixed: mastertrack: -> core + - fixed: rename track -> rename part -> core + - fixed: help browser: back function + - fixed: score: entered lyrics are saved again + - fixed: score->staffSettings: tracklist + - fixed: score->enterNotes wrong snap position +0.3.4: + - fixed: some bugs & quirks + - new: implemented pianoroll->edit->deleteEvents + +0.3.3: + - new: MusE now stops at end of song if in PLAY mode + - fixed: core if muse was started without song name and + there was no ".musePrj" file in current directory + - new: on popular request: "RewindToStart" button + - fixed: changing devices while playing + - fixed: arranger: could not scroll to the end of song + - fixed: song lenght on midi import + - fixed: fatal error in handling "note off" events + - new: "sustain" is reset on stop + +0.3.2: + - fixed: part editing: endo delete, glue etc. + - fixed: option -m (trace midi input) works again + - fixed: midi input filter: could not toggle channel 1 button + - fixed: midi mixer + - fixed: midi recording into part: part length adjusted if events + recorded past end of part + - fixed: MusE initialisation failed if there is no ".musePrj" + file in current directory! + +0.3.1: + - step 2 of internal reorganization + - fixed: score: lyrics are now saved again + - fixed: some quirks with lost track markers + - new: Option -L locks sequencer memory + - fixed: recording from serial midi (raw oss & korg tohost) + - fixed: several smaller bugs & quirks + +0.3.0: + - fixed: pianoroll editor: entering new events -> core + - new: drum editor click on instrument name "plays" + instrument + - fixed: changing the channel of a track now changes also + the channel of all events in that track + - massive changes for audio/wave integration: + - start of audio mixer + - audio routing + +0.2.12: + - fixed: wave files/tracks/parts: calculation of tick<->time; + it should be possible again to import/play simple waves + - fixed: funny things happend when muting all audio tracks + - fixed: core if no active record track + - new: Rob Naccarato started with documentation; press + in MusE and have a look + +0.2.11: + - fixed: metronome + - fixed: initial state of "click" transport button + - fixed: midi thru: + if midi thru is switched on, all received events are + echoed to the port/channel associated to the currently + selected track, regardless of the input port/channel. + Track parameters as pitch shift, velocity compression etc. + are applied before echoing the event. + - _not_ fixed: alsa midi driver: strange sysex behaviour +0.2.10: + - fixed: parameter change in midi trackinfo + - fixed: some errors in *.med file handling + - fixed: midi export + - fixed: midi events are now played according to priority: + - channel priority: 10,1,2,3,4,5,6,7,8,9,11,12,13,14,15,16 + - note off before note on +0.2.9: + - fixed: typo in seq.c destroyed timing of 0.2.8 + - fixed: importing audio files + - fixed: writing *med files + - fixed: wave form display in arranger + - fixed: core on click in arranger "no track area " with pencil tool +0.2.8: + - fixed: oss midi devices now work agin + - reorganized midi event dispatcher + - fixed: pitchbend for midialsa (Xavier) +0.2.7: + - midi driver reorganization in preparation + for better ALSA sequencer integration; soundcard synth + work again + - some fixes +0.2.6: + DrumEditor overhaul: + - fixed: reading drum maps + - changed: exporting drum maps now writes the whole map + - fixed: device popup: ...invalid menu item + - new: instruments can now be moved + - fixed: changing A-Note/E-Note did not show effect + - changed: small x-offset in event canvas allows better placement of + events at pos 1.1.0 + - new: instrument names can be edited (double click instrument name) + - new: some drum maps + - fixed: update() missing after selection change in canvas + - fixed: len of new inserted drum events was quant-value, should be + default len from drum map + Alsa Midi Driver: + - changed (soundcard synth does not work :-( ) +0.2.5: + - fixed: session management for list editor + - new: list editor: hex entry in meta event dialog + - fixed: Midi: "GS Reset" button aktually did a "GM Reset" + - fixed: Midi: "GS Reset" on Song Start was always combined with "GM Reset" + - fixed: Arranger: copy/paste produced core + - fixed: Arranger: removed some (not working) key accelerators + - new: Drag file from KDE fm and Drop on arranger partlist + - removed bogus midi archiv + - some major code reorganizations in preparation for audio integration + resulting in new errors and *.med file incompatibilities; + - fixed: "cannot delete busy part" even if part is not busy + - fixed: arranger/progname.c: bad instrument name table caused segfault + (Tim Mann) + - fixed: score/layout.c: could not enter A# (Gilles Fillipini) +0.2.4: + - fixed: removed silly warning: Cannot find translation... + (translations are not (yet) enabled) + - fixed: trackMarker->destroy TrackMarker->create track -> core + - new: integration of track markers in arranger + - export/import SMF-Marker as Meta Type 6 + - changed: src/makefiles new arranged + - fixed: score editor: too many rests + - fixed: core if you try to insert note outside of staves +0.2.3: + - MidiSyncConfig: extSync synchronized with button in transport + window + - audio: try oss audio device /dev/dsp in addition to /dev/sound/dsp + - changed: column expand logic in arranger tracklist + - new: KDE2.2: define HAVE_KDE in make.inc to compile a + KDE version of MusE (experimental) + - new: realtime recording of Midi SysEx Events + - changed: better LADSPA plugin handling + - fixed: Pianoroll: Color Events: RGB parameter out of range + - changed: canvas: moving objects + - fixed: AudioMasterMixer produced core after second invocation + - new: track markers +0.2.2: + - switched to QT2.2 + - fixed: Transport: "Master" button initialization + - fixed: session management for partlist in midi editors; + (new *.med xml files are probably incompatible + - fixed: cut&paste now works for parts on drum tracks + - fixed: cannot delete busy Parts any more + - fixed: honour LADSPA_PATH environment variable + - fixed: TransportWindow stays on top and is manageable + (testet with KDE2 beta4) + - fixed: arranger: column order is now recorded in + .med file + - fixed: sometimes under obscure circumstances MusE crashed + while opening an midi editor + - fixed: several typos/errors in *.med file reading/writing + - new: list editor: insert midi events (incl. sysex & meta) + double click on list entry to open editor to modify + values + - new: MTC/MMC Slave: + Configured as slave you can synchronize MusE + from external devices using Midi Time Code. + Midi Clock Master: + Configured as master MusE can control external + sequencers + Hooks for MTC/MMC Master and MidiClock slave. + - fixed: score: ScoreConfig::setTracklist() missing "clear" + - new: score: odd rest values implemented +0.2.1: + - new: Arranger: move (midi) parts between applications: + - cut/copy part(s) to global clipboard + - paste part(s) from global clipboard to arranger + - drag parts with middle mouse button (experimental) + - new: Pianoroll: move events between applications: + - cut/copy events to global clipboard + - paste events from global clipboard to arranger + - drag events with middle mouse button + - fixed: only write audio if there are audio tracks + - fixed: PianorollEditor: moving multiple selected events + (thanks to Chris Wakelin) + - fixed: commented out unused/missing "color.xpm" + - fixed: partlist changed to multimap<> +0.2.0: + - fixed: another error in OSS midi driver which results in + "bad file descriptor" aborts + - fixed: MidiFilter - RecordFilter/ThruFilter + - new: Master Part of Audio Mixer: + - Audio Level Meter + - LADSPA Host with + - automatic generated user interface + - presets store/load + - new: LADSPA "Freeverb" plugin for audio master + - new: Drum Editor + - load/save drum maps + - drawing reorganized + - new: Pianoroll Editor Functions: + - configurable event colors (none/pitch/velocity) + - configurable function ranges (apply functions to + all/loop/marked events) + - selection functions (all/none/loop/invert) + - switch between different parts in editor ("ghost events") + - PencilTool: Control+LeftMouseButton prevents + accidental creation of events + - PointerTool: Control+LeftMouseButton restricts + to horizontal or vertical move +0.1.10: + - new: MidiExport: some configurable Parameter for exported + Standard Midi File (SMF) + - new: configurable Midi Record/Thru Filter for midi + realtime recording + - fixed: time signature changes in score editor + - fixed: "midi bar scale" is updated on time signature + changes + - fixed: event sorting in "list mastertrack editor" +0.1.9: + - fixed: tempo changes during play + - fixed: "follow event" in graphical mastertrack editor + - fixed: mastertrack list: dynamic content update if song changed + - fixed: OSS midi serial output was broken +0.1.8: + - bug: scaling in graphical mastertrack editor + - bug: reduce value of MAX_TICK to prevent overflow in scaling + - bug: pianoroll editor: length quantization + - bug: midi import: timing broken; bug introduced in 0.1.6 + - feature: editing of time signature in graphical mastertrack +0.1.7: + - bug: typo for 't'-kb accelerator in pianoroll-editor + - bug: quant values < 1/64 are not supported-> assertion bug + for keyboard accelerator >=8 in pianoroll editor + - pianoroll: new feature: step recording - midi input: + - press "shift"+ midiKey to enter chords + (if you enter same note again, it's deleted) + - press "ctrl" + midiKey to continue last note + - pianoroll: new menu function: quantize pos+len + - quantize configuration dialog: added flag for default len quantization + "whats this" help text +0.1.6: + - bug: exported midifiles had random "division" timing parameter + - bug: core dump on midi record start + - feature: keyboard accelerators in pianoroll editor: + '1'-'9' '.' and 't' set quant & snap values + +0.1.5: + - MusE now works again without RTC (Real Time Clock) Device + (but much reduced timing accuracy) + - new Debug Options -m -M: MidiDump for input and output + - global keyboard accelerators: + spacebar: while play/record: STOP + while stop: Goto left mark + while on left mark: Goto Pos 0 + Enter: start play + Insert: Stop + "/": Cycle on/off + "*": Record on + - Midi Step Recording: implemented external midi keyboard as + recording source (new "midi input" toggle button in pianoroll editor) +0.1.4: + Audio + ============== + - simple audio play (ALSA & OSS) + - stubs for cliplist Editor, audio recording + - AudioMixer master volume + - bug fixes for wave viewer + + Synthesizer + ============== + - first part of framework for realtime software synthesizer + driver/synthis, s1/*; + +0.1.3: + Score Editor: + ============== + - print preview button (gv) + - postscript default resolution is 72dpi and not 75dpi + - configurable overall scale for printer output + - simple beams + + Misc: + ============== + - bug: path handling for project file: project files are now + saved in the correct directory + - bug: canvas initial scaling + - bug: core if configured device didnt exists + - bug: ctrl editor produced values > 127 + - feature: Arranger: Parts are now displayed with a horizontal offset + - feature: Arranger: added save/restore for some configuration values + - feature: Midi Recording: track parameter like Transposition are now + applied before loop through + - feature: "Thru" flag in Configure->MidiDevices now implemented + - feature: Midi Remote Control: control sequencer stop/play/record/rewind + with configurable note events + - bug: typo in score/layout.c:split() caused core + +0.1.2: + - Score: + - add lyrics entry + - changed note head for 4/4 + - changed positioning of 2/4 and 4/4 notes + - ties can now span systems + - tie connected notes are selected as one note + - page settings, margins handling corrected + - configurable fonts for score editor page layout +0.1.1: + - master: scale changed + - no more core when selecting the score editor without a selected + part to edit + - time signature scale in master track + - master track: function tempo edit + - new popup menu in arranger / part canvas + - makefile: "make depend" target + - new: alsa raw midi interface + - improved score editor: + - split system (piano left&right hand) + - multi stave systems + - symbols + - lasso selection + - dynamics symbol palette + - window position of all toplevel windows is now remembered + correctly + - bug fixes & code cleanups + +0.0.10: + - removed obsolete file.c file.h + - separated midi archive + - removed unused widgets/wtscale.* + - removed unused widgets/dial.* + - midis with Meta Event Type 6 produced core + - removed '\n' chars from windows caption + - new setBg(QColor) method for class View + - broken Ctrl-Editor fixed + - Pencil Cursor now shown for Pencil Tool in Ctrl-Editor + - Mute Indicator changed to red dot + - added CtrlEditor to DrumEditor + - process session info in xml songfile + - more work on mastertrack + - start ScoreEditor and moving the mouse on canvas (producing + mouseMoveEvents) before exposure of QLineEdit (time & pitch + in toolbar) produced core on QLineEdit->setText(xx) + - in continuous scroll mode position marker updated correctly +0.0.9: + - xml like configuration and song file + - new midi mixer, shows only active midi channels + - bug: metronom configuration: channel&port numbers + - bug fixes +0.0.8: + - new: quantize function + - new: wave tracks: new classes: WaveFile Clip; + load wave file; expand song file structure + first try on wave editor; + - logarithmic magnify + - rework of View & Canvas Classes, resulting in much + faster scrolling +0.0.7: + - fatal error: use of uninitialized device +0.0.6: + - more diagnostics in file functions + - new: can load and save *.gz and *.bz2 files + - new function: send local off to instruments + - bug fixes in pianoroll step recording + - bug fix: "follow song" save and restore + - bug fix: in importing midi files: calculating parts + - bug fix: metronome -> core + - new configuration options for parts + +0.0.5: + - new: midi activity display in tracklist + - new: patch selector in channel info; shows midi instrument + categories + - new: insert & delete Controller Values in Ctrl-Editor + - some minor bugs corrected + - nasty bug in Song::nextEvents(), which prevents simple + midi songs played correctly + +0.0.4: + - implemented: forward & rewind buttons + - implemented: drum edit: change values in info bar + - error: arranger->tracklist: resize failed if columns are swapped + - enhanced file selector for background image selection + - more WhatsThis and ToolTip Help + - Backport to QT202: Filedialog: Filterlists dont work + - Midi Config: changed signal click() to rightButtonClick() + - missing initialisation in song constructor + - new subdirectory for controller editor + - controller editor for some values +0.0.3: + - new transport design + - redesign of TrackInfo and ChannelInfo + - some changes reg. fonts and geometry management + - misc toolbars changed to read qt toolbars +0.0.2: + - changed color for cpos to red + - dont play metronome clicks with time < current + - doubleclick on arranger trackname: entrywidget now gets + input focus + - midi device configuration: reworked + - removed endless loop in Song::nextEvents() + - ported to qt-2.1.0-snapshot-20000113 + - changed QPushButton to QToolButton + - some cosmetic changes in transport window + +0.0.1 + - first release + diff --git a/attic/muse_qt4_evolution/Doxyfile.in b/attic/muse_qt4_evolution/Doxyfile.in new file mode 100644 index 00000000..1f97c847 --- /dev/null +++ b/attic/muse_qt4_evolution/Doxyfile.in @@ -0,0 +1,1271 @@ +# Doxyfile 1.4.5 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = "@PROJECT_NAME@" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = @PROJECT_VERSION@ + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = Doc + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, +# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, +# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, +# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, +# Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# This tag can be used to specify the encoding used in the generated output. +# The encoding is not always determined by the language that is chosen, +# but also whether or not the output is meant for Windows or non-Windows users. +# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES +# forces the Windows encoding (this is the default for the Windows binary), +# whereas setting the tag to NO uses a Unix-style encoding (the default for +# all platforms other than Windows). + +USE_WINDOWS_ENCODING = YES + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = YES + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = @CMAKE_CURRENT_SOURCE_DIR@ + + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = @CMAKE_CURRENT_SOURCE_DIR@/ + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explicit @brief command for a brief description. + +JAVADOC_AUTOBRIEF = YES + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 2 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to +# include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +# BUILTIN_STL_SUPPORT = NO + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = YES + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is YES. + +SHOW_DIRECTORIES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from the +# version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = @DOXY_WARN_FORMAT@ + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = Doc/doxy.log + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = @CMAKE_CURRENT_SOURCE_DIR@ \ + @CMAKE_CURRENT_BINARY_DIR@ + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py + +FILE_PATTERNS = *.cpp \ + *.cc \ + *.h \ + *.hh \ + *.hpp \ + *.dox + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = @CMAKE_CURRENT_SOURCE_DIR@/Base/Common/Examples \ + @CMAKE_CURRENT_SOURCE_DIR@/Base/Debug/Examples \ + @CMAKE_CURRENT_SOURCE_DIR@/Base/Math/Examples \ + @CMAKE_CURRENT_SOURCE_DIR@/Base/Image/Examples \ + @CMAKE_CURRENT_SOURCE_DIR@/Base/Geometry/Examples \ + @CMAKE_CURRENT_SOURCE_DIR@/MathAlgo/Examples \ + @CMAKE_CURRENT_SOURCE_DIR@/Geometry/Examples \ + @CMAKE_CURRENT_SOURCE_DIR@/CornerDetector/Examples \ + @CMAKE_CURRENT_SOURCE_DIR@/Image/Examples \ + @CMAKE_CURRENT_SOURCE_DIR@/StateEstimator/Examples \ + @CMAKE_CURRENT_SOURCE_DIR@/Matcher2D/Examples \ + @CMAKE_CURRENT_SOURCE_DIR@/Utils/Examples \ + @CMAKE_CURRENT_SOURCE_DIR@/Gui/Examples \ + @CMAKE_CURRENT_SOURCE_DIR@/FeatureDetector/Examples \ + @CMAKE_CURRENT_SOURCE_DIR@/Doc \ + @CMAKE_CURRENT_SOURCE_DIR@ + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = *.cpp \ + *.cc \ + *.h \ + *.hh \ + INSTALL DEPENDENCIES CHANGELOG LICENSE LGPL + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = YES + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = @CMAKE_CURRENT_SOURCE_DIR@/Doc \ + @CMAKE_CURRENT_SOURCE_DIR@/Tests/data \ + @CMAKE_CURRENT_SOURCE_DIR@ + + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = NO + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 2 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. +HTML_HEADER = + + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = YES + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = YES + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +#LATEX_CMD_NAME = latex +LATEX_CMD_NAME = @LATEX_COMPILER@ + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +#MAKEINDEX_CMD_NAME = makeindex +MAKEINDEX_CMD_NAME = @MAKEINDEX_COMPILER@ + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4 + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = YES + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = YES + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = YES + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = Doc/html/@PROJECT_NAME@.TAGFILE + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = YES + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = @DOXYGEN_DOT_FOUND@ + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO +# UML_LOOK = YES + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = @DOXYGEN_DOT_EXECUTABLE_PATH@ + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_WIDTH = 1280 + +# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_HEIGHT = 1024 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that a graph may be further truncated if the graph's +# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH +# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), +# the graph is not depth-constrained. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, which results in a white background. +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. +# JW +# DOT_MULTI_TARGETS = NO +DOT_MULTI_TARGETS = YES + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +# JW SEARCHENGINE = NO +SEARCHENGINE = YES \ No newline at end of file diff --git a/attic/muse_qt4_evolution/NEWS b/attic/muse_qt4_evolution/NEWS new file mode 100644 index 00000000..e394dd72 --- /dev/null +++ b/attic/muse_qt4_evolution/NEWS @@ -0,0 +1,12 @@ +MusE 2.0.1: + New features: + - new "project" paradigma + - "auto fill" parts + - DSSI support + - JACK midi support + - controller automation in arranger + - audio metronome + - support for VST plugins + - new midi routing code + - midi plugins + - parts and events are updated in realtime during recording diff --git a/attic/muse_qt4_evolution/README b/attic/muse_qt4_evolution/README new file mode 100644 index 00000000..26b1e7d4 --- /dev/null +++ b/attic/muse_qt4_evolution/README @@ -0,0 +1,117 @@ +==================================================================== + MusE --- Linux Music Editor +==================================================================== + +Welcome to MusE, the open source MIDI/Audio sequencer. + +MusE is distributed under the GNU General Public License (GPL). +Please check out the file COPYING in this directory for more +details. + +,-----------------------------------------------------------------. +| NOTICE | +|-----------------------------------------------------------------| +| Some parts of MusE code are EXPERIMENTAL, and may well result | +| in a CRASH, and who knows what other ill effects. | +| RUN THIS SOFTWARE AT YOUR OWN RISK. | +`-----------------------------------------------------------------' + + ============================= + Requirements + ============================= + + - CMake 2.4 + http:/www.cmake.org/HTML/Download.html + + - QT: Qt 4.2.0 or above + ftp://ftp.trolltech.com/qt/source + MusE does _not_ compile with older versions + + - gcc 4.x.x + + - libsndfile >= 1.0.1 + http://www.zip.com.au/~erikd/libsndfile/ + + - libsamplerate + + - JACK >= 0.103 + http://jackit.sourceforge.net/download/ + + Optional: + + - fluidsynth-1.0.3 (formerly known as iiwusynth) from + http://savannah.nongnu.org/download/fluid + + - DSSI + + - ConTeXt (for building documentation, by default the build + script tries to build documentation, can be + disabled by setting ENABLE_DOCUMENTATION to OFF) + + ============================= + Compiling: + ============================= + + - download source from http://lmuse.sourceforge.net/ + + - unpack source: + tar xvofz muse-xyz.tar.gz + + - to compile MusE, run the following commands: + mkdir muse # create build directory + cd muse # enter build directory + cmake ../muse-xyz # create make system + make # compile muse + + - install MusE: + run "make install" + + ============================= + running MusE + ============================= + + MusE is a realtime program which requires special rights to + work poperly. + Recommended setup: + + - check if you are running a sufficiently new linux kernel > 2.6.x + + - create an "audio" group if it does not already exists + and put yourself into this group + + - make sure you can acces the realtime clock (RTC) + chmod 660 /dev/rtc + chgrp audio /dev/rtc + + - make sure MusE can set the rtc clock: + echo 8192 > /proc/sys/dev/rtc/max-user-freq + inspect with: + cat /proc/sys/dev/rtc/max-user-freq + + - for MusE to gain RT priviledges load the "realtime-lsm" + modul; the modul should be configured to give all "audio" + group members realtime priviledges + + - make sure the alsa sequencer modul is loaded: + /sbin/modprobe snd-seq + (same distros (ubuntu) do not load it by default :-( ) + + - start qjackctl + - start JACK with qjackctl + + - start MusE + + (JACK and all its clients (qjackctl & MusE) must run with the + same user id) + + + ============================= + known bugs + ============================= + + - many + +==================================================================== +Let me know whether MusE works for you !!! +Have a look at the webpage http://lmuse.sourceforge.net/ for details. + diff --git a/attic/muse_qt4_evolution/Reference b/attic/muse_qt4_evolution/Reference new file mode 100644 index 00000000..9aed268d --- /dev/null +++ b/attic/muse_qt4_evolution/Reference @@ -0,0 +1,59 @@ +MusE Function Reference + +Ruler + - left button press: + set location marker + - mid button press: + set left location marker + - right button press: + set right location marker + - shift + left button click: + set marker + - shift + right button click: + remove left marker + +Slider + - you dont have to hit the slider button to start dragging + - mouse wheel moves slider + +VolumeSlider + - left button double click sets slider to zero (-inf) + - right button double click sets volume to 0dB + +Meter Bar + - peak marker reset after configurable time + +Transport + - forward button + - rewind button + - "rewind to zero" button + - play button + - stop button + - record button + - rewind button moves horizontal canvas slider to position zero in + all "follow" modes + - forward and rewind buttons have auto repeat functionality + - transport stops at end of song if not recording + +Midi Editors + - left mouse click on event selects event + - shift + left mouse click toggles selection of event + - ctrl + left mouse click selects all events of same pitch + - mouse drag: move selected events + - shift + mouse drag: copy event + - shift + ctrl + mouse drag: restrict drag in x or y direction whatever + motion comes first + - If one event is selected, the info line shows the event properties. + If more than one event is selected, the info line initially shows zero + values, If changed, the displayed value is added to all marked events. + + Drum Editor + + Pianoroll Editor + +Wave Editor + - not implemented + +List Editor + - not implemented + diff --git a/attic/muse_qt4_evolution/al/CMakeLists.txt b/attic/muse_qt4_evolution/al/CMakeLists.txt new file mode 100644 index 00000000..ef819f5c --- /dev/null +++ b/attic/muse_qt4_evolution/al/CMakeLists.txt @@ -0,0 +1,32 @@ +# +# +# +# + +include(${PROJECT_SOURCE_DIR}/pch.txt) + +set (al_src + al.cpp marker.cpp pos.cpp sig.cpp tempo.cpp xml.cpp + dsp.cpp + ) + +if (USE_SSE) + set(al_src ${al_src} dspSSE.cpp dspXMM.cpp) +endif (USE_SSE) + +add_library(al STATIC + ${al_src} + ${PROJECT_BINARY_DIR}/all.h.pch + ) + +set_source_files_properties( + al.cpp marker.cpp pos.cpp sig.cpp tempo.cpp xml.cpp + dsp.cpp + dspXMM.cpp + PROPERTIES COMPILE_FLAGS "-fPIC -include ${PROJECT_BINARY_DIR}/all.h" + ) + +set_source_files_properties( dspSSE.cpp + PROPERTIES COMPILE_FLAGS "-x assembler" + ) + diff --git a/attic/muse_qt4_evolution/al/al.cpp b/attic/muse_qt4_evolution/al/al.cpp new file mode 100644 index 00000000..50a2299d --- /dev/null +++ b/attic/muse_qt4_evolution/al/al.cpp @@ -0,0 +1,29 @@ +//============================================================================= +// AL +// Audio Utility Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "al.h" + +namespace AL { + int sampleRate = 44100; + int mtcType = 0; + int division = 384; + bool debugMsg = false; + }; + diff --git a/attic/muse_qt4_evolution/al/al.h b/attic/muse_qt4_evolution/al/al.h new file mode 100644 index 00000000..d88d7c0d --- /dev/null +++ b/attic/muse_qt4_evolution/al/al.h @@ -0,0 +1,34 @@ +//============================================================================= +// AL +// Audio Utility Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AL_H__ +#define __AL_H__ + +namespace AL { + + extern bool debugMsg; + extern int sampleRate; + extern int mtcType; + extern int division; + + } + +#endif + diff --git a/attic/muse_qt4_evolution/al/dsp.cpp b/attic/muse_qt4_evolution/al/dsp.cpp new file mode 100644 index 00000000..7fb41fe7 --- /dev/null +++ b/attic/muse_qt4_evolution/al/dsp.cpp @@ -0,0 +1,120 @@ +//============================================================================= +// AL +// Audio Utility Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "dsp.h" +#include "config.h" + +namespace AL { + +Dsp* dsp; + +#ifdef __i386__ + +//--------------------------------------------------------- +// DspSSE86 +//--------------------------------------------------------- + +extern "C" { +extern float x86_sse_compute_peak(float*, unsigned, float); +extern void x86_sse_apply_gain_to_buffer(float*, unsigned, float); +extern void x86_sse_mix_buffers_with_gain(float*, float*, unsigned, float); +extern void x86_sse_mix_buffers_no_gain(float*, float*, unsigned); + }; + +class DspSSE86 : public Dsp { + public: + DspSSE86() {} + virtual ~DspSSE86() {} + + virtual float peak(float* buf, unsigned n, float current) { + if ( ((intptr_t)buf % 16) != 0) { + fprintf(stderr, "peak(): buffer unaligned! (%p)\n", buf); + return Dsp::peak(buf, n, current); + } + return x86_sse_compute_peak(buf, n, current); + } + + virtual void applyGainToBuffer(float* buf, unsigned n, float gain) { + if ( ((intptr_t)buf % 16) != 0) { + fprintf(stderr, "applyGainToBuffer(): buffer unaligned! (%p)\n", buf); + Dsp::applyGainToBuffer(buf, n, gain); + } + else + x86_sse_apply_gain_to_buffer(buf, n, gain); + } + + virtual void mixWithGain(float* dst, float* src, unsigned n, float gain) { + if ( ((intptr_t)dst & 15) != 0) + fprintf(stderr, "mixWithGainain(): dst unaligned! (%p)\n", dst); + if (((intptr_t)dst & 15) != ((intptr_t)src & 15) ) { + fprintf(stderr, "mixWithGain(): dst & src don't have the same alignment!\n"); + Dsp::mixWithGain(dst, src,n, gain); + } + else + x86_sse_mix_buffers_with_gain(dst, src, n, gain); + } + virtual void mix(float* dst, float* src, unsigned n) { + if ( ((intptr_t)dst & 15) != 0) + fprintf(stderr, "mix_buffers_no_gain(): dst unaligned! %p\n", dst); + if ( ((intptr_t)dst & 15) != ((intptr_t)src & 15) ) { + fprintf(stderr, "mix_buffers_no_gain(): dst & src don't have the same alignment!\n"); + Dsp::mix(dst, src, n); + } + else + x86_sse_mix_buffers_no_gain(dst, src, n); + } + }; +#endif + +//--------------------------------------------------------- +// initDsp +//--------------------------------------------------------- + +void initDsp() + { +#if defined(__i386__) && defined(USE_SSE) + unsigned long useSSE = 0; + +#ifdef __x86_64__ + useSSE = 1 << 25; // we know the platform has SSE +#else + asm ( + "mov $1, %%eax\n" + "pushl %%ebx\n" + "cpuid\n" + "movl %%edx, %0\n" + "popl %%ebx\n" + : "=r" (useSSE) + : + : "%eax", "%ecx", "%edx", "memory"); +#endif + useSSE &= (1 << 25); // bit 25 = SSE support + if (useSSE) { + printf("Using SSE optimized routines\n"); + dsp = new DspSSE86(); + return; + } + // fall through to not hardware optimized routines +#endif + dsp = new Dsp(); + } + +} + diff --git a/attic/muse_qt4_evolution/al/dsp.h b/attic/muse_qt4_evolution/al/dsp.h new file mode 100644 index 00000000..6c7123ac --- /dev/null +++ b/attic/muse_qt4_evolution/al/dsp.h @@ -0,0 +1,83 @@ +//============================================================================= +// AL +// Audio Utility Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __DSP_H__ +#define __DSP_H__ + +namespace AL { + +//--------------------------------------------------------- +// f_max +//--------------------------------------------------------- + +static inline float f_max(float x, float a) + { + x -= a; + x += fabsf(x); + x *= 0.5f; + x += a; + return x; + } + +//--------------------------------------------------------- +// Dsp +// standard version of all dsp routines without any +// hw acceleration +//--------------------------------------------------------- + +class Dsp { + public: + Dsp() {} + virtual ~Dsp() {} + + virtual float peak(float* buf, unsigned n, float current) { + for (unsigned i = 0; i < n; ++i) + current = f_max(current, fabsf(buf[i])); + return current; + } + virtual void applyGainToBuffer(float* buf, unsigned n, float gain) { + for (unsigned i = 0; i < n; ++i) + buf[i] *= gain; + } + virtual void mixWithGain(float* dst, float* src, unsigned n, float gain) { + for (unsigned i = 0; i < n; ++i) + dst[i] += src[i] * gain; + } + virtual void mix(float* dst, float* src, unsigned n) { + for (unsigned i = 0; i < n; ++i) + dst[i] += src[i]; + } + virtual void cpy(float* dst, float* src, unsigned n) { +#if defined(ARCH_X86) || defined(ARCH_X86_64) + register unsinged long int dummy; + __asm__ __volatile__ "rep; movsl" :"=&D"(dst), "=&S"(src), "=&c"(dummy) :"0" (to), "1" (from),"2" (n) : "memory"); +#else + memcpy(dst, src, sizeof(float) * n); +#endif + } + }; + +extern void initDsp(); +extern Dsp* dsp; + +} + +#endif + diff --git a/attic/muse_qt4_evolution/al/dspSSE.cpp b/attic/muse_qt4_evolution/al/dspSSE.cpp new file mode 100644 index 00000000..0f3d84b9 --- /dev/null +++ b/attic/muse_qt4_evolution/al/dspSSE.cpp @@ -0,0 +1,531 @@ +/* + Copyright (C) 2005 Paul Davis + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + Author: Sampo Savolainen + + $Id: sse_functions.s 988 2006-10-17 20:40:39Z paul $ +*/ + + +#; void x86_sse_mix_buffers_with_gain (float *dst, float *src, long nframes, float gain); + +.globl x86_sse_mix_buffers_with_gain + .type x86_sse_mix_buffers_with_gain,@function + +x86_sse_mix_buffers_with_gain: +#; 8(%ebp) = float *dst = %edi +#; 12(%ebp) = float *src = %esi +#; 16(%ebp) = long nframes = %ecx +#; 20(%ebp) = float gain = st(0) + + pushl %ebp + movl %esp, %ebp + + #; save the registers +#; pushl %eax + pushl %ebx +#; pushl %ecx + pushl %edi + pushl %esi + + #; if nframes == 0, go to end + movl 16(%ebp), %ecx #; nframes + cmp $0, %ecx + je .MBWG_END + + #; Check for alignment + + movl 8(%ebp), %edi #; dst + movl 12(%ebp), %esi #; src + + movl %edi, %eax + andl $12, %eax #; mask alignemnt offset + + movl %esi, %ebx + andl $12, %ebx #; mask alignment offset + + cmp %eax, %ebx + jne .MBWG_NONALIGN #; if not aligned, calculate manually + + #; if we are aligned + cmp $0, %ebx + jz .MBWG_SSE + + #; Pre-loop, we need to run 1-3 frames "manually" without + #; SSE instructions + + movss 20(%ebp), %xmm1 #; xmm1 + +.MBWG_PRELOOP: + + movss (%esi), %xmm0 + mulss %xmm1, %xmm0 + addss (%edi), %xmm0 + movss %xmm0, (%edi) + + addl $4, %edi #; dst++ + addl $4, %esi #; src++ + decl %ecx #; nframes-- + jz .MBWG_END + +#; cmp $0, %ecx +#; je .MBWG_END #; if we run out of frames, go to end + + addl $4, %ebx + + cmp $16, %ebx #; test if we've reached 16 byte alignment + jne .MBWG_PRELOOP + + +.MBWG_SSE: + + cmp $4, %ecx #; we know it's not zero, but if it's not >=4, then + jnge .MBWG_NONALIGN #; we jump straight to the "normal" code + + #; copy gain to fill %xmm1 + movss 20(%ebp), %xmm1 + shufps $0x00, %xmm1, %xmm1 + + +.MBWG_SSELOOP: + + movaps (%esi), %xmm0 #; source => xmm0 + mulps %xmm1, %xmm0 #; apply gain to source + addps (%edi), %xmm0 #; mix with destination + movaps %xmm0, (%edi) #; copy result to destination + + addl $16, %edi #; dst+=4 + addl $16, %esi #; src+=4 + + subl $4, %ecx #; nframes-=4 + cmp $4, %ecx + jge .MBWG_SSELOOP + + cmp $0, %ecx + je .MBWG_END + + #; if there are remaining frames, the nonalign code will do nicely + #; for the rest 1-3 frames. + +.MBWG_NONALIGN: + #; not aligned! + + movss 20(%ebp), %xmm1 #; gain => xmm1 + +.MBWG_NONALIGNLOOP: + + movss (%esi), %xmm0 + mulss %xmm1, %xmm0 + addss (%edi), %xmm0 + movss %xmm0, (%edi) + + addl $4, %edi + addl $4, %esi + + decl %ecx + jnz .MBWG_NONALIGNLOOP + +.MBWG_END: + + popl %esi + popl %edi +#; popl %ecx + popl %ebx +#; popl %eax + + #; return + leave + ret + +.size x86_sse_mix_buffers_with_gain, .-x86_sse_mix_buffers_with_gain + + + + +#; void x86_sse_mix_buffers_no_gain (float *dst, float *src, long nframes); + +.globl x86_sse_mix_buffers_no_gain + .type x86_sse_mix_buffers_no_gain,@function + +x86_sse_mix_buffers_no_gain: +#; 8(%ebp) = float *dst = %edi +#; 12(%ebp) = float *src = %esi +#; 16(%ebp) = long nframes = %ecx + + pushl %ebp + movl %esp, %ebp + + #; save the registers +#; pushl %eax + pushl %ebx +#; pushl %ecx + pushl %edi + pushl %esi + + #; the real function + + #; if nframes == 0, go to end + movl 16(%ebp), %ecx #; nframes + cmp $0, %ecx + je .MBNG_END + + #; Check for alignment + + movl 8(%ebp), %edi #; dst + movl 12(%ebp), %esi #; src + + movl %edi, %eax + andl $12, %eax #; mask alignemnt offset + + movl %esi, %ebx + andl $12, %ebx #; mask alignment offset + + cmp %eax, %ebx + jne .MBNG_NONALIGN #; if not aligned, calculate manually + + cmp $0, %ebx + je .MBNG_SSE + + #; Pre-loop, we need to run 1-3 frames "manually" without + #; SSE instructions + +.MBNG_PRELOOP: + + movss (%esi), %xmm0 + addss (%edi), %xmm0 + movss %xmm0, (%edi) + + addl $4, %edi #; dst++ + addl $4, %esi #; src++ + decl %ecx #; nframes-- + jz .MBNG_END + addl $4, %ebx + + cmp $16, %ebx #; test if we've reached 16 byte alignment + jne .MBNG_PRELOOP + +.MBNG_SSE: + + cmp $4, %ecx #; if there are frames left, but less than 4 + jnge .MBNG_NONALIGN #; we can't run SSE + +.MBNG_SSELOOP: + + movaps (%esi), %xmm0 #; source => xmm0 + addps (%edi), %xmm0 #; mix with destination + movaps %xmm0, (%edi) #; copy result to destination + + addl $16, %edi #; dst+=4 + addl $16, %esi #; src+=4 + + subl $4, %ecx #; nframes-=4 + cmp $4, %ecx + jge .MBNG_SSELOOP + + cmp $0, %ecx + je .MBNG_END + + #; if there are remaining frames, the nonalign code will do nicely + #; for the rest 1-3 frames. + +.MBNG_NONALIGN: + #; not aligned! + + movss (%esi), %xmm0 #; src => xmm0 + addss (%edi), %xmm0 #; xmm0 += dst + movss %xmm0, (%edi) #; xmm0 => dst + + addl $4, %edi + addl $4, %esi + + decl %ecx + jnz .MBNG_NONALIGN + +.MBNG_END: + + popl %esi + popl %edi +#; popl %ecx + popl %ebx +#; popl %eax + + #; return + leave + ret + +.size x86_sse_mix_buffers_no_gain, .-x86_sse_mix_buffers_no_gain + + + + +#; void x86_sse_apply_gain_to_buffer (float *buf, long nframes, float gain); + +.globl x86_sse_apply_gain_to_buffer + .type x86_sse_apply_gain_to_buffer,@function + +x86_sse_apply_gain_to_buffer: +#; 8(%ebp) = float *buf = %edi +#; 12(%ebp) = long nframes = %ecx +#; 16(%ebp) = float gain = st(0) + + pushl %ebp + movl %esp, %ebp + + #; save %edi + pushl %edi + + #; the real function + + #; if nframes == 0, go to end + movl 12(%ebp), %ecx #; nframes + cmp $0, %ecx + je .AG_END + + #; create the gain buffer in %xmm1 + movss 16(%ebp), %xmm1 + shufps $0x00, %xmm1, %xmm1 + + #; Check for alignment + + movl 8(%ebp), %edi #; buf + movl %edi, %edx #; buf => %edx + andl $12, %edx #; mask bits 1 & 2, result = 0, 4, 8 or 12 + jz .AG_SSE #; if buffer IS aligned + + #; PRE-LOOP + #; we iterate 1-3 times, doing normal x87 float comparison + #; so we reach a 16 byte aligned "buf" (=%edi) value + +.AGLP_START: + + #; Load next value from the buffer + movss (%edi), %xmm0 + mulss %xmm1, %xmm0 + movss %xmm0, (%edi) + + #; increment buffer, decrement counter + addl $4, %edi #; buf++; + + decl %ecx #; nframes-- + jz .AG_END #; if we run out of frames, we go to the end + + addl $4, %edx #; one non-aligned byte less + cmp $16, %edx + jne .AGLP_START #; if more non-aligned frames exist, we do a do-over + +.AG_SSE: + + #; We have reached the 16 byte aligned "buf" ("edi") value + + #; Figure out how many loops we should do + movl %ecx, %eax #; copy remaining nframes to %eax for division + movl $0, %edx #; 0 the edx register + + + pushl %edi + movl $4, %edi + divl %edi #; %edx = remainder == 0 + popl %edi + + #; %eax = SSE iterations + cmp $0, %eax + je .AGPOST_START + + +.AGLP_SSE: + + movaps (%edi), %xmm0 + mulps %xmm1, %xmm0 + movaps %xmm0, (%edi) + + addl $16, %edi +#; subl $4, %ecx #; nframes-=4 + + decl %eax + jnz .AGLP_SSE + + #; Next we need to post-process all remaining frames + #; the remaining frame count is in %ecx + + #; if no remaining frames, jump to the end +#; cmp $0, %ecx + andl $3, %ecx #; nframes % 4 + je .AG_END + +.AGPOST_START: + + movss (%edi), %xmm0 + mulss %xmm1, %xmm0 + movss %xmm0, (%edi) + + #; increment buffer, decrement counter + addl $4, %edi #; buf++; + + decl %ecx #; nframes-- + jnz .AGPOST_START #; if we run out of frames, we go to the end + +.AG_END: + + + popl %edi + + #; return + leave + ret + +.size x86_sse_apply_gain_to_buffer, .-x86_sse_apply_gain_to_buffer +#; end proc + + + +#; float x86_sse_compute_peak(float *buf, long nframes, float current); + +.globl x86_sse_compute_peak + .type x86_sse_compute_peak,@function + +x86_sse_compute_peak: +#; 8(%ebp) = float *buf = %edi +#; 12(%ebp) = long nframes = %ecx +#; 16(%ebp) = float current = st(0) + + pushl %ebp + movl %esp, %ebp + + #; save %edi + pushl %edi + + #; the real function + + #; Load "current" in xmm0 + movss 16(%ebp), %xmm0 + + #; if nframes == 0, go to end + movl 12(%ebp), %ecx #; nframes + cmp $0, %ecx + je .CP_END + + #; create the "abs" mask in %xmm2 + pushl $2147483647 + movss (%esp), %xmm2 + addl $4, %esp + shufps $0x00, %xmm2, %xmm2 + + #; Check for alignment + + movl 8(%ebp), %edi #; buf + movl %edi, %edx #; buf => %edx + andl $12, %edx #; mask bits 1 & 2, result = 0, 4, 8 or 12 + jz .CP_SSE #; if buffer IS aligned + + #; PRE-LOOP + #; we iterate 1-3 times, doing normal x87 float comparison + #; so we reach a 16 byte aligned "buf" (=%edi) value + +.LP_START: + + #; Load next value from the buffer + movss (%edi), %xmm1 + andps %xmm2, %xmm1 + maxss %xmm1, %xmm0 + + #; increment buffer, decrement counter + addl $4, %edi #; buf++; + + decl %ecx #; nframes-- + jz .CP_END #; if we run out of frames, we go to the end + + addl $4, %edx #; one non-aligned byte less + cmp $16, %edx + jne .LP_START #; if more non-aligned frames exist, we do a do-over + +.CP_SSE: + + #; We have reached the 16 byte aligned "buf" ("edi") value + + #; Figure out how many loops we should do + movl %ecx, %eax #; copy remaining nframes to %eax for division + + shr $2,%eax #; unsigned divide by 4 + jz .POST_START + + #; %eax = SSE iterations + + #; current maximum is at %xmm0, but we need to .. + shufps $0x00, %xmm0, %xmm0 #; shuffle "current" to all 4 FP's + + #;prefetcht0 16(%edi) + +.LP_SSE: + + movaps (%edi), %xmm1 + andps %xmm2, %xmm1 + maxps %xmm1, %xmm0 + + addl $16, %edi + + decl %eax + jnz .LP_SSE + + #; Calculate the maximum value contained in the 4 FP's in %xmm0 + movaps %xmm0, %xmm1 + shufps $0x4e, %xmm1, %xmm1 #; shuffle left & right pairs (1234 => 3412) + maxps %xmm1, %xmm0 #; maximums of the two pairs + movaps %xmm0, %xmm1 + shufps $0xb1, %xmm1, %xmm1 #; shuffle the floats inside the two pairs (1234 => 2143) + maxps %xmm1, %xmm0 + + #; now every float in %xmm0 is the same value, current maximum value + + #; Next we need to post-process all remaining frames + #; the remaining frame count is in %ecx + + #; if no remaining frames, jump to the end + + andl $3, %ecx #; nframes % 4 + jz .CP_END + +.POST_START: + + movss (%edi), %xmm1 + andps %xmm2, %xmm1 + maxss %xmm1, %xmm0 + + addl $4, %edi #; buf++; + + decl %ecx #; nframes--; + jnz .POST_START + +.CP_END: + + #; Load the value from xmm0 to the float stack for returning + movss %xmm0, 16(%ebp) + flds 16(%ebp) + + popl %edi + + #; return + leave + ret + +.size x86_sse_compute_peak, .-x86_sse_compute_peak +#; end proc + +#ifdef __ELF__ +.section .note.GNU-stack,"",%progbits +#endif + + diff --git a/attic/muse_qt4_evolution/al/dspXMM.cpp b/attic/muse_qt4_evolution/al/dspXMM.cpp new file mode 100644 index 00000000..1943fa7d --- /dev/null +++ b/attic/muse_qt4_evolution/al/dspXMM.cpp @@ -0,0 +1,115 @@ +/* + Copyright (C) 2007 Paul sDavis + Written by Sampo Savolainen + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include + +void +x86_sse_find_peaks(float *buf, unsigned nframes, float *min, float *max) +{ + __m128 current_max, current_min, work; + + // Load max and min values into all four slots of the XMM registers + current_min = _mm_set1_ps(*min); + current_max = _mm_set1_ps(*max); + + // Work input until "buf" reaches 16 byte alignment + while ( ((unsigned long)buf) % 16 != 0 && nframes > 0) { + + // Load the next float into the work buffer + work = _mm_set1_ps(*buf); + + current_min = _mm_min_ps(current_min, work); + current_max = _mm_max_ps(current_max, work); + + buf++; + nframes--; + } + + // use 64 byte prefetch for quadruple quads + while (nframes >= 16) { + __builtin_prefetch(buf+64,0,0); + + work = _mm_load_ps(buf); + current_min = _mm_min_ps(current_min, work); + current_max = _mm_max_ps(current_max, work); + buf+=4; + work = _mm_load_ps(buf); + current_min = _mm_min_ps(current_min, work); + current_max = _mm_max_ps(current_max, work); + buf+=4; + work = _mm_load_ps(buf); + current_min = _mm_min_ps(current_min, work); + current_max = _mm_max_ps(current_max, work); + buf+=4; + work = _mm_load_ps(buf); + current_min = _mm_min_ps(current_min, work); + current_max = _mm_max_ps(current_max, work); + buf+=4; + nframes-=16; + } + + // work through aligned buffers + while (nframes >= 4) { + + work = _mm_load_ps(buf); + + current_min = _mm_min_ps(current_min, work); + current_max = _mm_max_ps(current_max, work); + + buf+=4; + nframes-=4; + } + + // work through the rest < 4 samples + while ( nframes > 0) { + + // Load the next float into the work buffer + work = _mm_set1_ps(*buf); + + current_min = _mm_min_ps(current_min, work); + current_max = _mm_max_ps(current_max, work); + + buf++; + nframes--; + } + + // Find min & max value in current_max through shuffle tricks + + work = current_min; + work = _mm_shuffle_ps(work, work, _MM_SHUFFLE(2, 3, 0, 1)); + work = _mm_min_ps (work, current_min); + current_min = work; + work = _mm_shuffle_ps(work, work, _MM_SHUFFLE(1, 0, 3, 2)); + work = _mm_min_ps (work, current_min); + + _mm_store_ss(min, work); + + work = current_max; + work = _mm_shuffle_ps(work, work, _MM_SHUFFLE(2, 3, 0, 1)); + work = _mm_max_ps (work, current_max); + current_max = work; + work = _mm_shuffle_ps(work, work, _MM_SHUFFLE(1, 0, 3, 2)); + work = _mm_max_ps (work, current_max); + + _mm_store_ss(max, work); +} + + + diff --git a/attic/muse_qt4_evolution/al/marker.cpp b/attic/muse_qt4_evolution/al/marker.cpp new file mode 100644 index 00000000..5b4ef87c --- /dev/null +++ b/attic/muse_qt4_evolution/al/marker.cpp @@ -0,0 +1,86 @@ +//============================================================================= +// AL +// Audio Utility Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "marker.h" +#include "xml.h" + +namespace AL { + +//--------------------------------------------------------- +// add +//--------------------------------------------------------- + +Marker* MarkerList::add(const Marker& marker) + { + iMarker i = insert(std::pair (marker.tick(), Marker(marker))); + return &i->second; + } + +Marker* MarkerList::add(const QString& s, const Pos& pos) + { + Marker marker(pos); + marker.setName(s); + iMarker i = insert(std::pair (pos.tick(), marker)); + return &i->second; + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void Marker::read(QDomNode node) + { + Pos::read(node); + QDomElement e = node.toElement(); + _name = e.attribute("name"); + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void MarkerList::write(Xml& xml) const + { + for (ciMarker i = begin(); i != end(); ++i) { + const Marker& m = i->second; + if (m.type() == TICKS) + xml.tagE(QString("marker tick=\"%1\" name=\"%2\"").arg(m.tick()).arg(m.name())); + else + xml.tagE(QString("marker sample=\"%1\" name=\"%2\"").arg(m.frame()).arg(m.name())); + } + } + +//--------------------------------------------------------- +// remove +//--------------------------------------------------------- + +void MarkerList::remove(Marker* m) + { + for (iMarker i = begin(); i != end(); ++i) { + Marker* mm = &i->second; + if (mm == m) { + erase(i); + return; + } + } + printf("MarkerList::remove(): marker not found\n"); + } +} + diff --git a/attic/muse_qt4_evolution/al/marker.h b/attic/muse_qt4_evolution/al/marker.h new file mode 100644 index 00000000..7c77f72e --- /dev/null +++ b/attic/muse_qt4_evolution/al/marker.h @@ -0,0 +1,67 @@ +//============================================================================= +// AL +// Audio Utility Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MARKER_H__ +#define __MARKER_H__ + +#include "pos.h" + +namespace AL { + class Xml; + +//--------------------------------------------------------- +// Marker +//--------------------------------------------------------- + +class Marker : public Pos { + QString _name; + bool _current; + + public: + Marker() : _current(false) {} + Marker(const Pos& m) : Pos(m), _current(false) {} + Marker(const QString& s, bool cur = false) + : _name(s), _current(cur) {} + void read(QDomNode); + const QString name() const { return _name; } + void setName(const QString& s) { _name = s; } + bool current() const { return _current; } + void setCurrent(bool f) { _current = f; } + }; + +//--------------------------------------------------------- +// MarkerList +//--------------------------------------------------------- + +class MarkerList : public std::multimap > { + public: + Marker* add(const Marker& m); + Marker* add(const QString& s, const Pos&); + void write(Xml&) const; + void remove(Marker*); + }; + +typedef std::multimap >::iterator iMarker; +typedef std::multimap >::const_iterator ciMarker; + +} // end namespace AL + +#endif + diff --git a/attic/muse_qt4_evolution/al/pos.cpp b/attic/muse_qt4_evolution/al/pos.cpp new file mode 100644 index 00000000..f8418a00 --- /dev/null +++ b/attic/muse_qt4_evolution/al/pos.cpp @@ -0,0 +1,616 @@ +//============================================================================= +// AL +// Audio Utility Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "al.h" +#include "pos.h" +#include "xml.h" +#include "tempo.h" +#include "sig.h" + +namespace AL { + +//--------------------------------------------------------- +// Pos +//--------------------------------------------------------- + +Pos::Pos() + { + _type = TICKS; + _tick = 0; + _frame = 0; + sn = -1; + } + +Pos::Pos(unsigned t, TType timeType) + { + _type = timeType; + if (_type == TICKS) + _tick = t; + else + _frame = t; + sn = -1; + } + +Pos::Pos(const QString& s) + { + int m, b, t; + sscanf(s.toLatin1().data(), "%04d.%02d.%03d", &m, &b, &t); + _tick = sigmap.bar2tick(m, b, t); + _type = TICKS; + sn = -1; + } + +Pos::Pos(int measure, int beat, int tick) + { + _tick = sigmap.bar2tick(measure, beat, tick); + _type = TICKS; + sn = -1; + } + +Pos::Pos(int min, int sec, int frame, int subframe) + { + double time = min * 60.0 + sec; + + double f = frame + subframe/100.0; + switch (AL::mtcType) { + case 0: // 24 frames sec + time += f * 1.0/24.0; + break; + case 1: // 25 + time += f * 1.0/25.0; + break; + case 2: // 30 drop frame + time += f * 1.0/30.0; + break; + case 3: // 30 non drop frame + time += f * 1.0/30.0; + break; + } + _type = FRAMES; + _frame = lrint(time * AL::sampleRate); + sn = -1; + } + +//--------------------------------------------------------- +// setType +//--------------------------------------------------------- + +void Pos::setType(TType t) + { + if (t == _type) + return; + + if (_type == TICKS) { + // convert from ticks to frames + _frame = tempomap.tick2frame(_tick, _frame, &sn); + } + else { + // convert from frames to ticks + _tick = tempomap.frame2tick(_frame, _tick, &sn); + } + _type = t; + } + +//--------------------------------------------------------- +// operator+= +//--------------------------------------------------------- + +Pos& Pos::operator+=(const Pos& a) + { + if (_type == FRAMES) + _frame += a.frame(); + else + _tick += a.tick(); + sn = -1; // invalidate cached values + return *this; + } + +//--------------------------------------------------------- +// operator-= +//--------------------------------------------------------- + +Pos& Pos::operator-=(const Pos& a) + { + if (_type == FRAMES) + _frame -= a.frame(); + else + _tick -= a.tick(); + sn = -1; // invalidate cached values + return *this; + } + +//--------------------------------------------------------- +// operator+= +//--------------------------------------------------------- + +Pos& Pos::operator+=(int a) + { + if (_type == FRAMES) + _frame += a; + else + _tick += a; + sn = -1; // invalidate cached values + return *this; + } + +//--------------------------------------------------------- +// operator-= +//--------------------------------------------------------- + +Pos& Pos::operator-=(int a) + { + if (_type == FRAMES) + _frame -= a; + else + _tick -= a; + sn = -1; // invalidate cached values + return *this; + } + +Pos operator+(const Pos& a, int b) + { + Pos c(a); + return c += b; + } + +Pos operator-(const Pos& a, int b) + { + Pos c(a); + return c -= b; + } + +Pos operator+(const Pos& a, const Pos& b) + { + Pos c(a); + return c += b; + } + +Pos operator-(const Pos& a, const Pos& b) + { + Pos c(a); + return c -= b; + } + +bool Pos::operator>=(const Pos& s) const + { + if (_type == FRAMES) + return _frame >= s.frame(); + else + return _tick >= s.tick(); + } + +bool Pos::operator>(const Pos& s) const + { + if (_type == FRAMES) + return _frame > s.frame(); + else + return _tick > s.tick(); + } + +bool Pos::operator<(const Pos& s) const + { + if (_type == FRAMES) + return _frame < s.frame(); + else + return _tick < s.tick(); + } + +bool Pos::operator<=(const Pos& s) const + { + if (_type == FRAMES) + return _frame <= s.frame(); + else + return _tick <= s.tick(); + } + +bool Pos::operator==(const Pos& s) const + { + if (_type == FRAMES) + return _frame == s.frame(); + else + return _tick == s.tick(); + } + +bool Pos::operator!=(const Pos& s) const + { + if (_type == FRAMES) + return _frame != s.frame(); + else + return _tick != s.tick(); + } + +//--------------------------------------------------------- +// tick +//--------------------------------------------------------- + +unsigned Pos::tick() const + { + if (_type == FRAMES) + _tick = tempomap.frame2tick(_frame, _tick, &sn); + return _tick; + } + +//--------------------------------------------------------- +// frame +//--------------------------------------------------------- + +unsigned Pos::frame() const + { + if (_type == TICKS) + _frame = tempomap.tick2frame(_tick, _frame, &sn); + return _frame; + } + +//--------------------------------------------------------- +// setTick +//--------------------------------------------------------- + +void Pos::setTick(unsigned pos) + { + _tick = pos; + sn = -1; + if (_type == FRAMES) + _frame = tempomap.tick2frame(pos, &sn); + } + +//--------------------------------------------------------- +// setFrame +//--------------------------------------------------------- + +void Pos::setFrame(unsigned pos) + { + _frame = pos; + sn = -1; + if (_type == TICKS) + _tick = tempomap.frame2tick(pos, &sn); + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void Pos::write(Xml& xml, const char* name) const + { + if (_type == TICKS) + xml.tagE(QString("%1 tick=\"%2\"").arg(name).arg(_tick)); + else + xml.tagE(QString("%1 frame=\"%2\"").arg(name).arg(_frame)); + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void Pos::read(QDomNode node) + { + sn = -1; + + QDomElement e = node.toElement(); + QString s; + s = e.attribute("tick"); + if (!s.isEmpty()) { + _tick = s.toInt(); + _type = TICKS; + } + s = e.attribute("frame"); + if (!s.isEmpty()) { + _frame = s.toInt(); + _type = FRAMES; + } + } + +//--------------------------------------------------------- +// PosLen +//--------------------------------------------------------- + +PosLen::PosLen() + { + _lenTick = 0; + _lenFrame = 0; + sn = -1; + } + +PosLen::PosLen(const PosLen& p) + : Pos(p) + { + _lenTick = p._lenTick; + _lenFrame = p._lenFrame; + sn = -1; + } + +//--------------------------------------------------------- +// dump +//--------------------------------------------------------- + +void PosLen::dump(int n) const + { + Pos::dump(n); + printf(" Len("); + switch(type()) { + case FRAMES: + printf("samples=%d)\n", _lenFrame); + break; + case TICKS: + printf("ticks=%d)\n", _lenTick); + break; + } + } + +void Pos::dump(int /*n*/) const + { + printf("Pos(%s, sn=%d, ", type() == FRAMES ? "Frames" : "Ticks", sn); + switch(type()) { + case FRAMES: + printf("samples=%d)", _frame); + break; + case TICKS: + printf("ticks=%d)", _tick); + break; + } + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void PosLen::write(Xml& xml, const char* name) const + { + if (type() == TICKS) + xml.tagE(QString("%1 tick=\"%2\" len=\"%3\"").arg(name).arg(tick()).arg(_lenTick)); + else + xml.tagE(QString("%1 sample=\"%2\" len=\"%3\"").arg(name).arg(frame()).arg(_lenFrame)); + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void PosLen::read(QDomNode node) + { + QDomElement e = node.toElement(); + QString s; + s = e.attribute("tick"); + if (!s.isEmpty()) { + setType(TICKS); + setTick(s.toInt()); + } + s = e.attribute("sample"); + if (!s.isEmpty()) { + setType(FRAMES); + setFrame(s.toInt()); + } + s = e.attribute("len"); + if (!s.isEmpty()) { + int n = s.toInt(); + if (type() == TICKS) + setLenTick(n); + else + setLenFrame(n); + } + } + +//--------------------------------------------------------- +// setLenTick +//--------------------------------------------------------- + +void PosLen::setLenTick(unsigned len) + { + _lenTick = len; + sn = -1; + if (type() == FRAMES) + _lenFrame = tempomap.tick2frame(len, &sn); + else + _lenTick = len; + } + +//--------------------------------------------------------- +// setLenFrame +//--------------------------------------------------------- + +void PosLen::setLenFrame(unsigned len) + { + sn = -1; + if (type() == TICKS) + _lenTick = tempomap.frame2tick(len, &sn); + else + _lenFrame = len; + } + +//--------------------------------------------------------- +// lenTick +//--------------------------------------------------------- + +unsigned PosLen::lenTick() const + { + if (type() == FRAMES) + _lenTick = tempomap.frame2tick(_lenFrame, _lenTick, &sn); + return _lenTick; + } + +//--------------------------------------------------------- +// lenFrame +//--------------------------------------------------------- + +unsigned PosLen::lenFrame() const + { + if (type() == TICKS) + _lenFrame = tempomap.tick2frame(_lenTick, _lenFrame, &sn); + return _lenFrame; + } + +//--------------------------------------------------------- +// end +//--------------------------------------------------------- + +Pos PosLen::end() const + { + Pos pos(*this); + pos.invalidSn(); + switch(type()) { + case FRAMES: + pos.setFrame(pos.frame() + _lenFrame); + break; + case TICKS: + pos.setTick(pos.tick() + _lenTick); + break; + } + return pos; + } + +//--------------------------------------------------------- +// setPos +//--------------------------------------------------------- + +void PosLen::setPos(const Pos& pos) + { + switch(pos.type()) { + case FRAMES: + setFrame(pos.frame()); + break; + case TICKS: + setTick(pos.tick()); + break; + } + } + +//--------------------------------------------------------- +// operator== +//--------------------------------------------------------- + +bool PosLen::operator==(const PosLen& pl) const { + if(type()==TICKS) + return (_lenTick==pl._lenTick && Pos::operator==((const Pos&)pl)); + else + return (_lenFrame==pl._lenFrame && Pos::operator==((const Pos&)pl)); +} + +//--------------------------------------------------------- +// mbt +//--------------------------------------------------------- + +void Pos::mbt(int* bar, int* beat, int* tk) const + { + sigmap.tickValues(tick(), bar, beat, (unsigned*)tk); + } + +//--------------------------------------------------------- +// msf +//--------------------------------------------------------- + +void Pos::msf(int* min, int* sec, int* fr, int* subFrame) const + { +#if 0 + //double has been replaced by float because it prevents (mysteriously) + //from a segfault that occurs at the launching of muse + /*double*/ float time = double(frame()) / double(AL::sampleRate); + *min = int(time) / 60; + *sec = int(time) % 60; + //double has been replaced by float because it prevents (mysteriously) + //from a segfault that occurs at the launching of muse + /*double*/ float rest = time - (*min * 60 + *sec); + switch(AL::mtcType) { + case 0: // 24 frames sec + rest *= 24; + break; + case 1: // 25 + rest *= 25; + break; + case 2: // 30 drop frame + rest *= 30; + break; + case 3: // 30 non drop frame + rest *= 30; + break; + } + *fr = int(rest); + *subFrame = int((rest- *fr)*100); +#else + // for further testing: + + double time = double(frame()) / double(AL::sampleRate); + *min = int(time) / 60; + *sec = int(time) % 60; + double rest = time - ((*min) * 60 + (*sec)); + switch(AL::mtcType) { + case 0: // 24 frames sec + rest *= 24; + break; + case 1: // 25 + rest *= 25; + break; + case 2: // 30 drop frame + rest *= 30; + break; + case 3: // 30 non drop frame + rest *= 30; + break; + } + *fr = lrint(rest); + *subFrame = lrint((rest - (*fr)) * 100.0); +#endif + } + +//--------------------------------------------------------- +// timesig +//--------------------------------------------------------- + +TimeSignature Pos::timesig() const + { + return sigmap.timesig(tick()); + } + +//--------------------------------------------------------- +// snap +// raster = 1 no snap +// raster = 0 snap to measure +// all other raster values snap to raster tick +//--------------------------------------------------------- + +void Pos::snap(int raster) + { + setTick(sigmap.raster(tick(), raster)); + } + +void Pos::upSnap(int raster) + { + setTick(sigmap.raster2(tick(), raster)); + } + +void Pos::downSnap(int raster) + { + setTick(sigmap.raster1(tick(), raster)); + } + +Pos Pos::snaped(int raster) const + { + return Pos(sigmap.raster(tick(), raster)); + } + +Pos Pos::upSnaped(int raster) const + { + return Pos(sigmap.raster2(tick(), raster)); + } + +Pos Pos::downSnaped(int raster) const + { + return Pos(sigmap.raster1(tick(), raster)); + } +} + diff --git a/attic/muse_qt4_evolution/al/pos.h b/attic/muse_qt4_evolution/al/pos.h new file mode 100644 index 00000000..6226cfef --- /dev/null +++ b/attic/muse_qt4_evolution/al/pos.h @@ -0,0 +1,129 @@ +//============================================================================= +// AL +// Audio Utility Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __POS_H__ +#define __POS_H__ + +#include "sig.h" + +namespace AL { + +class Xml; + +enum TType { TICKS, FRAMES }; + +//--------------------------------------------------------- +// Pos +// depending on type _tick or _frame is a cached +// value. When the tempomap changes, all cached values +// are invalid. Sn is used to check for tempomap +// changes. +//--------------------------------------------------------- + +class Pos { + public: + + private: + TType _type; + mutable int sn; + mutable unsigned _tick; + mutable unsigned _frame; + + public: + Pos(); + Pos(int measure, int beat, int tick); + Pos(int minute, int sec, int frame, int subframe); + Pos(unsigned, TType type = TICKS); + Pos(const QString&); + void dump(int n = 0) const; + + unsigned time(TType t) const { return t == TICKS ? tick() : frame(); } + void mbt(int* measure, int* beat, int* tick) const; + void msf(int* minute, int* sec, int* frame, int* subframe) const; + TimeSignature timesig() const; + void snap(int); + void upSnap(int); + void downSnap(int); + Pos snaped(int) const; + Pos upSnaped(int) const; + Pos downSnaped(int) const; + + void invalidSn() { sn = -1; } + + TType type() const { return _type; } + void setType(TType t); + + Pos& operator+=(const Pos& a); + Pos& operator+=(int a); + Pos& operator-=(const Pos& a); + Pos& operator-=(int a); + + bool operator>=(const Pos& s) const; + bool operator>(const Pos& s) const; + bool operator<(const Pos& s) const; + bool operator<=(const Pos& s) const; + bool operator==(const Pos& s) const; + bool operator!=(const Pos& s) const; + + friend Pos operator+(const Pos& a, const Pos& b); + friend Pos operator-(const Pos& a, const Pos& b); + friend Pos operator+(const Pos& a, int b); + friend Pos operator-(const Pos& a, int b); + + unsigned tick() const; + unsigned frame() const; + void setTick(unsigned); + void setFrame(unsigned); + + void write(Xml&, const char*) const; + void read(QDomNode); + bool isValid() const { return true; } + }; + +//--------------------------------------------------------- +// PosLen +//--------------------------------------------------------- + +class PosLen : public Pos { + mutable unsigned _lenTick; + mutable unsigned _lenFrame; + mutable int sn; + + public: + PosLen(); + PosLen(const PosLen&); + void dump(int n = 0) const; + + void write(Xml&, const char*) const; + void read(QDomNode); + void setLenTick(unsigned); + void setLenFrame(unsigned); + unsigned lenTick() const; + unsigned lenFrame() const; + Pos end() const; + unsigned endTick() const { return end().tick(); } + unsigned endFrame() const { return end().frame(); } + void setPos(const Pos&); + + bool operator==(const PosLen& s) const; + }; +} + +#endif diff --git a/attic/muse_qt4_evolution/al/sig.cpp b/attic/muse_qt4_evolution/al/sig.cpp new file mode 100644 index 00000000..d8672200 --- /dev/null +++ b/attic/muse_qt4_evolution/al/sig.cpp @@ -0,0 +1,407 @@ +//============================================================================= +// AL +// Audio Utility Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "al.h" +#include "sig.h" +#include "xml.h" + +namespace AL { + +SigList sigmap; + +//--------------------------------------------------------- +// SigList +//--------------------------------------------------------- + +SigList::SigList() + { + insert(std::pair (MAX_TICK, new SigEvent(TimeSignature(4, 4), 0))); + } + +//--------------------------------------------------------- +// add +// signatures are only allowed at the beginning of +// a bar +//--------------------------------------------------------- + +void SigList::add(unsigned tick, const TimeSignature& s) + { + if (s.z == 0 || s.n == 0) { + printf("illegal signature %d/%d\n", s.z, s.n); + } + tick = raster1(tick, 0); + iSigEvent e = upper_bound(tick); + + if (tick == e->second->tick) { + e->second->sig = s; + } + else { + SigEvent* ne = e->second; + SigEvent* ev = new SigEvent(ne->sig, ne->tick); + ne->sig = s; + ne->tick = tick; + insert(std::pair (tick, ev)); + } + normalize(); + } + +//--------------------------------------------------------- +// del +//--------------------------------------------------------- + +void SigList::del(unsigned tick) + { +// printf("SigList::del(%d)\n", tick); + iSigEvent e = find(tick); + if (e == end()) { + printf("SigList::del(%d): not found\n", tick); + return; + } + iSigEvent ne = e; + ++ne; + if (ne == end()) { + printf("SigList::del() HALLO\n"); + return; + } + ne->second->sig = e->second->sig; + ne->second->tick = e->second->tick; + erase(e); + normalize(); + } + +//--------------------------------------------------------- +// SigList::normalize +//--------------------------------------------------------- + +void SigList::normalize() + { + TimeSignature sig(0, 0); + unsigned tick = 0; + iSigEvent ee; + + for (iSigEvent e = begin(); e != end();) { + if (sig.z == e->second->sig.z && sig.n == e->second->sig.n) { + e->second->tick = tick; + erase(ee); + } + sig = e->second->sig; + ee = e; + tick = e->second->tick; + ++e; + } + + int bar = 0; + for (iSigEvent e = begin(); e != end();) { + e->second->bar = bar; + int delta = e->first - e->second->tick; + int ticksB = ticks_beat(e->second->sig.n); + int ticksM = ticksB * e->second->sig.z; + bar += delta / ticksM; + if (delta % ticksM) // Teil eines Taktes + ++bar; + ++e; + } + } + +//--------------------------------------------------------- +// SigList::dump +//--------------------------------------------------------- + +void SigList::dump() const + { + printf("\nSigList:\n"); + for (ciSigEvent i = begin(); i != end(); ++i) { + printf("%6d %06d Bar %3d %02d/%d\n", + i->first, i->second->tick, + i->second->bar, i->second->sig.z, i->second->sig.n); + } + } + +void SigList::clear() + { + for (iSigEvent i = begin(); i != end(); ++i) + delete i->second; + SIGLIST::clear(); + insert(std::pair (MAX_TICK, new SigEvent(TimeSignature(4, 4), 0))); + } + +//--------------------------------------------------------- +// ticksMeasure +//--------------------------------------------------------- + +int SigList::ticksMeasure(const TimeSignature& sig) const + { + return ticks_beat(sig.n) * sig.z; + } + +int SigList::ticksMeasure(unsigned tick) const + { + ciSigEvent i = upper_bound(tick); + if (i == end()) { + printf("ticksMeasure: not found %d\n", tick); + // abort(); + return 0; + } + return ticksMeasure(i->second->sig); + } + +//--------------------------------------------------------- +// ticksBeat +//--------------------------------------------------------- + +int SigList::ticksBeat(unsigned tick) const + { + ciSigEvent i = upper_bound(tick); + return ticks_beat(i->second->sig.n); + } + +int SigList::ticks_beat(int n) const + { + int m = AL::division; + switch (n) { + case 1: m <<= 2; break; // 1536 + case 2: m <<= 1; break; // 768 + case 3: m += m >> 1; break; // 384+192 + case 4: break; // 384 + case 8: m >>= 1; break; // 192 + case 16: m >>= 2; break; // 96 + case 32: m >>= 3; break; // 48 + case 64: m >>= 4; break; // 24 + case 128: m >>= 5; break; // 12 + default: break; + } + return m; + } + +//--------------------------------------------------------- +// timesig +//--------------------------------------------------------- + +TimeSignature SigList::timesig(unsigned tick) const + { + ciSigEvent i = upper_bound(tick); + if (i == end()) { + printf("timesig(%d): not found\n", tick); + // abort(); + return TimeSignature(4,4); + } + return i->second->sig; + } + +//--------------------------------------------------------- +// tickValues +//--------------------------------------------------------- + +void SigList::tickValues(unsigned t, int* bar, int* beat, unsigned* tick) const + { + ciSigEvent e = upper_bound(t); + if (e == end()) { + fprintf(stderr, "tickValues(0x%x) not found(%zd)\n", t, size()); +//DEBUG +// abort(); + *bar = 0; + *beat = 0; + *tick = 0; + return; + } + + int delta = t - e->second->tick; + int ticksB = ticks_beat(e->second->sig.n); + int ticksM = ticksB * e->second->sig.z; + *bar = e->second->bar + delta / ticksM; + int rest = delta % ticksM; + *beat = rest / ticksB; + *tick = rest % ticksB; + } + +//--------------------------------------------------------- +// bar2tick +//--------------------------------------------------------- + +unsigned SigList::bar2tick(int bar, int beat, unsigned tick) const + { + ciSigEvent e; + + if (bar < 0) + bar = 0; + for (e = begin(); e != end();) { + ciSigEvent ee = e; + ++ee; + if (ee == end()) + break; + if (bar < ee->second->bar) + break; + e = ee; + } + int ticksB = ticks_beat(e->second->sig.n); + int ticksM = ticksB * e->second->sig.z; + return e->second->tick + (bar-e->second->bar)*ticksM + ticksB*beat + tick; + } + +//--------------------------------------------------------- +// raster +//--------------------------------------------------------- + +unsigned SigList::raster(unsigned t, int raster) const + { + if (raster == 1) + return t; + ciSigEvent e = upper_bound(t); + if (e == end()) { + printf("SigList::raster(%x,)\n", t); + // abort(); + return t; + } + int delta = t - e->second->tick; + int ticksM = ticks_beat(e->second->sig.n) * e->second->sig.z; + if (raster == 0) + raster = ticksM; + int rest = delta % ticksM; + int bb = (delta/ticksM)*ticksM; + return e->second->tick + bb + ((rest + raster/2)/raster)*raster; + } + +//--------------------------------------------------------- +// raster1 +// round down +//--------------------------------------------------------- + +unsigned SigList::raster1(unsigned t, int raster) const + { + if (raster == 1) + return t; + ciSigEvent e = upper_bound(t); + + int delta = t - e->second->tick; + int ticksM = ticks_beat(e->second->sig.n) * e->second->sig.z; + if (raster == 0) + raster = ticksM; + int rest = delta % ticksM; + int bb = (delta/ticksM)*ticksM; + return e->second->tick + bb + (rest/raster)*raster; + } + +//--------------------------------------------------------- +// raster2 +// round up +//--------------------------------------------------------- + +unsigned SigList::raster2(unsigned t, int raster) const + { + if (raster == 1) + return t; + ciSigEvent e = upper_bound(t); + + int delta = t - e->second->tick; + int ticksM = ticks_beat(e->second->sig.n) * e->second->sig.z; + if (raster == 0) + raster = ticksM; + int rest = delta % ticksM; + int bb = (delta/ticksM)*ticksM; + return e->second->tick + bb + ((rest+raster-1)/raster)*raster; + } + +//--------------------------------------------------------- +// rasterStep +//--------------------------------------------------------- + +int SigList::rasterStep(unsigned t, int raster) const + { + if (raster == 0) { + ciSigEvent e = upper_bound(t); + return ticks_beat(e->second->sig.n) * e->second->sig.z; + } + return raster; + } + +//--------------------------------------------------------- +// SigList::write +//--------------------------------------------------------- + +void SigList::write(Xml& xml) const + { + xml.stag("siglist"); + for (ciSigEvent i = begin(); i != end(); ++i) + i->second->write(xml, i->first); + xml.etag("siglist"); + } + +//--------------------------------------------------------- +// SigList::read +//--------------------------------------------------------- + +void SigList::read(QDomNode node) + { + while (!node.isNull()) { + QDomElement e = node.toElement(); + if (e.tagName() == "sig") { + SigEvent* t = new SigEvent(); + unsigned tick = t->read(node); + iSigEvent pos = find(tick); + if (pos != end()) + erase(pos); + insert(std::pair (tick, t)); + } + else + printf("MusE:SigList: unknown tag %s\n", e.tagName().toLatin1().data()); + node = node.nextSibling(); + } + normalize(); + } + +//--------------------------------------------------------- +// SigEvent::write +//--------------------------------------------------------- + +void SigEvent::write(Xml& xml, int at) const + { + xml.stag(QString("sig at=\"%1\"").arg(at)); + xml.tag("tick", tick); + xml.tag("nom", sig.z); + xml.tag("denom", sig.n); + xml.etag("sig"); + } + +//--------------------------------------------------------- +// SigEvent::read +//--------------------------------------------------------- + +int SigEvent::read(QDomNode node) + { + QDomElement e = node.toElement(); + int at = e.attribute("at", "0").toInt(); + node = node.firstChild(); + + while (!node.isNull()) { + QDomElement e = node.toElement(); + if (e.tagName() == "tick") + tick = e.text().toInt(); + else if (e.tagName() == "nom") + sig.z = e.text().toInt(); + else if (e.tagName() == "denom") + sig.n = e.text().toInt(); + else + printf("MusE:SigEvent: unknown tag %s\n", e.tagName().toLatin1().data()); + node = node.nextSibling(); + } + return at; + } + +} diff --git a/attic/muse_qt4_evolution/al/sig.h b/attic/muse_qt4_evolution/al/sig.h new file mode 100644 index 00000000..d0c70410 --- /dev/null +++ b/attic/muse_qt4_evolution/al/sig.h @@ -0,0 +1,103 @@ +//============================================================================= +// AL +// Audio Utility Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __SIG_H__ +#define __SIG_H__ + +namespace AL { + +#ifndef MAX_TICK +#define MAX_TICK (0x7fffffff/100) +#endif + +class Xml; + +//--------------------------------------------------------- +// TimeSignature +//--------------------------------------------------------- + +struct TimeSignature { + int z, n; + TimeSignature() { z = 4; n = 4; } + TimeSignature(int a, int b) { z = a; n = b; } + }; + +//--------------------------------------------------------- +// Signature Event +//--------------------------------------------------------- + +struct SigEvent { + TimeSignature sig; + unsigned tick; // signature valid from this position + int bar; // precomputed + + int read(QDomNode); + void write(Xml&, int) const; + + SigEvent() { } + SigEvent(const TimeSignature& s, unsigned tk) { + sig = s; + tick = tk; + bar = 0; + } + }; + +//--------------------------------------------------------- +// SigList +//--------------------------------------------------------- + +typedef std::map > SIGLIST; +typedef SIGLIST::iterator iSigEvent; +typedef SIGLIST::const_iterator ciSigEvent; +typedef SIGLIST::reverse_iterator riSigEvent; +typedef SIGLIST::const_reverse_iterator criSigEvent; + +class SigList : public SIGLIST { + int ticks_beat(int N) const; + void normalize(); + int ticksMeasure(const TimeSignature&) const; + + public: + SigList(); + void clear(); + void add(unsigned tick, const TimeSignature& s); + void del(unsigned tick); + + void read(QDomNode); + void write(Xml&) const; + void dump() const; + + TimeSignature timesig(unsigned tick) const; + void tickValues(unsigned t, int* bar, int* beat, unsigned* tick) const; + unsigned bar2tick(int bar, int beat, unsigned tick) const; + + int ticksMeasure(unsigned tick) const; + int ticksBeat(unsigned tick) const; + unsigned raster(unsigned tick, int raster) const; + unsigned raster1(unsigned tick, int raster) const; // round down + unsigned raster2(unsigned tick, int raster) const; // round up + int rasterStep(unsigned tick, int raster) const; + }; + +extern SigList sigmap; + +} + +#endif diff --git a/attic/muse_qt4_evolution/al/tempo.cpp b/attic/muse_qt4_evolution/al/tempo.cpp new file mode 100644 index 00000000..7d65c732 --- /dev/null +++ b/attic/muse_qt4_evolution/al/tempo.cpp @@ -0,0 +1,393 @@ +//============================================================================= +// AL +// Audio Utility Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "al.h" +#include "tempo.h" +#include "xml.h" + +namespace AL { + +TempoList tempomap; + +//--------------------------------------------------------- +// TempoList +//--------------------------------------------------------- + +TempoList::TempoList() + { + _tempo = 500000; + insert(std::pair (MAX_TICK+1, new TEvent(_tempo, 0))); + _tempoSN = 1; + _globalTempo = 100; + useList = true; + } + +//--------------------------------------------------------- +// add +//--------------------------------------------------------- + +void TempoList::add(unsigned tick, int tempo) + { + if (tick > MAX_TICK) + tick = MAX_TICK; + + iTEvent e = upper_bound(tick); + + if (tick == e->second->tick) + e->second->tempo = tempo; + else { + TEvent* ne = e->second; + TEvent* ev = new TEvent(ne->tempo, ne->tick); + ne->tempo = tempo; + ne->tick = tick; + insert(std::pair (tick, ev)); + } + normalize(); + } + +//--------------------------------------------------------- +// TempoList::normalize +//--------------------------------------------------------- + +void TempoList::normalize() + { + int frame = 0; + for (iTEvent e = begin(); e != end(); ++e) { + e->second->frame = frame; + unsigned dtick = e->first - e->second->tick; + double dtime = double(dtick) / (division * _globalTempo * 10000.0/e->second->tempo); + frame += lrint(dtime * sampleRate); + } + } + +//--------------------------------------------------------- +// TempoList::dump +//--------------------------------------------------------- + +void TempoList::dump() const + { + printf("\nTempoList:\n"); + for (ciTEvent i = begin(); i != end(); ++i) { + printf("%6d %06d Tempo %6d Frame %d\n", + i->first, i->second->tick, i->second->tempo, + i->second->frame); + } + } + +//--------------------------------------------------------- +// clear +//--------------------------------------------------------- + +void TempoList::clear() + { + for (iTEvent i = begin(); i != end(); ++i) + delete i->second; + TEMPOLIST::clear(); + insert(std::pair (MAX_TICK+1, new TEvent(500000, 0))); + ++_tempoSN; + } + +//--------------------------------------------------------- +// tempo +//--------------------------------------------------------- + +int TempoList::tempo(unsigned tick) const + { + if (useList) { + ciTEvent i = upper_bound(tick); + if (i == end()) { + printf("no TEMPO at tick %d,0x%x\n", tick, tick); + return 1000; + } + return i->second->tempo; + } + else + return _tempo; + } + +//--------------------------------------------------------- +// del +//--------------------------------------------------------- + +void TempoList::del(unsigned tick) + { +// printf("TempoList::del(%d)\n", tick); + iTEvent e = find(tick); + if (e == end()) { + printf("TempoList::del(%d): not found\n", tick); + return; + } + del(e); + ++_tempoSN; + } + +void TempoList::del(iTEvent e) + { + iTEvent ne = e; + ++ne; + if (ne == end()) { + printf("TempoList::del(): not found\n"); + return; + } + ne->second->tempo = e->second->tempo; + ne->second->tick = e->second->tick; + erase(e); + normalize(); + ++_tempoSN; + } + +//--------------------------------------------------------- +// change +//--------------------------------------------------------- + +void TempoList::change(unsigned tick, int newTempo) + { + iTEvent e = find(tick); + e->second->tempo = newTempo; + normalize(); + ++_tempoSN; + } + +//--------------------------------------------------------- +// setTempo +// called from transport window +// & slave mode tempo changes +//--------------------------------------------------------- + +void TempoList::setTempo(unsigned tick, int newTempo) + { + if (useList) + add(tick, newTempo); + else + _tempo = newTempo; + ++_tempoSN; + } + +//--------------------------------------------------------- +// setGlobalTempo +//--------------------------------------------------------- + +void TempoList::setGlobalTempo(int val) + { + _globalTempo = val; + ++_tempoSN; + normalize(); + } + +//--------------------------------------------------------- +// addTempo +//--------------------------------------------------------- + +void TempoList::addTempo(unsigned t, int tempo) + { + add(t, tempo); + ++_tempoSN; + } + +//--------------------------------------------------------- +// delTempo +//--------------------------------------------------------- + +void TempoList::delTempo(unsigned tick) + { + del(tick); + ++_tempoSN; + } + +//--------------------------------------------------------- +// changeTempo +//--------------------------------------------------------- + +void TempoList::changeTempo(unsigned tick, int newTempo) + { + change(tick, newTempo); + ++_tempoSN; + } + +//--------------------------------------------------------- +// setMasterFlag +//--------------------------------------------------------- + +bool TempoList::setMasterFlag(unsigned /*tick*/, bool val) + { + if (useList != val) { + useList = val; + ++_tempoSN; + return true; + } + return false; + } + +//--------------------------------------------------------- +// tick2frame +//--------------------------------------------------------- + +unsigned TempoList::tick2frame(unsigned tick, unsigned frame, int* sn) const + { + return (*sn == _tempoSN) ? frame : tick2frame(tick, sn); + } + +//--------------------------------------------------------- +// tick2frame +//--------------------------------------------------------- + +unsigned TempoList::tick2frame(unsigned tick, int* sn) const + { + int f; + if (useList) { + ciTEvent i = upper_bound(tick); + if (i == end()) { + printf("tick2frame(%d,0x%x): not found\n", tick, tick); + abort(); // debug + return 0; + } + unsigned dtick = tick - i->second->tick; + double dtime = double(dtick) / (division * _globalTempo * 10000.0/ i->second->tempo); + unsigned dframe = lrint(dtime * sampleRate); + f = i->second->frame + dframe; + } + else { + double t = (double(tick) * double(_tempo)) / (double(division) * _globalTempo * 10000.0); + f = lrint(t * sampleRate); + } + if (sn) + *sn = _tempoSN; + return f; + } + +//--------------------------------------------------------- +// frame2tick +// return cached value t if list did not change +//--------------------------------------------------------- + +unsigned TempoList::frame2tick(unsigned frame, unsigned t, int* sn) const + { + return (*sn == _tempoSN) ? t : frame2tick(frame, sn); + } + +//--------------------------------------------------------- +// frame2tick +//--------------------------------------------------------- + +unsigned TempoList::frame2tick(unsigned frame, int* sn) const + { + unsigned tick; + if (useList) { + ciTEvent e; + for (e = begin(); e != end();) { + ciTEvent ee = e; + ++ee; + if (ee == end()) + break; + if (frame < ee->second->frame) + break; + e = ee; + } + unsigned te = e->second->tempo; + int dframe = frame - e->second->frame; + double dtime = double(dframe) / double(sampleRate); + tick = e->second->tick + lrint(dtime * _globalTempo * division * 10000.0 / te); + } + else + tick = lrint((double(frame)/double(sampleRate)) * _globalTempo * division * 10000.0 / double(_tempo)); + if (sn) + *sn = _tempoSN; + return tick; + } + +//--------------------------------------------------------- +// TempoList::write +//--------------------------------------------------------- + +void TempoList::write(Xml& xml) const + { + xml.stag(QString("tempolist fix=\"%1\"").arg(_tempo)); + if (_globalTempo != 100) + xml.tag("globalTempo", _globalTempo); + for (ciTEvent i = begin(); i != end(); ++i) + i->second->write(xml, i->first); + xml.etag("tempolist"); + } + +//--------------------------------------------------------- +// TempoList::read +//--------------------------------------------------------- + +void TempoList::read(QDomNode node) + { + QDomElement e = node.toElement(); + _tempo = e.attribute("fix","500000").toInt(); + + node = node.firstChild(); + while (!node.isNull()) { + e = node.toElement(); + if (e.tagName() == "tempo") { + TEvent* t = new TEvent(); + unsigned tick = t->read(node); + iTEvent pos = find(tick); + if (pos != end()) + erase(pos); + insert(std::pair (tick, t)); + } + else if (e.tagName() == "globalTempo") + _globalTempo = e.text().toInt(); + else + printf("MusE:Tempolist: unknown tag %s\n", e.tagName().toLatin1().data()); + node = node.nextSibling(); + } + normalize(); + ++_tempoSN; + } + +//--------------------------------------------------------- +// TEvent::write +//--------------------------------------------------------- + +void TEvent::write(Xml& xml, int at) const + { + xml.stag(QString("tempo at=\"%1\"").arg(at)); + xml.tag("tick", tick); + xml.tag("val", tempo); + xml.etag("tempo"); + } + +//--------------------------------------------------------- +// TEvent::read +//--------------------------------------------------------- + +int TEvent::read(QDomNode node) + { + QDomElement e = node.toElement(); + int at = e.attribute("at","0").toInt(); + + node = node.firstChild(); + while (!node.isNull()) { + e = node.toElement(); + if (e.tagName() == "tick") + tick = e.text().toInt(); + else if (e.tagName() == "val") + tempo = e.text().toInt(); + else + printf("MusE:TEvent: unknown tag %s\n", e.tagName().toLatin1().data()); + node = node.nextSibling(); + } + return at; + } +} diff --git a/attic/muse_qt4_evolution/al/tempo.h b/attic/muse_qt4_evolution/al/tempo.h new file mode 100644 index 00000000..e2342003 --- /dev/null +++ b/attic/muse_qt4_evolution/al/tempo.h @@ -0,0 +1,101 @@ +//============================================================================= +// AL +// Audio Utility Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __TEMPO_H__ +#define __TEMPO_H__ + +namespace AL { + +#ifndef MAX_TICK +#define MAX_TICK (0x7fffffff/100) +#endif + +class Xml; + +//--------------------------------------------------------- +// Tempo Event +//--------------------------------------------------------- + +struct TEvent { + int tempo; + unsigned tick; // new tempo at tick + unsigned frame; // precomputed time for tick in sec + + int read(QDomNode); + void write(Xml&, int) const; + + TEvent() { } + TEvent(unsigned t, unsigned tk) { + tempo = t; + tick = tk; + frame = 0; + } + }; + +//--------------------------------------------------------- +// TempoList +//--------------------------------------------------------- + +typedef std::map > TEMPOLIST; +typedef TEMPOLIST::iterator iTEvent; +typedef TEMPOLIST::const_iterator ciTEvent; +typedef TEMPOLIST::reverse_iterator riTEvent; +typedef TEMPOLIST::const_reverse_iterator criTEvent; + +class TempoList : public TEMPOLIST { + int _tempoSN; // serial no to track tempo changes + bool useList; + int _tempo; // tempo if not using tempo list + int _globalTempo; // %percent 50-200% + + void normalize(); + void add(unsigned tick, int tempo); + void change(unsigned tick, int newTempo); + void del(iTEvent); + void del(unsigned tick); + + public: + TempoList(); + void clear(); + + void read(QDomNode); + void write(Xml&) const; + void dump() const; + + int tempo(unsigned tick) const; + unsigned tick2frame(unsigned tick, unsigned frame, int* sn) const; + unsigned tick2frame(unsigned tick, int* sn = 0) const; + unsigned frame2tick(unsigned frame, int* sn = 0) const; + unsigned frame2tick(unsigned frame, unsigned tick, int* sn) const; + int tempoSN() const { return _tempoSN; } + void setTempo(unsigned tick, int newTempo); + void addTempo(unsigned t, int tempo); + void delTempo(unsigned tick); + void changeTempo(unsigned tick, int newTempo); + bool setMasterFlag(unsigned tick, bool val); + int globalTempo() const { return _globalTempo; } + void setGlobalTempo(int val); + }; + +extern TempoList tempomap; +} + +#endif + diff --git a/attic/muse_qt4_evolution/al/xml.cpp b/attic/muse_qt4_evolution/al/xml.cpp new file mode 100644 index 00000000..7ae40b3e --- /dev/null +++ b/attic/muse_qt4_evolution/al/xml.cpp @@ -0,0 +1,362 @@ +//============================================================================= +// AL +// Audio Utility Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "xml.h" +#include "al.h" + +namespace AL { + +//--------------------------------------------------------- +// Xml +//--------------------------------------------------------- + +Xml::Xml() + { + level = 0; + } + +Xml::Xml(QIODevice* device) + : QTextStream(device) + { + setCodec("utf8"); + level = 0; + } + +//--------------------------------------------------------- +// putLevel +//--------------------------------------------------------- + +void Xml::putLevel() + { + for (int i = 0; i < level*2; ++i) + *this << ' '; + } + +//--------------------------------------------------------- +// header +//--------------------------------------------------------- + +void Xml::header() + { + *this << "" << endl; + } + +//--------------------------------------------------------- +// put +//--------------------------------------------------------- + +void Xml::put(const QString& s) + { + putLevel(); + *this << xmlString(s) << endl; + } + +//--------------------------------------------------------- +// stag +// +//--------------------------------------------------------- + +void Xml::stag(const QString& s) + { + putLevel(); + *this << '<' << s << '>' << endl; + ++level; + } + +//--------------------------------------------------------- +// etag +//--------------------------------------------------------- + +void Xml::etag(const char* s) + { + putLevel(); + *this << "' << endl; + --level; + } + +//--------------------------------------------------------- +// tagE +// +//--------------------------------------------------------- + +void Xml::tagE(const QString& s) + { + putLevel(); + *this << '<' << s << "/>" << endl; + } + +void Xml::tag(const char* name, int val) + { + putLevel(); + *this << '<' << name << '>' << val << "' << endl; + } + +void Xml::tag(const char* name, unsigned val) + { + putLevel(); + *this << '<' << name << '>' << val << "' << endl; + } + +void Xml::tag(const char* name, float val) + { + putLevel(); + *this << '<' << name << '>' << val << "' << endl; + } + +void Xml::tag(const char* name, const double& val) + { + putLevel(); + *this << '<' << name << '>' << val << "' << endl; + } + +void Xml::tag(const char* name, const QString& val) + { + putLevel(); + *this << "<" << name << ">" << xmlString(val) << "' << endl; + } + +void Xml::tag(const char* name, const QColor& color) + { + putLevel(); + *this << QString("<%1 r=\"%2\" g=\"%3\" b=\"%4\"/>") + .arg(name).arg(color.red()).arg(color.green()).arg(color.blue()) << endl; + } + +void Xml::tag(const char* name, const QWidget* g) + { + tag(name, QRect(g->pos(), g->size())); + } + +void Xml::tag(const char* name, const QRect& r) + { + putLevel(); + *this << "<" << name; + *this << QString(" x=\"%1\" y=\"%2\" w=\"%3\" h=\"%4\"/>") + .arg(r.x()).arg(r.y()).arg(r.width()).arg(r.height()) << endl; + } + +//--------------------------------------------------------- +// xmlString +//--------------------------------------------------------- + +QString Xml::xmlString(const QString& ss) + { + QString s(ss); + s.replace('&', "&"); + s.replace('<', "<"); + s.replace('>', ">"); + s.replace('\'', "'"); + s.replace('"', """); + return s; + } + +//--------------------------------------------------------- +// readGeometry +//--------------------------------------------------------- + +QRect readGeometry(QDomNode node) + { + QDomElement e = node.toElement(); + int x = e.attribute("x","0").toInt(); + int y = e.attribute("y","0").toInt(); + int w = e.attribute("w","50").toInt(); + int h = e.attribute("h","50").toInt(); + return QRect(x, y, w, h); + } + +//--------------------------------------------------------- +// writeProperties +//--------------------------------------------------------- + +void Xml::writeProperties(const QObject* o) + { + const QMetaObject* meta = o->metaObject(); + + // + // start from dummy "muse" property, assuming this is the + // first muse propertie in widget hierarchy + // + int from = meta->indexOfProperty("muse") + 1; + int n = meta->propertyCount(); + for (int i = from; i < n; ++i) { + QMetaProperty p = meta->property(i); + if (!p.isScriptable()) + continue; + const char* name = p.name(); + QVariant v = p.read(o); + switch(v.type()) { + case QVariant::Bool: + case QVariant::Int: + tag(name, v.toInt()); + break; + case QVariant::Double: + tag(name, v.toDouble()); + break; + case QVariant::String: + tag(name, v.toString()); + break; + case QVariant::Rect: + tag(name, v.toRect()); + break; + case QVariant::Point: + { + QPoint p = v.toPoint(); + putLevel(); + *this << "<" << name << QString(" x=\"%1\" y=\"%2\" />") + .arg(p.x()).arg(p.y()) << endl; + } + break; + + default: + printf("MusE:%s type %d not implemented\n", + meta->className(), v.type()); + break; + } + } + } + +//--------------------------------------------------------- +// readProperties +//--------------------------------------------------------- + +void readProperties(QObject* o, QDomNode node) + { + const QMetaObject* meta = o->metaObject(); + + QDomElement e = node.toElement(); + QString tag(e.tagName()); + int idx = meta->indexOfProperty(tag.toLatin1().data()); + if (idx == -1) { + printf("MusE:%s: unknown tag %s\n", + meta->className(), tag.toLatin1().data()); + return; + } + QMetaProperty p = meta->property(idx); + QVariant v; + switch(p.type()) { + case QVariant::Int: + case QVariant::Bool: + v.setValue(e.text().toInt()); + break; + case QVariant::Double: + v.setValue(e.text().toDouble()); + break; + case QVariant::String: + v.setValue(e.text()); + break; + case QVariant::Rect: + v.setValue(AL::readGeometry(node)); + break; + case QVariant::Point: + { + int x = e.attribute("x","0").toInt(); + int y = e.attribute("y","0").toInt(); + v.setValue(QPoint(x, y)); + } + break; + default: + printf("MusE:%s type %d not implemented\n", + meta->className(), p.type()); + return; + } + if (p.isWritable()) + p.write(o, v); + } + +//--------------------------------------------------------- +// dump +//--------------------------------------------------------- + +void Xml::dump(int len, const unsigned char* p) + { + putLevel(); + int col = 0; + setFieldWidth(5); + setNumberFlags(numberFlags() | QTextStream::ShowBase); + setIntegerBase(16); + for (int i = 0; i < len; ++i, ++col) { + if (col >= 16) { + setFieldWidth(0); + *this << endl; + col = 0; + putLevel(); + setFieldWidth(5); + } + *this << (p[i] & 0xff); + } + if (col) + *this << endl << dec; + setFieldWidth(0); + setIntegerBase(10); + } + +//--------------------------------------------------------- +// domError +//--------------------------------------------------------- + +void domError(QDomNode node) + { + QDomElement e = node.toElement(); + QString tag(e.tagName()); + QString s; + QDomNode dn(node); + while (!dn.parentNode().isNull()) { + dn = dn.parentNode(); + const QDomElement e = dn.toElement(); + const QString k(e.tagName()); + if (!s.isEmpty()) + s += ":"; + s += k; + } + fprintf(stderr, "%s: Unknown Node <%s>, type %d\n", + s.toLatin1().data(), tag.toLatin1().data(), node.nodeType()); + if (node.isText()) { + fprintf(stderr, " text node <%s>\n", node.toText().data().toLatin1().data()); + } + } + +//--------------------------------------------------------- +// domNotImplemented +//--------------------------------------------------------- + +void domNotImplemented(QDomNode node) + { + if (!AL::debugMsg) + return; + QDomElement e = node.toElement(); + QString tag(e.tagName()); + QString s; + QDomNode dn(node); + while (!dn.parentNode().isNull()) { + dn = dn.parentNode(); + const QDomElement e = dn.toElement(); + const QString k(e.tagName()); + if (!s.isEmpty()) + s += ":"; + s += k; + } + fprintf(stderr, "%s: Node not implemented: <%s>, type %d\n", + s.toLatin1().data(), tag.toLatin1().data(), node.nodeType()); + if (node.isText()) { + fprintf(stderr, " text node <%s>\n", node.toText().data().toLatin1().data()); + } + } +} + diff --git a/attic/muse_qt4_evolution/al/xml.h b/attic/muse_qt4_evolution/al/xml.h new file mode 100644 index 00000000..340d8190 --- /dev/null +++ b/attic/muse_qt4_evolution/al/xml.h @@ -0,0 +1,69 @@ +//============================================================================= +// AL +// Audio Utility Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __XML_H__ +#define __XML_H__ + +namespace AL { + +//--------------------------------------------------------- +// Xml +//--------------------------------------------------------- + +class Xml : public QTextStream { + int level; + + public: + Xml(); + Xml(QIODevice*); + + void header(); + void putLevel(); + + void put(const QString&); + + void stag(const QString&); + void etag(const char*); + + void tagE(const QString&); + + void tag(const char* name, int); + void tag(const char* name, unsigned); + void tag(const char* name, const double& val); + void tag(const char* name, float val); + void tag(const char* name, const QString& s); + void tag(const char* name, const QColor& color); + void tag(const char* name, const QWidget* g); + void tag(const char* name, const QRect& r); + + void dump(int n, const unsigned char*); + void writeProperties(const QObject*); + + static QString xmlString(const QString&); + }; + +extern QRect readGeometry(QDomNode); +extern void readProperties(QObject* o, QDomNode node); +extern void domError(QDomNode node); +extern void domNotImplemented(QDomNode node); +} + +#endif + diff --git a/attic/muse_qt4_evolution/all.h b/attic/muse_qt4_evolution/all.h new file mode 100644 index 00000000..3ec26518 --- /dev/null +++ b/attic/muse_qt4_evolution/all.h @@ -0,0 +1,123 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __ALLQT_H__ +#define __ALLQT_H__ + +#include +#ifndef __APPLE__ +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#endif + diff --git a/attic/muse_qt4_evolution/awl/CMakeLists.txt b/attic/muse_qt4_evolution/awl/CMakeLists.txt new file mode 100644 index 00000000..0544c82d --- /dev/null +++ b/attic/muse_qt4_evolution/awl/CMakeLists.txt @@ -0,0 +1,112 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +include(${PROJECT_SOURCE_DIR}/pch.txt) + +MACRO(WRAP_CPP outfiles ) + FOREACH(it ${ARGN}) + SET(${outfiles} ${${outfiles}} ${it}.cpp) + ENDFOREACH(it) + ENDMACRO(WRAP_CPP) + +MACRO(WRAP_H outfiles ) + FOREACH(it ${ARGN}) + SET(${outfiles} ${${outfiles}} ${it}.h) + ENDFOREACH(it) + ENDMACRO(WRAP_H) + +set(mocs + aslider knob panknob slider volknob volslider floatentry + volentry panentry midivolentry midipanentry midipanknob + mslider midimslider midimeter combobox checkbox posedit + pitchedit poslabel pitchlabel tempolabel sigedit tcanvas + tempoedit drawbar + ) + +WRAP_H(mocH ${mocs}) +WRAP_CPP(mocCPP ${mocs}) + +QT4_WRAP_CPP (moc_headers ${mocH}) + +set(awl_src + awl.cpp utils.cpp ${mocCPP} ${moc_headers} + ) + +add_library ( + awl + STATIC + ${awl_src} + ${PROJECT_BINARY_DIR}/all.h.pch + ) + +set_target_properties( awl + PROPERTIES COMPILE_FLAGS "-fPIC -include ${PROJECT_BINARY_DIR}/all.h" + ) + +IF (APPLE) + message("Not yet able to build awlplugin under OS X.") +ELSE (APPLE) + + # + # build libawlplugin.so + # + QT4_WRAP_CPP (moc_awlplugin_headers + awlplugin.h + volknob.h knob.h aslider.h + slider.h volslider.h mslider.h + posedit.h poslabel.h + tempoedit.h tempolabel.h + combobox.h checkbox.h + panknob.h midipanknob.h + floatentry.h + drawbar.h + ) + + add_library ( awlplugin SHARED + awlplugin.cpp + volknob.cpp knob.cpp aslider.cpp + slider.cpp volslider.cpp mslider.cpp + posedit.cpp poslabel.cpp + tempoedit.cpp tempolabel.cpp + combobox.cpp checkbox.cpp + panknob.cpp midipanknob.cpp + floatentry.cpp + drawbar.cpp + ${moc_awlplugin_headers} + ${PROJECT_BINARY_DIR}/all-pic.h.pch + ) + + set_target_properties( awlplugin + PROPERTIES COMPILE_FLAGS + "-D_GNU_SOURCE -D_REENTRANT -DHAVE_CONFIG_H -DQT_PLUGIN -DQT_SHARED -DQT_NO_DEBUG -include ${PROJECT_BINARY_DIR}/all-pic.h" + ) + target_link_libraries( awlplugin + al pthread asound + ) + + install( TARGETS awlplugin DESTINATION ${QT_PLUGINS_DIR}/designer/ ) + + add_executable( ltest ltest.cpp ) + target_link_libraries ( ltest + awlplugin + ${QT_LIBRARIES} + ) + +ENDIF (APPLE) diff --git a/attic/muse_qt4_evolution/awl/aslider.cpp b/attic/muse_qt4_evolution/awl/aslider.cpp new file mode 100644 index 00000000..79a36b88 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/aslider.cpp @@ -0,0 +1,241 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "fastlog.h" +#include "aslider.h" + +namespace Awl { + +//--------------------------------------------------------- +// AbstractSlider +//--------------------------------------------------------- + +AbstractSlider::AbstractSlider(QWidget* parent) + : QWidget(parent), _scaleColor(Qt::black), _scaleValueColor(Qt::blue) + { + _id = 0; + _value = 0.5; + _minValue = 0.0; + _maxValue = 1.0; + _lineStep = 0.1; + _pageStep = 0.2; + _center = false; + _invert = false; + _scaleWidth = 4; + _log = false; + _integer = false; + } + +//--------------------------------------------------------- +// setEnabled +//--------------------------------------------------------- + +void AbstractSlider::setEnabled(bool val) + { + QWidget::setEnabled(val); + update(); + } + +//--------------------------------------------------------- +// setCenter +//! If the center flag is set, a notch is drawn to +//! show the center position. +//--------------------------------------------------------- + +void AbstractSlider::setCenter(bool val) + { + if (val != _center) { + _center = val; + update(); + } + } + +//!-------------------------------------------------------- +// setScaleWidth +//--------------------------------------------------------- + +void AbstractSlider::setScaleWidth(int val) + { + if (val != _scaleWidth) { + _scaleWidth = val; + update(); + } + } + +//--------------------------------------------------------- +// setScaleColor +//--------------------------------------------------------- + +void AbstractSlider::setScaleColor(const QColor& c) + { + if (c != _scaleColor) { + _scaleColor = c; + update(); + } + } + +//--------------------------------------------------------- +// setScaleValueColor +//--------------------------------------------------------- + +void AbstractSlider::setScaleValueColor(const QColor& c) + { + if (c != _scaleValueColor) { + _scaleValueColor = c; + update(); + } + } + +//--------------------------------------------------------- +// wheelEvent +//--------------------------------------------------------- + +void AbstractSlider::wheelEvent(QWheelEvent* ev) + { + double div = 120.0; + if (ev->modifiers() & Qt::ShiftModifier) + _value += (ev->delta() * pageStep()) / div; + else + _value += (ev->delta() * lineStep()) / div; + if (_value < _minValue) + _value = _minValue; + else if (_value > _maxValue) + _value = _maxValue; + valueChange(); + update(); + } + +//--------------------------------------------------------- +// keyPressEvent +//--------------------------------------------------------- + +void AbstractSlider::keyPressEvent(QKeyEvent* ev) + { + double oval = _value; + + switch (ev->key()) { + case Qt::Key_Home: _value = _minValue; break; + case Qt::Key_End: _value = _maxValue; break; + case Qt::Key_Up: + case Qt::Key_Left: _value += lineStep(); break; + case Qt::Key_Down: + case Qt::Key_Right: _value -= lineStep(); break; + case Qt::Key_PageDown: _value -= pageStep(); break; + case Qt::Key_PageUp: _value += pageStep(); break; + default: + break; + } + if (_value < _minValue) + _value = _minValue; + else if (_value > _maxValue) + _value = _maxValue; + + if (oval != _value) { + if (_integer && (rint(oval) == rint(_value))) + return; + valueChange(); + update(); + } + } + +//--------------------------------------------------------- +// setValue +//--------------------------------------------------------- + +void AbstractSlider::setValue(double val) + { + if (_log) { + if (val == 0.0f) + _value = _minValue; + else { + _value = fast_log10(val) * 20.0f; + if (_value < _minValue) + _value = _minValue; + } + } + else if (_integer) + _value = rint(val); + else + _value = val; + update(); + } + +//--------------------------------------------------------- +// valueChange +//--------------------------------------------------------- + +void AbstractSlider::valueChange() + { + emit valueChanged(value(), _id); + } + +//--------------------------------------------------------- +// value +//--------------------------------------------------------- + +double AbstractSlider::value() const + { + if (_log) + return pow(10.0, _value*0.05f); + if (_integer) + return rint(_value); + return _value; + } + +//--------------------------------------------------------- +// minLogValue +//--------------------------------------------------------- + +//double AbstractSlider::minValue() const { +// return _log ? pow(10.0, _minValue*0.05f) : _minValue; +//} + +//--------------------------------------------------------- +// setMinLogValue +//--------------------------------------------------------- + +void AbstractSlider::setMinLogValue(double val) { + if (_log) { + if (val == 0.0f) _minValue = -100; + else _minValue = fast_log10(val) * 20.0f; + } + else _minValue = val; +} + +//--------------------------------------------------------- +// maxLogValue +//--------------------------------------------------------- + +//double AbstractSlider::maxValue() const { +// return _log ? pow(10.0, _maxValue*0.05f) : _maxValue; +//} + +//--------------------------------------------------------- +// setMaxLogValue +//--------------------------------------------------------- + +void AbstractSlider::setMaxLogValue(double val) { + if (_log) { + _maxValue = fast_log10(val) * 20.0f; + } + else _maxValue = val; +} + +} diff --git a/attic/muse_qt4_evolution/awl/aslider.h b/attic/muse_qt4_evolution/awl/aslider.h new file mode 100644 index 00000000..32fc89f9 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/aslider.h @@ -0,0 +1,135 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AWLASLIDER_H__ +#define __AWLASLIDER_H__ + +namespace Awl { + +//--------------------------------------------------------- +// AbstractSlider +// +//! The AwlAbstractSlider class provides an double value +//! within a range +// +//! The class is designed as a common super class for +//! widgets like AwlKnob and AwlSlider +//! +//--------------------------------------------------------- + +class AbstractSlider : public QWidget { + + Q_OBJECT + Q_PROPERTY(double value READ value WRITE setValue) + Q_PROPERTY(bool center READ center WRITE setCenter) + Q_PROPERTY(bool invertedAppearance READ invertedAppearance WRITE setInvertedAppearance) + + Q_PROPERTY(int scaleWidth READ scaleWidth WRITE setScaleWidth) + Q_PROPERTY(QColor scaleColor READ scaleColor WRITE setScaleColor) + Q_PROPERTY(QColor scaleValueColor READ scaleValueColor WRITE setScaleValueColor) + + Q_PROPERTY(int id READ id WRITE setId) + + Q_PROPERTY(double minValue READ minValue WRITE setMinValue) + Q_PROPERTY(double maxValue READ maxValue WRITE setMaxValue) + Q_PROPERTY(double lineStep READ lineStep WRITE setLineStep) + Q_PROPERTY(double pageStep READ pageStep WRITE setPageStep) + Q_PROPERTY(bool log READ log WRITE setLog) + Q_PROPERTY(bool integer READ integer WRITE setInteger) + + protected: + int _id; + double _value; + double _minValue, _maxValue, _lineStep, _pageStep; + bool _center; + bool _invert; + int _scaleWidth; //! scale line width + QColor _scaleColor; + QColor _scaleValueColor; + bool _log; + bool _integer; + + virtual void wheelEvent(QWheelEvent*); + virtual void keyPressEvent(QKeyEvent*); + virtual void valueChange(); + + signals: + void valueChanged(double, int); + + public slots: + virtual void setValue(double v); + + public: + AbstractSlider(QWidget* parent = 0); + + virtual void setCenter(bool val); + virtual void setScaleWidth(int); + virtual void setScaleColor(const QColor&); + virtual void setScaleValueColor(const QColor&); + + //! return the center flag + bool center() const { return _center; } + + //! return the scale line width + int scaleWidth() const { return _scaleWidth; } + + //! return current scale color + QColor scaleColor() const { return _scaleColor; } + + //! return color of active scale part + QColor scaleValueColor() const { return _scaleValueColor; } + + virtual void setInvertedAppearance(bool val) { _invert = val; } + bool invertedAppearance() const { return _invert; } + + int id() const { return _id; } + void setId(int i) { _id = i; } + + virtual double value() const; + + double minValue() const { return _minValue; } + void setMinValue(double v) { _minValue = v; } + void setMinLogValue(double v); + double maxValue() const {return _maxValue; } + void setMaxValue(double v) { _maxValue = v; } + void setMaxLogValue(double v); + void setRange(double a, double b) { + setMinValue(a); + setMaxValue(b); + } + void setLogRange(double a, double b) { + setMinLogValue(a); + setMaxLogValue(b); + } + bool log() const { return _log; } + void setLog(bool v) { _log = v; } + bool integer() const { return _integer; } + void setInteger(bool v) { _integer = v; } + double lineStep() const { return _lineStep; } + void setLineStep(double v) { _lineStep = v; } + double pageStep() const { return _pageStep; } + void setPageStep(double f) { _pageStep = f; } + void setEnabled(bool val); + }; + +} + +#endif + diff --git a/attic/muse_qt4_evolution/awl/awl.cpp b/attic/muse_qt4_evolution/awl/awl.cpp new file mode 100644 index 00000000..87aac3e7 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/awl.cpp @@ -0,0 +1,27 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "awl.h" + +namespace Awl { +// int sampleRate = 44100; +// int mtcType = 0; + }; + diff --git a/attic/muse_qt4_evolution/awl/awl.h b/attic/muse_qt4_evolution/awl/awl.h new file mode 100644 index 00000000..2019c4bd --- /dev/null +++ b/attic/muse_qt4_evolution/awl/awl.h @@ -0,0 +1,30 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AWL_H__ +#define __AWL_H__ + +namespace Awl { +// extern int sampleRate; +// extern int mtcType; + }; + +#endif + diff --git a/attic/muse_qt4_evolution/awl/awlplugin.cpp b/attic/muse_qt4_evolution/awl/awlplugin.cpp new file mode 100644 index 00000000..43435f5e --- /dev/null +++ b/attic/muse_qt4_evolution/awl/awlplugin.cpp @@ -0,0 +1,127 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "volknob.h" +#include "volslider.h" +#include "mslider.h" +#include "awlplugin.h" +#include "posedit.h" +#include "poslabel.h" +#include "tempoedit.h" +#include "tempolabel.h" +#include "checkbox.h" +#include "combobox.h" +#include "floatentry.h" +#include "panknob.h" +#include "midipanknob.h" +#include "drawbar.h" + +#include +#include + +QWidget* KnobPlugin::createWidget(QWidget* parent) + { + return new Awl::Knob(parent); + } +QWidget* VolKnobPlugin::createWidget(QWidget* parent) + { + return new Awl::VolKnob(parent); + } +QWidget* SliderPlugin::createWidget(QWidget* parent) + { + return new Awl::Slider(parent); + } +QWidget* VolSliderPlugin::createWidget(QWidget* parent) + { + return new Awl::VolSlider(parent); + } +QWidget* MeterSliderPlugin::createWidget(QWidget* parent) + { + return new Awl::MeterSlider(parent); + } +QWidget* PosEditPlugin::createWidget(QWidget* parent) + { + return new Awl::PosEdit(parent); + } +QWidget* PosLabelPlugin::createWidget(QWidget* parent) + { + return new Awl::PosLabel(parent); + } +QWidget* TempoEditPlugin::createWidget(QWidget* parent) + { + return new Awl::TempoEdit(parent); + } +QWidget* TempoLabelPlugin::createWidget(QWidget* parent) + { + return new Awl::TempoLabel(parent); + } +QWidget* CheckBoxPlugin::createWidget(QWidget* parent) + { + return new Awl::CheckBox(parent); + } +QWidget* ComboBoxPlugin::createWidget(QWidget* parent) + { + return new Awl::ComboBox(parent); + } +QWidget* FloatEntryPlugin::createWidget(QWidget* parent) + { + return new Awl::FloatEntry(parent); + } +QWidget* PanKnobPlugin::createWidget(QWidget* parent) + { + return new Awl::PanKnob(parent); + } +QWidget* MidiPanKnobPlugin::createWidget(QWidget* parent) + { + return new Awl::MidiPanKnob(parent); + } +QWidget* DrawbarPlugin::createWidget(QWidget* parent) + { + return new Awl::Drawbar(parent); + } + +//--------------------------------------------------------- +// customWidgets +//--------------------------------------------------------- + +QList AwlPlugins::customWidgets() const + { + QList plugins; + plugins + << new VolKnobPlugin + << new PanKnobPlugin + << new MidiPanKnobPlugin + << new KnobPlugin + << new SliderPlugin + << new VolSliderPlugin + << new MeterSliderPlugin + << new PosEditPlugin + << new PosLabelPlugin + << new TempoEditPlugin + << new TempoLabelPlugin + << new CheckBoxPlugin + << new ComboBoxPlugin + << new FloatEntryPlugin + << new DrawbarPlugin; + return plugins; + } + +Q_EXPORT_PLUGIN(AwlPlugins) + diff --git a/attic/muse_qt4_evolution/awl/awlplugin.h b/attic/muse_qt4_evolution/awl/awlplugin.h new file mode 100644 index 00000000..79b180fd --- /dev/null +++ b/attic/muse_qt4_evolution/awl/awlplugin.h @@ -0,0 +1,273 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AWLPLUGIN_H__ +#define __AWLPLUGIN_H__ + +#include + +//--------------------------------------------------------- +// AwlPlugin +//--------------------------------------------------------- + +class AwlPlugin : public QDesignerCustomWidgetInterface { + Q_INTERFACES(QDesignerCustomWidgetInterface) + bool m_initialized; + + public: + AwlPlugin() : m_initialized(false) { } + bool isContainer() const { return false; } + bool isInitialized() const { return m_initialized; } + QIcon icon() const { return QIcon(); } + virtual QString codeTemplate() const { return QString(); } + QString whatsThis() const { return QString(); } + QString toolTip() const { return QString(); } + QString group() const { return "MusE Awl Widgets"; } + void initialize(QDesignerFormEditorInterface *) { + if (m_initialized) + return; + m_initialized = true; + } + }; + +//--------------------------------------------------------- +// KnobPlugin +//--------------------------------------------------------- + +class KnobPlugin : public QObject, public AwlPlugin { + Q_OBJECT + + public: + KnobPlugin(QObject* parent = 0) : QObject(parent) {} + QString includeFile() const { return QString("awl/knob.h"); } + QString name() const { return "Awl::Knob"; } + QWidget* createWidget(QWidget* parent); + }; + +//--------------------------------------------------------- +// VolKnobPlugin +//--------------------------------------------------------- + +class VolKnobPlugin : public QObject, public AwlPlugin { + Q_OBJECT + + public: + VolKnobPlugin(QObject* parent = 0) : QObject(parent) {} + QString includeFile() const { return "awl/volknob.h"; } + QString name() const { return "Awl::VolKnob"; } + QWidget* createWidget(QWidget* parent); + }; + +//--------------------------------------------------------- +// SliderPlugin +//--------------------------------------------------------- + +class SliderPlugin : public QObject, public AwlPlugin { + Q_OBJECT + + public: + SliderPlugin(QObject* parent = 0) : QObject(parent) {} + QString includeFile() const { return "awl/slider.h"; } + QString name() const { return "Awl::Slider"; } + QWidget* createWidget(QWidget* parent); + }; + +//--------------------------------------------------------- +// VolSliderPlugin +//--------------------------------------------------------- + +class VolSliderPlugin : public QObject, public AwlPlugin { + Q_OBJECT + + public: + VolSliderPlugin(QObject* parent = 0) : QObject(parent) {} + QString includeFile() const { return "awl/volslider.h"; } + QString name() const { return "Awl::VolSlider"; } + QWidget* createWidget(QWidget* parent); + }; + +//--------------------------------------------------------- +// MeterSliderPlugin +//--------------------------------------------------------- + +class MeterSliderPlugin : public QObject, public AwlPlugin { + Q_OBJECT + + public: + MeterSliderPlugin(QObject* parent = 0) : QObject(parent) {} + QString includeFile() const { return "awl/mslider.h"; } + QString name() const { return "Awl::MeterSlider"; } + QWidget* createWidget(QWidget* parent); + }; + +//--------------------------------------------------------- +// PosEditPlugin +//--------------------------------------------------------- + +class PosEditPlugin : public QObject, public AwlPlugin { + Q_OBJECT + + public: + PosEditPlugin(QObject* parent = 0) : QObject(parent) {} + QString includeFile() const { return "awl/posedit.h"; } + QString name() const { return "Awl::PosEdit"; } + QWidget* createWidget(QWidget* parent); + }; + +//--------------------------------------------------------- +// PosLabelPlugin +//--------------------------------------------------------- + +class PosLabelPlugin : public QObject, public AwlPlugin { + Q_OBJECT + + public: + PosLabelPlugin(QObject* parent = 0) : QObject(parent) {} + QString includeFile() const { return "awl/poslabel.h"; } + QString name() const { return "Awl::PosLabel"; } + QWidget* createWidget(QWidget* parent); + }; + +//--------------------------------------------------------- +// TempoEditPlugin +//--------------------------------------------------------- + +class TempoEditPlugin : public QObject, public AwlPlugin { + Q_OBJECT + + public: + TempoEditPlugin(QObject* parent = 0) : QObject(parent) {} + QString includeFile() const { return "awl/tempoedit.h"; } + QString name() const { return "Awl::TempoEdit"; } + QWidget* createWidget(QWidget* parent); + }; + +//--------------------------------------------------------- +// TempoLabelPlugin +//--------------------------------------------------------- + +class TempoLabelPlugin : public QObject, public AwlPlugin { + Q_OBJECT + + public: + TempoLabelPlugin(QObject* parent = 0) : QObject(parent) {} + QString includeFile() const { return "awl/tempolabel.h"; } + QString name() const { return "Awl::TempoLabel"; } + QWidget* createWidget(QWidget* parent); + }; + +//--------------------------------------------------------- +// CheckBoxPlugin +//--------------------------------------------------------- + +class CheckBoxPlugin : public QObject, public AwlPlugin { + Q_OBJECT + + public: + CheckBoxPlugin(QObject* parent = 0) : QObject(parent) {} + QString includeFile() const { return "awl/checkbox.h"; } + QString name() const { return "Awl::CheckBox"; } + QWidget* createWidget(QWidget* parent); + }; + +//--------------------------------------------------------- +// ComboBoxPlugin +//--------------------------------------------------------- + +class ComboBoxPlugin : public QObject, public AwlPlugin { + Q_OBJECT + + public: + ComboBoxPlugin(QObject* parent = 0) : QObject(parent) {} + QString includeFile() const { return "awl/combobox.h"; } + QString name() const { return "Awl::ComboBox"; } + QWidget* createWidget(QWidget* parent); + }; + +//--------------------------------------------------------- +// FloatEntryPlugin +//--------------------------------------------------------- + +class FloatEntryPlugin : public QObject, public AwlPlugin { + Q_OBJECT + + public: + FloatEntryPlugin(QObject* parent = 0) : QObject(parent) {} + QString includeFile() const { return "awl/floatentry.h"; } + QString name() const { return "Awl::FloatEntry"; } + QWidget* createWidget(QWidget* parent); + }; + +//--------------------------------------------------------- +// PanKnobPlugin +//--------------------------------------------------------- + +class PanKnobPlugin : public QObject, public AwlPlugin { + Q_OBJECT + + public: + PanKnobPlugin(QObject* parent = 0) : QObject(parent) {} + QString includeFile() const { return "awl/panknob.h"; } + QString name() const { return "Awl::PanKnob"; } + QWidget* createWidget(QWidget* parent); + }; + +//--------------------------------------------------------- +// MidiPanKnobPlugin +//--------------------------------------------------------- + +class MidiPanKnobPlugin : public QObject, public AwlPlugin { + Q_OBJECT + + public: + MidiPanKnobPlugin(QObject* parent = 0) : QObject(parent) {} + QString includeFile() const { return "awl/midipanknob.h"; } + QString name() const { return "Awl::MidiPanKnob"; } + QWidget* createWidget(QWidget* parent); + }; + +//--------------------------------------------------------- +// DrawbarPlugin +//--------------------------------------------------------- + +class DrawbarPlugin : public QObject, public AwlPlugin { + Q_OBJECT + + public: + DrawbarPlugin(QObject* parent = 0) : QObject(parent) {} + QString includeFile() const { return "awl/drawbar.h"; } + QString name() const { return "Awl::Drawbar"; } + QWidget* createWidget(QWidget* parent); + }; + +//--------------------------------------------------------- +// AwlPlugins +//--------------------------------------------------------- + +class AwlPlugins : public QObject, public QDesignerCustomWidgetCollectionInterface { + Q_OBJECT + Q_INTERFACES(QDesignerCustomWidgetCollectionInterface) + + public: + QList customWidgets() const; + }; + +#endif + diff --git a/attic/muse_qt4_evolution/awl/checkbox.cpp b/attic/muse_qt4_evolution/awl/checkbox.cpp new file mode 100644 index 00000000..6ef74386 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/checkbox.cpp @@ -0,0 +1,36 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "checkbox.h" + +namespace Awl { + +//--------------------------------------------------------- +// CheckBox +//--------------------------------------------------------- + +CheckBox::CheckBox(QWidget* parent) + : QCheckBox(parent) + { + _id = 0; + connect(this, SIGNAL(toggled(bool)), SLOT(hasToggled(bool))); + } +} + diff --git a/attic/muse_qt4_evolution/awl/checkbox.h b/attic/muse_qt4_evolution/awl/checkbox.h new file mode 100644 index 00000000..ac67fc57 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/checkbox.h @@ -0,0 +1,55 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AWLCHECKBOX_H__ +#define __AWLCHECKBOX_H__ + +namespace Awl { + +//--------------------------------------------------------- +// CheckBox +//--------------------------------------------------------- + +class CheckBox : public QCheckBox { + Q_OBJECT + Q_PROPERTY(int id READ id WRITE setId) + + int _id; + + private slots: + void hasToggled(bool val) { + emit valueChanged(double(val), _id); + } + signals: + void valueChanged(double, int); + + public slots: + void setValue(double val) { setDown(val > 0.5f); } + + public: + CheckBox(QWidget* parent); + int id() const { return _id; } + void setId(int i) { _id = i; } + }; + +} + +#endif + diff --git a/attic/muse_qt4_evolution/awl/clock.xpm b/attic/muse_qt4_evolution/awl/clock.xpm new file mode 100644 index 00000000..3bf15e01 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/clock.xpm @@ -0,0 +1,24 @@ +/* XPM */ +static char *clock_xpm[]={ +"18 18 3 1", +". c None", +"# c #000000", +"a c #0000c0", +"...####a#####.....", +"..####.aaa.###....", +".####..aaa..###...", +".###...aaa...###..", +".#.....aaa....##..", +"##.....aaa.....##.", +"##.....aaa.....##.", +"###....aaaaaaaaa#.", +"###....aaaaaaaaa#.", +"##.....aaaaaaaaa#.", +"##............#.#.", +".##...........##..", +".##..........###..", +"..##........####..", +"...####...####....", +"....#########.....", +"......######......", +".................."}; diff --git a/attic/muse_qt4_evolution/awl/combobox.cpp b/attic/muse_qt4_evolution/awl/combobox.cpp new file mode 100644 index 00000000..58c82c54 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/combobox.cpp @@ -0,0 +1,36 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "combobox.h" + +namespace Awl { + +//--------------------------------------------------------- +// ComboBox +//--------------------------------------------------------- + +ComboBox::ComboBox(QWidget* parent) + : QComboBox(parent) + { + _id = 0; + connect(this, SIGNAL(activated(int)), SLOT(activatedIntern(int))); + } +} + diff --git a/attic/muse_qt4_evolution/awl/combobox.h b/attic/muse_qt4_evolution/awl/combobox.h new file mode 100644 index 00000000..d335d993 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/combobox.h @@ -0,0 +1,55 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AWLCOMBOBOX_H__ +#define __AWLCOMBOBOX_H__ + +namespace Awl { + +//--------------------------------------------------------- +// ComboBox +//--------------------------------------------------------- + +class ComboBox : public QComboBox { + Q_OBJECT + Q_PROPERTY(int id READ id WRITE setId) + + int _id; + + private slots: + void activatedIntern(int val) { + emit valueChanged(double(val), _id); + } + + signals: + void valueChanged(double, int); + + public slots: + void setValue(double val) { setCurrentIndex(int(val)); } + + public: + ComboBox(QWidget* parent); + int id() const { return _id; } + void setId(int i) { _id = i; } + }; + +} + +#endif diff --git a/attic/muse_qt4_evolution/awl/drawbar.cpp b/attic/muse_qt4_evolution/awl/drawbar.cpp new file mode 100644 index 00000000..18525ded --- /dev/null +++ b/attic/muse_qt4_evolution/awl/drawbar.cpp @@ -0,0 +1,130 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2007 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "drawbar.h" + +namespace Awl { + +#if 0 + } +#endif + +//--------------------------------------------------------- +// Drawbar +//--------------------------------------------------------- + +Drawbar::Drawbar(QWidget* parent) + : Slider(parent) + { + _sliderColor = Qt::darkGray; + setOrientation(Qt::Vertical); + setInvertedAppearance(true); + setRange(0.0, 8.0); + setLineStep(1.0); + setPageStep(1.0); + setInteger(true); + } + +Drawbar::~Drawbar() + { + } + +//--------------------------------------------------------- +// setSliderColor +//--------------------------------------------------------- + +void Drawbar::setSliderColor(const QColor& c) + { + if (c != _sliderColor) { + _sliderColor = c; + update(); + } + } + +//--------------------------------------------------------- +// paint +//--------------------------------------------------------- + +void Drawbar::paintEvent(QPaintEvent*) + { + int h = height(); + int w = width(); + + int kh = w * 2; // knob height + int kw = w; + int pixel = h - kh; + int ppos = int(pixel * value() / 8.0); + + QPainter p(this); + + QColor sc(Qt::darkGray); + QColor svc(Qt::gray); + + p.setBrush(svc); + + //--------------------------------------------------- + // draw scale + //--------------------------------------------------- + + int sx = (w + 9) / 10; + int sw = w - 2 * sx; + p.fillRect(sx, 0, sw, ppos, sc); + QPen pen(Qt::white); + int lw = 2; + pen.setWidth(lw); + p.setPen(pen); + int sx1 = sx + lw/2; + p.drawLine(sx1, 0, sx1, ppos); + int sx2 = sx + sw - lw/2; + p.drawLine(sx2, 0, sx2, ppos); + + //--------------------------------------------------- + // draw numbers + //--------------------------------------------------- + + p.save(); + p.setClipRect(QRect(sx, 0, sw, ppos)); + QFont f = p.font(); + f.setPixelSize(8); + + int ch = pixel / 8; + QString num("%1"); + for (int i = 0; i < 8; ++i) { + p.drawText(0, i * pixel / 8 - (pixel - ppos), w, ch, Qt::AlignCenter, num.arg(8-i)); + } + p.restore(); + + //--------------------------------------------------- + // draw slider + //--------------------------------------------------- + + p.fillRect(0, ppos, kw, kh, _sliderColor); + + pen.setWidth(1); + pen.setColor(Qt::black); + p.setPen(pen); + + int y1 = ppos + kh / 5 * 2; + int y2 = ppos + kh / 5 * 3; + p.drawLine(0, y1, kw, y1); + p.drawLine(0, y2, kw, y2); + } +} + diff --git a/attic/muse_qt4_evolution/awl/drawbar.h b/attic/muse_qt4_evolution/awl/drawbar.h new file mode 100644 index 00000000..4794b784 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/drawbar.h @@ -0,0 +1,54 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2007 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AWLDRAWBAR_H__ +#define __AWLDRAWBAR_H__ + +#include "slider.h" + +namespace Awl { + +//--------------------------------------------------------- +// Drawbar +//--------------------------------------------------------- + +class Drawbar : public Slider { + Q_OBJECT + + Q_PROPERTY(QColor sliderColor READ sliderColor WRITE setSliderColor) + + virtual void paintEvent(QPaintEvent*); + + protected: + QColor _sliderColor; + + public: + Drawbar(QWidget* parent = 0); + ~Drawbar(); + + //! return current slider color + QColor sliderColor() const { return _sliderColor; } + void setSliderColor(const QColor&); + }; + +} + +#endif + diff --git a/attic/muse_qt4_evolution/awl/fastlog.h b/attic/muse_qt4_evolution/awl/fastlog.h new file mode 100644 index 00000000..90a85342 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/fastlog.h @@ -0,0 +1,39 @@ +/* Copyright unknown. Code by Laurent de Soras . + */ + +#ifndef __FASTLOG_H__ +#define __FASTLOG_H__ + +#include /* for HUGE_VAL */ + +static inline float fast_log2 (float val) + { + /* don't use reinterpret_cast<> because that prevents this + from being used by pure C code (for example, GnomeCanvasItems) + */ + union {float f; int i;} t; + t.f = val; + int* const exp_ptr = &t.i; + int x = *exp_ptr; + const int log_2 = ((x >> 23) & 255) - 128; + x &= ~(255 << 23); + x += 127 << 23; + *exp_ptr = x; + val = ((-1.0f/3) * t.f + 2) * t.f - 2.0f/3; + return (val + log_2); + } + +static inline float fast_log (const float val) + { + return (fast_log2 (val) * 0.69314718f); + } + +static inline float fast_log10 (const float val) + { + return fast_log2(val) / 3.312500f; + } + +static inline float minus_infinity() { return -HUGE_VAL; } + +#endif + diff --git a/attic/muse_qt4_evolution/awl/floatentry.cpp b/attic/muse_qt4_evolution/awl/floatentry.cpp new file mode 100644 index 00000000..7831614f --- /dev/null +++ b/attic/muse_qt4_evolution/awl/floatentry.cpp @@ -0,0 +1,317 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "floatentry.h" +#include "fastlog.h" + +#define TIMER1 400 +#define TIMER2 200 +#define TIMEC 7 +#define TIMER3 100 +#define TIMEC2 20 +#define TIMER4 50 + +namespace Awl { + +//--------------------------------------------------------- +// FloatEntry +//--------------------------------------------------------- + +FloatEntry::FloatEntry(QWidget* parent) + : QLineEdit(parent) + { + _id = 0; + _minValue = 0.0; + _maxValue = 1.0; + _log = false; + evx = 1.0; + _precision = 3; + timer = new QTimer(this); + connect(timer, SIGNAL(timeout()), SLOT(repeat())); + _value = 0.0f; + connect(this, SIGNAL(returnPressed()), SLOT(endEdit())); + setCursor(QCursor(Qt::ArrowCursor)); + updateValue(); + } + +//--------------------------------------------------------- +// setString +//--------------------------------------------------------- + +bool FloatEntry::setString(double v) + { + QString s; +// if (v < _minValue || v > _maxValue) { + if (v < _minValue) { + if (!_specialText.isEmpty()) + setText(_specialText); + return true; + } + s.setNum(v, 'f', _precision); + if (!_suffix.isEmpty()) { + // s += " "; + s += _suffix; + } + setText(s); + return false; + } + +//--------------------------------------------------------- +// setSValue +//--------------------------------------------------------- + +void FloatEntry::setSValue(const QString& s) + { + bool ok; + double v = s.toFloat(&ok); + if (ok && (v != _value)) { + if (v < _minValue) + v = _minValue; + if (v > _maxValue) + v = _maxValue; + _value = v; + updateValue(); + valueChange(); + } + } + +//--------------------------------------------------------- +// valueChange +//--------------------------------------------------------- + +void FloatEntry::valueChange() + { + emit valueChanged(value(), _id); + } + +//--------------------------------------------------------- +// incValue +//--------------------------------------------------------- + +void FloatEntry::incValue(double) + { + if (_value + 1.0 < _maxValue) { + _value = _value + 1.0; + updateValue(); + valueChange(); + } + } + +//--------------------------------------------------------- +// decValue +//--------------------------------------------------------- + +void FloatEntry::decValue(double) + { + if (_value - 1.0 > _minValue) { + _value = _value - 1.0; + updateValue(); + valueChange(); + } + } + +//--------------------------------------------------------- +// setPrecision +//--------------------------------------------------------- + +void FloatEntry::setPrecision(int v) + { + _precision = v; + setString(_value); + } + +//--------------------------------------------------------- +// sizeHint +//--------------------------------------------------------- + +QSize FloatEntry::sizeHint() const + { + QFontMetrics fm = fontMetrics(); + int h = fm.height() + 4; + int n = _precision + 3; + int w = fm.width(QString("-0.")) + fm.width('0') * n + 6; + return QSize(w, h); + } + +//--------------------------------------------------------- +// endEdit +//--------------------------------------------------------- + +void FloatEntry::endEdit() + { + if (QLineEdit::isModified()) + setSValue(text()); + clearFocus(); + } + +//--------------------------------------------------------- +// mousePressEvent +//--------------------------------------------------------- + +void FloatEntry::mousePressEvent(QMouseEvent* event) + { + button = event->button(); + starty = event->y(); + evx = double(event->x()); + timecount = 0; + repeat(); + timer->start(TIMER1); + } + +//--------------------------------------------------------- +// wheelEvent +//--------------------------------------------------------- + +void FloatEntry::wheelEvent(QWheelEvent* event) + { + int delta = event->delta(); + + if (delta < 0) + decValue(-1.0); + else if (delta > 0) + incValue(1.0); + } + +//--------------------------------------------------------- +// repeat +//--------------------------------------------------------- + +void FloatEntry::repeat() + { + if (timecount == 1) { + ++timecount; + timer->stop(); + timer->start(TIMER2); + return; + } + ++timecount; + if (timecount == TIMEC) { + timer->stop(); + timer->start(TIMER3); + } + if (timecount == TIMEC2) { + timer->stop(); + timer->start(TIMER4); + } + + switch (button) { + case Qt::LeftButton: + return; + case Qt::MidButton: + decValue(evx); + break; + case Qt::RightButton: + incValue(evx); + break; + default: + break; + } + } + +//--------------------------------------------------------- +// mouseReleaseEvent +//--------------------------------------------------------- + +void FloatEntry::mouseReleaseEvent(QMouseEvent*) + { + button = Qt::NoButton; + timer->stop(); + } + +//--------------------------------------------------------- +// mouseMoveEvent +//--------------------------------------------------------- + +void FloatEntry::mouseMoveEvent(QMouseEvent*) + { + switch (button) { + case Qt::LeftButton: + break; + case Qt::MidButton: + break; + case Qt::RightButton: + break; + default: + break; + } + } + +//--------------------------------------------------------- +// mouseDoubleClickEvent +//--------------------------------------------------------- + +void FloatEntry::mouseDoubleClickEvent(QMouseEvent* event) + { + if (event->button() != Qt::LeftButton) { + mousePressEvent(event); + return; + } + setFocus(); + QLineEdit::setFrame(true); + update(); + } + +//--------------------------------------------------------- +// setValue +//--------------------------------------------------------- + +void FloatEntry::setValue(double val) + { + if (_log) { + if (val == 0.0f) + _value = _minValue; + else + _value = fast_log10(val) * 20.0f; + } + else + _value = val; + updateValue(); + } + +//--------------------------------------------------------- +// updateValue +//--------------------------------------------------------- + +void FloatEntry::updateValue() + { + if (setString(_value)) { + // value is out of range: + if (_value > _maxValue) + _value = _maxValue; + else if (_value < _minValue) + _value = _minValue; + } + } + +//--------------------------------------------------------- +// value +//--------------------------------------------------------- + +double FloatEntry::value() const + { + double rv; + if (_log) + rv = pow(10.0, _value * 0.05f); + else + rv = _value; + return rv; + } +} + diff --git a/attic/muse_qt4_evolution/awl/floatentry.h b/attic/muse_qt4_evolution/awl/floatentry.h new file mode 100644 index 00000000..a90232a9 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/floatentry.h @@ -0,0 +1,112 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __FLOATLABEL_H__ +#define __FLOATLABEL_H__ + +namespace Awl { + +//--------------------------------------------------------- +// FloatEntry +//--------------------------------------------------------- + +class FloatEntry : public QLineEdit { + Q_OBJECT + Q_PROPERTY(int id READ id WRITE setId) + + Q_PROPERTY(double minValue READ minValue WRITE setMinValue) + Q_PROPERTY(double maxValue READ maxValue WRITE setMaxValue) + + Q_PROPERTY(QString specialText READ specialText WRITE setSpecialText) + Q_PROPERTY(QString suffix READ suffix WRITE setSuffix) + Q_PROPERTY(int precision READ precision WRITE setPrecision) + Q_PROPERTY(bool log READ log WRITE setLog) + + int button; + int starty; + QTimer* timer; + double evx; + int timecount; + double _minValue, _maxValue; + QString _specialText; // text to show if value outside min,max + QString _suffix; + int _precision; + bool _log; + + virtual void wheelEvent(QWheelEvent*); + virtual void mousePressEvent(QMouseEvent*); + virtual void mouseMoveEvent(QMouseEvent*); + virtual void mouseDoubleClickEvent(QMouseEvent*); + virtual void mouseReleaseEvent(QMouseEvent*); + virtual void setSValue(const QString&); + virtual bool setString(double); + virtual void incValue(double); + virtual void decValue(double); + + void updateValue(); + + protected: + int _id; + double _value; + virtual void valueChange(); + + private slots: + void repeat(); + + protected slots: + void endEdit(); + + public slots: + virtual void setValue(double); + + signals: + void valueChanged(double, int); + + public: + FloatEntry(QWidget*); + virtual QSize sizeHint() const; + virtual double value() const; + int id() const { return _id; } + void setId(int i) { _id = i; } + double minValue() const { return _minValue; } + double maxValue() const { return _maxValue; } + void setMinValue(double v) { _minValue = v; } + void setMaxValue(double v) { _maxValue = v; } + void setRange(double a, double b) { + _minValue = a; + _maxValue = b; + } + int precision() const { return _precision; } + void setPrecision(int val); + QString specialText() const { return _specialText; } + void setSpecialText(const QString& s) { + _specialText = s; + update(); + } + QString suffix() const { return _suffix; } + void setSuffix(const QString& s) { _suffix = s; } + bool log() const { return _log; } + void setLog(bool v) { _log = v; } + }; + +} + +#endif + diff --git a/attic/muse_qt4_evolution/awl/knob.cpp b/attic/muse_qt4_evolution/awl/knob.cpp new file mode 100644 index 00000000..ccc3988e --- /dev/null +++ b/attic/muse_qt4_evolution/awl/knob.cpp @@ -0,0 +1,281 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "knob.h" + +namespace Awl { + +//--------------------------------------------------------- +// Knob +/// this is the AwlKnob contructor +//--------------------------------------------------------- + +Knob::Knob(QWidget* parent) + : AbstractSlider(parent) + { + _scaleSize = 270; + _markSize = 6; + _border = 2; + points = 0; + } + +//--------------------------------------------------------- +// Knob +//--------------------------------------------------------- + +Knob::~Knob() + { + if (points) + delete points; + } + +//--------------------------------------------------------- +// setText +//--------------------------------------------------------- + +void Knob::setText(const QString& s) + { + if (s != _text) { + _text = s; + update(); + } + } + +//--------------------------------------------------------- +// setScaleSize +//! set the scale size in degrees +// +//! the scale size is the max moving angle measured +//! in degrees +//--------------------------------------------------------- + +void Knob::setScaleSize(int val) + { + if (val != _scaleSize) { + _scaleSize = val; + update(); + } + } + +//--------------------------------------------------------- +// setMarkSize +//! set size of the center marker +//--------------------------------------------------------- + +void Knob::setMarkSize(int val) + { + if (val != _markSize) { + _markSize = val; + update(); + } + } + +//--------------------------------------------------------- +// setBorder +//! set border size +//--------------------------------------------------------- + +void Knob::setBorder(int val) + { + if (val != _border) { + _border = val; + update(); + } + } + +//--------------------------------------------------------- +// mousePressEvent +//--------------------------------------------------------- + +void Knob::mousePressEvent(QMouseEvent* ev) + { + startY = ev->y(); + emit sliderPressed(_id); + if (_center) { + QRect r(points->boundingRect().toRect()); + if (r.contains(ev->pos())) { + setValue(.0f); + valueChange(); + update(); + } + } + } + +//--------------------------------------------------------- +// mouseReleaseEvent +//--------------------------------------------------------- + +void Knob::mouseReleaseEvent(QMouseEvent*) + { + emit sliderReleased(_id); + } + +//--------------------------------------------------------- +// mouseMoveEvent +//--------------------------------------------------------- + +void Knob::mouseMoveEvent(QMouseEvent* ev) + { + int y = ev->y(); + double delta = (maxValue() - minValue()) / 100.0f; + if (delta == 0) + delta = 1; + _value += (startY - y) * delta; + if (_value < minValue()) + _value = _minValue; + else if (_value > maxValue()) + _value = _maxValue; + startY = y; + valueChange(); + update(); + } + +//--------------------------------------------------------- +// paintEvent +//--------------------------------------------------------- + +void Knob::paintEvent(QPaintEvent* ev) + { + QRect rr(ev->rect()); + QPainter p(this); + p.setRenderHint(QPainter::Antialiasing, true); + + int markSize2 = _markSize/2; + int restR = 360 - _scaleSize; + int w = width() - _scaleWidth - 2 * _border; + int h = height() - _scaleWidth/2 - 2 * _border; + + int xoffset, yoffset; + if (_center) + h -= _markSize; + if (w > h) { + yoffset = 0; + xoffset = (w - h) / 2; + w = h; + } + else { + xoffset = 0; + // yoffset = (h - w) / 2; // center + yoffset = h - w; // top align + h = w; + } + + int x = xoffset + _scaleWidth / 2 + _border; + int y = yoffset + _scaleWidth / 2 + _border + (_center ? _markSize+_scaleWidth/2 : 0); + QRectF ar(x, y, w, h); + + QColor sc(isEnabled() ? _scaleColor : Qt::gray); + QColor svc(isEnabled() ? _scaleValueColor : Qt::gray); + + //----------------------------------------- + // draw arc + //----------------------------------------- + + double dvalue = maxValue() - minValue(); + if (_center) { + int size = _scaleSize * 8; + if (_value >= 0) { + int offset = (restR-180) * 8; + int r1 = int (size * _value / maxValue()); + int r2 = size - r1; + p.setPen(QPen(sc, _scaleWidth)); + if (r2 > 1) + p.drawArc(ar, offset, r2); + if (size > 1) + p.drawArc(ar, 90*16, size); + if (r1 > 1) { + p.setPen(QPen(svc, _scaleWidth)); + p.drawArc(ar, offset+r2, r1); + } + } + else { + // int offset = (restR+180) * 8; + int r1 = int(size * _value / minValue()); + int r2 = size - r1; + + p.setPen(QPen(sc, _scaleWidth)); + if (size > 1) + p.drawArc(ar, (restR-180)*8, size); + if (r2 > 1) + p.drawArc(ar, 90 * 16 + r1, r2); + if (r1 > 1) { + p.setPen(QPen(svc, _scaleWidth)); + p.drawArc(ar, 90*16, r1); + } + } + } + else { + int offset = (180-restR) * 8; + int size = _scaleSize * 16; + int r1 = int(size * (_value - minValue()) / dvalue); + int r2 = size - r1; + if (r2 >= 1) { + p.setPen(QPen(sc, _scaleWidth)); + p.drawArc(ar, -offset, r2); + } + if (r1 >= 1) { + p.setPen(QPen(svc, _scaleWidth)); + p.drawArc(ar, r2-offset, r1); + } + } + + //----------------------------------------- + // draw pointer + //----------------------------------------- + + p.setPen(QPen(svc, _scaleWidth)); + double r1 = double(_scaleSize) * (_value-minValue()) / dvalue + 90.0 + + double(restR/2); + r1 = r1 / 180.0 * M_PI; // convert to radians + int rd = w/2; + int x1 = x + rd; + int y1 = y + rd; + int x2 = x1 + lrint(cos(r1) * double(rd)); + int y2 = y1 + lrint(sin(r1) * double(rd)); + p.drawLine(x1, y1, x2, y2); + + //----------------------------------------- + // draw center mark + //----------------------------------------- + + p.setPen(QPen(svc, 0)); + p.setBrush(svc); + if (_center) { + if (points) + delete points; + qreal x = ar.width() / 2 + ar.x(); + qreal y = ar.y() - _markSize - _scaleWidth/2; + points = new QPainterPath(QPointF(x - markSize2, y)); + points->lineTo(x + markSize2, y); + points->lineTo(x, _markSize + y); + points->closeSubpath(); + p.drawPath(*points); + } + + //----------------------------------------- + // draw text + //----------------------------------------- + + if (!_text.isEmpty()) { + p.drawText(rect(), Qt::AlignBottom | Qt::AlignHCenter, _text); + } + } +} + diff --git a/attic/muse_qt4_evolution/awl/knob.h b/attic/muse_qt4_evolution/awl/knob.h new file mode 100644 index 00000000..b7be932b --- /dev/null +++ b/attic/muse_qt4_evolution/awl/knob.h @@ -0,0 +1,85 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AWLKNOB_H__ +#define __AWLKNOB_H__ + +#include "aslider.h" +// #include + +namespace Awl { + +//--------------------------------------------------------- +// Knob +// +//! Base class of all dialer type input widgets. +// +//! xxxxxxxxx +//! +//--------------------------------------------------------- + +class Q_DECL_EXPORT Knob : public AbstractSlider { + Q_OBJECT + Q_PROPERTY(int scaleSize READ scaleSize WRITE setScaleSize) + Q_PROPERTY(int markSize READ markSize WRITE setMarkSize) + Q_PROPERTY(int border READ border WRITE setBorder) + Q_PROPERTY(QString text READ text WRITE setText) + + int _scaleSize; //! scale size in degrees + int _markSize; + int _border; + QPainterPath* points; + + virtual void paintEvent(QPaintEvent*); + virtual void mousePressEvent(QMouseEvent*); + virtual void mouseReleaseEvent(QMouseEvent*); + virtual void mouseMoveEvent(QMouseEvent*); + + protected: + int startY; + QString _text; + + signals: + void sliderPressed(int); + void sliderReleased(int); + + public: + Knob(QWidget* parent = 0); + ~Knob(); + virtual QSize sizeHint() const { return QSize(50, 50); } + virtual int heightForWidth(int w) { return w; } + + //! return text decoration + QString text() const { return _text; } + void setText(const QString& s); + + //! return scale size in degrees + int scaleSize() const { return _scaleSize; } + void setScaleSize(int val); + int markSize() const { return _markSize; } + void setMarkSize(int val); + int border() const { return _border; } + void setBorder(int val); + }; + +} + +#endif + diff --git a/attic/muse_qt4_evolution/awl/ltest.cpp b/attic/muse_qt4_evolution/awl/ltest.cpp new file mode 100644 index 00000000..55fe1749 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/ltest.cpp @@ -0,0 +1,14 @@ +#include +#include "awlplugin.h" + +//--------------------------------------------------------- +// main +//--------------------------------------------------------- + +int main(int /*argc*/, char* /*argv*/[]) + { + printf("Hello MusE\n"); + new KnobPlugin; + return 0; + } + diff --git a/attic/muse_qt4_evolution/awl/metronom.xpm b/attic/muse_qt4_evolution/awl/metronom.xpm new file mode 100644 index 00000000..d16a2fb5 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/metronom.xpm @@ -0,0 +1,24 @@ +/* XPM */ +static char *metronom_xpm[]={ +"18 18 3 1", +". c None", +"# c #000000", +"a c #0000ff", +".........##.......", +".........##.......", +"........###....a..", +".......###.#..aaa.", +".......##..#.aaa..", +"......###...#aa...", +"......##....aaa...", +".....##....aaa....", +"....###...aaa#....", +"....##....aa.#....", +"...###...aa...#...", +"..###...aaa...#...", +"..##...aaa....#...", +".###...aaa.....#..", +".##....aa......#..", +"###.....a.......#.", +"##################", +"##################"}; diff --git a/attic/muse_qt4_evolution/awl/midimeter.cpp b/attic/muse_qt4_evolution/awl/midimeter.cpp new file mode 100644 index 00000000..312e5efe --- /dev/null +++ b/attic/muse_qt4_evolution/awl/midimeter.cpp @@ -0,0 +1,137 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "fastlog.h" +#include "midimeter.h" + +namespace Awl { + +//--------------------------------------------------------- +// MidiMeter +//--------------------------------------------------------- + +MidiMeter::MidiMeter(QWidget* parent) + : Slider(parent) + { + setRange(0.0f, 127.0f); + setLineStep(2); + setPageStep(4); + + setScaleWidth(7); + _meterWidth = _scaleWidth * 3; + meterval = 0.0f; + } + +//--------------------------------------------------------- +// setMeterVal +// v - 0.0 < 1.0 +//--------------------------------------------------------- + +void MidiMeter::setMeterVal(double v) + { + if (v < 0.001) + v = .0f; + if (meterval != v) { + meterval = v; + update(); + } + } + +//--------------------------------------------------------- +// mouseDoubleClickEvent +//--------------------------------------------------------- + +void MidiMeter::mouseDoubleClickEvent(QMouseEvent*) + { + _value = _minValue; + valueChange(); + update(); + } + +//--------------------------------------------------------- +// paintEvent +//--------------------------------------------------------- + +void MidiMeter::paintEvent(QPaintEvent* ev) + { + int pixel = height() - sliderSize().height(); + double range = maxValue() - minValue(); + int ppos = int(pixel * (_value - minValue()) / range); + if (_invert) + ppos = pixel - ppos; + + QRect rr(ev->rect()); + QPainter p(this); + + QColor sc(isEnabled() ? _scaleColor : Qt::gray); + QColor svc(isEnabled() ? _scaleValueColor : Qt::gray); + p.setBrush(svc); + + int h = height(); + int kh = sliderSize().height(); + + //--------------------------------------------------- + // draw meter + //--------------------------------------------------- + + int mw = _meterWidth; + int x = 0; + + int y1 = kh / 2; + int y3 = h - y1; + + int mh = h - kh; + + p.setPen(Qt::white); + h = lrint(meterval * mh); + if (h < 0) + h = 0; + else if (h > mh) + h = mh; + p.fillRect(x, y3-h, mw, h, QBrush(0x00ff00)); // green + p.fillRect(x, y1, mw, mh-h, QBrush(0x007000)); // dark green + x += mw; + +#if 0 + //--------------------------------------------------- + // draw scale + //--------------------------------------------------- + + x += _scaleWidth/2; + + p.setPen(QPen(sc, _scaleWidth)); + p.drawLine(x, y1, x, y2); + p.setPen(QPen(svc, _scaleWidth)); + p.drawLine(x, y2, x, y3); + + //--------------------------------------------------- + // draw slider + //--------------------------------------------------- + + x += _scaleWidth/2; + p.setPen(QPen(svc, 0)); + points.setPoint(0, x, y2); + points.setPoint(1, x + kw, y2 - kh/2); + points.setPoint(2, x + kw, y2 + kh/2); + p.drawConvexPolygon(points); +#endif + } +} + diff --git a/attic/muse_qt4_evolution/awl/midimeter.h b/attic/muse_qt4_evolution/awl/midimeter.h new file mode 100644 index 00000000..2b0d3518 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/midimeter.h @@ -0,0 +1,56 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AWLMIDIMETER_H__ +#define __AWLMIDIMETER_H__ + +#include "slider.h" + +namespace Awl { + +//--------------------------------------------------------- +// MidiMeter +//--------------------------------------------------------- + +class MidiMeter : public Slider + { + Q_PROPERTY(int meterWidth READ meterWidth WRITE setMeterWidth) + Q_OBJECT + + double meterval; + int _meterWidth; + + virtual void paintEvent(QPaintEvent*); + + protected: + virtual void mouseDoubleClickEvent(QMouseEvent*); + + public slots: + void setMeterVal(double value); + + public: + MidiMeter(QWidget* parent = 0); + int meterWidth() const { return _meterWidth; } + void setMeterWidth(int v) { _meterWidth = v; } + }; +} + +#endif + diff --git a/attic/muse_qt4_evolution/awl/midimslider.cpp b/attic/muse_qt4_evolution/awl/midimslider.cpp new file mode 100644 index 00000000..92325d4a --- /dev/null +++ b/attic/muse_qt4_evolution/awl/midimslider.cpp @@ -0,0 +1,143 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "fastlog.h" +#include "midimslider.h" + +namespace Awl { + +//--------------------------------------------------------- +// MidiMeterSlider +//--------------------------------------------------------- + +MidiMeterSlider::MidiMeterSlider(QWidget* parent) + : Slider(parent) + { + setRange(0.0f, 127.0f); + setLineStep(2); + setPageStep(4); + + setScaleWidth(7); + _meterWidth = _scaleWidth * 3; + meterval = 0.0f; + } + +//--------------------------------------------------------- +// setMeterVal +// v - 0.0 < 1.0 +//--------------------------------------------------------- + +void MidiMeterSlider::setMeterVal(double v) + { + if (v < 0.001) + v = .0f; + if (meterval != v) { + meterval = v; + update(); + } + } + +//--------------------------------------------------------- +// mouseDoubleClickEvent +//--------------------------------------------------------- + +void MidiMeterSlider::mouseDoubleClickEvent(QMouseEvent*) + { + _value = _minValue; + valueChange(); + update(); + } + +//--------------------------------------------------------- +// drawScale +//--------------------------------------------------------- + +void MidiMeterSlider::paintEvent(QPaintEvent* ev) + { + int pixel = height() - sliderSize().height(); + double range = maxValue() - minValue(); + int ppos = int(pixel * (_value - minValue()) / range); + if (_invert) + ppos = pixel - ppos; + + QRect rr(ev->rect()); + QPainter p(this); + + QColor sc(isEnabled() ? _scaleColor : Qt::gray); + QColor svc(isEnabled() ? _scaleValueColor : Qt::gray); + p.setBrush(svc); + + int h = height(); +// int kw = sliderSize().width(); + int kh = sliderSize().height(); + + //--------------------------------------------------- + // draw meter + //--------------------------------------------------- + + int mw = _meterWidth; + int x = 0; + + int y1 = kh / 2; + int y2 = h - (ppos + y1); + int y3 = h - y1; + + int mh = h - kh; + + p.setPen(Qt::white); + h = lrint(meterval * mh); + if (h < 0) + h = 0; + else if (h > mh) + h = mh; + //QColor qc; + //float v = 5.0/6.0 + 1.0/6.0 * meterval; + //qc.setHsvF(1.0/3.0, 1.0, (v<=1.0?v:1.0)); + p.fillRect(x, y3-h, mw, h, QBrush(0x00ff00)); // green + //p.fillRect(x, y3-h, mw, h, QBrush(qc)); // green get a bit darker + p.fillRect(x, y1, mw, mh-h, QBrush(0x007000)); // dark green + x += mw; + + //--------------------------------------------------- + // draw scale + //--------------------------------------------------- + +// x += _scaleWidth/2; + +// p.setPen(QPen(sc, _scaleWidth)); +// p.drawLine(x, y1, x, y2); +// p.setPen(QPen(svc, _scaleWidth)); +// p.drawLine(x, y2, x, y3); + + p.fillRect(x, y1, _scaleWidth, y2-y1, sc); + p.fillRect(x, y2, _scaleWidth, y3-y2, svc); + + //--------------------------------------------------- + // draw slider + //--------------------------------------------------- + + x += _scaleWidth/2; + p.setPen(QPen(svc, 0)); + p.translate(QPointF(x, y2)); + p.setRenderHint(QPainter::Antialiasing, true); + p.drawPath(*points); + } +} + diff --git a/attic/muse_qt4_evolution/awl/midimslider.h b/attic/muse_qt4_evolution/awl/midimslider.h new file mode 100644 index 00000000..a2a2bdaf --- /dev/null +++ b/attic/muse_qt4_evolution/awl/midimslider.h @@ -0,0 +1,56 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AWLMIDIMSLIDER_H__ +#define __AWLMIDIMSLIDER_H__ + +#include "slider.h" + +namespace Awl { + +//--------------------------------------------------------- +// MidiMeterSlider +//--------------------------------------------------------- + +class MidiMeterSlider : public Slider + { + Q_PROPERTY(int meterWidth READ meterWidth WRITE setMeterWidth) + Q_OBJECT + + double meterval; + int _meterWidth; + + virtual void paintEvent(QPaintEvent*); + + protected: + virtual void mouseDoubleClickEvent(QMouseEvent*); + + public slots: + void setMeterVal(double value); + + public: + MidiMeterSlider(QWidget* parent = 0); + int meterWidth() const { return _meterWidth; } + void setMeterWidth(int v) { _meterWidth = v; } + }; +} + +#endif + diff --git a/attic/muse_qt4_evolution/awl/midipanentry.cpp b/attic/muse_qt4_evolution/awl/midipanentry.cpp new file mode 100644 index 00000000..5e4e4f9a --- /dev/null +++ b/attic/muse_qt4_evolution/awl/midipanentry.cpp @@ -0,0 +1,47 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "fastlog.h" +#include "midipanentry.h" + +namespace Awl { + +//--------------------------------------------------------- +// MidiPanEntry +//--------------------------------------------------------- + +MidiPanEntry::MidiPanEntry(QWidget* parent) + : FloatEntry(parent) + { + setRange(-64.0f, 63.0f); + setFrame(true); + setPrecision(0); + } + +//--------------------------------------------------------- +// valueChange +//--------------------------------------------------------- + +void MidiPanEntry::valueChange() + { + emit valueChanged(_value + 64.0f, _id); + } +} + diff --git a/attic/muse_qt4_evolution/awl/midipanentry.h b/attic/muse_qt4_evolution/awl/midipanentry.h new file mode 100644 index 00000000..25f7333a --- /dev/null +++ b/attic/muse_qt4_evolution/awl/midipanentry.h @@ -0,0 +1,48 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AWLMIDIPANENTRY_H__ +#define __AWLMIDIPANENTRY_H__ + +#include "floatentry.h" + +namespace Awl { + +//--------------------------------------------------------- +// MidiPanEntry +//--------------------------------------------------------- + +class MidiPanEntry : public FloatEntry { + Q_OBJECT + + protected: + virtual void valueChange(); + + public slots: + virtual void setValue(double v) { + FloatEntry::setValue(v - 64.0f); + } + public: + MidiPanEntry(QWidget* parent); + virtual double value() const { return _value + 64.0f; } + }; +} + +#endif diff --git a/attic/muse_qt4_evolution/awl/midipanknob.cpp b/attic/muse_qt4_evolution/awl/midipanknob.cpp new file mode 100644 index 00000000..a2530119 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/midipanknob.cpp @@ -0,0 +1,37 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "midipanknob.h" + +namespace Awl { + +//--------------------------------------------------------- +// MidiPanKnob +//--------------------------------------------------------- + +MidiPanKnob::MidiPanKnob(QWidget* parent) + : Knob(parent) + { + setCenter(true); + setRange(-64.0f, 63.0f); + setLineStep(1.0f); + setPageStep(10.0f); + } +} diff --git a/attic/muse_qt4_evolution/awl/midipanknob.h b/attic/muse_qt4_evolution/awl/midipanknob.h new file mode 100644 index 00000000..9b628e6b --- /dev/null +++ b/attic/muse_qt4_evolution/awl/midipanknob.h @@ -0,0 +1,55 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AWLMIDIPANKNOB_H__ +#define __AWLMIDIPANKNOB_H__ + +#include "knob.h" + +namespace Awl { + +//--------------------------------------------------------- +// MidiPanKnob +//! MidiPan Knob entry widget +// +//! This widget implements a centered floating point +//! knob used to adjust the pan position in an audio +//! mixer. +//--------------------------------------------------------- + +class MidiPanKnob : public Knob { + Q_OBJECT + + virtual void valueChange() { + emit valueChanged(_value + 64.0f, _id); + } + + public slots: + virtual void setValue(double v) { + AbstractSlider::setValue(v - 64.0f); + } + public: + MidiPanKnob(QWidget* parent = 0); + virtual double value() const { return _value + 64.0f; } + }; +} + +#endif + diff --git a/attic/muse_qt4_evolution/awl/midivolentry.cpp b/attic/muse_qt4_evolution/awl/midivolentry.cpp new file mode 100644 index 00000000..0b74afcc --- /dev/null +++ b/attic/muse_qt4_evolution/awl/midivolentry.cpp @@ -0,0 +1,50 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "fastlog.h" +#include "midivolentry.h" + +namespace Awl { + +//--------------------------------------------------------- +// MidiVolEntry +//--------------------------------------------------------- + +MidiVolEntry::MidiVolEntry(QWidget* parent) + : FloatEntry(parent) + { + _max = 127; + setRange(-98.0f, 0.0f); + setSpecialText(tr("off")); + setSuffix(tr("db")); + setFrame(true); + setPrecision(0); + } + +//--------------------------------------------------------- +// setValue +//--------------------------------------------------------- + +void MidiVolEntry::setValue(double v) + { + FloatEntry::setValue(-fast_log10(double(_max*_max)/(v*v))*20.0f); + } +} + diff --git a/attic/muse_qt4_evolution/awl/midivolentry.h b/attic/muse_qt4_evolution/awl/midivolentry.h new file mode 100644 index 00000000..99155877 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/midivolentry.h @@ -0,0 +1,47 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AWLMIDIVOLENTRY_H__ +#define __AWLMIDIVOLENTRY_H__ + +#include "floatentry.h" + +namespace Awl { + +//--------------------------------------------------------- +// MidiVolEntry +//--------------------------------------------------------- + +class MidiVolEntry : public FloatEntry { + Q_OBJECT + Q_PROPERTY(int max READ max WRITE setMax) + + int _max; + + public: + virtual void setValue(double); + void setMax(int val) { _max = val; } + int max() const { return _max; } + MidiVolEntry(QWidget* parent); + }; +} + +#endif + diff --git a/attic/muse_qt4_evolution/awl/mslider.cpp b/attic/muse_qt4_evolution/awl/mslider.cpp new file mode 100644 index 00000000..63c3ea4e --- /dev/null +++ b/attic/muse_qt4_evolution/awl/mslider.cpp @@ -0,0 +1,273 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "fastlog.h" + +#include "mslider.h" + +namespace Awl { + +//--------------------------------------------------------- +// MeterSlider +//--------------------------------------------------------- + +MeterSlider::MeterSlider(QWidget* parent) + : VolSlider(parent) + { + setAttribute(Qt::WA_NoSystemBackground, true); +// setAutoFillBackground(true); + _channel = 0; + yellowScale = -16; //-10; + redScale = 0; + _meterWidth = _scaleWidth * 3; + setChannel(1); + setMinimumHeight(50); + } + +//--------------------------------------------------------- +// sizeHint +//--------------------------------------------------------- + +QSize MeterSlider::sizeHint() const + { + int w = _meterWidth + _scaleWidth + _scaleWidth + 30; + return orientation() == Qt::Vertical ? QSize(w, 200) : QSize(200, w); + } + +//--------------------------------------------------------- +// setChannel +//--------------------------------------------------------- + +void MeterSlider::setChannel(int n) + { + if (n > _channel) { + for (int i = _channel; i < n; ++i) { + meterval.push_back(0.0f); + meterPeak.push_back(0.0f); + } + } + _channel = n; + } + +//--------------------------------------------------------- +// setMeterVal +//--------------------------------------------------------- + +void MeterSlider::setMeterVal(int channel, double v, double peak) + { + bool mustRedraw = false; + if (meterval[channel] != v) { + meterval[channel] = v; + mustRedraw = true; + } + if (peak != meterPeak[channel]) { + meterPeak[channel] = peak; + mustRedraw = true; + } + if (mustRedraw) { + int kh = sliderSize().height(); + int mh = height() - kh; + update(20, kh / 2, _meterWidth-1, mh); + } + } + +//--------------------------------------------------------- +// resetPeaks +// reset peak and overflow indicator +//--------------------------------------------------------- + +void MeterSlider::resetPeaks() + { + for (int i = 0; i < _channel; ++i) + meterPeak[i] = meterval[i]; + update(); + } + +//--------------------------------------------------------- +// resizeEvent +//--------------------------------------------------------- + +void MeterSlider::resizeEvent(QResizeEvent* /*ev*/) + { + int h = height(); + int kh = sliderSize().height(); + int mh = h - kh; + int mw = _meterWidth / _channel; + + onPm = QPixmap(mw, mh); + offPm = QPixmap(mw, mh); + + double range = maxValue() - minValue(); + int h1 = mh - lrint((maxValue() - redScale) * mh / range); + int h2 = mh - lrint((maxValue() - yellowScale) * mh / range); + + QColor yellowRed; + yellowRed.setHsv(QColor(Qt::yellow).hue()-8, + QColor(Qt::yellow).saturation(), + QColor(Qt::yellow).value()); + QColor yellRedRed; + yellRedRed.setHsv(QColor(Qt::yellow).hue()-16, + QColor(Qt::yellow).saturation(), + QColor(Qt::yellow).value()); + + QLinearGradient linearGrad(QPointF(0, 0), QPointF(0, mh)); + linearGrad.setColorAt(0, Qt::red); + linearGrad.setColorAt(1-(double)(h1-5)/(double)mh, yellRedRed); + linearGrad.setColorAt(1-(double)(h1-6)/(double)mh, yellowRed); + linearGrad.setColorAt(1-(double)h2/(double)mh, Qt::yellow); + linearGrad.setColorAt(1, Qt::green); + + QColor darkYellowRed; + darkYellowRed.setHsv(QColor(Qt::darkYellow).hue()-8, + QColor(Qt::darkYellow).saturation(), + QColor(Qt::darkYellow).value()); + QColor darkYellRedRed; + darkYellRedRed.setHsv(QColor(Qt::darkYellow).hue()-16, + QColor(Qt::darkYellow).saturation(), + QColor(Qt::darkYellow).value()); + QLinearGradient linearDarkGrad(QPointF(0, 0), QPointF(0, mh)); + linearDarkGrad.setColorAt(0, Qt::darkRed); + linearDarkGrad.setColorAt(1-(double)(h1-5)/(double)mh, darkYellRedRed); + linearDarkGrad.setColorAt(1-(double)(h1-6)/(double)mh, darkYellowRed); + linearDarkGrad.setColorAt(1-(double)h2/(double)mh, Qt::darkYellow); + linearDarkGrad.setColorAt(1, Qt::darkGreen); + + QPainter p; + p.begin(&onPm); + p.fillRect(0, 0, mw, mh, linearGrad); + p.end(); + p.begin(&offPm); + p.fillRect(0, 0, mw, mh, linearDarkGrad); + p.end(); + } + +//--------------------------------------------------------- +// paintEvent +//--------------------------------------------------------- + +void MeterSlider::paintEvent(QPaintEvent* ev) + { + int pixel = height() - sliderSize().height(); + double range = maxValue() - minValue(); + int ppos = int(pixel * (_value - minValue()) / range); + if (_invert) + ppos = pixel - ppos; + + QPainter p(this); + p.setRenderHint(QPainter::Antialiasing, false); + + int h = height(); + int kh = sliderSize().height(); + + //--------------------------------------------------- + // draw meter + //--------------------------------------------------- + + int mw = _meterWidth / _channel; + int x = 20; + int y1 = kh / 2; + int y3 = h - y1; + + int mh = h - kh; + p.setPen(QPen(Qt::white, 2)); + + for (int i = 0; i < _channel; ++i) { + int h = mh - (lrint(fast_log10(meterval[i]) * -20.0f * mh / range)); + if (h < 0) + h = 0; + else if (h > mh) + h = mh; + + p.drawPixmap(x, y1+mh-h, mw, h, onPm, 0, y1+mh-h, mw, h); + p.drawPixmap(x, y1, mw, mh-h, offPm, 0, y1, mw, mh-h); + + //--------------------------------------------------- + // draw peak line + //--------------------------------------------------- + + h = mh - (lrint(fast_log10(meterPeak[i]) * -20.0f * mh / range)); + if (h > mh) + h = mh; + if (h > 0) + p.drawLine(x, y3-h, x+mw, y3-h); + + x += mw; + } + + // optimize common case: + if (ev->rect() == QRect(20, kh/2, _meterWidth-1, mh)) + return; + + QColor sc(isEnabled() ? _scaleColor : Qt::gray); + QColor svc(isEnabled() ? _scaleValueColor : Qt::gray); + p.setBrush(svc); + + //--------------------------------------------------- + // draw scale + //--------------------------------------------------- + + int y2 = h - (ppos + y1); + p.fillRect(x, y1, _scaleWidth, y2-y1, sc); + p.fillRect(x, y2, _scaleWidth, y3-y2, svc); + + //--------------------------------------------------- + // draw tick marks + //--------------------------------------------------- + + QFont f(p.font()); + f.setPointSize(6); + p.setFont(f); + p.setPen(QPen(Qt::darkGray, 2)); + QFontMetrics fm(f); + int xt = 20 - fm.width("00") - 5; + + QString s; + for (int i = 10; i < 70; i += 10) { + h = y1 + lrint(i * mh / range); + s.setNum(i - 10); + p.drawText(xt, h - 3, s); + p.drawLine(15, h, 20, h); + } + + //--------------------------------------------------- + // draw slider + //--------------------------------------------------- + + x += _scaleWidth/2; + p.setPen(QPen(svc, 0)); + p.translate(QPointF(x, y2)); + p.setRenderHint(QPainter::Antialiasing, true); + p.drawPath(*points); + } + +//--------------------------------------------------------- +// mousePressEvent +//--------------------------------------------------------- + +void MeterSlider::mousePressEvent(QMouseEvent* ev) + { + if (ev->pos().x() < _meterWidth) { + emit meterClicked(); + return; + } + VolSlider::mousePressEvent(ev); + } +} + diff --git a/attic/muse_qt4_evolution/awl/mslider.h b/attic/muse_qt4_evolution/awl/mslider.h new file mode 100644 index 00000000..4ae888b1 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/mslider.h @@ -0,0 +1,68 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AWLMSLIDER_H__ +#define __AWLMSLIDER_H__ + +#include "volslider.h" + +namespace Awl { + +//--------------------------------------------------------- +// MeterSlider +// volume slider with meter display +//--------------------------------------------------------- + +class MeterSlider : public VolSlider + { + Q_PROPERTY(int meterWidth READ meterWidth WRITE setMeterWidth) + Q_PROPERTY(int channel READ channel WRITE setChannel) + Q_OBJECT + + int _channel; + std::vector meterval; + std::vector meterPeak; + int yellowScale, redScale; + int _meterWidth; + QPixmap onPm, offPm; // cached pixmap values + + virtual void mousePressEvent(QMouseEvent*); + virtual void paintEvent(QPaintEvent*); + virtual void resizeEvent(QResizeEvent*); + + signals: + void meterClicked(); + + public slots: + void resetPeaks(); + void setMeterVal(int channel, double value, double peak); + + public: + MeterSlider(QWidget* parent = 0); + void setChannel(int n); + int channel() const { return _channel; } + int meterWidth() const { return _meterWidth; } + void setMeterWidth(int v) { _meterWidth = v; } + virtual QSize sizeHint() const; + }; +} + +#endif + diff --git a/attic/muse_qt4_evolution/awl/panentry.cpp b/attic/muse_qt4_evolution/awl/panentry.cpp new file mode 100644 index 00000000..0cc098c2 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/panentry.cpp @@ -0,0 +1,35 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "panentry.h" + +namespace Awl { + +//--------------------------------------------------------- +// PanEntry +//--------------------------------------------------------- + +PanEntry::PanEntry(QWidget* parent) + : FloatEntry(parent) + { + setRange(-1.0, 1.0); + } +} + diff --git a/attic/muse_qt4_evolution/awl/panentry.h b/attic/muse_qt4_evolution/awl/panentry.h new file mode 100644 index 00000000..01689580 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/panentry.h @@ -0,0 +1,40 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AWLPANENTRY_H__ +#define __AWLPANENTRY_H__ + +#include "floatentry.h" + +namespace Awl { + +//--------------------------------------------------------- +// PanEntry +//--------------------------------------------------------- + +class PanEntry : public FloatEntry { + Q_OBJECT + + public: + PanEntry(QWidget*); + }; +} + +#endif diff --git a/attic/muse_qt4_evolution/awl/panknob.cpp b/attic/muse_qt4_evolution/awl/panknob.cpp new file mode 100644 index 00000000..083aa2e0 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/panknob.cpp @@ -0,0 +1,38 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "panknob.h" + +namespace Awl { + +//--------------------------------------------------------- +// PanKnob +//--------------------------------------------------------- + +PanKnob::PanKnob(QWidget* parent) + : Knob(parent) + { + setCenter(true); + setRange(-1.0f, 1.0f); + setLineStep(0.01f); + setPageStep(0.1f); + } +} + diff --git a/attic/muse_qt4_evolution/awl/panknob.h b/attic/muse_qt4_evolution/awl/panknob.h new file mode 100644 index 00000000..d8bf2d87 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/panknob.h @@ -0,0 +1,46 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AWLPANKNOB_H__ +#define __AWLPANKNOB_H__ + +#include "knob.h" + +namespace Awl { + +//--------------------------------------------------------- +// PanKnob +//! Pan Knob entry widget +// +//! This widget implements a centered floating point +//! knob used to adjust the pan position in an audio +//! mixer. +//--------------------------------------------------------- + +class PanKnob : public Knob { + Q_OBJECT + + public: + PanKnob(QWidget* parent = 0); + }; +} + +#endif + diff --git a/attic/muse_qt4_evolution/awl/pitchedit.cpp b/attic/muse_qt4_evolution/awl/pitchedit.cpp new file mode 100644 index 00000000..18136074 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/pitchedit.cpp @@ -0,0 +1,89 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "pitchedit.h" +#include "utils.h" + +namespace Awl { + +//--------------------------------------------------------- +// PitchEdit +//--------------------------------------------------------- + +PitchEdit::PitchEdit(QWidget* parent) + : QSpinBox(parent) + { + setRange(0, 127); + deltaMode = false; + } + +//--------------------------------------------------------- +// keyPressEvent +//--------------------------------------------------------- + +void PitchEdit::keyPressEvent(QKeyEvent* ev) + { + if (ev->key() == Qt::Key_Return) + emit returnPressed(); + else if (ev->key() == Qt::Key_Escape) + emit escapePressed(); + } + +//--------------------------------------------------------- +// mapValueToText +//--------------------------------------------------------- + +QString PitchEdit::mapValueToText(int v) + { + if (deltaMode) { + QString s; + s.setNum(v); + return s; + } + else + return pitch2string(v); + } + +//--------------------------------------------------------- +// mapTextToValue +//--------------------------------------------------------- + +int PitchEdit::mapTextToValue(bool* ok) + { +printf("AwlPitchEdit: mapTextToValue: not impl.\n"); + if (ok) + *ok = false; + return 0; + } + +//--------------------------------------------------------- +// setDeltaMode +//--------------------------------------------------------- + +void PitchEdit::setDeltaMode(bool val) + { + deltaMode = val; + if (deltaMode) + setRange(-127, 127); + else + setRange(0, 127); + } +} + diff --git a/attic/muse_qt4_evolution/awl/pitchedit.h b/attic/muse_qt4_evolution/awl/pitchedit.h new file mode 100644 index 00000000..dd0ba4c7 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/pitchedit.h @@ -0,0 +1,50 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AWLPITCHEDIT_H__ +#define __AWLPITCHEDIT_H__ + +namespace Awl { + +//--------------------------------------------------------- +// PitchEdit +//--------------------------------------------------------- + +class PitchEdit : public QSpinBox { + Q_OBJECT + + bool deltaMode; + + protected: + virtual QString mapValueToText(int v); + virtual int mapTextToValue(bool* ok); + virtual void keyPressEvent(QKeyEvent*); + + signals: + void returnPressed(); + void escapePressed(); + + public: + PitchEdit(QWidget* parent); + void setDeltaMode(bool); + }; +} + +#endif diff --git a/attic/muse_qt4_evolution/awl/pitchlabel.cpp b/attic/muse_qt4_evolution/awl/pitchlabel.cpp new file mode 100644 index 00000000..1d7149f6 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/pitchlabel.cpp @@ -0,0 +1,106 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "pitchedit.h" +#include "pitchlabel.h" +#include "utils.h" + +namespace Awl { + +//--------------------------------------------------------- +// PitchLabel +//--------------------------------------------------------- + +PitchLabel::PitchLabel() + { + _pitchMode = true; + _value = -1; + setFrameStyle(WinPanel | Sunken); + setLineWidth(2); + setMidLineWidth(3); + setValue(0); + int fw = style()->pixelMetric(QStyle::PM_DefaultFrameWidth); + setIndent(fw); + } + +//--------------------------------------------------------- +// setPitchMode +//--------------------------------------------------------- + +void PitchLabel::setPitchMode(bool val) + { + _pitchMode = val; + } + +//--------------------------------------------------------- +// sizeHint +//--------------------------------------------------------- + +QSize PitchLabel::sizeHint() const + { + QFontMetrics fm(font()); + int fw = style()->pixelMetric(QStyle::PM_DefaultFrameWidth); + int h = fm.height() + fw * 2; +// int w = 2 + fm.width(QString("A#8")) + fw * 4; + int w = 2 + fm.width(QString("-9999")) + fw * 4; // must display 14Bit controller values + return QSize(w, h).expandedTo(QApplication::globalStrut()); + } + +//--------------------------------------------------------- +// setValue +//--------------------------------------------------------- + +void PitchLabel::setValue(int val) + { + if (val == _value) + return; + _value = val; + QString s; + if (_pitchMode) + s = pitch2string(_value); + else + s.sprintf("%d", _value); + setText(s); + } + +//--------------------------------------------------------- +// setInt +//--------------------------------------------------------- + +void PitchLabel::setInt(int val) + { + if (_pitchMode) + setPitchMode(false); + setValue(val); + } + +//--------------------------------------------------------- +// setPitch +//--------------------------------------------------------- + +void PitchLabel::setPitch(int val) + { + if (!_pitchMode) { + setPitchMode(true); + } + setValue(val); + } +} + diff --git a/attic/muse_qt4_evolution/awl/pitchlabel.h b/attic/muse_qt4_evolution/awl/pitchlabel.h new file mode 100644 index 00000000..36a3cbfa --- /dev/null +++ b/attic/muse_qt4_evolution/awl/pitchlabel.h @@ -0,0 +1,51 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AWLPITCHLABEL_H__ +#define __AWLPITCHLABEL_H__ + +namespace Awl { + +//--------------------------------------------------------- +// PitchLabel +//--------------------------------------------------------- + +class PitchLabel : public QLabel { + bool _pitchMode; + int _value; + Q_OBJECT + + protected: + QSize sizeHint() const; + + public slots: + void setValue(int); + void setInt(int); + void setPitch(int); + + public: + PitchLabel(); + int value() const { return _value; } + void setPitchMode(bool val); + bool pitchMode() const { return _pitchMode; } + }; +} + +#endif diff --git a/attic/muse_qt4_evolution/awl/posedit.cpp b/attic/muse_qt4_evolution/awl/posedit.cpp new file mode 100644 index 00000000..4f8b19b2 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/posedit.cpp @@ -0,0 +1,441 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "al/al.h" +#include "awl.h" +#include "posedit.h" +#include "al/sig.h" + +namespace Awl { + + using AL::mtcType; + using AL::sigmap; + +//--------------------------------------------------------- +// PosEdit +//--------------------------------------------------------- + +PosEdit::PosEdit(QWidget* parent) + : QAbstractSpinBox(parent) + { + initialized = false; + setReadOnly(false); + setSmpte(false); + } + +void* PosEdit::operator new(size_t n) + { + void* p = new char[n]; + memset(p, 0, n); + return p; + } + +PosEdit::~PosEdit() + { + } + +QSize PosEdit::sizeHint() const + { + QFontMetrics fm(font()); + int fw = style()->pixelMetric(QStyle::PM_SpinBoxFrameWidth); + int h = fm.height() + fw * 2; + int w = fw * 4 + 10; // HACK: 10 = spinbox up/down arrows + if (_smpte) + w += 2 + fm.width('9') * 9 + fm.width(':') * 3 + fw * 4; + else + w += 2 + fm.width('9') * 9 + fm.width('.') * 2 + fw * 4; + return QSize(w, h).expandedTo(QApplication::globalStrut()); + } + +//--------------------------------------------------------- +// event +// filter Tab and Backtab key events +//--------------------------------------------------------- + +bool PosEdit::event(QEvent* event) + { + if (event->type() == QEvent::KeyPress) { + QKeyEvent* ke = static_cast(event); + int segment = curSegment(); + if (ke->key() == Qt::Key_Backtab) { + if (_smpte) { + if (segment == 3) { + lineEdit()->setSelection(7, 2); + return true; + } + else if (segment == 2) { + lineEdit()->setSelection(4, 2); + return true; + } + else if (segment == 1) { + lineEdit()->setSelection(0, 3); + return true; + } + } + else { + if (segment == 2) { + lineEdit()->setSelection(5, 2); + return true; + } + if (segment == 1) { + lineEdit()->setSelection(0, 4); + return true; + } + } + } + if (ke->key() == Qt::Key_Tab) { + if (_smpte) { + if (segment == 0) { + lineEdit()->setSelection(4, 2); + return true; + } + else if (segment == 1) { + lineEdit()->setSelection(7, 2); + return true; + } + else if (segment == 2) { + lineEdit()->setSelection(10, 2); + return true; + } + } + else { + if (segment == 0) { + lineEdit()->setSelection(5, 2); + return true; + } + if (segment == 1) { + lineEdit()->setSelection(8, 3); + return true; + } + } + } + } + else if (event->type() == QEvent::FocusIn) { + QFocusEvent* fe = static_cast(event); + QAbstractSpinBox::focusInEvent(fe); + int segment = curSegment(); + switch(segment) { + case 0: lineEdit()->setSelection(0,4); break; + case 1: lineEdit()->setSelection(5,2); break; + case 2: lineEdit()->setSelection(8,3); break; + } + return true; + } + return QAbstractSpinBox::event(event); + } + +//--------------------------------------------------------- +// setSmpte +//--------------------------------------------------------- + +void PosEdit::setSmpte(bool f) + { + _smpte = f; + if (_smpte) + lineEdit()->setInputMask("999:99:99:99"); + else + lineEdit()->setInputMask("9999.99.999"); + updateValue(); + } + +//--------------------------------------------------------- +// setValue +//--------------------------------------------------------- + +void PosEdit::setValue(const Pos& time) + { + _pos = time; + updateValue(); + } + +void PosEdit::setValue(const QString& s) + { + Pos time(s); + setValue(time); + } + +void PosEdit::setValue(int t) + { + Pos time(t); + setValue(time); + } + +//--------------------------------------------------------- +// updateValue +//--------------------------------------------------------- + +void PosEdit::updateValue() + { + char buffer[64]; + if (_smpte) { + int minute, sec, frame, subframe; + _pos.msf(&minute, &sec, &frame, &subframe); + sprintf(buffer, "%03d:%02d:%02d:%02d", minute, sec, frame, subframe); + } + else { + int bar, beat; + int tick; + _pos.mbt(&bar, &beat, &tick); + sprintf(buffer, "%04d.%02d.%03d", bar+1, beat+1, tick); + } + lineEdit()->setText(buffer); + } + +//--------------------------------------------------------- +// stepEnables +//--------------------------------------------------------- + +QAbstractSpinBox::StepEnabled PosEdit::stepEnabled() const + { + int segment = curSegment(); + QAbstractSpinBox::StepEnabled en = QAbstractSpinBox::StepUpEnabled | QAbstractSpinBox::StepDownEnabled; + + if (_smpte) { + int minute, sec, frame, subframe; + _pos.msf(&minute, &sec, &frame, &subframe); + switch(segment) { + case 0: + if (minute == 0) + en &= ~QAbstractSpinBox::StepDownEnabled; + break; + case 1: + if (sec == 0) + en &= ~QAbstractSpinBox::StepDownEnabled; + else if (sec == 59) + en &= ~QAbstractSpinBox::StepUpEnabled; + break; + case 2: + if (frame == 0) + en &= ~QAbstractSpinBox::StepDownEnabled; + else if (frame == 23) + en &= ~QAbstractSpinBox::StepUpEnabled; + break; + case 3: + if (subframe == 0) + en &= ~QAbstractSpinBox::StepDownEnabled; + else if (subframe == 99) + en &= ~QAbstractSpinBox::StepUpEnabled; + break; + } + } + else { + int bar, beat; + unsigned tick; + AL::sigmap.tickValues(_pos.tick(), &bar, &beat, &tick); + unsigned tb = AL::sigmap.ticksBeat(_pos.tick()); + unsigned tm = AL::sigmap.ticksMeasure(_pos.tick()); + int bm = tm / tb; + + switch (segment) { + case 0: + if (bar == 0) + en &= ~QAbstractSpinBox::StepDownEnabled; + break; + case 1: + if (beat == 0) + en &= ~QAbstractSpinBox::StepDownEnabled; + else { + if (beat >= (bm-1)) + en &= ~QAbstractSpinBox::StepUpEnabled; + } + break; + case 2: + if (tick == 0) + en &= ~QAbstractSpinBox::StepDownEnabled; + else { + if (tick >= (tb-1)) + en &= ~QAbstractSpinBox::StepUpEnabled; + } + break; + } + } + return en; + } + +//--------------------------------------------------------- +// fixup +//--------------------------------------------------------- + +void PosEdit::fixup(QString& input) const + { + printf("fixup <%s>\n", input.toLatin1().data()); + } + +//--------------------------------------------------------- +// validate +//--------------------------------------------------------- + +QValidator::State PosEdit::validate(QString&,int&) const + { + // TODO +// printf("validate\n"); + return QValidator::Acceptable; + } + +//--------------------------------------------------------- +// curSegment +//--------------------------------------------------------- + +int PosEdit::curSegment() const + { + QLineEdit* le = lineEdit(); + int pos = le->cursorPosition(); + int segment = -1; + + if (_smpte) { + if (pos >= 0 && pos <= 3) + segment = 0; + else if (pos >= 4 && pos <= 6) + segment = 1; + else if (pos >= 7 && pos <= 9) + segment = 2; + else if (pos >= 10) + segment = 3; + } + else { + if (pos >= 0 && pos <= 4) + segment = 0; + else if (pos >= 5 && pos <= 7) + segment = 1; + else if (pos >= 8) + segment = 2; + else + printf("curSegment = -1, pos %d\n", pos); + } + return segment; + } + +//--------------------------------------------------------- +// stepBy +//--------------------------------------------------------- + +void PosEdit::stepBy(int steps) + { + int segment = curSegment(); + int selPos; + int selLen; + + bool changed = false; + + if (_smpte) { + int minute, sec, frame, subframe; + _pos.msf(&minute, &sec, &frame, &subframe); + switch(segment) { + case 0: + minute += steps; + if (minute < 0) + minute = 0; + selPos = 0; + selLen = 3; + break; + case 1: + sec += steps; + if (sec < 0) + sec = 0; + if (sec > 59) + sec = 59; + selPos = 4; + selLen = 2; + break; + case 2: + frame += steps; + if (frame < 0) + frame = 0; + if (frame > 24) //TD frame type? + frame = 24; + selPos = 7; + selLen = 2; + break; + case 3: + subframe += steps; + if (subframe < 0) + subframe = 0; + if (subframe > 99) + subframe = 99; + selPos = 10; + selLen = 2; + break; + default: + return; + } + Pos newPos(minute, sec, frame, subframe); + if (!(newPos == _pos)) { + changed = true; + _pos = newPos; + } + } + else { + int bar, beat, tick; + _pos.mbt(&bar, &beat, &tick); + + int tb = AL::sigmap.ticksBeat(_pos.tick()); + unsigned tm = AL::sigmap.ticksMeasure(_pos.tick()); + int bm = tm / tb; + + switch(segment) { + case 0: + bar += steps; + if (bar < 0) + bar = 0; + selPos = 0; + selLen = 4; + break; + case 1: + beat += steps; + if (beat < 0) + beat = 0; + else if (beat >= bm) + beat = bm - 1; + selPos = 5; + selLen = 2; + break; + case 2: + tick += steps; + if (tick < 0) + tick = 0; + else if (tick >= tb) + tick = tb -1; + selPos = 8; + selLen = 3; + break; + default: + return; + } + Pos newPos(bar, beat, tick); + if (!(newPos == _pos)) { + changed = true; + _pos = newPos; + } + } + if (changed) { + updateValue(); + emit valueChanged(_pos); + } + lineEdit()->setSelection(selPos, selLen); + } + + void PosEdit::paintEvent(QPaintEvent* event) { + if (!initialized) + updateValue(); + initialized = true; + QAbstractSpinBox::paintEvent(event); + } +} + diff --git a/attic/muse_qt4_evolution/awl/posedit.h b/attic/muse_qt4_evolution/awl/posedit.h new file mode 100644 index 00000000..effa0537 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/posedit.h @@ -0,0 +1,72 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __POSEDIT_H__ +#define __POSEDIT_H__ + +#include "al/pos.h" + +namespace Awl { + + using AL::Pos; + +//--------------------------------------------------------- +// PosEdit +//--------------------------------------------------------- + +class PosEdit : public QAbstractSpinBox + { + Q_OBJECT + Q_PROPERTY(bool smpte READ smpte WRITE setSmpte) + + bool _smpte; + Pos _pos; + bool initialized; + + virtual void paintEvent(QPaintEvent* event); + virtual void stepBy(int steps); + virtual StepEnabled stepEnabled() const; + virtual void fixup(QString& input) const; + virtual QValidator::State validate(QString&, int&) const; + void updateValue(); + int curSegment() const; + virtual bool event(QEvent*); + + signals: + void valueChanged(const Pos&); + + public slots: + void setValue(const Pos& time); + void setValue(int t); + void setValue(const QString& s); + + public: + PosEdit(QWidget* parent = 0); + ~PosEdit(); + QSize sizeHint() const; + + Pos pos() const { return _pos; } + void setSmpte(bool); + bool smpte() const { return _smpte; } + void* operator new(size_t); + }; +} + +#endif diff --git a/attic/muse_qt4_evolution/awl/poslabel.cpp b/attic/muse_qt4_evolution/awl/poslabel.cpp new file mode 100644 index 00000000..638508fd --- /dev/null +++ b/attic/muse_qt4_evolution/awl/poslabel.cpp @@ -0,0 +1,100 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "poslabel.h" +#include "al/pos.h" + +namespace Awl { + +//--------------------------------------------------------- +// PosLabel +//--------------------------------------------------------- + +PosLabel::PosLabel(QWidget* parent) + : QLabel(parent) + { + _smpte = false; + setFrameStyle(WinPanel | Sunken); + setLineWidth(2); + setMidLineWidth(3); + int fw = style()->pixelMetric(QStyle::PM_DefaultFrameWidth); + setIndent(fw); + updateValue(); + } + +//--------------------------------------------------------- +// sizeHint +//--------------------------------------------------------- + +QSize PosLabel::sizeHint() const + { + QFontMetrics fm(font()); + int fw = style()->pixelMetric(QStyle::PM_DefaultFrameWidth); + int h = fm.height() + fw * 2; + int w; + if (_smpte) + w = 2 + fm.width('9') * 9 + fm.width(':') * 3 + fw * 4; + else + w = 2 + fm.width('9') * 9 + fm.width('.') * 2 + fw * 4; + return QSize(w, h).expandedTo(QApplication::globalStrut()); + } + +//--------------------------------------------------------- +// updateValue +//--------------------------------------------------------- + +void PosLabel::updateValue() + { + QString s; + if (_smpte) { + int min, sec, frame, subframe; + pos.msf(&min, &sec, &frame, &subframe); + s.sprintf("%03d:%02d:%02d:%02d", min, sec, frame, subframe); + } + else { + int measure, beat, tick; + pos.mbt(&measure, &beat, &tick); + s.sprintf("%04d.%02d.%03u", measure+1, beat+1, tick); + } + setText(s); + } + +//--------------------------------------------------------- +// setValue +//--------------------------------------------------------- + +void PosLabel::setValue(const AL::Pos& val, bool enable) + { + setEnabled(enable); + pos = val; + updateValue(); + } + +//--------------------------------------------------------- +// setSmpte +//--------------------------------------------------------- + +void PosLabel::setSmpte(bool val) + { + _smpte = val; + updateValue(); + } +} + diff --git a/attic/muse_qt4_evolution/awl/poslabel.h b/attic/muse_qt4_evolution/awl/poslabel.h new file mode 100644 index 00000000..68139efe --- /dev/null +++ b/attic/muse_qt4_evolution/awl/poslabel.h @@ -0,0 +1,56 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AWLPOSLABEL_H__ +#define __AWLPOSLABEL_H__ + +#include "al/pos.h" + +namespace Awl { + +//--------------------------------------------------------- +// PosLabel +//--------------------------------------------------------- + +class PosLabel : public QLabel { + bool _smpte; + AL::Pos pos; + Q_OBJECT + + void updateValue(); + + protected: + QSize sizeHint() const; + + public slots: + void setValue(const AL::Pos&, bool); + + public: + PosLabel(QWidget* parent = 0); + AL::Pos value() const { return pos; } + + void setSmpte(bool); + bool smpte() const { return _smpte; } + }; + +} + +#endif + diff --git a/attic/muse_qt4_evolution/awl/sigedit.cpp b/attic/muse_qt4_evolution/awl/sigedit.cpp new file mode 100644 index 00000000..6493ad6c --- /dev/null +++ b/attic/muse_qt4_evolution/awl/sigedit.cpp @@ -0,0 +1,224 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "al/al.h" +#include "awl.h" +#include "sigedit.h" +#include "al/sig.h" + +namespace Awl { + + using AL::sigmap; + +//--------------------------------------------------------- +// SigEdit +//--------------------------------------------------------- + +SigEdit::SigEdit(QWidget* parent) + : QAbstractSpinBox(parent) + { + initialized = false; + setReadOnly(false); + setMinimumWidth(100); //TD: sizeHint + lineEdit()->setInputMask("99/99"); + } + +SigEdit::~SigEdit() + { + } + +//--------------------------------------------------------- +// event +// filter Tab and Backtab key events +//--------------------------------------------------------- + +bool SigEdit::event(QEvent* event) + { + if (event->type() == QEvent::KeyPress) { + QKeyEvent* ke = static_cast(event); + int segment = curSegment(); + if (ke->key() == Qt::Key_Backtab) { + if (segment == 2) { + lineEdit()->setSelection(5, 2); + return true; + } + if (segment == 1) { + lineEdit()->setSelection(0, 4); + return true; + } + } + if (ke->key() == Qt::Key_Tab) { + if (segment == 0) { + lineEdit()->setSelection(5, 2); + return true; + } + if (segment == 1) { + lineEdit()->setSelection(8, 3); + return true; + } + } + } + else if (event->type() == QEvent::FocusIn) { + QFocusEvent* fe = static_cast(event); + QAbstractSpinBox::focusInEvent(fe); + int segment = curSegment(); + switch(segment) { + case 0: lineEdit()->setSelection(0,4); break; + case 1: lineEdit()->setSelection(5,2); break; + case 2: lineEdit()->setSelection(8,3); break; + } + return true; + } + return QAbstractSpinBox::event(event); + } + +//--------------------------------------------------------- +// setValue +//--------------------------------------------------------- + +void SigEdit::setValue(const AL::TimeSignature& s) + { + _sig = s; + updateValue(); + } + +//--------------------------------------------------------- +// updateValue +//--------------------------------------------------------- + +void SigEdit::updateValue() + { + char buffer[64]; + sprintf(buffer, "%d/%d", _sig.z, _sig.n); + lineEdit()->setText(buffer); + } + +//--------------------------------------------------------- +// stepEnables +//--------------------------------------------------------- + +QAbstractSpinBox::StepEnabled SigEdit::stepEnabled() const + { + int segment = curSegment(); + QAbstractSpinBox::StepEnabled en = QAbstractSpinBox::StepUpEnabled | QAbstractSpinBox::StepDownEnabled; + + switch (segment) { + case 0: + if (_sig.z == 1) + en &= ~QAbstractSpinBox::StepDownEnabled; + break; + case 1: + if (_sig.n == 1) + en &= ~QAbstractSpinBox::StepDownEnabled; + break; + } + return en; + } + +//--------------------------------------------------------- +// fixup +//--------------------------------------------------------- + +void SigEdit::fixup(QString& input) const + { + printf("fixup <%s>\n", input.toLatin1().data()); + } + +//--------------------------------------------------------- +// validate +//--------------------------------------------------------- + +QValidator::State SigEdit::validate(QString&,int&) const + { + // TODO + // printf("validate\n"); + return QValidator::Acceptable; + } + +//--------------------------------------------------------- +// curSegment +//--------------------------------------------------------- + +int SigEdit::curSegment() const + { + QLineEdit* le = lineEdit(); + int pos = le->cursorPosition(); + int segment = -1; + + if (pos >= 0 && pos <= 4) + segment = 0; + else if (pos >= 5 && pos <= 7) + segment = 1; + else if (pos >= 8) + segment = 2; + else + printf("curSegment = -1, pos %d\n", pos); + return segment; + } + +//--------------------------------------------------------- +// stepBy +//--------------------------------------------------------- + +void SigEdit::stepBy(int steps) + { + int segment = curSegment(); + int selPos; + int selLen; + + bool changed = false; + AL::TimeSignature osig(_sig); + + switch(segment) { + case 0: + _sig.z += steps; + if (_sig.z < 1) + _sig.z = 1; + selPos = 0; + selLen = 2; + break; + case 1: + _sig.n += steps; + if (_sig.n < 1) + _sig.n = 1; + selPos = 3; + selLen = 2; + break; + default: + return; + } + if (osig.z != _sig.z || osig.n != _sig.n) { + changed = true; + } + if (changed) { + updateValue(); + emit valueChanged(_sig); + } + lineEdit()->setSelection(selPos, selLen); + } + + void SigEdit::paintEvent(QPaintEvent* event) { + if (!initialized) + updateValue(); + initialized = true; + QAbstractSpinBox::paintEvent(event); + } +} + diff --git a/attic/muse_qt4_evolution/awl/sigedit.h b/attic/muse_qt4_evolution/awl/sigedit.h new file mode 100644 index 00000000..35e762ca --- /dev/null +++ b/attic/muse_qt4_evolution/awl/sigedit.h @@ -0,0 +1,66 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __SIGEDIT_H__ +#define __SIGEDIT_H__ + +#include "al/sig.h" + +namespace AL { + class TimeSignature; + }; + +namespace Awl { + +//--------------------------------------------------------- +// SigEdit +//--------------------------------------------------------- + +class SigEdit : public QAbstractSpinBox + { + Q_OBJECT + + AL::TimeSignature _sig; + bool initialized; + + virtual void paintEvent(QPaintEvent* event); + virtual void stepBy(int steps); + virtual StepEnabled stepEnabled() const; + virtual void fixup(QString& input) const; + virtual QValidator::State validate(QString&, int&) const; + void updateValue(); + int curSegment() const; + virtual bool event(QEvent*); + + signals: + void valueChanged(const AL::TimeSignature&); + + public slots: + void setValue(const AL::TimeSignature&); + + public: + SigEdit(QWidget* parent = 0); + ~SigEdit(); + + AL::TimeSignature sig() const { return _sig; } + }; +} + +#endif diff --git a/attic/muse_qt4_evolution/awl/slider.cpp b/attic/muse_qt4_evolution/awl/slider.cpp new file mode 100644 index 00000000..7686e850 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/slider.cpp @@ -0,0 +1,251 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "slider.h" + +namespace Awl { + +//--------------------------------------------------------- +// Slider +//--------------------------------------------------------- + +Slider::Slider(QWidget* parent) + : AbstractSlider(parent), orient(Qt::Vertical), _sliderSize(14,14) + { + init(); + } + +//--------------------------------------------------------- +// Slider +//--------------------------------------------------------- + +Slider::Slider(Qt::Orientation orientation, QWidget* parent) + : AbstractSlider(parent), orient(orientation), _sliderSize(14,14) + { + init(); + } + +//--------------------------------------------------------- +// Slider +//--------------------------------------------------------- + +void Slider::init() + { + if (orient == Qt::Vertical) + setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); + else + setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + dragMode = false; + points = 0; + updateKnob(); + } + +//--------------------------------------------------------- +// sizeHint +//--------------------------------------------------------- + +QSize Slider::sizeHint() const + { + int w = _sliderSize.width() + scaleWidth(); + return orient == Qt::Vertical ? QSize(w, 200) : QSize(200, w); + } + +//--------------------------------------------------------- +// Slider +//--------------------------------------------------------- + +Slider::~Slider() + { + if (points) + delete points; + } + +//--------------------------------------------------------- +// setOrientation +//--------------------------------------------------------- + +void Slider::setOrientation(Qt::Orientation o) + { + orient = o; + updateKnob(); + update(); + } + +//--------------------------------------------------------- +// updateKnob +//--------------------------------------------------------- + +void Slider::updateKnob() + { + if (points) + delete points; + points = new QPainterPath; + int kh = _sliderSize.height(); + int kw = _sliderSize.width(); + points->moveTo(0.0, 0.0); + if (orient == Qt::Vertical) { + int kh = _sliderSize.height(); + int kh2 = kh / 2; + points->lineTo(kw, -kh2); + points->lineTo(kw, kh2); + } + else { + int kw2 = kw/2; + points->lineTo(-kw2, kh); + points->lineTo(kw2, kh); + } + points->lineTo(0.0, 0.0); + } + +//--------------------------------------------------------- +// setInvertedAppearance +//--------------------------------------------------------- + +void Slider::setInvertedAppearance(bool val) + { + AbstractSlider::setInvertedAppearance(val); + update(); + } + +//--------------------------------------------------------- +// setSliderSize +//--------------------------------------------------------- + +void Slider::setSliderSize(const QSize& s) + { + _sliderSize = s; + update(); + } + +//--------------------------------------------------------- +// mousePressEvent +//--------------------------------------------------------- + +void Slider::mousePressEvent(QMouseEvent* ev) + { + startDrag = ev->pos(); +// if (points->boundingRect().toRect().contains(startDrag)) { + emit sliderPressed(_id); + dragMode = true; + int pixel = (orient == Qt::Vertical) ? height() - _sliderSize.height() : width() - _sliderSize.width(); + dragppos = int(pixel * (_value - minValue()) / (maxValue() - minValue())); + if (_invert) + dragppos = pixel - dragppos; +// } + } + +//--------------------------------------------------------- +// mouseReleaseEvent +//--------------------------------------------------------- + +void Slider::mouseReleaseEvent(QMouseEvent*) + { + if (dragMode) { + emit sliderReleased(_id); + dragMode = false; + } + } + +//--------------------------------------------------------- +// mouseMoveEvent +//--------------------------------------------------------- + +void Slider::mouseMoveEvent(QMouseEvent* ev) + { + if (!dragMode) + return; + int delta = startDrag.y() - ev->y(); + +// if (_invert) +// delta = -delta; + if (orient == Qt::Horizontal) + delta = -delta; + int ppos = dragppos + delta; + if (ppos < 0) + ppos = 0; + + int pixel = (orient == Qt::Vertical) ? height() - _sliderSize.height() : width() - _sliderSize.width(); + if (ppos > pixel) + ppos = pixel; + int pos = _invert ? (pixel - ppos) : ppos; + _value = (pos * (maxValue() - minValue()) / pixel) + minValue() - 0.000001; + update(); + valueChange(); + } + +//--------------------------------------------------------- +// paint +// r - phys coord system +//--------------------------------------------------------- + +void Slider::paintEvent(QPaintEvent* ev) + { + int h = height(); + int w = width(); + int kw = _sliderSize.width(); + int kh = _sliderSize.height(); + int pixel = (orient == Qt::Vertical) ? h - kh : w - kw; + double range = maxValue() - minValue(); + int ppos = int(pixel * (_value - minValue()) / range); + if ((orient == Qt::Vertical && _invert) || (orient == Qt::Horizontal && !_invert)) + ppos = pixel - ppos; + + QRect rr(ev->rect()); + QPainter p(this); + + QColor sc(isEnabled() ? _scaleColor : Qt::gray); + QColor svc(isEnabled() ? _scaleValueColor : Qt::gray); + p.setBrush(svc); + + int kh2 = kh/2; + + //--------------------------------------------------- + // draw scale + //--------------------------------------------------- + + if (orient == Qt::Vertical) { + int xm = (w - _scaleWidth - _sliderSize.height()) / 2; + int y1 = kh2; + int y2 = h - (ppos + y1); + int y3 = h - y1; + p.fillRect(xm, y1, _scaleWidth, y2-y1, _invert ? svc : sc); + p.fillRect(xm, y2, _scaleWidth, y3-y2, _invert ? sc : svc); + p.translate(QPointF(xm + _scaleWidth/2, y2)); + } + else { + int ym = (h - _scaleWidth - _sliderSize.height()) / 2; + int x1 = kh2; + int x2 = w - (ppos + x1); + int x3 = w - x1; + p.fillRect(x1, ym, x2-x1, _scaleWidth, _invert ? sc : svc); + p.fillRect(x2, ym, x3-x2, _scaleWidth, _invert ? svc : sc); + p.translate(QPointF(x2, ym + _scaleWidth/2)); + } + + //--------------------------------------------------- + // draw slider + //--------------------------------------------------- + + p.setRenderHint(QPainter::Antialiasing, true); + p.setPen(QPen(svc, 0)); + p.drawPath(*points); + } +} + diff --git a/attic/muse_qt4_evolution/awl/slider.h b/attic/muse_qt4_evolution/awl/slider.h new file mode 100644 index 00000000..e8e38ba2 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/slider.h @@ -0,0 +1,81 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AWLSLIDER_H__ +#define __AWLSLIDER_H__ + +#include "aslider.h" + +namespace Awl { + +//--------------------------------------------------------- +// Slider +// +//! Base class of all slider type input widgets. +// +//! Inherits from AwlKnob +//! +//--------------------------------------------------------- + +class Slider : public AbstractSlider { + Q_OBJECT + + Q_PROPERTY(Qt::Orientation orientation READ orientation WRITE setOrientation) + Q_PROPERTY(QSize sliderSize READ sliderSize WRITE setSliderSize) + + Qt::Orientation orient; + QSize _sliderSize; + + QPoint startDrag; + bool dragMode; + int dragppos; + + virtual void mouseReleaseEvent(QMouseEvent*); + virtual void mouseMoveEvent(QMouseEvent*); + virtual void paintEvent(QPaintEvent*); + void init(); + void updateKnob(); + + protected: + QPainterPath* points; + virtual void mousePressEvent(QMouseEvent*); + + signals: + void sliderPressed(int); + void sliderReleased(int); + + public: + Slider(QWidget* parent = 0); + Slider(Qt::Orientation orientation, QWidget* parent = 0); + ~Slider(); + + virtual void setOrientation(Qt::Orientation); + Qt::Orientation orientation() const { return orient; } + + QSize sliderSize() const { return _sliderSize; } + void setSliderSize(const QSize& s); + + virtual void setInvertedAppearance(bool val); + virtual QSize sizeHint() const; + }; +} + +#endif + diff --git a/attic/muse_qt4_evolution/awl/tcanvas.cpp b/attic/muse_qt4_evolution/awl/tcanvas.cpp new file mode 100644 index 00000000..6ec4f68f --- /dev/null +++ b/attic/muse_qt4_evolution/awl/tcanvas.cpp @@ -0,0 +1,1871 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "tcanvas.h" +#include "al/al.h" +#include "al/sig.h" +#include "al/tempo.h" +#include "../muse/gconfig.h" +#include "../muse/icons.h" + +#include "metronom.xpm" +#include "clock.xpm" + +#ifdef __APPLE__ + inline double exp10(double a) { return pow(10.0, a); } +#endif + +static QIcon* clockIcon; +static QIcon* metronomIcon; + +FollowMode TimeCanvas::followMode = FOLLOW_JUMP; +QPixmap* TimeCanvas::octave; +QPixmap* TimeCanvas::mk1; +QPixmap* TimeCanvas::mk2; +QPixmap* TimeCanvas::mk3; +QPixmap* TimeCanvas::mk4; + +enum DragType { + DRAG_RULER, + DRAG_CANVASA, DRAG_CANVAS_B, + DRAG_PANELA, DRAG_PANELB, + DRAG_OTHER + }; + +//--------------------------------------------------------- +// TimeCanvas +//--------------------------------------------------------- + +TimeCanvas::TimeCanvas(TimeCanvasType t) + : QFrame() + { + setAttribute(Qt::WA_NoSystemBackground, true); + + _yFit = false; + _tool = PointerTool; + type = t; + _timeType = AL::TICKS; + marker = 0; + showCursor = false; + ctrlHeight = 0; + curPitch = -1; + mouseInB = false; + dragType = DRAG_OTHER; + followPos = true; + + // set default color + canvasBackgroundColor = QColor(0x71, 0x8d, 0xbe); + + if (clockIcon == 0) { + clockIcon = new QIcon(QPixmap(clock_xpm)); + metronomIcon = new QIcon(QPixmap(metronom_xpm)); + } + button = Qt::NoButton; + grid = new QGridLayout; + grid->setMargin(0); + grid->setSpacing(1); + setLayout(grid); + + _widget = new QWidget; + _widget->setAttribute(Qt::WA_NoSystemBackground); + _widget->setAttribute(Qt::WA_StaticContents); + _widget->installEventFilter(this); + _widget->setMouseTracking(true); + _widget->setAcceptDrops(true); + + // allow to set slider position before slider range + // is known: + + pos1.setTick(0); + pos2.setTick(INT_MAX); + + hmag = new QSlider(Qt::Horizontal); + hmag->setRange(0, 100); + _xmagMin = 0.001; + _xmagMax = 0.3; + _xmag = 0.04; + hmag->setValue(xmag2s(_xmag)); + + vmag = 0; + if (type != TIME_CANVAS_DRUMEDIT) { + vmag = new QSlider(Qt::Vertical); + vmag->setRange(0, 100); + vmag->setPageStep(1); + } + _ymag = 1.0; + + hbar = new QScrollBar(Qt::Horizontal); + hbar->setRange(0, INT_MAX); + vbar = new QScrollBar(Qt::Vertical); + timeTypeButton = new QToolButton; + timeTypeButton->setFixedSize(20, rulerHeight); + setTimeType1(AL::TICKS); + yRange = 0; + + switch(type) { + case TIME_CANVAS_PIANOROLL: + _ymagMin = 0.5; + _ymagMax = 3.0; + vmag->setValue(lrint((_ymag-_ymagMin)*100.0/(_ymagMax-_ymagMin))); + initPianoroll(); + break; + case TIME_CANVAS_DRUMEDIT: + _ymagMin = 1.0; + _ymagMax = 1.0; + yRange = drumHeight * 128; + break; + case TIME_CANVAS_WAVEEDIT: + _xmagMin = 0.001; + _xmagMax = 100.0; + _xmag = 0.04; + _ymagMin = 1.0; + _ymagMax = 10.0; + _ymag = 1.0; + break; + default: + _ymagMin = 1.0; + _ymagMax = 1.0; + break; + } + updateGeometry(); + if (type == TIME_CANVAS_PIANOROLL || type == TIME_CANVAS_DRUMEDIT + || type == TIME_CANVAS_WAVEEDIT) { + addCtrlButton = new QPushButton(tr("Ctrl"), _widget); + addCtrlButton->setGeometry(1, 1, rPanelA.width()-4, rulerHeight-4); + addCtrlButton->setToolTip(tr("Add Controller View")); + connect(addCtrlButton, SIGNAL(clicked()), SLOT(addCtrlClicked())); + } + + grid->addWidget(_widget, 0, 0, 3, 2); + grid->addWidget(hbar, 3, 0, Qt::AlignVCenter); + grid->addWidget(hmag, 3, 1, Qt::AlignVCenter); + grid->addWidget(timeTypeButton, 0, 2); + grid->addWidget(vbar, 1, 2, Qt::AlignHCenter); + if (vmag) + grid->addWidget(vmag, 2, 2, Qt::AlignHCenter); + + grid->setColumnStretch(0, 100); + grid->setRowStretch(1, 100); + + _raster = 0; + updateScrollBars(); + connect(hbar, SIGNAL(valueChanged(int)), SLOT(moveX(int))); + connect(vbar, SIGNAL(valueChanged(int)), SLOT(moveY(int))); + connect(hmag, SIGNAL(valueChanged(int)), SLOT(scaleX(int))); + if (vmag) + connect(vmag, SIGNAL(valueChanged(int)), SLOT(scaleY(int))); + connect(timeTypeButton, SIGNAL(clicked()), SLOT(toggleTimeType())); + } + +//--------------------------------------------------------- +// resizeController +//--------------------------------------------------------- + +void TimeCanvas::resizeController(int h) + { + if (h == ctrlHeight) + return; + int updateH = h > ctrlHeight ? h : ctrlHeight; + ctrlHeight = h; + updateGeometry(); + updateScrollBars(); + widget()->update(0, widget()->height() - updateH, widget()->width(), updateH); + } + +//--------------------------------------------------------- +// eventFilter +//--------------------------------------------------------- + +bool TimeCanvas::eventFilter(QObject* obj, QEvent* event) + { + if (obj != _widget) + return QFrame::eventFilter(obj, event); + + switch(event->type()) { + case QEvent::Paint: + { + QPainter p(_widget); + canvasPaintEvent(((QPaintEvent*)event)->rect(), p); + } + return true; + + case QEvent::Resize: + updateGeometry(); + updateScrollBars(); + layout(); + return false; + + case QEvent::MouseButtonDblClick: + { + QMouseEvent* me = (QMouseEvent*)event; + QPoint p(me->pos()); + button = me->button(); + keyState = me->modifiers(); + mouseDoubleClick(me); + } + return true; + + case QEvent::MouseButtonPress: + { + QMouseEvent* me = (QMouseEvent*)event; + keyState = me->modifiers(); + button = me->button(); + QPoint p(me->pos()); + int x = p.x() - rRuler.x(); + bool shift = keyState & Qt::ShiftModifier; + + if (rRuler.contains(p)) { + dragType = DRAG_RULER; + if (shift) { + AL::Pos pos(pix2pos(x)); + if (button == Qt::LeftButton) + emit addMarker(pos); + else if (button == Qt::RightButton) + emit removeMarker(pos); + return true; + } + } + else { + dragType = DRAG_OTHER; + mousePress(me); + } + } + // go on with MouseMove + + case QEvent::MouseMove: + { + QMouseEvent* me = (QMouseEvent*)event; + keyState = me->modifiers(); + button = me->buttons(); + QPoint p(me->pos()); + AL::Pos pos(pix2pos(p.x()-rCanvasA.x())); + + if (dragType == DRAG_OTHER) { + if (button == 0 && (rPanelB.contains(p) || rCanvasB.contains(p))) { + if (!mouseInB) { + mouseInB = true; + enterB(); + } + } + else { + if (button == 0 && mouseInB) { + mouseInB = false; + leaveB(); + } + } + + if (showCursor && p.x() < rCanvasA.x()) { + showCursor = false; + widget()->update(rRuler); + emit cursorPos(cursor, showCursor); + } + + if (p.x() >= rCanvasA.x() && (cursor != pos)) { + int x1 = pos2pix(cursor) + rCanvasA.x(); + int x2 = pos2pix(pos) + rCanvasA.x(); + QRect r1(x1-1, 0, 2, rRuler.height()); + QRect r2(x2-1, 0, 2, rRuler.height()); + widget()->update(rRuler & (r1 | r2)); + cursor = pos; + showCursor = true; + emit cursorPos(cursor, showCursor); + } + + if (rRuler.contains(p)) { + int b = me->buttons(); + if (b == 0) + return true; + int i = 0; + if (b & Qt::MidButton) + i = 1; + else if (b & Qt::RightButton) + i = 2; + if (keyState & Qt::ShiftModifier) + emit addMarker(i); + emit posChanged(i, pos); + } + else { + mouseMove(p); + } + } + else if (dragType == DRAG_RULER) { + int b = me->buttons(); + if (b == 0) + return true; + int i = 0; + if (b & Qt::MidButton) + i = 1; + else if (b & Qt::RightButton) + i = 2; + if (keyState & Qt::ShiftModifier) + emit addMarker(i); + emit posChanged(i, pos); + } + } + return true; + + case QEvent::MouseButtonRelease: + { + QMouseEvent* me = (QMouseEvent*)event; + button = Qt::NoButton; + keyState = me->modifiers(); + mouseRelease(me); + dragType = DRAG_OTHER; + } + return true; + + case QEvent::DragEnter: + dragEnter((QDragEnterEvent*)event); + return true; + + case QEvent::Drop: + drop((QDropEvent*)event); + return true; + + case QEvent::DragMove: + dragMove((QDragMoveEvent*)event); + return true; + + case QEvent::DragLeave: + dragLeave((QDragLeaveEvent*)event); + return true; + + case QEvent::Leave: + { + emit cursorPos(cursor, false); + showCursor = false; + emit pitchChanged(-1); + curPitch = -1; + QRect r(rRuler); + if (!rPanelA.isEmpty()) + r |= rPanelA; + widget()->update(r); + + if (mouseInB) { + mouseInB = false; + // button = ((QMouseEvent*)event)->buttons(); + leaveB(); + } + } + return false; + + case QEvent::Wheel: + { + QWheelEvent* e = (QWheelEvent*)event; + if (e->orientation() != Qt::Vertical) + return true; + if ((e->modifiers() & Qt::ControlModifier) || (e->modifiers() & Qt::ShiftModifier)) { + // + // xmag + // + int oldx = e->x() - rCanvasA.x(); + AL::Pos pos(pix2pos(oldx)); + int step = e->delta() / 120; + if (step > 0) { + for (int i = 0; i< step; ++i) + _xmag *= 1.1; + } + else { + for (int i = 0; i < -step; ++i) + _xmag *= 0.9; + } + if (_xmag < _xmagMin) + _xmag = _xmagMin; + else if (_xmag > _xmagMax) + _xmag = _xmagMax; + hmag->setValue(xmag2s(_xmag)); + int newx = pos2pix(pos); + updateScrollBars(); + hbar->setValue(wpos.x() + (newx - oldx)); + updateRulerMag(); + magChanged(); + _widget->update(); + } + else { + // + // scroll + // + int step = qMin(QApplication::wheelScrollLines() * vbar->singleStep(), vbar->pageStep()); + int offset = e->delta() * step / 120; + if (vbar->invertedControls()) + offset = -offset; + if (qAbs(offset) < 1) + return true; + vbar->setValue(vbar->value() + offset); + } + } + return true; + default: +// printf("event %d missed\n", event->type()); + break; + } + return false; + } + + + +void TimeCanvas::keyPressEvent(QKeyEvent *e) +{ + if (e->key() == Qt::Key_Up || e->key() == Qt::Key_Down || + e->key() == Qt::Key_Left || e->key() == Qt::Key_Right) + keyboardNavigate(e); +} + +//--------------------------------------------------------- +// moveX +//--------------------------------------------------------- + +void TimeCanvas::moveX(int x) + { + int dx = wpos.x() - x; + wpos.setX(x); + + int wh = _widget->height(); + + if (type == TIME_CANVAS_PIANOROLL || type == TIME_CANVAS_DRUMEDIT + || TIME_CANVAS_WAVEEDIT) { + _widget->scroll(dx, 0, QRect(rCanvasA.x(), 0, rCanvasA.width(), wh)); + + //HACK: + // update controller names + int w = 100 + ((dx > 0) ? dx : 0); + _widget->update(rCanvasB.x(), rCanvasB.y(), w, rCanvasB.height()); + + //HACK: + // repaint rounded line end (splitter handle for controller + // canvas) + int x = rCanvasB.x() + rCanvasB.width() - 1; + w = 1; + if (dx < 0) { + x += dx; + w -= dx; + } + _widget->update(x, rCanvasB.y(), w, rCanvasB.height()); + } + else + _widget->scroll(dx, 0); + emit contentsMoving(wpos.x(), wpos.y()); + } + +//--------------------------------------------------------- +// moveY +//--------------------------------------------------------- + +void TimeCanvas::moveY(int y) + { + int dy = wpos.y() - y; + if (dy == 0) + return; + wpos.setY(y); + + // dont move ruler: + + int ww = _widget->width(); + int wh = _widget->height(); + + QRect r(0, rulerHeight, ww, wh - rulerHeight - ctrlHeight); + + _widget->scroll(0, dy, r); + emit contentsMoving(wpos.x(), wpos.y()); + } + +//--------------------------------------------------------- +// setYPos +//--------------------------------------------------------- + +void TimeCanvas::setYPos(int y) + { + setWPos(QPoint(wpos.x(), y)); + } + +//--------------------------------------------------------- +// setWPos +//--------------------------------------------------------- + +void TimeCanvas::setWPos(const QPoint& p) + { + if (wpos != p) { + wpos = p; + hbar->setValue(wpos.x()); + vbar->setValue(wpos.y()); + _widget->update(); +// QCoreApplication::flush(); + } + } + +//--------------------------------------------------------- +// paintClockRuler +//--------------------------------------------------------- + +void TimeCanvas::paintClockRuler(QPainter& p, const QRect& r) + { + int x1 = r.x(); + int x2 = x1 + r.width(); + + int y1 = r.y(); + int rh = r.height(); + if (y1 < rulerHeight) { + rh -= rulerHeight - y1; + y1 = rulerHeight; + } + int y2 = y1 + rh; + + //--------------------------------------------------- + // draw Marker + //--------------------------------------------------- + + int y = rulerHeight - 16; + p.setPen(Qt::black); + p.setFont(_font3); + QRect tr(r); + tr.setHeight(12); + + if (marker) { + for (AL::iMarker m = marker->begin(); m != marker->end(); ++m) { + int xp = mapx(int(m->second.frame())); + if (xp > x2) + break; + AL::iMarker mm = m; + ++mm; + int xe = x2; + if (mm != marker->end()) { + xe = mapx(mm->first); + } + QRect tr(xp, 0, x2 - xp, 11); + if (m->second.current()) { + p.fillRect(tr, Qt::white); + } + if (r.intersects(tr)) { + int x2; + AL::iMarker mm = m; + ++mm; + if (mm != marker->end()) + x2 = mapx(mm->first); + else + x2 = xp+200; + QRect r = QRect(xp+10, 0, x2-xp, 12); + p.drawPixmap(xp, 0, *flagIconS); + p.drawText(r, Qt::AlignLeft|Qt::AlignVCenter, m->second.name()); + } + } + } + + p.setPen(Qt::black); + if (showCursor) { + int xp = pos2pix(cursor); + if (xp >= x1 && xp < x2) + p.drawLine(xp, 0, xp, rulerHeight); + } + + AL::Pos p1(pix2pos(x1)); + AL::Pos p2(pix2pos(x2)); + + int sec1 = p1.frame() / AL::sampleRate; + int sec2 = (p2.frame() + AL::sampleRate - 1) / AL::sampleRate; + + int sw = lrint(AL::sampleRate * _xmag); + + if (sw > 20) { + for (int sec = sec1; sec < sec2; ++sec) { + int min = sec / 60; + int sr = sec % 60; + + int yy; + QString s; + if (sr == 0) { + p.setFont(_font2); + s.sprintf("%d:00", min); + yy = y; + } + else { + p.setFont(_font1); + s.sprintf("%02d", sr); + yy = y + 7; + } + int xp = pos2pix(AL::Pos(sec * AL::sampleRate, AL::FRAMES)); +// printf(" sec %d min %d sr %d xp %d\n", sec, min, sr, xp); + p.setPen(Qt::black); + p.drawLine(xp, yy, xp, rulerHeight); + p.drawText(xp + 2, rulerHeight - 4, s); + p.setPen(sr == 0 ? Qt::lightGray : Qt::gray); + p.drawLine(xp, y1, xp, y2); + } + } + else { + int min1 = sec1/60; + int min2 = (sec2+59)/60; + for (int min = min1; min < min2; ++min) { + QString s; + p.setFont(_font2); + s.sprintf("%d", min); + int xp = pos2pix(AL::Pos(min * AL::sampleRate * 60, AL::FRAMES)); + p.setPen(Qt::black); + p.drawLine(xp, y, xp, rulerHeight); + p.drawText(xp + 2, rulerHeight - 4, s); + p.setPen(Qt::lightGray); + p.drawLine(xp, y1, xp, y2); + } + } + } + +//--------------------------------------------------------- +// updateRulerMag +//--------------------------------------------------------- + +void TimeCanvas::updateRulerMag() + { + int bar1, beat, tick; + pos1.mbt(&bar1, &beat, &tick); + AL::Pos stick(bar1, 0, 0); + AL::Pos ntick = AL::Pos(bar1 + 1, 0, 0); + int tpix = pos2pix(ntick) - pos2pix(stick); + metronomeRulerMag = 0; + if (tpix < 64) + metronomeRulerMag = 1; + if (tpix < 32) + metronomeRulerMag = 2; + if (tpix <= 16) + metronomeRulerMag = 3; + if (tpix < 8) + metronomeRulerMag = 4; + if (tpix <= 4) + metronomeRulerMag = 5; + if (tpix <= 2) + metronomeRulerMag = 6; + } + +//--------------------------------------------------------- +// paintMetronomRuler +//--------------------------------------------------------- + +void TimeCanvas::paintMetronomRuler(QPainter& p, const QRect& r) + { + static const int mag[7] = { + 1, 1, 2, 5, 10, 20, 50 + }; + + int x = r.x(); + int w = r.width(); + int y = rulerHeight - 16; + + p.setFont(_font3); + + int h = 14; + int y1 = r.y(); + int rh = r.height(); + if (y1 < rulerHeight) { + rh -= rulerHeight - y1; + y1 = rulerHeight; + } + int y2 = y1 + rh; + + if (x < (MAP_OFFSET - wpos.x())) + x = MAP_OFFSET - wpos.x(); + AL::Pos pos1 = pix2pos(x); + AL::Pos pos2 = pix2pos(x+w); + + if (marker) { + AL::iMarker start = marker->lower_bound(pos1.tick()); + if (start != marker->begin()) + --start; + AL::iMarker end = marker->lower_bound(pos2.tick()); + for (AL::iMarker m = start; m != end; ++m) { + AL::Pos pm1(m->second); + AL::iMarker m2 = m; + ++m2; + AL::Pos pm2(pos2); + if (m2 != marker->end()) + pm2 = m2->second; + + int x1 = pos2pix(pm1); + int x2 = pos2pix(pm2); + + if (pos[0] >= pm1 && (m2 == marker->end() || pos[0] < pm2)) + p.fillRect(x1, 0, x2 - x1, 11, Qt::white); + + QRect r = QRect(x1 + 10, 0, x2 - x1, 12); + p.drawPixmap(x1, 0, *flagIconS); + p.drawText(r, Qt::AlignLeft|Qt::AlignVCenter, m->second.name()); + } + } + + //--------------------------------------------------- + // draw raster + //--------------------------------------------------- + + int bar1, bar2, beat, tick; + pos1.mbt(&bar1, &beat, &tick); + pos2.mbt(&bar2, &beat, &tick); + + int n = mag[metronomeRulerMag]; + + bar1 = (bar1 / n) * n; // round down + if (bar1 && n >= 2) + bar1 -= 1; + bar2 = ((bar2 + n - 1) / n) * n; // round up + + for (int bar = bar1; bar <= bar2;) { + AL::Pos stick(bar, 0, 0); + if (metronomeRulerMag) { + p.setFont(_font2); + int x = pos2pix(stick); + QString s; + s.setNum(bar + 1); + + p.setPen(Qt::black); + p.drawLine(x, y, x, y + h); + QRect r = QRect(x+2, y, 1000, h); + p.drawText(r, Qt::AlignLeft | Qt::AlignVCenter, s); + p.setPen(Qt::lightGray); + if (x > 0) + p.drawLine(x, y1, x, y2); + } + else { + AL::TimeSignature sig = stick.timesig(); + int z = sig.z; + for (int beat = 0; beat < z; beat++) { + AL::Pos xx(bar, beat, 0); + int xp = pos2pix(xx); + if (xp < 0) + continue; + QString s; + QRect r(xp+2, y + 1, 1000, h); + int y3; + int num; + if (beat == 0) { + num = bar + 1; + y3 = y + 2; + p.setFont(_font2); + } + else { + num = beat + 1; + y3 = y + 8; + p.setFont(_font1); + r.moveTop(r.top() + 1); + } + s.setNum(num); + p.setPen(Qt::black); + p.drawLine(xp, y3, xp, y+h); + p.drawText(r, Qt::AlignLeft | Qt::AlignVCenter, s); + p.setPen(beat == 0 ? Qt::lightGray : Qt::gray); + if (xp > 0) + p.drawLine(xp, y1, xp, y2); + } + } + if (bar == 0 && n >= 2) + bar += (n-1); + else + bar += n; + } + // + // draw mouse cursor marker + // + p.setPen(Qt::black); + if (showCursor) { + int xp = pos2pix(cursor); + if (xp >= x && xp < x+w) + p.drawLine(xp, 0, xp, rulerHeight-1); + } + + } + +//--------------------------------------------------------- +// tempoChanged +//--------------------------------------------------------- + +void TimeCanvas::tempoChanged() + { + widget()->update(rCanvasA.x(), 0, rCanvasA.width(), widget()->height()); + } + +//--------------------------------------------------------- +// canvasPaintEvent +//--------------------------------------------------------- + +void TimeCanvas::canvasPaintEvent(const QRect& r, QPainter& p) + { + if (r.intersects(rButton)) { + p.fillRect(rButton, QColor(0xe0, 0xe0, 0xe0)); + p.setPen(QPen(Qt::black, 2)); + int y = rButton.y() + rButton.height() - 1; + p.drawLine(rButton.x(), y, rButton.width(), y); + } + p.setRenderHint(QPainter::TextAntialiasing, true); + + QRect par = r & rPanelA; + if (!(par.isEmpty() || rPanelA.isEmpty())) { + if (type == TIME_CANVAS_DRUMEDIT) { + paintDrumList(p, par); + } + else if (type == TIME_CANVAS_PIANOROLL) { + paintPiano(p, par); + } + else if (type == TIME_CANVAS_WAVEEDIT) { + p.fillRect(par, QColor(0xe0, 0xe0, 0xe0)); + } + } + + QRect pbr(r & rPanelB); + QRect hor(r & (rRuler | rCanvasA | rCanvasB)); + QRect car(r & rCanvasA); + QRect cbr(r & rCanvasB); + + bool drawPanelB = !(pbr.isEmpty() || rPanelB.isEmpty()); + bool drawRuler = !(hor.isEmpty() || (rRuler.isEmpty() && rCanvasA.isEmpty() && rCanvasB.isEmpty())); + bool drawCanvasA = !(car.isEmpty() || rCanvasA.isEmpty()); + bool drawCanvasB = !(cbr.isEmpty() || rCanvasB.isEmpty()); + + // + // draw canvas background + // + + p.setClipRect(r); + p.setBrushOrigin(QPoint(car.x() + wpos.x(), car.y() + wpos.y())); + if (drawCanvasA) { + if (canvasBackgroundPixmap.isNull()) { + if (type == TIME_CANVAS_DRUMEDIT || type == TIME_CANVAS_PIANOROLL + || type == TIME_CANVAS_WAVEEDIT) { + QRect rr(car); + // paint inactive area different + // (darker) + QColor c = canvasBackgroundColor.darker(150); + int x1 = pos2pix(partPos1) + rCanvasA.x(); + if (rr.x() < x1) { + QRect r(rr.x(), rr.y(), x1-rr.x(), rr.height()); + p.fillRect(r, c); + rr.adjust(x1-rr.x(), 0, 0, 0); + } + int x2 = pos2pix(partPos2) + rCanvasA.x(); + int xx2 = rr.x() + rr.width(); + if (xx2 > x2) { + if (x2 < rr.x()) + x2 = rr.x(); + QRect r(x2, rr.y(), xx2-x2, rr.height()); + p.fillRect(r, c); + rr.adjust(0, 0, -(xx2-x2), 0); + } + if (!rr.isEmpty()) { + p.fillRect(rr, canvasBackgroundColor); + } + } + else + p.fillRect(car, canvasBackgroundColor); + } + else { + p.drawTiledPixmap(car, canvasBackgroundPixmap, + car.topLeft() + QPoint(wpos)); + } + } + + if (drawCanvasB) + p.fillRect(cbr, canvasBackgroundColor); + + //--------------------------------------------------- + // draw Ruler + //--------------------------------------------------- + + if (drawRuler) { + QRect rrr(r & rRuler); + if (!rrr.isEmpty()) + p.fillRect(rrr, QColor(0xe0, 0xe0, 0xe0)); + int x1 = hor.x(); + int x2 = x1 + hor.width(); + int y1 = rulerHeight - 17; + int y2 = rulerHeight - 1; + + p.setPen(QPen(Qt::black, 1)); + p.drawLine(x1, y1, x2, y1); + p.setPen(QPen(Qt::black, 2)); + p.drawLine(x1, y2, x2, y2); + + QPoint off(rRuler.topLeft()); + p.translate(off); + if (_timeType == AL::TICKS) + paintMetronomRuler(p, hor.translated(-off)); + else + paintClockRuler(p, hor.translated(-off)); + p.translate(-off); + } + + if (drawCanvasA) { + p.setClipRect(car); + paintCanvas(p, car); + } + p.setRenderHint(QPainter::Antialiasing, false); + if (drawPanelB) { + p.setClipRect(pbr); + QPoint off(rPanelB.topLeft()); + p.translate(off); + paintControllerPanel(p, pbr.translated(-off)); + p.translate(-off); + } + if (drawCanvasB) { + p.setClipRect(cbr); + QPoint off(rCanvasB.topLeft()); + p.translate(off); + paintControllerCanvas(p, cbr.translated(-off)); + p.translate(-off); + } + //--------------------------------------------------- + // draw marker + //--------------------------------------------------- + + int y1 = r.y(); + int y2 = y1 + r.height(); + if (drawRuler) { + p.setClipRect(hor); + int w = r.width(); + int x = r.x(); + int y = rulerHeight - 16; + QColor lcColors[3] = { Qt::red, Qt::blue, Qt::blue }; + + for (int i = 0; i < 3; ++i) { + p.setPen(lcColors[i]); + int xp = pos2pix(pos[i]) + rRuler.x(); + QPixmap* pm = markIcon[i]; + int pw = (pm->width() + 1) / 2; + int x1 = x - pw; + int x2 = x + w + pw; + if (xp >= x1 && xp < x2) { + p.drawPixmap(xp - pw, y-2, *pm); + p.drawLine(xp, y1, xp, y2); + } + } + } + if (marker) { + int yy1 = y1; + if (yy1 < rCanvasA.x()) + yy1 = rCanvasA.x(); + p.setPen(Qt::green); + AL::iMarker start = marker->lower_bound(pos1.tick()); + if (start != marker->begin()) + --start; + AL::iMarker end = marker->lower_bound(pos2.tick()); + if (end != marker->end()) + ++end; + for (AL::iMarker m = start; m != end; ++m) { + AL::Pos pm(m->second); + int x = pos2pix(pm) + rRuler.x(); + p.drawLine(x, yy1, x, y2); + } + } + } + +//--------------------------------------------------------- +// paintCanvas +//--------------------------------------------------------- + +void TimeCanvas::paintCanvas(QPainter& p, const QRect& cr) + { + QPoint off(rCanvasA.topLeft()); + + if (type == TIME_CANVAS_PIANOROLL) { + paintPianorollHorizontalGrid(p, cr); + p.setRenderHint(QPainter::Antialiasing, true); + } + else if (type == TIME_CANVAS_DRUMEDIT) { + paintDrumeditHorizontalGrid(p, cr); + p.setRenderHint(QPainter::Antialiasing, true); + } + else + off = QPoint(rCanvasA.x(), rCanvasA.y() - wpos.y()); + p.translate(off); + paint(p, cr.translated(-off)); + p.resetMatrix(); + } + +//--------------------------------------------------------- +// setLocatorPos +//--------------------------------------------------------- + +void TimeCanvas::setLocatorPos(int idx, const AL::Pos& val, bool follow) + { + if (pos[idx] == val) + return; + QFontMetrics fm(_font2); + int fw = fm.width("123") + 2; + int w = qMax(markIcon[idx]->width() + 2, fw); + int h = widget()->height(); + + int x = pos2pix(val); + if (idx == 0 && follow && followPos && followMode != FOLLOW_NO) { + int scroll = 0; + if (followMode == FOLLOW_JUMP) { + int x2 = rRuler.width() - 20; + if (x2 < 0) + x2 = rRuler.width(); + if (x > x2) { + int x1 = 20; + if (x1 >= rRuler.width()) + x1 = 0; + scroll = x - x1; + } + else if (x < 0) { + scroll = x - MAP_OFFSET; + } + } + else if (followMode == FOLLOW_CONTINUOUS) { + int x1 = rRuler.width() / 2; + if (x != x1) { + scroll = x - (rRuler.width() / 2); + } + } + if (scroll) { + moveX(wpos.x() + scroll); + hbar->setValue(wpos.x()); + } + } + + int offset = rRuler.x() - (w/2); + int x1 = pos2pix(pos[idx]); + int x2 = pos2pix(val); + QRect oR(x1 + offset, 0, w, h); + QRect nR(x2 + offset, 0, w, h); + pos[idx] = val; + widget()->update(oR | nR); + } + +//--------------------------------------------------------- +// setMag +//--------------------------------------------------------- + +void TimeCanvas::setMag(double x, double y) + { + if (_xmag == x && _ymag == y) + return; + _xmag = x; + _ymag = y; + if (vmag) + vmag->setValue(lrint((_ymag-_ymagMin)*100.0/(_ymagMax-_ymagMin))); + hmag->setValue(xmag2s(_xmag)); + updateScrollBars(); + updateRulerMag(); + magChanged(); + _widget->update(); + } + +//--------------------------------------------------------- +// scaleX +//--------------------------------------------------------- + +void TimeCanvas::scaleX(int val) + { + _xmag = s2xmag(val); + updateScrollBars(); + updateRulerMag(); + magChanged(); + _widget->update(); + } + +//--------------------------------------------------------- +// scaleY +//--------------------------------------------------------- + +void TimeCanvas::scaleY(int val) + { + int y = lrint(wpos.y() / _ymag); + _ymag = (_ymagMax - _ymagMin) / 100.0 * val + _ymagMin; + y = lrint(y * _ymag); + wpos.setY(y); + updateScrollBars(); + magChanged(); + _widget->update(); + } + +//--------------------------------------------------------- +// setRaster +// r = 1 - no raster +// 0 - measure raster +// > 1 - tick raster +//--------------------------------------------------------- + +void TimeCanvas::setRaster(int r) + { + if (_raster != r) { + _raster = r; + _widget->update(); + } + } + +//--------------------------------------------------------- +// setTimeRange +//--------------------------------------------------------- + +void TimeCanvas::setTimeRange(const AL::Pos& p1, const AL::Pos& p2) + { + if (pos1 == p1 && pos2 == p2) + return; + pos1 = p1; + pos2 = p2; + updateScrollBars(); + widget()->update(); + } + +//--------------------------------------------------------- +// setEndPos +//--------------------------------------------------------- + +void TimeCanvas::setEndPos(const AL::Pos& p2) + { + if (pos2 == p2) + return; + pos2 = p2; + updateScrollBars(); + widget()->update(); + } + +//--------------------------------------------------------- +// updateScrollBars +//--------------------------------------------------------- + +void TimeCanvas::updateScrollBars() + { + hbar->blockSignals(true); + vbar->blockSignals(true); + + int ymax = lrint(yRange * _ymag) - rCanvasA.height(); + if (ymax < 0) + ymax = 0; + vbar->setRange(0, ymax); + vbar->setPageStep(rCanvasA.height()); + + int xmin = lrint(pos1.time(_timeType) * _xmag); + unsigned x2 = pos2.time(_timeType); + int xmax = lrint(x2 * _xmag) - rCanvasA.width(); + if (xmax - xmin < 0) + xmax = xmin; + hbar->setRange(xmin, xmax); + hbar->setPageStep(rCanvasA.width()); + wpos.setX(hbar->value()); + wpos.setY(vbar->value()); + + hbar->blockSignals(false); + vbar->blockSignals(false); + } + +//--------------------------------------------------------- +// setTimeType1 +//--------------------------------------------------------- + +void TimeCanvas::setTimeType1(AL::TType t) + { + double conv = 1.0; + if (t == AL::TICKS) { + timeTypeButton->setIcon(*metronomIcon); + if (_timeType == AL::FRAMES) + conv = AL::sampleRate / double(AL::division * 120 / 60); + } + else { + timeTypeButton->setIcon(*clockIcon); + if (_timeType == AL::TICKS) + conv = double(AL::division * 120 / 60) / double(AL::sampleRate); + } + _timeType = t; + _xmag *= conv; + _xmagMax *= conv; + _xmagMin *= conv; + + updateRulerMag(); + magChanged(); + } + +//--------------------------------------------------------- +// setTimeType +//--------------------------------------------------------- + +void TimeCanvas::setTimeType(AL::TType t) + { + setTimeType1(t); + updateScrollBars(); + timeTypeChanged(); + widget()->update(); + } + +//--------------------------------------------------------- +// toggleTimeType +//--------------------------------------------------------- + +void TimeCanvas::toggleTimeType() + { + if (_timeType == AL::TICKS) + setTimeType(AL::FRAMES); + else + setTimeType(AL::TICKS); + } + +//--------------------------------------------------------- +// setMarkerList +//--------------------------------------------------------- + +void TimeCanvas::setMarkerList(AL::MarkerList* ml) + { + if (marker == ml) + return; + marker = ml; + widget()->update(); + } + +//--------------------------------------------------------- +// pix2pos +//--------------------------------------------------------- + +AL::Pos TimeCanvas::pix2pos(int x) const + { + int val = lrint((x + wpos.x() - MAP_OFFSET)/_xmag); + if (val < 0) + val = 0; + return AL::Pos(val, _timeType); + } + +//--------------------------------------------------------- +// pos2pix +//--------------------------------------------------------- + +int TimeCanvas::pos2pix(const AL::Pos& p) const + { + return lrint(p.time(_timeType) * _xmag) + MAP_OFFSET - wpos.x(); + } + +//--------------------------------------------------------- +// mapx +//--------------------------------------------------------- + +int TimeCanvas::mapx(int x) const + { + return lrint(x * _xmag) + MAP_OFFSET - wpos.x(); + } + +//--------------------------------------------------------- +// mapxDev +//--------------------------------------------------------- + +int TimeCanvas::mapxDev(int x) const + { + int val = lrint((x + wpos.x() - MAP_OFFSET)/_xmag); + if (val < 0) + val = 0; + return val; + } + +//--------------------------------------------------------- +// setCorderWidget +//--------------------------------------------------------- + +void TimeCanvas::setCornerWidget(QWidget* w) + { + grid->addWidget(w, 3, 2); + } + +//--------------------------------------------------------- +// initPianoroll +//--------------------------------------------------------- + +/* + 0 1 2 3 4 5 6 7 8 9 10 + c-2 c-1 C0 C1 C2 C3 C4 C5 C6 C7 C8 - G8 + + Grid ve: + + +------------+ ------------------------------ + 11 | | + | b | 7 + +------+ | + 10 | a# +-----+ .............................. + +------+ a | + 9 | | 6 + +------+ | + 8 | g# +-----+ .............................. + +------+ g | + 7 | | 5 + +------+ | + 6 | f# +-----+ .............................. + +------+ f | + 5 | | 4 + | | + +------------+ ------------------------------ + 4 | | + | e | 3 + +------+ | + 3 | d# +-----+ .............................. + +------+ d | + 2 | | 2 + +------+ | + 1 | c# +-----+ .............................. + +------+ c | + | | 1 + 0 | | + +------------+ ------------------------------ + */ + +void TimeCanvas::initPianoroll() + { + static const char *oct_xpm[] = { + // w h colors + "40 91 2 1", + ". c #f0f0f0", + "# c #000000", + // x + "####################################### ", + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", // 10 + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", //------------------------ + "#######################................#", + "########################...............#", + "########################...............#", + "####################################### ", // 7 + "########################...............#", + "########################...............#", + "#######################................#", //------------------------ + ".......................................#", + ".......................................#", + ".......................................#", // 6 + ".......................................#", + ".......................................#", + ".......................................#", //------------------------ + "#######################................#", + "########################...............#", + "########################...............#", // 7 + "####################################### ", + "########################...............#", + "########################...............#", + "#######################................#", //------------------------ + ".......................................#", + ".......................................#", + ".......................................#", // 6 + ".......................................#", + ".......................................#", + ".......................................#", //------------------------ + "#######################................#", + "########################...............#", + "########################...............#", // 7 + "####################################### ", + "########################...............#", + "########################...............#", + "#######################................#", //------------------------ + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", // 10 + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", + "####################################### ", //---------------------- + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", // 9 + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", //------------------------ + "#######################................#", + "########################...............#", + "########################...............#", + "####################################### ", // 7 + "########################...............#", + "########################...............#", + "#######################................#", //------------------------ + ".......................................#", + ".......................................#", + ".......................................#", // 6 + ".......................................#", + ".......................................#", + ".......................................#", //-------------------------- + "#######################................#", + "########################...............#", + "########################...............#", // 7 + "####################################### ", + "########################...............#", + "########################...............#", + "#######################................#", //------------------------ + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", // 10 + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", + }; + + static const char *mk1_xpm[] = { + "40 13 2 1", + ". c #ff0000", + "# c none", + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", + "#######################................#", + "########################...............#", + "########################...............#", + "####################################### ", + }; + + static const char *mk2_xpm[] = { + "40 13 2 1", + ". c #ff0000", + "# c none", + "########################...............#", + "########################...............#", + "#######################................#", //------------------------ + ".......................................#", + ".......................................#", + ".......................................#", // 6 + ".......................................#", + ".......................................#", + ".......................................#", //-------------------------- + "#######################................#", + "########################...............#", + "########################...............#", // 7 + "####################################### ", + }; + + static const char *mk3_xpm[] = { + "40 13 2 1", + ". c #ff0000", + "# c none", + "########################...............#", + "########################...............#", + "#######################................#", + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", + "########################################", + }; + + static const char *mk4_xpm[] = { + "40 13 2 1", + "# c #ff0000", + ". c none", + "........................................", + "........................................", + "........................................", + "#######################.................", + "########################................", + "########################................", + "########################................", + "########################................", + "########################................", + "#######################.................", + "........................................", + "........................................", + "........................................", + }; + + if (octave == 0) { + octave = new QPixmap(oct_xpm); + mk1 = new QPixmap(mk1_xpm); + mk2 = new QPixmap(mk2_xpm); + mk3 = new QPixmap(mk3_xpm); + mk4 = new QPixmap(mk4_xpm); + } + yRange = keyHeight * 75; + } + +//--------------------------------------------------------- +// pitch2y +// y = 0 == origin of rCanvasA +//--------------------------------------------------------- + +int TimeCanvas::pitch2y(int pitch) const + { + int y; + if (type == TIME_CANVAS_DRUMEDIT) + y = pitch * drumHeight; + else { + static int tt[] = { + 12, 19, 25, 32, 38, 51, 58, 64, 71, 77, 84, 90 + }; + y = (75 * keyHeight) - (tt[pitch % 12] + (7 * keyHeight) * (pitch / 12)); + if (y < 0) + y = 0; + } + return lrint(y - wpos.y() / _ymag); + } + +//--------------------------------------------------------- +// y2pitch +// y = 0 == origin of rCanvasA +//--------------------------------------------------------- + +int TimeCanvas::y2pitch(int y) const + { + y = lrint((y + wpos.y()) / _ymag); + int pitch; + if (type == TIME_CANVAS_DRUMEDIT) + pitch = y / drumHeight; + else { + const int total = (10 * 7 + 5) * keyHeight; // 75 Ganztonschritte + y = total - y; + int oct = (y / (7 * keyHeight)) * 12; + char kt[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, + 3, 3, 3, 3, 3, 3, 3, + 4, 4, 4, 4, 4, 4, 4, 4, 4, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 6, 6, 6, 6, 6, 6, 6, + 7, 7, 7, 7, 7, 7, + 8, 8, 8, 8, 8, 8, 8, + 9, 9, 9, 9, 9, 9, + 10, 10, 10, 10, 10, 10, 10, + 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 + }; + pitch = kt[y % 91] + oct; + if (pitch < 0 || pitch > 127) + pitch = -1; + } + return pitch; + } + +//--------------------------------------------------------- +// paintPiano +//--------------------------------------------------------- + +void TimeCanvas::paintPiano(QPainter& p, QRect r) + { + int d = int(_ymag)+1; + qreal x = qreal(r.x()); + qreal y = (r.y()-rulerHeight-d) / _ymag; + if (y < 0.0) + y = 0.0; + qreal h = (r.height()+d) / _ymag; + QPointF offset(x, wpos.y() / _ymag + keyHeight * 2 + y); + + p.translate(0.0, qreal(rulerHeight)); + p.scale(1.0, _ymag); + p.drawTiledPixmap(QRectF(x, y, qreal(r.width()), h), *octave, offset); + + if (curPitch != -1) { + int y = pitch2y(curPitch); + QPixmap* pm; + switch(curPitch % 12) { + case 0: + case 5: + pm = mk3; + break; + case 2: + case 7: + case 9: + pm = mk2; + break; + case 4: + case 11: + pm = mk1; + break; + default: + pm = mk4; + break; + } + p.drawPixmap(0, y, *pm); + } + p.resetMatrix(); + } + +//--------------------------------------------------------- +// paintPianorollHorizontalGrid +//--------------------------------------------------------- + +void TimeCanvas::paintPianorollHorizontalGrid(QPainter& p, QRect r) + { + qreal offset = rulerHeight - wpos.y(); + qreal kh = keyHeight * _ymag; + + int x1 = r.x(); + int x2 = x1 + r.width(); + if (x1 < pianoWidth) + x1 = pianoWidth; + qreal y = kh + offset; + qreal y1 = r.y() - _ymag; + qreal y2 = y1 + r.height() + _ymag; + for (int key = 1; key < 75; ++key, y += kh) { + if (y < y1) + continue; + if (y > y2) + break; + switch (key % 7) { + case 2: + case 5: + p.setPen(QPen(Qt::lightGray)); + break; + default: + p.setPen(QPen(Qt::gray)); + break; + } + p.drawLine(QLineF(x1, y, x2, y)); + } + } + +//--------------------------------------------------------- +// paintDrumeditHorizontalGrid +//--------------------------------------------------------- + +void TimeCanvas::paintDrumeditHorizontalGrid(QPainter& p, QRect r) + { + int offset = rulerHeight - wpos.y(); + + p.setPen(QPen(Qt::lightGray)); + int x1 = r.x(); + int x2 = x1 + r.width(); + if (x1 < drumWidth) + x1 = drumWidth; + + p.setPen(QPen(Qt::lightGray)); + + int y = offset; + int y1 = r.y(); + int y2 = y1 + r.height(); + for (int i = 0; i < 128; ++i, y += drumHeight) { + if (y < y1) + continue; + if (y > y2) + break; + p.drawLine(QLine(x1, y, x2, y)); + } + } + +//--------------------------------------------------------- +// addCtrlClicked +//--------------------------------------------------------- + +void TimeCanvas::addCtrlClicked() + { + addController(); + } + +//--------------------------------------------------------- +// updateGeometry +//--------------------------------------------------------- + +void TimeCanvas::updateGeometry() + { + int wh = _widget->height(); + int ww = _widget->width(); + if (wh < ctrlHeight) + ctrlHeight = wh; + + int x1 = 0; + if (type == TIME_CANVAS_PIANOROLL) + x1 = pianoWidth; + else if (type == TIME_CANVAS_DRUMEDIT) + x1 = drumWidth; + else if (type == TIME_CANVAS_WAVEEDIT) + x1 = waveWidth; + int y2 = wh - ctrlHeight; + + rPanelA.setRect(0, rulerHeight, x1, wh - rulerHeight - ctrlHeight); + rPanelB.setRect(0, y2, x1, ctrlHeight); + + int cw = ww - x1; + rRuler.setRect( x1, 0, cw, rulerHeight); + rCanvasA.setRect(x1, rulerHeight, cw, wh - rulerHeight - ctrlHeight); + rCanvasB.setRect(x1, y2, cw, ctrlHeight); + + rButton.setRect(0, 0, rCanvasA.x(), rPanelA.y()); + + if (yRange > 0 && _yFit) { + _ymagMin = double(rCanvasA.height()) / double(yRange); + if (_ymag < _ymagMin) + _ymag = _ymagMin; + if (vmag) + vmag->setValue(lrint((_ymag-_ymagMin)*100.0/(_ymagMax-_ymagMin))); + } + } + +//--------------------------------------------------------- +// setTool +//--------------------------------------------------------- + +void TimeCanvas::setTool(int t) + { + if (_tool == Tool(t)) + return; + _tool = Tool(t); + emit toolChanged(_tool); + setCursor(); + } + +//--------------------------------------------------------- +// setCursor +//--------------------------------------------------------- + +void TimeCanvas::setCursor() + { + switch(_tool) { + case PencilTool: + widget()->setCursor(QCursor(QPixmap(":/xpm/pencil.xpm"), 4, 15)); + break; + case RubberTool: + widget()->setCursor(QCursor(QPixmap(":/xpm/delete.xpm"), 4, 15)); + break; + case GlueTool: + widget()->setCursor(QCursor(QPixmap(":/xpm/glue.xpm"), 4, 15)); + break; + case CutTool: + widget()->setCursor(QCursor(QPixmap(":/xpm/cut.xpm"), 4, 15)); + break; + case MuteTool: + widget()->setCursor(QCursor(QPixmap(":/xpm/editmute.xmp"), 4, 15)); + break; + default: + widget()->setCursor(QCursor(Qt::ArrowCursor)); + break; + } + } + +//--------------------------------------------------------- +// setCanvasBackground +//--------------------------------------------------------- + +void TimeCanvas::setCanvasBackground(const QColor& color) + { + canvasBackgroundPixmap = QPixmap(); + canvasBackgroundColor = color; + widget()->update(); + } + +//--------------------------------------------------------- +// setCanvasBackground +//--------------------------------------------------------- + +void TimeCanvas::setCanvasBackground(const QPixmap& pm) + { + canvasBackgroundPixmap = pm; + widget()->update(); + } + +//--------------------------------------------------------- +// setYMagRange +//--------------------------------------------------------- + +void TimeCanvas::setYMagRange(double min, double max) + { + _ymagMin = min; + _ymagMax = max; + if (vmag) + vmag->setValue(lrint((_ymag-_ymagMin)*100.0/(_ymagMax-_ymagMin))); + } + +//--------------------------------------------------------- +// setVSize +//--------------------------------------------------------- + +void TimeCanvas::setVSize(int val) + { + if (yRange == val) + return; + yRange = val; + if (_yFit) { + _ymagMin = double(rCanvasA.height()) / double(yRange); + if (_ymag < _ymagMin) + _ymag = _ymagMin; + if (vmag) + vmag->setValue(lrint((_ymag-_ymagMin)*100.0/(_ymagMax-_ymagMin))); + } + updateScrollBars(); + } + +//--------------------------------------------------------- +// s2xmag +// nonlinear xmag behaviour, feels better +//--------------------------------------------------------- + +double TimeCanvas::s2xmag(int val) + { + val = 100 - val; + double f = 1.0 - log10(val * val + 1) * 0.25; + return (_xmagMax - _xmagMin) * f + _xmagMin; + } + +//--------------------------------------------------------- +// xmag2s +//--------------------------------------------------------- + +int TimeCanvas::xmag2s(double m) + { + m -= _xmagMin; + m /= (_xmagMax - _xmagMin); + double val = sqrt(exp10((1.0 - m) * 4.0)-1.0); + return lrint(100.0 - val); + } + +//--------------------------------------------------------- +// setPart +//--------------------------------------------------------- + +void TimeCanvas::setPart(const AL::Pos& p1, const AL::Pos& p2) + { + partPos1 = p1; + partPos2 = p2; + widget()->update(); + } + +//--------------------------------------------------------- +// setFont1 +//--------------------------------------------------------- + +void TimeCanvas::setFont1(const QFont& f) + { + _font1 = f; + printf("TimeCanvas::setFont1\n"); + } + +//--------------------------------------------------------- +// setFont2 +//--------------------------------------------------------- + +void TimeCanvas::setFont2(const QFont& f) + { + _font2 = f; + } + +//--------------------------------------------------------- +// setFont3 +//--------------------------------------------------------- + +void TimeCanvas::setFont3(const QFont& f) + { + _font3 = f; + } + diff --git a/attic/muse_qt4_evolution/awl/tcanvas.h b/attic/muse_qt4_evolution/awl/tcanvas.h new file mode 100644 index 00000000..09b26b1d --- /dev/null +++ b/attic/muse_qt4_evolution/awl/tcanvas.h @@ -0,0 +1,293 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __TCANVAS_H__ +#define __TCANVAS_H__ + +#include "al/pos.h" +#include "al/marker.h" + +#define MAP_OFFSET 20 + +enum TimeCanvasType { + TIME_CANVAS, TIME_CANVAS_PIANOROLL, TIME_CANVAS_DRUMEDIT, + TIME_CANVAS_WAVEEDIT + }; + +enum Tool { + PointerTool=1, PencilTool=2, RubberTool=4, CutTool=8, + GlueTool=16, QuantTool=32, DrawTool=64, MuteTool=128 + }; + +enum FollowMode { + FOLLOW_NO, FOLLOW_JUMP, FOLLOW_CONTINUOUS + }; + +static const int rulerHeight = 28; +static const int pianoWidth = 40; +static const int waveWidth = 40; +static const int drumWidth = 120; +static const int drumHeight = 18; +static const int keyHeight = 13; + +//--------------------------------------------------------- +// TimeCanvas +// +// Layout: +// Button Ruler +// panelA canvasA +// panelB canvasB +// +// Pianoroll: +// panelA -> keyboard +// +// Drumeditor: +// panelA -> instrument list +// +//--------------------------------------------------------- + +class TimeCanvas : public QFrame { + Q_OBJECT + + Q_PROPERTY(QFont font1 READ font1 WRITE setFont1) + Q_PROPERTY(QFont font2 READ font2 WRITE setFont2) + Q_PROPERTY(QFont font3 READ font3 WRITE setFont3) + + // I could not find out how to set the size of a font property with + // style sheets. As a workaround here are special "size" properties + // which could be set with style sheet command + // TimeCanvas { qproperty-fontSize1: 6 } + + Q_PROPERTY(int fontSize1 READ fontSize1 WRITE setFontSize1 STORED false) + Q_PROPERTY(int fontSize2 READ fontSize2 WRITE setFontSize2 STORED false) + Q_PROPERTY(int fontSize3 READ fontSize3 WRITE setFontSize3 STORED false) + + QFont _font1; + QFont _font2; + QFont _font3; + + int yRange; + bool _yFit; + AL::Pos pos1; // time scroll range + AL::Pos pos2; + + int metronomeRulerMag; + + double _xmagMin, _xmagMax; + double _ymagMin, _ymagMax; + + AL::TType _timeType; + AL::MarkerList* marker; + QScrollBar* hbar; + QScrollBar* vbar; + QSlider* vmag; + QSlider* hmag; + QToolButton* timeTypeButton; + QGridLayout* grid; + QColor canvasBackgroundColor; + QPixmap canvasBackgroundPixmap; + int dragType; + bool followPos; + + // + // pianoroll variables + // + static QPixmap* octave; + static QPixmap* mk1; + static QPixmap* mk2; + static QPixmap* mk3; + static QPixmap* mk4; + QPushButton* addCtrlButton; + + bool mouseInB; + + void updateScrollBars(); + void canvasPaintEvent(const QRect&, QPainter&); + void paintCanvas(QPainter&, const QRect&); + void paintMetronomRuler(QPainter&, const QRect&); + void paintClockRuler(QPainter&, const QRect&); + void initPianoroll(); + void paintPiano(QPainter&, QRect); + void paintPianorollHorizontalGrid(QPainter&, QRect); + void paintDrumeditHorizontalGrid(QPainter&, QRect); + void updateGeometry(); + double s2xmag(int val); + int xmag2s(double m); + void updateRulerMag(); + + protected: + TimeCanvasType type; + Tool _tool; + QRect rButton, rPanelA, rPanelB, rRuler, rCanvasA, rCanvasB; + AL::Pos pos[3]; + bool showCursor; + AL::Pos cursor; + + QWidget* _widget; + + AL::Pos partPos1; // active time range for midi editors + AL::Pos partPos2; + + QPoint wpos; // "widget" position + double _xmag, _ymag; + + int ctrlHeight; + int curPitch; + + int _raster; + int button; + Qt::KeyboardModifiers keyState; + + bool eventFilter(QObject*, QEvent*); + + virtual void paint(QPainter&, QRect) = 0; + virtual void mousePress(QMouseEvent*) {} + virtual void mouseMove(QPoint) {} + virtual void mouseRelease(QMouseEvent*) {} + virtual void mouseDoubleClick(QMouseEvent*) {} + virtual void paintDrumList(QPainter&, QRect) {} + virtual void layout() {} + virtual void enterB() {} + virtual void leaveB() {} + + virtual void setCursor(); + + virtual void timeTypeChanged() {} + virtual void magChanged() {} + + virtual void paintControllerCanvas(QPainter&, QRect) {} + virtual void paintControllerPanel(QPainter&, QRect) {} + + virtual void dragEnter(QDragEnterEvent*) {} + virtual void drop(QDropEvent*) {} + virtual void dragMove(QDragMoveEvent*) {} + virtual void dragLeave(QDragLeaveEvent*) {} + + virtual void addController() {} + + virtual void keyPressEvent(QKeyEvent *e); + virtual void keyboardNavigate(QKeyEvent *) {} + + // map logical coordinates to physical coordinates (pixel) + int mapx(int x) const; + int mapy(int y) const { return lrint(y * _ymag) - wpos.y(); } + int rmapx(int x) const { return lrint(x * _xmag); } + int rmapy(int y) const { return lrint(y * _ymag); } + QPoint map(const QPoint& p) const { + return QPoint(mapx(p.x()), mapy(p.y())); + } + QPoint rmap(const QPoint& p) const { + return QPoint(rmapx(p.x()), rmapy(p.y())); + } + + // map physical coordinates (pixel) to logical coordinates + int mapxDev(int x) const; + int rmapxDev(int x) const { return lrint(x / _xmag); } + int mapyDev(int y) const { + int val = lrint((y + wpos.y()) / _ymag); + return val < 0 ? 0 : val; + } + QPoint mapDev(const QPoint& p) const { + return QPoint(mapxDev(p.x()), mapyDev(p.y())); + } + + virtual int y2pitch(int y) const; + virtual int pitch2y(int pitch) const; + void setTimeType1(AL::TType t); + void setPart(const AL::Pos& p1, const AL::Pos& p2); + + private slots: + void moveX(int); + void scaleX(int); + void scaleY(int); + void toggleTimeType(); + void addCtrlClicked(); + + signals: + void posChanged(int, const AL::Pos&); // emitted from ruler + void cursorPos(const AL::Pos&, bool); + void contentsMoving(int, int); + void addMarker(const AL::Pos&); + void removeMarker(const AL::Pos&); + void pitchChanged(int); + void toolChanged(int); + + public slots: + void setLocatorPos(int idx, const AL::Pos&, bool follow); + void setVSize(int); + virtual void setRaster(int); + void setYPos(int); + void moveY(int); + void setEndPos(const AL::Pos&); + void tempoChanged(); + void setTool(int); + void setFollow(bool val) { followPos = val; } + + public: + TimeCanvas(TimeCanvasType = TIME_CANVAS); + void setTimeRange(const AL::Pos&, const AL::Pos&); + void setMag(double, double); + double xmag() const { return _xmag; } + double ymag() const { return _ymag; } + + void setYMagRange(double, double); + void setYFit(bool val) { _yFit = val; } + + QPoint getWPos() const { return wpos; } + QWidget* widget() const { return _widget; } + void setWPos(const QPoint& p); + void setTimeType(AL::TType t); + AL::TType timeType() const { return _timeType; } + void setMarkerList(AL::MarkerList*); + void setCornerWidget(QWidget* w); + void resizeController(int); + int raster() const { return _raster; } + + AL::Pos pix2pos(int x) const; + int pos2pix(const AL::Pos&) const; + QScrollBar* verticalScrollBar() const { return vbar; } + Tool tool() const { return _tool; } + void setCanvasBackground(const QColor& color); + void setCanvasBackground(const QPixmap& pm); + + void updateCanvasB() { _widget->update(rCanvasB); } + void updateRuler() { _widget->update(rRuler); } + + QFont font1() const { return _font1; } + QFont font2() const { return _font2; } + QFont font3() const { return _font3; } + + void setFont1(const QFont& f); + void setFont2(const QFont& f); + void setFont3(const QFont& f); + + int fontSize1() const { return _font1.pointSize(); } + int fontSize2() const { return _font2.pointSize(); } + int fontSize3() const { return _font3.pointSize(); } + void setFontSize1(int val) { _font1.setPointSize(val); } + void setFontSize2(int val) { _font2.setPointSize(val); } + void setFontSize3(int val) { _font3.setPointSize(val); } + + static FollowMode followMode; + friend class CtrlEdit; + }; + +#endif + diff --git a/attic/muse_qt4_evolution/awl/tempoedit.cpp b/attic/muse_qt4_evolution/awl/tempoedit.cpp new file mode 100644 index 00000000..d7dbac81 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/tempoedit.cpp @@ -0,0 +1,88 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "tempoedit.h" + +namespace Awl { + +//--------------------------------------------------------- +// TempoEdit +//--------------------------------------------------------- + +TempoEdit::TempoEdit(QWidget* parent) + : QDoubleSpinBox(parent) + { + curVal = -1.0; + setSingleStep(1.0); + setRange(30.0, 600.0); + connect(this, SIGNAL(valueChanged(double)), SLOT(newValue(double))); + } + +//--------------------------------------------------------- +// sizeHint +//--------------------------------------------------------- + +QSize TempoEdit::sizeHint() const + { + QFontMetrics fm(font()); + int fw = style()->pixelMetric(QStyle::PM_DefaultFrameWidth); + int h = fm.height() + fw * 2; + int w = 2 + fm.width(QString("000.00")) + fw * 4 + 30; + return QSize(w, h).expandedTo(QApplication::globalStrut()); + } + +//--------------------------------------------------------- +// newValue +//--------------------------------------------------------- + +void TempoEdit::newValue(double val) + { + if (val != curVal) { + curVal = val; + emit tempoChanged(tempo()); + } + } + +//--------------------------------------------------------- +// setTempo +//--------------------------------------------------------- + +void TempoEdit::setTempo(int val) + { + double d = 60000000.0/double(val); + if (d != curVal) { + curVal = d; + blockSignals(true); + setValue(d); + blockSignals(false); + } + } + +//--------------------------------------------------------- +// tempo +//--------------------------------------------------------- + +int TempoEdit::tempo() const + { + return lrint(60000000.0/value()); + } + +} + diff --git a/attic/muse_qt4_evolution/awl/tempoedit.h b/attic/muse_qt4_evolution/awl/tempoedit.h new file mode 100644 index 00000000..af06221d --- /dev/null +++ b/attic/muse_qt4_evolution/awl/tempoedit.h @@ -0,0 +1,55 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AWLTEMPOEDIT_H__ +#define __AWLTEMPOEDIT_H__ + +namespace Awl { + +//--------------------------------------------------------- +// TempoEdit +//--------------------------------------------------------- + +class TempoEdit : public QDoubleSpinBox { + Q_OBJECT + + double curVal; + + protected: + QSize sizeHint() const; + + private slots: + void newValue(double); + + public slots: + void setTempo(int); + + signals: + void tempoChanged(int); + + public: + TempoEdit(QWidget*); + int tempo() const; + }; + +} + +#endif + diff --git a/attic/muse_qt4_evolution/awl/tempolabel.cpp b/attic/muse_qt4_evolution/awl/tempolabel.cpp new file mode 100644 index 00000000..3fcdec5c --- /dev/null +++ b/attic/muse_qt4_evolution/awl/tempolabel.cpp @@ -0,0 +1,72 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "tempolabel.h" + +namespace Awl { + +//--------------------------------------------------------- +// TempoLabel +//--------------------------------------------------------- + +TempoLabel::TempoLabel(QWidget* parent) + : QLabel(parent) + { + setFrameStyle(WinPanel | Sunken); + setLineWidth(2); + setMidLineWidth(3); + _value = 1.0; + setValue(0.0); + setIndent(3); + setMinimumSize(sizeHint()); + } + +//--------------------------------------------------------- +// setVal +//--------------------------------------------------------- + +void TempoLabel::setValue(int val) + { + setValue(double(val/1000.0)); + } + +void TempoLabel::setValue(double val) + { + if (val == _value) + return; + _value = val; + QString s = QString("%1").arg(val, 3, 'f', 2); + setText(s); + } + +//--------------------------------------------------------- +// sizeHint +//--------------------------------------------------------- + +QSize TempoLabel::sizeHint() const + { + QFontMetrics fm(font()); + int fw = 4; + int h = fm.height() + fw * 2; + int w = 6 + fm.width(QString("000.00")) + fw * 2; // 6=indent + return QSize(w, h).expandedTo(QApplication::globalStrut()); + } +} + diff --git a/attic/muse_qt4_evolution/awl/tempolabel.h b/attic/muse_qt4_evolution/awl/tempolabel.h new file mode 100644 index 00000000..cf30444e --- /dev/null +++ b/attic/muse_qt4_evolution/awl/tempolabel.h @@ -0,0 +1,48 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AWLTEMPOLABEL_H__ +#define __AWLTEMPOLABEL_H__ + +namespace Awl { + +//--------------------------------------------------------- +// TempoLabel +//--------------------------------------------------------- + +class TempoLabel : public QLabel { + double _value; + + Q_OBJECT + + protected: + QSize sizeHint() const; + + public slots: + void setValue(int); + void setValue(double); + + public: + TempoLabel(QWidget*); + }; +} + +#endif + diff --git a/attic/muse_qt4_evolution/awl/utils.cpp b/attic/muse_qt4_evolution/awl/utils.cpp new file mode 100644 index 00000000..29fe148f --- /dev/null +++ b/attic/muse_qt4_evolution/awl/utils.cpp @@ -0,0 +1,48 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "utils.h" + +static const char* vall[] = { + "c","c#","d","d#","e","f","f#","g","g#","a","a#","h" + }; +static const char* valu[] = { + "C","C#","D","D#","E","F","F#","G","G#","A","A#","H" + }; + +namespace Awl { + +//--------------------------------------------------------- +// pitch2string +//--------------------------------------------------------- + +QString pitch2string(int v) + { + if (v < 0 || v > 127) + return QString("----"); + int octave = (v / 12) - 2; + QString o; + o.sprintf("%d", octave); + int i = v % 12; + QString s(octave < 0 ? valu[i] : vall[i]); + return s + o; + } +} + diff --git a/attic/muse_qt4_evolution/awl/utils.h b/attic/muse_qt4_evolution/awl/utils.h new file mode 100644 index 00000000..c97bc7bf --- /dev/null +++ b/attic/muse_qt4_evolution/awl/utils.h @@ -0,0 +1,29 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AWLUTILS_H__ +#define __AWLUTILS_H__ + +namespace Awl { + extern QString pitch2string(int); + } + +#endif + diff --git a/attic/muse_qt4_evolution/awl/volentry.cpp b/attic/muse_qt4_evolution/awl/volentry.cpp new file mode 100644 index 00000000..23b38720 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/volentry.cpp @@ -0,0 +1,37 @@ +//============================================================================= +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "fastlog.h" +#include "volentry.h" + +namespace Awl { + +//--------------------------------------------------------- +// VolEntry +//--------------------------------------------------------- + +VolEntry::VolEntry(QWidget* parent) + : FloatEntry(parent) + { + setRange(-60.0f, 10.0f); + setSpecialText(tr("off")); + setPrecision(0); + setLog(true); + } +} + diff --git a/attic/muse_qt4_evolution/awl/volentry.h b/attic/muse_qt4_evolution/awl/volentry.h new file mode 100644 index 00000000..0b51b945 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/volentry.h @@ -0,0 +1,41 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AWLVOLENTRY_H__ +#define __AWLVOLENTRY_H__ + +#include "floatentry.h" + +namespace Awl { + +//--------------------------------------------------------- +// VolEntry +//--------------------------------------------------------- + +class VolEntry : public FloatEntry { + Q_OBJECT + + public: + VolEntry(QWidget* parent); + }; + +} + +#endif diff --git a/attic/muse_qt4_evolution/awl/volknob.cpp b/attic/muse_qt4_evolution/awl/volknob.cpp new file mode 100644 index 00000000..da9a1e63 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/volknob.cpp @@ -0,0 +1,39 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "fastlog.h" +#include "volknob.h" + +namespace Awl { + +//--------------------------------------------------------- +// VolKnob +//--------------------------------------------------------- + +VolKnob::VolKnob(QWidget* parent) + : Knob(parent) + { + setLog(true); + setRange(-60.0f, 10.0f); + _lineStep = .8f; + _pageStep = 3.0f; + } +} + diff --git a/attic/muse_qt4_evolution/awl/volknob.h b/attic/muse_qt4_evolution/awl/volknob.h new file mode 100644 index 00000000..7cec4335 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/volknob.h @@ -0,0 +1,46 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AWLVOLKNOB_H__ +#define __AWLVOLKNOB_H__ + +#include "knob.h" + +namespace Awl { + +//--------------------------------------------------------- +// VolKnob +//! Volume Knob entry widget +// +//! This widget implements knob with a logarithmic +//! floating point scale used to adjust the volume +//! in an audio mixer. +//--------------------------------------------------------- + +class VolKnob : public Knob { + Q_OBJECT + + public: + VolKnob(QWidget* parent = 0); + }; +} + +#endif + diff --git a/attic/muse_qt4_evolution/awl/volslider.cpp b/attic/muse_qt4_evolution/awl/volslider.cpp new file mode 100644 index 00000000..59f1b8cf --- /dev/null +++ b/attic/muse_qt4_evolution/awl/volslider.cpp @@ -0,0 +1,85 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "fastlog.h" +#include "volslider.h" + +namespace Awl { + +//--------------------------------------------------------- +// VolSlider +//--------------------------------------------------------- + +VolSlider::VolSlider(QWidget* parent) + : Slider(parent) + { + setLog(true); + setRange(-60.0f, 10.0f); + setScaleWidth(7); + setLineStep(.8f); + setPageStep(3.0f); + } + +//--------------------------------------------------------- +// mouseDoubleClickEvent +//--------------------------------------------------------- + +void VolSlider::mouseDoubleClickEvent(QMouseEvent* ev) + { + if (ev->button() == Qt::RightButton) + _value = 0.0; + else + _value = _minValue; + valueChange(); + update(); + } + + +//--------------------------------------------------------- +// setValue +//--------------------------------------------------------- + +void VolSlider::setValue(double val) + { + if (_log) { + if (val == 0.0f) + _value = _minValue; + else { + _value = fast_log10(val) * 20.0f; + if (_value < _minValue) + _value = _minValue; + } + } + else + _value = val; + update(); + } + +//--------------------------------------------------------- +// value +//--------------------------------------------------------- + +double VolSlider::value() const + { + return _log ? (_value <= _minValue) ? 0.0f : pow(10.0, _value*0.05f) + : _value; + } + +} diff --git a/attic/muse_qt4_evolution/awl/volslider.h b/attic/muse_qt4_evolution/awl/volslider.h new file mode 100644 index 00000000..22b4000f --- /dev/null +++ b/attic/muse_qt4_evolution/awl/volslider.h @@ -0,0 +1,57 @@ +//============================================================================= +// Awl +// Audio Widget Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AWLVOLSLIDER_H__ +#define __AWLVOLSLIDER_H__ + +#include "slider.h" + +namespace Awl { + +//--------------------------------------------------------- +// VolSlider +//! Volume Slider entry widget +// +//! This widget implements a slider with a logarithmic +//! floating point scale used to adjust the volume +//! in an audio mixer. +//! Internal value represents gain as a logarythmic +//! dB value. +//--------------------------------------------------------- + +class VolSlider : public Slider { + Q_OBJECT + + protected: + virtual void mouseDoubleClickEvent(QMouseEvent*); + + public slots: + virtual void setValue(double v); + + public: + VolSlider(QWidget* parent = 0); + + virtual double value() const; + }; + +} + +#endif + diff --git a/attic/muse_qt4_evolution/cmake/TargetDoc.cmake b/attic/muse_qt4_evolution/cmake/TargetDoc.cmake new file mode 100644 index 00000000..e6afb583 --- /dev/null +++ b/attic/muse_qt4_evolution/cmake/TargetDoc.cmake @@ -0,0 +1,125 @@ +# -helper macro to add a "doxy" target with CMake build system. +# and configure Doxyfile.in to Doxyfile +# +# target "doxy" allows building the documentation with doxygen/dot on WIN32 and Linux +# Creates .chm windows help file if MS HTML help workshop +# (available from http://msdn.microsoft.com/workshop/author/htmlhelp) +# is installed with its DLLs in PATH. +# +# +# Please note, that the tools, e.g.: +# doxygen, dot, latex, dvips, makeindex, gswin32, etc. +# must be in path. +# +# Note about Visual Studio Projects: +# MSVS hast its own path environment which may differ from the shell. +# See "Menu Tools/Options/Projects/VC++ Directories" in VS 7.1 +# +# author Jan Woetzel 2004-2006 +# www.mip.informatik.uni-kiel.de/~jw + +FIND_PACKAGE(Doxygen) + +IF (DOXYGEN) + + MESSAGE("found Doxygen") + + # click+jump in Emacs and Visual Studio (for Doxyfile) (jw) + IF (CMAKE_BUILD_TOOL MATCHES "(msdev|devenv)") + SET(DOXY_WARN_FORMAT "\"$file($line) : $text \"") + ELSE (CMAKE_BUILD_TOOL MATCHES "(msdev|devenv)") + SET(DOXY_WARN_FORMAT "\"$file:$line: $text \"") + ENDIF (CMAKE_BUILD_TOOL MATCHES "(msdev|devenv)") + + # we need latex for doxygen because of the formulas + FIND_PACKAGE(LATEX) + IF (NOT LATEX_COMPILER) + MESSAGE(STATUS "latex command LATEX_COMPILER not found but usually required. You will probably get warnings and user inetraction on doxy run.") + ENDIF (NOT LATEX_COMPILER) + IF (NOT MAKEINDEX_COMPILER) + MESSAGE(STATUS "makeindex command MAKEINDEX_COMPILER not found but usually required.") + ENDIF (NOT MAKEINDEX_COMPILER) + IF (NOT DVIPS_CONVERTER) + MESSAGE(STATUS "dvips command DVIPS_CONVERTER not found but usually required.") + ENDIF (NOT DVIPS_CONVERTER) + + IF (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in") + MESSAGE(STATUS "configured ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in --> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile") + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in + ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile + @ONLY ) + # use (configured) Doxyfile from (out of place) BUILD tree: + SET(DOXY_CONFIG "${CMAKE_CURRENT_BINARY_DIR}/Doxyfile") + ELSE (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in") + # use static hand-edited Doxyfile from SOURCE tree: + SET(DOXY_CONFIG "${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile") + IF (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile") + MESSAGE(STATUS "WARNING: using existing ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile instead of configuring from Doxyfile.in file.") + ELSE (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile") + IF (EXISTS "${CMAKE_MODULE_PATH}/Doxyfile.in") + # using template Doxyfile.in + MESSAGE(STATUS "configured ${CMAKE_CMAKE_MODULE_PATH}/Doxyfile.in --> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile") + CONFIGURE_FILE(${CMAKE_MODULE_PATH}/Doxyfile.in + ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile + @ONLY ) + SET(DOXY_CONFIG "${CMAKE_CURRENT_BINARY_DIR}/Doxyfile") + ELSE (EXISTS "${CMAKE_MODULE_PATH}/Doxyfile.in") + # failed completely... + MESSAGE(SEND_ERROR "Please create ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in (or Doxyfile as fallback)") + ENDIF(EXISTS "${CMAKE_MODULE_PATH}/Doxyfile.in") + + ENDIF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile") + ENDIF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in") + + ADD_CUSTOM_TARGET(doxy ${DOXYGEN} ${DOXY_CONFIG}) + + # create a windows help .chm file using hhc.exe + # HTMLHelp DLL must be in path! + # fallback: use hhw.exe interactively + IF (WIN32) + FIND_PACKAGE(HTMLHelp) + IF (HTML_HELP_COMPILER) + SET (TMP "${CMAKE_CURRENT_BINARY_DIR}\\Doc\\html\\index.hhp") + STRING(REGEX REPLACE "[/]" "\\\\" HHP_FILE ${TMP} ) + # MESSAGE(SEND_ERROR "DBG HHP_FILE=${HHP_FILE}") + ADD_CUSTOM_TARGET(winhelp ${HTML_HELP_COMPILER} ${HHP_FILE}) + ADD_DEPENDENCIES (winhelp doxy) + + IF (NOT TARGET_DOC_SKIP_INSTALL) + # install windows help? + # determine useful name for output file + # should be project and version unique to allow installing + # multiple projects into one global directory + IF (EXISTS "${PROJECT_BINARY_DIR}/Doc/html/index.chm") + IF (PROJECT_NAME) + SET(OUT "${PROJECT_NAME}") + ELSE (PROJECT_NAME) + SET(OUT "Documentation") # default + ENDIF(PROJECT_NAME) + IF (${PROJECT_NAME}_VERSION_MAJOR) + SET(OUT "${OUT}-${${PROJECT_NAME}_VERSION_MAJOR}") + IF (${PROJECT_NAME}_VERSION_MINOR) + SET(OUT "${OUT}.${${PROJECT_NAME}_VERSION_MINOR}") + IF (${PROJECT_NAME}_VERSION_PATCH) + SET(OUT "${OUT}.${${PROJECT_NAME}_VERSION_PATCH}") + ENDIF(${PROJECT_NAME}_VERSION_PATCH) + ENDIF(${PROJECT_NAME}_VERSION_MINOR) + ENDIF(${PROJECT_NAME}_VERSION_MAJOR) + # keep suffix + SET(OUT "${OUT}.chm") + + #MESSAGE("DBG ${PROJECT_BINARY_DIR}/Doc/html/index.chm \n${OUT}") + # create target used by install and package commands + INSTALL(FILES "${PROJECT_BINARY_DIR}/Doc/html/index.chm" + DESTINATION "doxy" + RENAME "${OUT}" + ) + ENDIF(EXISTS "${PROJECT_BINARY_DIR}/Doc/html/index.chm") + ENDIF(NOT TARGET_DOC_SKIP_INSTALL) + + ENDIF(HTML_HELP_COMPILER) + # MESSAGE(SEND_ERROR "HTML_HELP_COMPILER=${HTML_HELP_COMPILER}") + ENDIF (WIN32) +ELSE(DOXYGEN) + MESSAGE("Doxygen not found") +ENDIF(DOXYGEN) diff --git a/attic/muse_qt4_evolution/cmake/UsePkgConfig1.cmake b/attic/muse_qt4_evolution/cmake/UsePkgConfig1.cmake new file mode 100644 index 00000000..55654d98 --- /dev/null +++ b/attic/muse_qt4_evolution/cmake/UsePkgConfig1.cmake @@ -0,0 +1,45 @@ +# - pkg-config module for CMake +# +# Defines the following macros: +# +# PKGCONFIG(package includedir libdir linkflags cflags) +# +# Calling PKGCONFIG will fill the desired information into the 4 given arguments, +# e.g. PKGCONFIG(libart-2.0 LIBART_INCLUDE_DIR LIBART_LINK_DIR LIBART_LINK_FLAGS LIBART_CFLAGS) +# if pkg-config was NOT found or the specified software package doesn't exist, the +# variable will be empty when the function returns, otherwise they will contain the respective information +# + +FIND_PROGRAM(PKGCONFIG_EXECUTABLE NAMES pkg-config PATHS /usr/bin /usr/local/bin ) + +MACRO(PKGCONFIG _package _minVersion _include_DIR _link_DIR _link_FLAGS _cflags) +# reset the variables at the beginning + SET(${_include_DIR}) + SET(${_link_DIR}) + SET(${_link_FLAGS}) + SET(${_cflags}) + + # if pkg-config has been found + IF(PKGCONFIG_EXECUTABLE) + + EXEC_PROGRAM(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --atleast-version=${_minVersion} RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _pkgconfigDevNull ) +# EXEC_PROGRAM(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --exists RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _pkgconfigDevNull ) + + # and if the package of interest also exists for pkg-config, then get the information + IF(NOT _return_VALUE) + + EXEC_PROGRAM(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --variable=includedir OUTPUT_VARIABLE ${_include_DIR} ) + + EXEC_PROGRAM(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --variable=libdir OUTPUT_VARIABLE ${_link_DIR} ) + + EXEC_PROGRAM(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --libs OUTPUT_VARIABLE ${_link_FLAGS} ) + + EXEC_PROGRAM(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --cflags OUTPUT_VARIABLE ${_cflags} ) + + ENDIF(NOT _return_VALUE) + + ENDIF(PKGCONFIG_EXECUTABLE) + +ENDMACRO(PKGCONFIG _include_DIR _link_DIR _link_FLAGS _cflags) + +MARK_AS_ADVANCED(PKGCONFIG_EXECUTABLE) diff --git a/attic/muse_qt4_evolution/config.h.in b/attic/muse_qt4_evolution/config.h.in new file mode 100644 index 00000000..7a856aa5 --- /dev/null +++ b/attic/muse_qt4_evolution/config.h.in @@ -0,0 +1,29 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#cmakedefine DSSI_SUPPORT +#cmakedefine VST_SUPPORT +#cmakedefine USE_SSE +#cmakedefine JACK103 +#cmakedefine JACK107 + +#define INSTALL_NAME "${MusE_INSTALL_NAME}" +#define INSTPREFIX "${CMAKE_INSTALL_PREFIX}" +#define VERSION "${MusE_VERSION_FULL}" diff --git a/attic/muse_qt4_evolution/doc/README.de b/attic/muse_qt4_evolution/doc/README.de new file mode 100644 index 00000000..62aaaf20 --- /dev/null +++ b/attic/muse_qt4_evolution/doc/README.de @@ -0,0 +1,69 @@ +==================================================================== + MusE --- Linux Music Editor +==================================================================== + +Guten Tag! +dies ist MusE, der Open Source MIDI/Audio Sequencer. + +MusE steht unter der GNU General Public Licence (GPL). +Für Einzelheiten siehe COPYING. + +,-----------------------------------------------------------------. +| HINWEIS | +|-----------------------------------------------------------------| +| Viel Teile des Codes von MusE sind EXPERIMENTELL und können | +| zu Programmabstürzen und wer weiß was sonst noch allem | +| führen. | +| SIE BENUTZEN DIESE SOFTWARE AUF EIGENES RISIKO! | +`-----------------------------------------------------------------' + + ============================= + Voraussetzungen + ============================= + + - qt 3.2.0 oder neuer + ftp://ftp.trolltech.com/qt/source + Bitte mit "-thread" option compilieren. + + - libsndfile 1.0.1 (aktuell ist 1.0.4) + http://www.zip.com.au/~erikd/libsndfile/ + + - JACK + http://jackit.sourceforge.net/ + download: + http://jackit.sourceforge.net/download/ + + - fluidsynth-1.0.3 (the synti formerly known as "iiwusynth") von + http://savannah.nongnu.org/download/fluid + + - Linux Kernel mit rtc (RealTimeClock) Treiber (device /dev/rtc) + ("low latency patches" für minimales timing-jitter wären fein) + + - ALSA von http://www.alsa-project.org/ + Version 0.9.x oder neuer + + - gcc 3.x.x + (es muß der gleiche Compiler wie der zum compilieren der + QT-Libraries verwendet werden) + + - natürlich: eine Soundkarte und/oder irgendwelche Midi Geräte + + ============================= + Kompilierung + ============================= + + - download source von http://lmuse.sourceforge.net/ + - untar source: + tar xvofj muse-current-tar.bz2 + - konfigurieren: + run "configure" + - kompilieren: + run "make all" + - installieren + als root, run "make install" + - Test + +==================================================================== +Aktuelle(re) Infos gibt es auf der MusE Homepage +http://lmuse.sourceforge.net/ + diff --git a/attic/muse_qt4_evolution/doc/README.instruments b/attic/muse_qt4_evolution/doc/README.instruments new file mode 100644 index 00000000..a2693b4e --- /dev/null +++ b/attic/muse_qt4_evolution/doc/README.instruments @@ -0,0 +1,108 @@ +================================================ + MusE loadable Midi Instrument Definitions + (as of 10.09.2003) MusE 0.7.0 +================================================ + + - File Extension ".idf" + - searched in Subdirectory "instruments" + (/usr/share/muse/instruments on my system) + + All found instrument definitions are presented by MusE + in Config->MidiPorts in Pulldown in column "Instrument". + +------------------------------------------------- + Example of Instrument Definition File: +------------------------------------------------- + + + + + + ...MusE event list which initializes instrument + + + + + ... + + + + + + ... + + 0x4a + 0 + 127 + 0 + + ... + + + +------------------------------------------------- + Notes +------------------------------------------------- + + (1) PatchGroups are not mandatory; its valid to write: + + + + + + + ... + + + (2) An "Instrument Definition File" can define more than on + Instrument, but it is recommended to use one file for + one instrument + + (3) the "prog" parameter in a "Patch" is mandatory. Missing + "hbank" or "lbank" are treated as "don't care". + Missing "drum" is treated as drum="0". + + A XG-Patch looks like: + + + (5) A patch can be associated with a "mode" with one of + + 1 - GM + 2 - GS + 4 - XG + + Example: + + + Mode id's can be ore'd together for patches which are valid + for more than one mode: + + + + (4) example for MusE event (Sysex "XG-On"): + + + 43 10 4c 00 00 7e 00 + + + (5) ... part can be omitted + + + (6) Controller have the following porperties: + + name: arbitrary unique (short) string describing the controller + n: controller number, defines also the controller type: + values from 0x0 - 0x7f are 7Bit controller + values from 0x1000 - 0x1ffff are 14 bit controller with + MSB/LSB value pairs + values from 0x20000 - 0x2ffff are RPN's + values from 0x30000 - 0x3ffff are NRPN's + + min: minimum value for controller + max: maximum value for controller + init: reset value for controller; when controller value is + undefined after instrument reset, use the ''undefined'' + value 0x10000 + + the min/max/init values can be ommited + diff --git a/attic/muse_qt4_evolution/doc/README.ladspaguis b/attic/muse_qt4_evolution/doc/README.ladspaguis new file mode 100644 index 00000000..5c77be26 --- /dev/null +++ b/attic/muse_qt4_evolution/doc/README.ladspaguis @@ -0,0 +1,63 @@ +MusE can create LADSPA GUI's (graphical user interfaces) from +Qt designer *.ui files at runtime. +This allows a user to create or modify customized LADSPA guis without +recompiling MusE. + +====================== + Installation +===================== + +Copy the file muse/awl/libawlplugin.so and muse/awl/libawlplugin_debug.so +into a directory were Qt (designer) can find it. + +Example: + if you installed Qt in /usr/qt4: + su -c "cp -af awlplugin.so /usr/qt4/plugins/designer" +Check: + After starting the Qt designer you see all MusE specific widgets + in the widget box titled "MusE Awl Widgets". + If you cannot find any MusE widgets, designer did not find the + muse shared libs. + The MusE shared libs must have a signature qt designer understands. + If the signature is wrong, qt designer silently ignores the libs. + +====================== + Environment +====================== + +Naming: + The Qt designer files are named after the LADSPA plugin ID. + Example: the "freeverb" plugin has the id "1050". A gui for + freeverb has to be named "1050.ui". + The plugin ID is shown in the MusE plugin browser. + +Path: + MusE looks for *ui files at (museglobalshare)/plugins/. + If you installed MusE at "/usr" (configured with --prefix=/usr) + MusE looks at "/usr/share/muse/plugins" for *ui files. + +====================== + Creating *.ui file +====================== + +The association between LADSPA plugin parameters and Qt-Widgets is +done by name. All input widgets which manipulate a LADSPA parameter +must have a name starting with the letter "P". +The "id" property of every widget must be set to the parameter index +of the plugin, +One parameter can be manipulated with more than one widgets. + + Example: + A "Slider" widget which manipulates the 3th parameter of a + plugin has the name "Pslider" and the "id" property has a + value of "3". + +Supported Widgets: + "AwlSlider" slider for float values + "AwlFloatEntry" entry for float values + "AwlCheckbox" to manipulate a on/off LADSPA parameter + "AwlComboBox" select from a list of named values; sets + integer LADSPA values + +(for more hints please look at the example *.ui files) + diff --git a/attic/muse_qt4_evolution/doc/README.realtime b/attic/muse_qt4_evolution/doc/README.realtime new file mode 100644 index 00000000..7e992261 --- /dev/null +++ b/attic/muse_qt4_evolution/doc/README.realtime @@ -0,0 +1,19 @@ +For reliable operation MusE needs "realtime priviledges". + +Kernel >= 2.6.12 + - load the set_rtlimits utility from: + http://www.physics.adelaide.edu.au/~jwoithe + - compile & install + + - create an audio group (if you dont have one already): + groupadd audio + + - add yourself to the audio group + + - create an entry in "/etc/set_rtlimits.conf": + + @audio /home/ws/projects/muse/muse/muse/muse -1 90 + + - start MusE with + set_rtlimits -r 60 /usr/local/bin/muse + diff --git a/attic/muse_qt4_evolution/doc/README.shortcuts b/attic/muse_qt4_evolution/doc/README.shortcuts new file mode 100644 index 00000000..48de30f3 --- /dev/null +++ b/attic/muse_qt4_evolution/doc/README.shortcuts @@ -0,0 +1,159 @@ +From: Frank Neumann +Subject: [MusE] Keyboard shortcut list + +Hi all, +while reading some MusE source code during the last weeks, I made a list +of all keyboard shortcuts I found in there. I thought other might find +this useful, so I am posting this here. There are some "?" spots in +there where I am not perfectly sure if something is correct or really +works the way it should, so comments or corrections are welcome. A few +keys are also result of my first ever cvs commit to Muse :-). + +Frank + +2004-04-xx: + Also changed Ctrl+Shift+A to Select None. + +2004-01-08: + Changed Ctrl+A to Select All in Arranger for the sake of uniformity. (ML) + +2003-10-26: + Added Alt+L shortcut in drumeditor to set fixed length on drumnotes + according to drummap (Mathias Lundgren) + 2003-10-19: + In Arranger, Part Canvas: + added Alt+P shortcut in to move locators to part boundaries + Crsr Up / Crsr Down to move to nearest part on track above/below + in current window. + +04.01.2003: + - (ws) added new Delete keys in pianoroll and drumedit + + + +Shortcut keys in Muse, as of 0.6.0pre5: + +Arranger: +========= +Undo: Ctrl-Z +Redo: Ctrl-Y +New: Ctrl-N +Open: Ctrl-O +Save: Ctrl-S +Open PianoRoll Editor: Ctrl-E +Open Score Editor: Ctrl-R + +Open Recent: Ctrl-S (? collides with "Save"?) +Config Printer: Ctrl-P +Quit: Ctrl-Q + +Cut: Ctrl-X +Copy: Ctrl-C +Paste: Ctrl-V +Delete Track: Delete +Add Track: Ctrl-J +Select all: Ctrl-A +Deselect All Parts: Ctrl-B +Open Drums Editor: Ctrl-D +Open List Editor: Ctrl-L +Open Graphical Mastertrack Editor: Ctrl-M +Open List Mastertrack Editor: Shift-Ctrl-M +Open MIDI Transform Editor: Ctrl-T +Open Transport Panel: F11 +Open Bigtime Window: F12 +Open Help Browser: F1 +Start "What's This" Mode: Shift-F1 +Toggle Metronome Click: C + +Stop Playback / Rewind: Space +Stop Playback: Insert +Start Playback: Enter +Go to left Marker: End (Keypad) +Go to right marker: CursorDown (Keypad) +Toggle Loop Mode: / (Keypad) +Start Recording: * (Keypad) + + +Arranger, Part Canvas: +====================== +Cut: Ctrl-X +Copy: Ctrl-C +Select previous/next part in this track: Crsr-Left / Crsr-Right +Remove Part: Delete + + +Arranger, Track List Canvas: +============================ +Move to previous track: Crsr-Up +Move to next track: Crsr-Down + + +Pianoedit: +========== +Cut: Ctrl-X +Copy: Ctrl-C +Paste: Ctrl-V +Select All: Ctrl-A (just added in CVS) +Deselect All: Ctrl-Shift-A (just added in CVS) +Invertion Selection: Ctrl-I (just added in CVS) +Delete selected Events: Delete + +Insert Notes at locator position: Shift-Crsr-Right +Move Locator right: Crsr-Right +Move Locator left: Crsr-Left +Delete under Locator: Delete (KP?), "collects" notes left of locator +Set Grid Snap/Quantizer to 1/1, 1/2, 1/4, 1/8, 1/16, 1/32, 1/64: +1/2/3/4/5/6/7 +Toggle "triolic" flag of Grid Snap/Quantizer: T +Toggle "punctuated" flag of Grid Snap/Quantizer: . +Set Grid Snap/Quantizer to "first value in list"(?): , +Open "Event Color" dialog: e (just fixed in CVS) + + +Drumedit: +========= +Cut: Ctrl-X +Copy: Ctrl-C +Paste:Ctrl-V +Load Drummap: Ctrl-O +Save Drummap: Ctrl-S +Set fixed length: Alt-L (Sets length on selected events to the length specified in the drummap) + +Delete selected Events: Delete + +Listedit: +========= +Insert Note: Ctrl-N +Insert SysEx: Ctrl-S +Insert Ctrl: Ctrl-T +Insert Pitch: Ctrl-E +Insert Channel Aftertouch: Ctrl-A +Insert Key Aftertouch: Ctrl-P +Delete Events: Delete + + +Score Edit: +=========== +When entering Lyrics: +Move to next Note's Lyrics: Crsr-Left (problems when at beginning/end of +notes) +Move to previous Note' Lyrics: Crsr-Right +Cancel (?) entering notes: Escape +Remove last character from lyrics: Backspace or Delete +End entering Lyrics: Enter + + +Help Browser: +============= +New Window: Alt-N +Open File: Alt-O +Print: Alt-P +Close: Alt-Q +Exit: Alt-X + + +Transport: +========== +Toggle metronome Click: C +Toggle Loop Mode: / (Keypad) + diff --git a/attic/muse_qt4_evolution/doc/README.softsynth b/attic/muse_qt4_evolution/doc/README.softsynth new file mode 100644 index 00000000..e3201ff2 --- /dev/null +++ b/attic/muse_qt4_evolution/doc/README.softsynth @@ -0,0 +1,86 @@ +============================================================= + Short instructions to get the soft + synthesizer up and running +============================================================= + +1. Compile and install MusE + +3. Run MusE from an xterm with Option "-D"; + look at the debug output in the xterm; you should see something + like: + + 3 soft synth found + found soft synth + found soft synth + found soft synth + + +4. Configure Software Synthesizer + + Open Settings->MidiPorts/SoftSynth. + + - select a software synthesizer + - press "Add Instance" to create an istance of this + synthesizer; the synthi shows up in the list + of instances with a unique name + +5. Configure Midi Port + + To use the synthesizer instance you must + connect it to a MusE midi port: + + - click into the "Device Name" column of an empty midi port + (Device Name == "none") + - select the synthesizer from the dropdown menu. + + This connects the synthesizer to the selected midi port. + The instrument type is automatically set. + +6. Open the Audio Mixer + + You see a new mixer strip of type "Synthi" and the name + of the new created synthesizer instance. + + Route the audio output of this strip to "Output". + (per default the synthesizer is routed to the first Output strip) + +7. Now you are ready to play with the "organ" synthesizer + + - create midi track + - set the midi port to the synthesizer port + - click the "R" column in the tracklist to enable "Recording" + +8. Optional: open Configure->MidiPorts and click in column GUI + to show a GUI for the synthesizer instance. + There is no gui available for the S1 synth. + The iiwu gui enables you to enter a different sound font. + The organ gui has some "draw bars" to let you play with + sounds in real time. + +These are the software synthesizers currently available: + + - S1 a simple sythesizer skeleton as a guide for all who + want to code their own one: + - only one tone at a time + - simple sinus wave form + - no gui + The synthi may be used as a metronome. + + - organ, an adapted version of the LADSPA plugin + "Organ - Additive Organ Synthesizer Voice" from + David A. Bartold + + "organ" implements a gui connected bidirectional + to the synth via stdin/stdout + + - fluid, is the adapted version of Peter Hanappe´s + sample based fluid synthesizer (formerly known as iiwu) + - loadable sound fonts + - multi timbral + - 128 voices + - simple gui lets you load a different sound font + Fluid loads a default sound font determined by the + environment variable "DEFAULT_SOUNDFONT". + + + diff --git a/attic/muse_qt4_evolution/doc/README.translate b/attic/muse_qt4_evolution/doc/README.translate new file mode 100644 index 00000000..b2189929 --- /dev/null +++ b/attic/muse_qt4_evolution/doc/README.translate @@ -0,0 +1,57 @@ +Internationalisation + +If you want to contribute a translation the following hints +may be of help to you: + + +Step 1: + enter the MusE directory and edit the + file "muse.pro" + + Append a new target file name at "TRANSLATIONS" + e.g. change + TRANSLATIONS = share/locale/muse_de.ts + into + TRANSLATIONS = share/locale/muse_de.ts \ + share/locale/muse_fr.ts + if you want to generate a french MusE version. + +Step 2: + start the Qt-Program "lupdate" + + lupdate muse.pro + + Maybe "lupdate" is not in your PATH and you must + specify the complete pathname "lupdate" + Example: + /usr/lib/qt42/bin/lupdate muse.pro + + This generates the file "locale/muse_fr.ts". + +Step 3: + Edit "share/locale/muse_fr.ts" manually or use the Qt "linguist" tool: + + cd share/locale; linguist muse_fr.ts + +Step 4: + start the Qt program "lrelease" + + lrelease muse.pro + + This generates all *.qm files in share/locale + +Step 5: + install the *.qm files: as superuser start "make install" + + +Step 6: + Test: + set the environment variable LANG to the desired + Language: + export LC_ALL=fr + + Start MusE: + muse + + + diff --git a/attic/muse_qt4_evolution/doc/dimpl.odt b/attic/muse_qt4_evolution/doc/dimpl.odt new file mode 100644 index 00000000..e62ccd90 Binary files /dev/null and b/attic/muse_qt4_evolution/doc/dimpl.odt differ diff --git a/attic/muse_qt4_evolution/doc/manual-de.odt b/attic/muse_qt4_evolution/doc/manual-de.odt new file mode 100644 index 00000000..1a8fb669 Binary files /dev/null and b/attic/muse_qt4_evolution/doc/manual-de.odt differ diff --git a/attic/muse_qt4_evolution/doc/pics/main0.png b/attic/muse_qt4_evolution/doc/pics/main0.png new file mode 100644 index 00000000..2d417bb6 Binary files /dev/null and b/attic/muse_qt4_evolution/doc/pics/main0.png differ diff --git a/attic/muse_qt4_evolution/doc/pics/main1.png b/attic/muse_qt4_evolution/doc/pics/main1.png new file mode 100644 index 00000000..283eaab5 Binary files /dev/null and b/attic/muse_qt4_evolution/doc/pics/main1.png differ diff --git a/attic/muse_qt4_evolution/doc/pics/main2.png b/attic/muse_qt4_evolution/doc/pics/main2.png new file mode 100644 index 00000000..11008143 Binary files /dev/null and b/attic/muse_qt4_evolution/doc/pics/main2.png differ diff --git a/attic/muse_qt4_evolution/doc/pics/mixer1.png b/attic/muse_qt4_evolution/doc/pics/mixer1.png new file mode 100644 index 00000000..709bd83d Binary files /dev/null and b/attic/muse_qt4_evolution/doc/pics/mixer1.png differ diff --git a/attic/muse_qt4_evolution/doc/pics/pianoroll1.png b/attic/muse_qt4_evolution/doc/pics/pianoroll1.png new file mode 100644 index 00000000..618b71e3 Binary files /dev/null and b/attic/muse_qt4_evolution/doc/pics/pianoroll1.png differ diff --git a/attic/muse_qt4_evolution/doc/pics/pianoroll2.png b/attic/muse_qt4_evolution/doc/pics/pianoroll2.png new file mode 100644 index 00000000..699d1edb Binary files /dev/null and b/attic/muse_qt4_evolution/doc/pics/pianoroll2.png differ diff --git a/attic/muse_qt4_evolution/doc/pics/select_project.png b/attic/muse_qt4_evolution/doc/pics/select_project.png new file mode 100644 index 00000000..aed3ea0a Binary files /dev/null and b/attic/muse_qt4_evolution/doc/pics/select_project.png differ diff --git a/attic/muse_qt4_evolution/doc/pics/select_template.png b/attic/muse_qt4_evolution/doc/pics/select_template.png new file mode 100644 index 00000000..78831d61 Binary files /dev/null and b/attic/muse_qt4_evolution/doc/pics/select_template.png differ diff --git a/attic/muse_qt4_evolution/grepmidi/CMakeLists.txt b/attic/muse_qt4_evolution/grepmidi/CMakeLists.txt new file mode 100644 index 00000000..55084217 --- /dev/null +++ b/attic/muse_qt4_evolution/grepmidi/CMakeLists.txt @@ -0,0 +1,24 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +add_executable ( grepmidi grepmidi.cpp ) + +install_targets ( /bin grepmidi ) + diff --git a/attic/muse_qt4_evolution/grepmidi/grepmidi.cpp b/attic/muse_qt4_evolution/grepmidi/grepmidi.cpp new file mode 100644 index 00000000..5e8a4f62 --- /dev/null +++ b/attic/muse_qt4_evolution/grepmidi/grepmidi.cpp @@ -0,0 +1,348 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: grepmidi.cpp,v 1.1.1.1 2003/10/27 18:57:02 wschweer Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include + +#define XCHG_SHORT(x) ((((x)&0xFF)<<8) | (((x)>>8)&0xFF)) +#ifdef __i486__ +#define XCHG_LONG(x) \ + ({ int __value; \ + asm ("bswap %1; movl %1,%0" : "=g" (__value) : "r" (x)); \ + __value; }) +#else +#define XCHG_LONG(x) ((((x)&0xFF)<<24) | \ + (((x)&0xFF00)<<8) | \ + (((x)&0xFF0000)>>8) | \ + (((x)>>24)&0xFF)) +#endif + +#if __BYTE_ORDER == __LITTLE_ENDIAN +#define BE_SHORT(x) XCHG_SHORT(x) +#define BE_LONG(x) XCHG_LONG(x) +#else +#define BE_SHORT(x) x +#define BE_LONG(x) x +#endif + + +int cpos; +bool printName = false; +char* curName; + +//--------------------------------------------------------- +// readLong +//--------------------------------------------------------- + +int readLong(FILE* f) + { + int format; + if (fread(&format, 4, 1, f) != 1) { + printf("read long failed\n"); + exit(1); + } + cpos += 4; + return BE_LONG(format); + } + +//--------------------------------------------------------- +// readShort +//--------------------------------------------------------- + +int readShort(FILE* f) + { + short format; + if (fread(&format, 2, 1, f) != 1) { + printf("read short failed\n"); + exit(1); + } + cpos += 2; + return BE_SHORT(format); + } + +/*--------------------------------------------------------- + * getvl + * Read variable-length number (7 bits per byte, MSB first) + *---------------------------------------------------------*/ + +int getvl(FILE* f) + { + int l = 0; + for (int i = 0;i < 8; i++) { + int c = getc(f); + ++cpos; + if (c == EOF) + break; + c &= 0xff; + l += (c & 0x7f); + if (!(c & 0x80)) + return l; + l <<= 7; + } + printf("Variable Len too long\n"); + return -1; + } + +//--------------------------------------------------------- +// skip +//--------------------------------------------------------- + +void skip(FILE* f, int n) + { + while (n--) { + ++cpos; + if (getc(f) == EOF) { + printf("skip %d failed\n", n); + exit(1); + } + } + } + +//--------------------------------------------------------- +// grepTrack +//--------------------------------------------------------- + +int grepTrack(FILE* f, int trackno) + { +// printf("TRACK %d\n", trackno); + int mtype, mlen; + int b; + char* buffer; + + char tmp[4]; + fread(tmp, 4, 1, f); + if (memcmp(tmp, "MTrk", 4)) + return -5; + int len = readLong(f); + int endpos = cpos + len; + int runstate = -1; + + for (;;) { +/* int nclick = */ getvl(f); + int me = getc(f); + ++cpos; + int a = -1; + if ((me & 0x80) == 0) { + if (runstate == -1) + return -6; + a = me; + me = runstate; + } + switch (me & 0xf0) { + case 0x80: + case 0x90: + case 0xa0: + case 0xb0: + case 0xe0: + b = getc(f); + ++cpos; + case 0xc0: + case 0xd0: + if (a == -1) { + a = getc(f); + ++cpos; + } + runstate = me; + break; + case 0xf0: + switch(me & 0xf) { + case 0: // SYSEX + mlen = getvl(f); + skip(f, mlen); + break; + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + if (printName) + printf("%s: ", curName); + printf("unknown Message\n"); + break; + case 7: // EOX + case 8: // timing clock + case 9: // undefined + case 0xa: // start + case 0xb: // continue + case 0xc: // stop + case 0xd: // undefined + case 0xe: // active sensing + if (printName) + printf("%s: ", curName); + printf("RT Message??\n"); + break; + case 0xf: // META + mtype = getc(f); + ++cpos; + mlen = getvl(f); + buffer = new char[mlen+1]; + if (mlen) { + if (fread(buffer, mlen, 1, f) != 1) { + if (printName) + printf("%s: ", curName); + printf("---meta %d too short (%d)\n", mtype, mlen); + exit(1); + } + cpos += mlen; + } + switch(mtype) { + case 0x2f: + delete buffer; + goto end; + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: // Marker + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + buffer[mlen] = 0; + if (printName) + printf("%s: ", curName); + printf("%02d Meta %0d: <%s>\n", trackno, mtype, buffer); + default: + break; + } + delete buffer; + break; + } + break; + } + } +end: + if (cpos != endpos) { + if (printName) + printf("%s: ", curName); + printf(" %d zu kurz\n", cpos - endpos); + } + if (endpos-cpos > 0) + skip(f, endpos-cpos); + return 0; + } + +//--------------------------------------------------------- +// grep +//--------------------------------------------------------- + +int grep(FILE* f) + { + char tmp[4]; + + fread(tmp, 4, 1, f); + if (memcmp(tmp, "MThd", 4) != 0) + return -2; + int len = readLong(f); + if (len < 6) + return -3; + cpos += 8; + int format = readShort(f); + int ntracks = readShort(f); + readShort(f); // division + if (len > 6) + skip(f, len-6); /* skip the excess */ + int rv = 0; + switch (format) { + case 0: rv = grepTrack(f, 0); break; + case 1: + for (int i = 0; i < ntracks; i++) { + rv = grepTrack(f, i); + if (rv != 0) + return rv; + } + break; + default: + return -4; + } + + return 0; + } + +//--------------------------------------------------------- +// grep +//--------------------------------------------------------- + +int grepMidi(char* name) + { + curName = name; + char*p = strrchr(name, '.'); + FILE* f; + if (p && strcmp(p, ".gz") == 0) { + char buffer[512]; + sprintf(buffer, "gunzip < %s", name); + f = popen(buffer, "r"); + } + else { + p = 0; + f = fopen(name, "r"); + } + if (f == 0) + return -1; + cpos = 0; + int rc = grep(f); + if (p) + pclose(f); + else + fclose(f); + return rc; + } + +//--------------------------------------------------------- +// usage +//--------------------------------------------------------- + +void usage(const char* fname, const char* txt) + { + fprintf(stderr, "%s: %s\n", fname, txt); +// fprintf(stderr, "usage:\n"); + } + +//--------------------------------------------------------- +// main +//--------------------------------------------------------- + +int main(int argc, char* argv[]) + { + int c; + while ((c = getopt(argc, argv, "f")) != EOF) { + switch (c) { + case 'f': printName = true; break; + default: usage(argv[0], "bad argument"); return -1; + } + } + argc -= optind; + ++argc; + char* p = 0; + for (int i = 1; i < argc; ++i) { + switch (grepMidi(argv[i])) { + case 0: break; + case -1: p = "not found"; break; + case -2: p = "no 'MThd': not a midi file"; break; + case -3: p = "file too short"; break; + case -4: p = "bad file type"; break; + case -5: p = "no 'MTrk': not a midi file"; break; + case -6: p = "no running state"; break; + default: + printf("was??\n"); + return -1; + } + } + if (p) + printf("Error: <%s>\n", p); + return 0; + } diff --git a/attic/muse_qt4_evolution/midiplugins/CMakeLists.txt b/attic/muse_qt4_evolution/midiplugins/CMakeLists.txt new file mode 100644 index 00000000..465e1983 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/CMakeLists.txt @@ -0,0 +1,36 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +subdirs( + libmidiplugin + splitlayer + filter + metronom + transform + trigg + dump + drumglue + ) + +set ( CMAKE_CXX_FLAGS + "${CMAKE_CXX_FLAGS} -DQT_NO_DEBUG -DQT_PLUGIN -DQT_SHARED -fPIC" + ) + +set ( CMAKE_LDD_FLAGS -module -avoid-version ) diff --git a/attic/muse_qt4_evolution/midiplugins/drumglue/CMakeLists.txt b/attic/muse_qt4_evolution/midiplugins/drumglue/CMakeLists.txt new file mode 100644 index 00000000..f824c54b --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/drumglue/CMakeLists.txt @@ -0,0 +1,50 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2008 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +QT4_WRAP_CPP ( drumglue_mocs drumgluegui.h globalinstrumentview.h outputinstrumentview.h ) +QT4_WRAP_UI ( drumglue_uis drumgluegui.ui globalinstrumentview.ui outputinstrumentview.ui ) + +add_library ( drumglue SHARED + drumglue.cpp + drumgluegui.cpp + drumgluegui.h + globalinstrumentview.cpp + globalinstrumentview.h + outputinstrumentview.cpp + outputinstrumentview.h + ${drumglue_mocs} + ${drumglue_uis} + ) + +target_link_libraries( drumglue + midiplugin awl + ${QT_LIBRARIES} + ) + +# - tell cmake to name target name.so instead of +# libname.so +# - use precompiled header files +set_target_properties ( drumglue + PROPERTIES PREFIX "" + COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all-pic.h" + ) + +install_targets ( /${CMAKE_INSTALL_LIBDIR}/${MusE_INSTALL_NAME}/midiplugins/ drumglue ) + diff --git a/attic/muse_qt4_evolution/midiplugins/drumglue/drumglue.cpp b/attic/muse_qt4_evolution/midiplugins/drumglue/drumglue.cpp new file mode 100644 index 00000000..7a9b6ed2 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/drumglue/drumglue.cpp @@ -0,0 +1,250 @@ +//========================================================= +// MusE +// Linux Music Editor +// +// drumglue - filter +// +// (C) Copyright 2008 Robert Jonsson (rj@spamatica.se) +// (C) Copyright 2005- Werner Schweer (ws@seh.de) +// Copyright: See COPYING file that comes with this distribution +//========================================================= + +#include "drumgluegui.h" +#include "drumglue.h" +#include "midi.h" +#include "midievent.h" + + + +//--------------------------------------------------------- +// DrumInstrument - get next index +// - next output instrument to use +//--------------------------------------------------------- +int DrumInstrument::getNextIndex(int /*velocity*/) +{ + // for now we simply do a round robin + // + // future improvements are to keep track of + // the time since the last hit and the + // weight set for each instrument. + // the incoming velocity should be checked that it's in range + if (outputInstruments.size() == 0) + return -1; + + if (lastOutputIndex+1 > outputInstruments.size()-1) + return 0; + else + return lastOutputIndex+1; +} + +//--------------------------------------------------------- +// DrumInstrument - get velocity +// - velocity value to use +//--------------------------------------------------------- +int DrumInstrument::getVelocity(int /*index*/, int velocity) +{ + // for now we just return the same velocity + // future improvements are to allow for some + return velocity; +} + + +//--------------------------------------------------------- +// DrumGlue - constructor +//--------------------------------------------------------- +DrumGlue::DrumGlue(const char* name, const MempiHost* h) + : Mempi(name, h) + { + gui = 0; + saveData = NULL; + } + +//--------------------------------------------------------- +// DrumGlue - destructor +//--------------------------------------------------------- +DrumGlue::~DrumGlue() + { + if (gui) + delete gui; + if (saveData) + delete saveData; + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +bool DrumGlue::init() + { + gui = new DrumGlueGui(this, 0); + gui->setWindowTitle("MusE: "+QString(name())); + gui->show(); + return false; + } + +//--------------------------------------------------------- +// getGeometry +//--------------------------------------------------------- + +void DrumGlue::getGeometry(int* x, int* y, int* w, int* h) const + { + QPoint pos(gui->pos()); + QSize size(gui->size()); + *x = pos.x(); + *y = pos.y(); + *w = size.width(); + *h = size.height(); + } + +//--------------------------------------------------------- +// setGeometry +//--------------------------------------------------------- + +void DrumGlue::setGeometry(int x, int y, int w, int h) + { + gui->resize(QSize(w, h)); + gui->move(QPoint(x, y)); + } + +//--------------------------------------------------------- +// process +//--------------------------------------------------------- + +void DrumGlue::process(unsigned , unsigned , MidiEventList* il, MidiEventList* ol) + { + + for (iMidiEvent i = il->begin(); i != il->end(); ++i) { + MidiEvent temp=*i; + if (temp.isNote() && !temp.isNoteOff()) + { + foreach(DrumInstrument *di, drumInstruments) { + if (temp.dataA() == di->inKey) { + int inVelocity = temp.dataB(); + int instrumentIdx = di->getNextIndex(inVelocity); + if (instrumentIdx==-1) { + // no instrument defined, yet, skip it + break; + } + int outKey = di->outputInstruments[instrumentIdx]->outKey; + int outVelocity= di->getVelocity(instrumentIdx, inVelocity); + printf("inKey=%d outKey =%d outVelocity=%d instrumentIdx=%d\n", di->inKey, outKey, outVelocity, instrumentIdx); + temp.setA(outKey); + temp.setB(outVelocity); + + ol->insert(temp); // note on + + temp.setB(0); + ol->insert(temp); // note off + + di->lastOutputIndex = instrumentIdx; + di->outputTime = temp.time(); + break; + } + } + } + if (temp.isNoteOff()) ; // we just throw it away, we will insert noteoffs for each note on + } + } + +// +// getInitData - return configuration to MusE +// +void DrumGlue::getInitData(int* n, const unsigned char** p) const + { + QString saveStr; + + foreach (DrumInstrument *di, drumInstruments) { + QString drumline = "DRUM " +di->name + " " + QString("%1").arg(di->inKey) + "\n"; + saveStr.append(drumline); + foreach (DrumOutputInstrument *doi, di->outputInstruments) { + QString outputline = "OUTPUT " + + QString("%1").arg(doi->outKey) + " " + + QString("%1").arg(doi->lowestVelocity) + " " + + QString("%1").arg(doi->highestVelocity) + " " + + QString("%1").arg(doi->prefer) + " " + + QString("%1").arg(doi->preferFast) + "\n"; + saveStr.append(outputline); + + } + } + + *n = saveStr.length(); + + if (saveData) + delete saveData; + + + saveData = new unsigned char[saveStr.length()]; + + strncpy((char*)saveData, saveStr.toLatin1().data(), saveStr.length()); + saveData[saveStr.length()]=0; + printf("getInitData -\n%s\n",saveData); + + *p = saveData; + + } + +void DrumGlue::setInitData(int n, const unsigned char* p) + { + if (saveData) + delete saveData; + saveData = new unsigned char[n+1]; + + strncpy((char*)saveData,(char*)p,n); + saveData[n]=0; + + QString loadStr = (char*)saveData; + printf("setInitData -\n%s\n",saveData); + + QStringList loadList = loadStr.split("\n"); + + DrumInstrument *currentInstrument=NULL; + foreach (QString line, loadList) { + QStringList splitLine = line.split(" "); + if (splitLine[0] == "DRUM") { + if (currentInstrument) + drumInstruments.append(currentInstrument); + + currentInstrument = new DrumInstrument(); + currentInstrument->name = splitLine[1]; + currentInstrument->inKey = splitLine[2].toInt(); + } + if (splitLine[0] == "OUTPUT") { + DrumOutputInstrument *doi = new DrumOutputInstrument; + doi->outKey = splitLine[1].toInt(); + doi->lowestVelocity = splitLine[2].toInt(); + doi->highestVelocity = splitLine[3].toInt(); + doi->prefer = splitLine[4].toInt(); + doi->preferFast = splitLine[5].toInt(); + currentInstrument->outputInstruments.append(doi); + } + } + if (currentInstrument) + drumInstruments.append(currentInstrument); + + if (gui) + gui->init(); + } + +//--------------------------------------------------------- +// inst +//--------------------------------------------------------- + +static Mempi* instantiate(const char* name, const MempiHost* h) + { + return new DrumGlue(name, h); + } + +extern "C" { + static MEMPI descriptor = { + "DrumGlue", + "Drum instrument mux filter", + "0.1", // filter version string + MEMPI_FILTER, // plugin type + MEMPI_MAJOR_VERSION, MEMPI_MINOR_VERSION, + instantiate + }; + + const MEMPI* mempi_descriptor() { return &descriptor; } + } + diff --git a/attic/muse_qt4_evolution/midiplugins/drumglue/drumglue.h b/attic/muse_qt4_evolution/midiplugins/drumglue/drumglue.h new file mode 100644 index 00000000..49a19b55 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/drumglue/drumglue.h @@ -0,0 +1,86 @@ +//========================================================= +// MusE +// Linux Music Editor +// +// drumglue - filter +// +// (C) Copyright 2008 Robert Jonsson (rj@spamatica.se) +// (C) Copyright 2005- Werner Schweer (ws@seh.de) +// Copyright: See COPYING file that comes with this distribution +//========================================================= + +#ifndef __DRUMGLUE_H__ +#define __DRUMGLUE_H__ + +#include + +#include "../libmidiplugin/mempi.h" + +#include "drumgluegui.h" +//--------------------------------------------------------- +// drumglue - filter +//--------------------------------------------------------- + +struct DrumOutputInstrument { + int outKey; // key to send + int lowestVelocity; // lower velocity valid for this instrument + int highestVelocity; // highest velocity valid for this instrument + bool prefer; // true if this instrument is preferred + bool preferFast; // true if this instrument is preferred for fast transitions +}; + +class DrumInstrument { + public: + DrumInstrument() + { + inKey=0; + lastOutputIndex=0; + outputTime=0; + } + + int getNextIndex(int velocity); + int getVelocity(int index, int velocity); + + + int inKey; // the key which triggers this instrument + QString name; + QList outputInstruments; + +// storage of runtime variables + int lastOutputIndex; + unsigned int outputTime; +}; + + + + +class DrumGlue : public Mempi { + friend class DrumGlueGui; + friend class GlobalInstrumentView; + friend class OutputInstrumentView; + + QList drumInstruments; + + DrumGlueGui* gui; + + mutable unsigned char *saveData; + + virtual void process(unsigned, unsigned, MidiEventList*, MidiEventList*); + + public: + DrumGlue(const char* name, const MempiHost*); + ~DrumGlue(); + virtual bool init(); + + virtual bool hasGui() const { return true; } + virtual bool guiVisible() const { return gui->isVisible(); } + virtual void showGui(bool val) { gui->setShown(val); } + virtual void getGeometry(int* x, int* y, int* w, int* h) const; + virtual void setGeometry(int, int, int, int); + + virtual void getInitData(int*, const unsigned char**) const; + virtual void setInitData(int, const unsigned char*); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/midiplugins/drumglue/drumgluegui.cpp b/attic/muse_qt4_evolution/midiplugins/drumglue/drumgluegui.cpp new file mode 100644 index 00000000..562adf2c --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/drumglue/drumgluegui.cpp @@ -0,0 +1,68 @@ +//========================================================= +// MusE +// Linux Music Editor +// +// (C) Copyright 2008 Robert Jonsson (rj@spamatica.se) +// (C) Copyright 2005- Werner Schweer (ws@seh.de) +// Copyright: See COPYING file that comes with this distribution +//========================================================= + +#include "drumgluegui.h" +#include "drumglue.h" +#include "globalinstrumentview.h" + +//--------------------------------------------------------- +// DrumGlueGui +//--------------------------------------------------------- + +DrumGlueGui::DrumGlueGui(DrumGlue* f, QWidget* parent) + : QDialog(parent) + { + drumGlue = f; + setupUi(this); + instrumentsTabWidget->clear(); + + connect (addInstrumentButton, SIGNAL(clicked()), this, SLOT(addInstrument())); + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- +void DrumGlueGui::init() + { + foreach(DrumInstrument *di, drumGlue->drumInstruments) { + GlobalInstrumentView *giView = new GlobalInstrumentView(drumGlue,this, di->name); + instrumentsTabWidget->addTab(giView, di->name); + } + } + +//--------------------------------------------------------- +// addInstrument +//--------------------------------------------------------- +void DrumGlueGui::addInstrument() + { + bool ok; + QString text = QInputDialog::getText(this, tr("Instrument name"), + tr("Name of instrument:"), QLineEdit::Normal, + "", &ok); + if (ok && !text.isEmpty()) { + DrumInstrument *di = new DrumInstrument(); + di->name = text; + drumGlue->drumInstruments.append(di); + GlobalInstrumentView *giView = new GlobalInstrumentView(drumGlue,this, text); + instrumentsTabWidget->addTab(giView, text); + } + } + +//--------------------------------------------------------- +// removeInstrument +//--------------------------------------------------------- +void DrumGlueGui::removeInstrument() + { + int ret = QMessageBox::warning(this, tr("Remove instrument"), + tr("Are you sure you want to remove current instrument?"), + QMessageBox::No, + QMessageBox::Yes); + if (ret == QMessageBox::Yes) + instrumentsTabWidget->removeTab(instrumentsTabWidget->currentIndex()); + } diff --git a/attic/muse_qt4_evolution/midiplugins/drumglue/drumgluegui.h b/attic/muse_qt4_evolution/midiplugins/drumglue/drumgluegui.h new file mode 100644 index 00000000..cdbac7a3 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/drumglue/drumgluegui.h @@ -0,0 +1,41 @@ +//========================================================= +// MusE +// Linux Music Editor +// +// (C) Copyright 2008 Robert Jonsson (rj@spamatica.se) +// (C) Copyright 2005- Werner Schweer (ws@seh.de) +// Copyright: See COPYING file that comes with this distribution +//========================================================= + +#ifndef __DRUMGLUEGUI_H__ +#define __DRUMGLUEGUI_H__ + +//#include "ui_drumglue.h" +#include "ui_drumgluegui.h" + + +//--------------------------------------------------------- +// DrumGlueGui +//--------------------------------------------------------- +class DrumGlue; + +class DrumGlueGui : public QDialog, public Ui::DrumGlueBase { + Q_OBJECT + + DrumGlue* drumGlue; + + signals: + void hideWindow(); + + public: + DrumGlueGui(DrumGlue*, QWidget* parent=0); + void init(); + + private slots: + void addInstrument(); + void removeInstrument(); + + }; + +#endif + diff --git a/attic/muse_qt4_evolution/midiplugins/drumglue/drumgluegui.ui b/attic/muse_qt4_evolution/midiplugins/drumglue/drumgluegui.ui new file mode 100644 index 00000000..ddd402c4 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/drumglue/drumgluegui.ui @@ -0,0 +1,91 @@ + + DrumGlueBase + + + + 0 + 0 + 444 + 270 + + + + Drumglue - midi filter + + + + + + + + + + Add instrument + + + + + + + Remove current + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + Arial + 14 + 75 + true + + + + DrumGlue 0.1 + + + + + + + + + QTabWidget::North + + + QTabWidget::Rounded + + + 0 + + + Qt::ElideLeft + + + + Snare + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/midiplugins/drumglue/globalinstrumentview.cpp b/attic/muse_qt4_evolution/midiplugins/drumglue/globalinstrumentview.cpp new file mode 100644 index 00000000..5ca81054 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/drumglue/globalinstrumentview.cpp @@ -0,0 +1,153 @@ +//========================================================= +// MusE +// Linux Music Editor +// +// (C) Copyright 2008 Robert Jonsson (rj@spamatica.se) +// (C) Copyright 2005- Werner Schweer (ws@seh.de) +// Copyright: See COPYING file that comes with this distribution +//========================================================= + +#include "globalinstrumentview.h" +#include "outputinstrumentview.h" +#include "drumglue.h" + +//--------------------------------------------------------- +// GlobalInstrumentView +//--------------------------------------------------------- + +GlobalInstrumentView::GlobalInstrumentView(DrumGlue* f, QWidget* parent, QString name) + : QWidget(parent) + { + setupUi(this); + drumGlue = f; + + instrumentName=name; + + DrumInstrument *di =getCurrentOutputInstrument(); + printf("di->inKey=%d\n", di->inKey); + if (di) + inKeySpinBox->setValue(di->inKey); + + connect (addOutputButton, SIGNAL(clicked()), this, SLOT(addOutput())); + connect (editOutputButton, SIGNAL(clicked()), this, SLOT(editOutput())); + connect (removeOutputButton, SIGNAL(clicked()), this, SLOT(removeOutput())); + connect (inKeySpinBox, SIGNAL(valueChanged(int)), this, SLOT(updateInKey())); + updateList(); + } + + +DrumInstrument *GlobalInstrumentView::getCurrentOutputInstrument() +{ + // get the global instrument belonging to this instance + QList::iterator iter = drumGlue->drumInstruments.begin(); + while(iter != drumGlue->drumInstruments.end()) { + printf("name = %s instrumentName= %s\n", (*iter)->name.toLatin1().data(), instrumentName.toLatin1().data()); + if ((*iter)->name == instrumentName) { + break; + } + iter++; + } + if (iter == drumGlue->drumInstruments.end()) { + printf("Reached the end without getting a hit\n"); + return NULL; + } + return *iter; +} + +void GlobalInstrumentView::addOutput() + { + DrumInstrument *di = getCurrentOutputInstrument(); + if (!di) + return; + // create new output + DrumOutputInstrument *doi = new DrumOutputInstrument; + di->outputInstruments.append(doi); + + OutputInstrumentView *outputView = new OutputInstrumentView(doi,this); + int res = outputView->exec(); + if (res == QDialog::Rejected) { + // roll back + di->outputInstruments.removeAll(doi); + delete doi; + } + delete outputView; + updateList(); + } + +void GlobalInstrumentView::editOutput() + { + DrumInstrument *di = getCurrentOutputInstrument(); + + int currIdx = outputListWidget->currentRow(); + if (currIdx < 0 || currIdx >= di->outputInstruments.size()) { + printf("out of range!!\n"); + return; + } + + DrumOutputInstrument *doi = di->outputInstruments[currIdx]; + + DrumOutputInstrument doi_backup = *doi; + OutputInstrumentView *outputView = new OutputInstrumentView(doi,this); + int res = outputView->exec(); + if (res == QDialog::Rejected) { + // roll back + *doi = doi_backup; + } + delete outputView; + updateList(); + } + +void GlobalInstrumentView::removeOutput() + { + int ret = QMessageBox::warning(this, tr("Remove output"), + tr("Are you sure you want to remove current output?"), + QMessageBox::No, + QMessageBox::Yes); + if (ret == QMessageBox::Yes) { + DrumInstrument *di = getCurrentOutputInstrument(); + + int currIdx = outputListWidget->currentRow(); + if (currIdx < 0 || currIdx >= di->outputInstruments.size()) { + printf("out of range!!\n"); + return; + } + + DrumOutputInstrument *doi = di->outputInstruments[currIdx]; + di->outputInstruments.removeAll(doi); + delete doi; + } + updateList(); + } + +void GlobalInstrumentView::updateList() +{ + printf("updateList\n"); + outputListWidget->clear(); + + QList::iterator iter = drumGlue->drumInstruments.begin(); + while(iter != drumGlue->drumInstruments.end()) { + printf("name = %s instrumentName= %s\n", (*iter)->name.toLatin1().data(), instrumentName.toLatin1().data()); + if ((*iter)->name == instrumentName) { + printf("updating current list\n"); + foreach (DrumOutputInstrument *doi, (*iter)->outputInstruments) { + QListWidgetItem *outDrumItem = new QListWidgetItem(outputListWidget); + QString str = QString("%1 %2 %3 %4 %5").arg(doi->outKey).arg(doi->lowestVelocity).arg(doi->highestVelocity).arg(doi->prefer).arg(doi->preferFast); + printf("setting item to %s\n",str.toLatin1().data()); + outDrumItem->setText(str); + } + } + iter++; + } +} + +void GlobalInstrumentView::updateInKey() +{ + QList::iterator iter = drumGlue->drumInstruments.begin(); + while(iter != drumGlue->drumInstruments.end()) { + if ((*iter)->name == instrumentName) { + (*iter)->inKey = inKeySpinBox->value(); + } + iter++; + } + +} diff --git a/attic/muse_qt4_evolution/midiplugins/drumglue/globalinstrumentview.h b/attic/muse_qt4_evolution/midiplugins/drumglue/globalinstrumentview.h new file mode 100644 index 00000000..f923ec49 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/drumglue/globalinstrumentview.h @@ -0,0 +1,41 @@ +//========================================================= +// MusE +// Linux Music Editor +// +// (C) Copyright 2008 Robert Jonsson (rj@spamatica.se) +// (C) Copyright 2005- Werner Schweer (ws@seh.de) +// Copyright: See COPYING file that comes with this distribution +//========================================================= + +#ifndef __GLOBALINSTRUMENTVIEW_H__ +#define __GLOBALINSTRUMENTVIEW_H__ + +#include "ui_globalinstrumentview.h" + +#include "drumglue.h" +//--------------------------------------------------------- +// GlobalInstrumentView +//--------------------------------------------------------- +class DrumGlue; + +class GlobalInstrumentView : public QWidget, public Ui::GlobalInstrumentViewBase { + Q_OBJECT + + DrumGlue *drumGlue; + QString instrumentName; + DrumInstrument *getCurrentOutputInstrument(); + + public: + GlobalInstrumentView(DrumGlue*, QWidget* parent, QString name); + private slots: + void addOutput(); + void editOutput(); + void removeOutput(); + void updateInKey(); + + public slots: + void updateList(); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/midiplugins/drumglue/globalinstrumentview.ui b/attic/muse_qt4_evolution/midiplugins/drumglue/globalinstrumentview.ui new file mode 100644 index 00000000..e817906a --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/drumglue/globalinstrumentview.ui @@ -0,0 +1,102 @@ + + GlobalInstrumentViewBase + + + + 0 + 0 + 386 + 256 + + + + Form + + + + -1 + + + + + -1 + + + + + -1 + + + + + Midi input key: + + + + + + + 1 + + + 127 + + + + + + + Add output + + + + + + + Remove output + + + + + + + Edit output + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + Midi output definitions: + + + + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/midiplugins/drumglue/outputinstrumentview.cpp b/attic/muse_qt4_evolution/midiplugins/drumglue/outputinstrumentview.cpp new file mode 100644 index 00000000..2e4c97ce --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/drumglue/outputinstrumentview.cpp @@ -0,0 +1,45 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: filtergui.cpp,v 1.4 2005/11/06 17:49:34 wschweer Exp $ +// +// (C) Copyright 2005 Werner Schweer (ws@seh.de) +//========================================================= + +#include "outputinstrumentview.h" +#include "drumglue.h" +#include +//--------------------------------------------------------- +// OutputInstrumentView +//--------------------------------------------------------- + +OutputInstrumentView::OutputInstrumentView(DrumOutputInstrument* doi, QWidget* parent) + : QDialog(parent) + { + outputInstrument= doi; + setupUi(this); + + midiOutputSpinBox->setValue(outputInstrument->outKey); + highRangeSlider->setValue(outputInstrument->highestVelocity); + lowRangeSlider->setValue(outputInstrument->lowestVelocity); + preferWhenFastCheckBox->setChecked(outputInstrument->preferFast); + highProbabiltyCheckBox->setChecked(outputInstrument->prefer); + + + connect(midiOutputSpinBox,SIGNAL(valueChanged(int)),this, SLOT(update())); + connect(highRangeSlider,SIGNAL(valueChanged(int)),this, SLOT(update())); + connect(lowRangeSlider,SIGNAL(valueChanged(int)),this, SLOT(update())); + connect(preferWhenFastCheckBox,SIGNAL(stateChanged(int)),this, SLOT(update())); + connect(highProbabiltyCheckBox,SIGNAL(stateChanged(int)),this, SLOT(update())); + } + + +void OutputInstrumentView::update() +{ + outputInstrument->outKey = midiOutputSpinBox->value(); + outputInstrument->highestVelocity = highRangeSlider->value(); + outputInstrument->lowestVelocity = lowRangeSlider->value(); + outputInstrument->preferFast = preferWhenFastCheckBox->isChecked(); + outputInstrument->prefer = highProbabiltyCheckBox->isChecked(); + +} diff --git a/attic/muse_qt4_evolution/midiplugins/drumglue/outputinstrumentview.h b/attic/muse_qt4_evolution/midiplugins/drumglue/outputinstrumentview.h new file mode 100644 index 00000000..b2b5dc12 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/drumglue/outputinstrumentview.h @@ -0,0 +1,31 @@ +//========================================================= +// MusE +// Linux Music Editor +// +// (C) Copyright 2008 Robert Jonsson (rj@spamatica.se) +// (C) Copyright 2005- Werner Schweer (ws@seh.de) +// Copyright: See COPYING file that comes with this distribution +//========================================================= + +#ifndef __OUTPUTINSTRUMENTVIEW_H__ +#define __OUTPUTINSTRUMENTVIEW_H__ + +#include "ui_outputinstrumentview.h" + +#include "drumglue.h" +//--------------------------------------------------------- +// OutputInstrumentView +//--------------------------------------------------------- +class DrumGlue; + +class OutputInstrumentView : public QDialog, public Ui::OutputInstrumentViewBase { + Q_OBJECT + DrumOutputInstrument *outputInstrument; + public: + OutputInstrumentView(DrumOutputInstrument*, QWidget* parent); + private slots: + void update(); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/midiplugins/drumglue/outputinstrumentview.ui b/attic/muse_qt4_evolution/midiplugins/drumglue/outputinstrumentview.ui new file mode 100644 index 00000000..250c2010 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/drumglue/outputinstrumentview.ui @@ -0,0 +1,292 @@ + + OutputInstrumentViewBase + + + + 0 + 0 + 449 + 150 + + + + Dialog + + + + + + + + + + Midi output key: + + + + + + + 1 + + + 127 + + + + + + + If this instrument is to be used more often than others check this box. + + + + + + Prefer always + + + + + + + If this instrument is to be used more often when used often, check this checkbox. + + + + + + Prefer when fast + + + + + + + + + Qt::Horizontal + + + + + + + + + + 0 + 0 + + + + [low] + + + + + + + + 0 + 0 + + + + Qt::Vertical + + + + + + + + 0 + 0 + + + + Qt::Vertical + + + + + + + + 0 + 0 + + + + Qt::RightToLeft + + + [high] + + + + + + + + + + + + + + 24 + 0 + + + + QFrame::Box + + + 1 + + + + + + + 1 + + + 127 + + + Qt::Horizontal + + + + + + + + + use in range + + + + + + + + + + 24 + 0 + + + + QFrame::Box + + + 127 + + + + + + + 1 + + + 127 + + + 127 + + + Qt::Horizontal + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok + + + + + + + + + + + buttonBox + accepted() + OutputInstrumentViewBase + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + OutputInstrumentViewBase + reject() + + + 316 + 260 + + + 286 + 274 + + + + + highRangeSlider + valueChanged(int) + highRangeLabel + setNum(int) + + + 215 + 107 + + + 165 + 108 + + + + + lowRangeSlider + valueChanged(int) + lowRangeLabel + setNum(int) + + + 75 + 107 + + + 25 + 108 + + + + + diff --git a/attic/muse_qt4_evolution/midiplugins/dump/CMakeLists.txt b/attic/muse_qt4_evolution/midiplugins/dump/CMakeLists.txt new file mode 100644 index 00000000..c607ef1f --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/dump/CMakeLists.txt @@ -0,0 +1,40 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +add_library ( dump SHARED + dump.cpp + ) + +target_link_libraries( dump + midiplugin awl + ${QT_LIBRARIES} + ) + +# - tell cmake to name target dump.so instead of +# libdump.so +# - use precompiled header files +# +set_target_properties ( dump + PROPERTIES PREFIX "" + COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all-pic.h" + ) + +install_targets ( /${CMAKE_INSTALL_LIBDIR}/${MusE_INSTALL_NAME}/midiplugins/ dump ) + diff --git a/attic/muse_qt4_evolution/midiplugins/dump/dump.cpp b/attic/muse_qt4_evolution/midiplugins/dump/dump.cpp new file mode 100644 index 00000000..e346a642 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/dump/dump.cpp @@ -0,0 +1,48 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: filter.cpp,v 1.10 2005/11/06 17:49:34 wschweer Exp $ +// +// dump- simple midi event dump for testing purposes +// +// (C) Copyright 2006 Werner Schweer (ws@seh.de) +//========================================================= + +#include "dump.h" +#include "midi.h" + +//--------------------------------------------------------- +// process +//--------------------------------------------------------- + +void Dump::process(unsigned, unsigned, MidiEventList* il, MidiEventList* ol) + { + for (iMidiEvent i = il->begin(); i != il->end(); ++i) { + printf("Event %6d ch:%2d type:%2d 0x%02x 0x%02x\n", i->time(), i->channel(), + i->type(), i->dataA(), i->dataB()); + ol->insert(*i); + } + } + +//--------------------------------------------------------- +// inst +//--------------------------------------------------------- + +static Mempi* instantiate(const char* name, const MempiHost* h) + { + return new Dump(name, h); + } + +extern "C" { + static MEMPI descriptor = { + "Dump", + "MusE Simple Midi Event Dump", + "0.1", // version string + MEMPI_FILTER, // plugin type + MEMPI_MAJOR_VERSION, MEMPI_MINOR_VERSION, + instantiate + }; + + const MEMPI* mempi_descriptor() { return &descriptor; } + } + diff --git a/attic/muse_qt4_evolution/midiplugins/dump/dump.h b/attic/muse_qt4_evolution/midiplugins/dump/dump.h new file mode 100644 index 00000000..2194e30f --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/dump/dump.h @@ -0,0 +1,28 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: filter.h,v 1.4 2005/06/12 08:18:37 wschweer Exp $ +// +// dump- simple midi event dump for testing purposes +// +// (C) Copyright 2006 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __DUMP_H__ +#define __DUMP_H__ + +#include "../libmidiplugin/mempi.h" + +//--------------------------------------------------------- +// dump - simple midi event dump +//--------------------------------------------------------- + +class Dump : public Mempi { + virtual void process(unsigned, unsigned, MidiEventList*, MidiEventList*); + + public: + Dump(const char* name, const MempiHost* h) :Mempi(name, h) {} + }; + +#endif + diff --git a/attic/muse_qt4_evolution/midiplugins/filter/CMakeLists.txt b/attic/muse_qt4_evolution/midiplugins/filter/CMakeLists.txt new file mode 100644 index 00000000..7bdb8544 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/filter/CMakeLists.txt @@ -0,0 +1,49 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +QT4_WRAP_CPP ( filter_mocs filtergui.h ctrlcombo.h ) +QT4_WRAP_UI ( filter_uis filtergui.ui ) + +add_library ( filter SHARED + filter.cpp + filtergui.cpp + filtergui.h + ctrlcombo.cpp + ctrlcombo.h + ${filter_mocs} + ${filter_uis} + ) + +target_link_libraries( filter + midiplugin awl + ${QT_LIBRARIES} + ) + +# - tell cmake to name target filter.so instead of +# libfilter.so +# - use precompiled header files +# +set_target_properties ( filter + PROPERTIES PREFIX "" + COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all-pic.h" + ) + +install_targets ( /${CMAKE_INSTALL_LIBDIR}/${MusE_INSTALL_NAME}/midiplugins/ filter ) + diff --git a/attic/muse_qt4_evolution/midiplugins/filter/ctrlcombo.cpp b/attic/muse_qt4_evolution/midiplugins/filter/ctrlcombo.cpp new file mode 100644 index 00000000..b4c436c6 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/filter/ctrlcombo.cpp @@ -0,0 +1,56 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: ctrlcombo.cpp,v 1.2 2005/11/06 17:49:34 wschweer Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include "ctrlcombo.h" + +//--------------------------------------------------------- +// CtrlComboBox +//--------------------------------------------------------- + +CtrlComboBox::CtrlComboBox(QWidget* parent) + : QComboBox(parent) + { + const char* ctxt[] = { + "No Ctrl", "BankSelMSB", "Modulation", "BreathCtrl", + "Control 3", "Foot Ctrl", "Porta Time", "DataEntMSB", + "MainVolume", "Balance", "Control 9", "Pan", + "Expression", "Control 12", "Control 13", "Control 14", + "Control 15", "Gen.Purp.1", "Gen.Purp.2", "Gen.Purp.3", + "Gen.Purp.4", "Control 20", "Control 21", "Control 22", + "Control 23", "Control 24", "Control 25", "Control 26", + "Control 27", "Control 28", "Control 29", "Control 30", + "Control 31", "BankSelLSB", "Modul. LSB", "BrthCt.LSB", + "Control 35", "FootCt.LSB", "Port.T LSB", "DataEntLSB", + "MainVolLSB", "BalanceLSB", "Control 41", "Pan LSB", + "Expr. LSB", "Control 44", "Control 45", "Control 46", + "Control 47", "Gen.P.1LSB", "Gen.P.2LSB", "Gen.P.3LSB", + "Gen.P.4LSB", "Control 52", "Control 53", "Control 54", + "Control 55", "Control 56", "Control 57", "Control 58", + "Control 59", "Control 60", "Control 61", "Control 62", + "Control 63", "Sustain", "Porta Ped", "Sostenuto", + "Soft Pedal", "Control 68", "Hold 2", "Control 70", + "HarmonicCo", "ReleaseTime", "Attack Time", "Brightness", + "Control 75", "Control 76", "Control 77", "Control 78", + "Control 79", "Gen.Purp.5", "Gen.Purp.6", "Gen.Purp.7", + "Gen.Purp.8", "Porta Ctrl", "Control 85", "Control 86", + "Control 87", "Control 88", "Control 89", "Control 90", + "Effect1Dep", "Effect2Dep", "Effect3Dep", "Effect4Dep", + "Phaser Dep", "Data Incr", "Data Decr", "NRPN LSB", + "NRPN MSB", "RPN LSB", "RPN MSB", "Control102", + "Control103", "Control104", "Control105", "Control106", + "Control107", "Control108", "Control109", "Control110", + "Control111", "Control112", "Control113", "Control114", + "Control115", "Control116", "Control117", "Control118", + "Control119", "AllSndOff", "Reset Ctrl", "Local Ctrl", + "AllNoteOff", "OmniModOff", "OmniModeOn", "MonoModeOn", + "PolyModeOn" + }; + for (unsigned int i = 0; i < sizeof(ctxt)/sizeof(*ctxt); ++i) + addItem(QString(ctxt[i])); + } + diff --git a/attic/muse_qt4_evolution/midiplugins/filter/ctrlcombo.h b/attic/muse_qt4_evolution/midiplugins/filter/ctrlcombo.h new file mode 100644 index 00000000..53044b20 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/filter/ctrlcombo.h @@ -0,0 +1,24 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: ctrlcombo.h,v 1.2 2005/11/06 17:49:34 wschweer Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __CTRLGRP_H__ +#define __CTRLGRP_H__ + +//--------------------------------------------------------- +// CtrlComboBox +//--------------------------------------------------------- + +class CtrlComboBox : public QComboBox { + Q_OBJECT + public: + CtrlComboBox(QWidget* parent = 0); + }; + + +#endif + diff --git a/attic/muse_qt4_evolution/midiplugins/filter/filter.cpp b/attic/muse_qt4_evolution/midiplugins/filter/filter.cpp new file mode 100644 index 00000000..ac99449e --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/filter/filter.cpp @@ -0,0 +1,167 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: filter.cpp,v 1.10 2005/11/06 17:49:34 wschweer Exp $ +// +// filter - simple midi filter +// +// (C) Copyright 2005 Werner Schweer (ws@seh.de) +//========================================================= + +#include "filtergui.h" +#include "filter.h" +#include "midi.h" + +//--------------------------------------------------------- +// Filter +//--------------------------------------------------------- + +Filter::Filter(const char* name, const MempiHost* h) + : Mempi(name, h) + { + data.type = 0; // allow any events + for (int i = 0; i < 4; ++i) + data.ctrl[i] = -1; + gui = 0; + } + +//--------------------------------------------------------- +// Filter +//--------------------------------------------------------- + +Filter::~Filter() + { + if (gui) + delete gui; + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +bool Filter::init() + { + gui = new FilterGui(this, 0); + gui->setWindowTitle("MusE: "+QString(name())); + gui->show(); + return false; + } + +//--------------------------------------------------------- +// getGeometry +//--------------------------------------------------------- + +void Filter::getGeometry(int* x, int* y, int* w, int* h) const + { + QPoint pos(gui->pos()); + QSize size(gui->size()); + *x = pos.x(); + *y = pos.y(); + *w = size.width(); + *h = size.height(); + } + +//--------------------------------------------------------- +// setGeometry +//--------------------------------------------------------- + +void Filter::setGeometry(int x, int y, int w, int h) + { + gui->resize(QSize(w, h)); + gui->move(QPoint(x, y)); + } + +//--------------------------------------------------------- +// process +//--------------------------------------------------------- + +void Filter::process(unsigned, unsigned, MidiEventList* il, MidiEventList* ol) + { + for (iMidiEvent i = il->begin(); i != il->end(); ++i) { + if (!filterEvent(*i)) + ol->insert(*i); + } + } + +//--------------------------------------------------------- +// filterEvent +// return true if event filtered +//--------------------------------------------------------- + +bool Filter::filterEvent(const MidiEvent& event) + { + switch(event.type()) { + case ME_NOTEON: + case ME_NOTEOFF: + if (data.type & MIDI_FILTER_NOTEON) + return true; + break; + case ME_POLYAFTER: + if (data.type & MIDI_FILTER_POLYP) + return true; + break; + case ME_CONTROLLER: + if (data.type & MIDI_FILTER_CTRL) + return true; + for (int i = 0; i < 4; ++i) { + if (data.ctrl[i] == event.dataA()) + return true; + } + break; + case ME_PROGRAM: + if (data.type & MIDI_FILTER_PROGRAM) + return true; + break; + case ME_AFTERTOUCH: + if (data.type & MIDI_FILTER_AT) + return true; + break; + case ME_PITCHBEND: + if (data.type & MIDI_FILTER_PITCH) + return true; + break; + case ME_SYSEX: + if (data.type & MIDI_FILTER_SYSEX) + return true; + break; + default: + break; + } + return false; + } + +void Filter::getInitData(int* n, const unsigned char** p) const + { + *n = sizeof(data); + *p = (unsigned char*)&data; + } + +void Filter::setInitData(int n, const unsigned char* p) + { + memcpy((void*)&data, p, n); + if (gui) + gui->init(); + } + +//--------------------------------------------------------- +// inst +//--------------------------------------------------------- + +static Mempi* instantiate(const char* name, const MempiHost* h) + { + return new Filter(name, h); + } + +extern "C" { + static MEMPI descriptor = { + "Filter", + "MusE Simple Midi Filter", + "0.1", // filter version string + MEMPI_FILTER, // plugin type + MEMPI_MAJOR_VERSION, MEMPI_MINOR_VERSION, + instantiate + }; + + const MEMPI* mempi_descriptor() { return &descriptor; } + } + diff --git a/attic/muse_qt4_evolution/midiplugins/filter/filter.h b/attic/muse_qt4_evolution/midiplugins/filter/filter.h new file mode 100644 index 00000000..c8a357b4 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/filter/filter.h @@ -0,0 +1,51 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: filter.h,v 1.4 2005/06/12 08:18:37 wschweer Exp $ +// +// filter - simple midi filter +// +// (C) Copyright 2005 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __FILTER_H__ +#define __FILTER_H__ + +#include "../libmidiplugin/mempi.h" + +//--------------------------------------------------------- +// filter - simple midi filter +//--------------------------------------------------------- + +class Filter : public Mempi { + struct initData { + int type; + int ctrl[4]; + } data; + FilterGui* gui; + + bool filterEvent(const MidiEvent& event); + virtual void process(unsigned, unsigned, MidiEventList*, MidiEventList*); + + public: + Filter(const char* name, const MempiHost*); + ~Filter(); + virtual bool init(); + + int midiType() const { return data.type; } + void setMidiType(int t) { data.type = t; } + int midiCtrl(int i) const { return data.ctrl[i]; } + void setMidiCtrl(int i, int val) { data.ctrl[i] = val; } + + virtual bool hasGui() const { return true; } + virtual bool guiVisible() const { return gui->isVisible(); } + virtual void showGui(bool val) { gui->setShown(val); } + virtual void getGeometry(int* x, int* y, int* w, int* h) const; + virtual void setGeometry(int, int, int, int); + + virtual void getInitData(int*, const unsigned char**) const; + virtual void setInitData(int, const unsigned char*); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/midiplugins/filter/filtergui.cpp b/attic/muse_qt4_evolution/midiplugins/filter/filtergui.cpp new file mode 100644 index 00000000..306ae392 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/filter/filtergui.cpp @@ -0,0 +1,187 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: filtergui.cpp,v 1.4 2005/11/06 17:49:34 wschweer Exp $ +// +// (C) Copyright 2005 Werner Schweer (ws@seh.de) +//========================================================= + +#include "filtergui.h" +#include "filter.h" +#include "ctrlcombo.h" + +//--------------------------------------------------------- +// MidiFilterConfig +//--------------------------------------------------------- + +FilterGui::FilterGui(Filter* f, QWidget* parent) + : QDialog(parent) + { + setupUi(this); + filter = f; + connect(rf1, SIGNAL(toggled(bool)), SLOT(rf1Toggled(bool))); + connect(rf2, SIGNAL(toggled(bool)), SLOT(rf2Toggled(bool))); + connect(rf3, SIGNAL(toggled(bool)), SLOT(rf3Toggled(bool))); + connect(rf4, SIGNAL(toggled(bool)), SLOT(rf4Toggled(bool))); + connect(rf5, SIGNAL(toggled(bool)), SLOT(rf5Toggled(bool))); + connect(rf6, SIGNAL(toggled(bool)), SLOT(rf6Toggled(bool))); + connect(rf7, SIGNAL(toggled(bool)), SLOT(rf7Toggled(bool))); + connect(cb1, SIGNAL(activated(int)), SLOT(cb1Activated(int))); + connect(cb2, SIGNAL(activated(int)), SLOT(cb2Activated(int))); + connect(cb3, SIGNAL(activated(int)), SLOT(cb3Activated(int))); + connect(cb4, SIGNAL(activated(int)), SLOT(cb4Activated(int))); + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +void FilterGui::init() + { + int midiType = filter->midiType(); + rf1->setChecked(midiType & MIDI_FILTER_NOTEON); + rf2->setChecked(midiType & MIDI_FILTER_POLYP); + rf3->setChecked(midiType & MIDI_FILTER_CTRL); + rf4->setChecked(midiType & MIDI_FILTER_PROGRAM); + rf5->setChecked(midiType & MIDI_FILTER_AT); + rf6->setChecked(midiType & MIDI_FILTER_PITCH); + rf7->setChecked(midiType & MIDI_FILTER_SYSEX); + cb1->setCurrentIndex(filter->midiCtrl(0) + 1); + cb2->setCurrentIndex(filter->midiCtrl(1) + 1); + cb3->setCurrentIndex(filter->midiCtrl(2) + 1); + cb4->setCurrentIndex(filter->midiCtrl(3) + 1); + } + +//--------------------------------------------------------- +// cb1Activated +//--------------------------------------------------------- + +void FilterGui::cb1Activated(int idx) + { + filter->setMidiCtrl(0, idx - 1); + } + +//--------------------------------------------------------- +// cb2Activated +//--------------------------------------------------------- + +void FilterGui::cb2Activated(int idx) + { + filter->setMidiCtrl(1, idx - 1); + } + +//--------------------------------------------------------- +// cb3Activated +//--------------------------------------------------------- + +void FilterGui::cb3Activated(int idx) + { + filter->setMidiCtrl(2, idx - 1); + } + +//--------------------------------------------------------- +// cb4Activated +//--------------------------------------------------------- + +void FilterGui::cb4Activated(int idx) + { + filter->setMidiCtrl(3, idx - 1); + } + +//--------------------------------------------------------- +// rf1Toggled +//--------------------------------------------------------- + +void FilterGui::rf1Toggled(bool) + { + int midiType = filter->midiType(); + if (rf1->isChecked()) + midiType |= MIDI_FILTER_NOTEON; + else + midiType &= ~MIDI_FILTER_NOTEON; + filter->setMidiType(midiType); + } + +//--------------------------------------------------------- +// rf2Toggled +//--------------------------------------------------------- + +void FilterGui::rf2Toggled(bool) + { + int midiType = filter->midiType(); + if (rf2->isChecked()) + midiType |= MIDI_FILTER_POLYP; + else + midiType &= ~MIDI_FILTER_POLYP; + filter->setMidiType(midiType); + } + +//--------------------------------------------------------- +// rf3Toggled +//--------------------------------------------------------- + +void FilterGui::rf3Toggled(bool) + { + int midiType = filter->midiType(); + if (rf3->isChecked()) + midiType |= MIDI_FILTER_CTRL; + else + midiType &= ~MIDI_FILTER_CTRL; + filter->setMidiType(midiType); + } + +//--------------------------------------------------------- +// rf4Toggled +//--------------------------------------------------------- + +void FilterGui::rf4Toggled(bool) + { + int midiType = filter->midiType(); + if (rf4->isChecked()) + midiType |= MIDI_FILTER_PROGRAM; + else + midiType &= ~MIDI_FILTER_PROGRAM; + filter->setMidiType(midiType); + } + +//--------------------------------------------------------- +// rf5Toggled +//--------------------------------------------------------- + +void FilterGui::rf5Toggled(bool) + { + int midiType = filter->midiType(); + if (rf5->isChecked()) + midiType |= MIDI_FILTER_AT; + else + midiType &= ~MIDI_FILTER_AT; + filter->setMidiType(midiType); + } + +//--------------------------------------------------------- +// rf6Toggled +//--------------------------------------------------------- + +void FilterGui::rf6Toggled(bool) + { + int midiType = filter->midiType(); + if (rf1->isChecked()) + midiType |= MIDI_FILTER_PITCH; + else + midiType &= ~MIDI_FILTER_PITCH; + filter->setMidiType(midiType); + } + +//--------------------------------------------------------- +// rf7Toggled +//--------------------------------------------------------- + +void FilterGui::rf7Toggled(bool) + { + int midiType = filter->midiType(); + if (rf7->isChecked()) + midiType |= MIDI_FILTER_SYSEX; + else + midiType &= ~MIDI_FILTER_SYSEX; + filter->setMidiType(midiType); + } diff --git a/attic/muse_qt4_evolution/midiplugins/filter/filtergui.h b/attic/muse_qt4_evolution/midiplugins/filter/filtergui.h new file mode 100644 index 00000000..701bfec9 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/filter/filtergui.h @@ -0,0 +1,57 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: filtergui.h,v 1.4 2005/11/06 17:49:34 wschweer Exp $ +// +// (C) Copyright 2005 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __FILTERGUI_H__ +#define __FILTERGUI_H__ + +#include "ui_filtergui.h" + +class Filter; + +enum { + MIDI_FILTER_NOTEON = 1, + MIDI_FILTER_POLYP = 2, + MIDI_FILTER_CTRL = 4, + MIDI_FILTER_PROGRAM = 8, + MIDI_FILTER_AT = 16, + MIDI_FILTER_PITCH = 32, + MIDI_FILTER_SYSEX = 64 + }; + +//--------------------------------------------------------- +// FilterGui +//--------------------------------------------------------- + +class FilterGui : public QDialog, public Ui::FilterBase { + Q_OBJECT + + Filter* filter; + + signals: + void hideWindow(); + + private slots: + void rf1Toggled(bool); + void rf2Toggled(bool); + void rf3Toggled(bool); + void rf4Toggled(bool); + void rf5Toggled(bool); + void rf6Toggled(bool); + void rf7Toggled(bool); + void cb1Activated(int); + void cb2Activated(int); + void cb3Activated(int); + void cb4Activated(int); + + public: + FilterGui(Filter*, QWidget* parent=0); + void init(); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/midiplugins/filter/filtergui.ui b/attic/muse_qt4_evolution/midiplugins/filter/filtergui.ui new file mode 100644 index 00000000..8e1693f2 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/filter/filtergui.ui @@ -0,0 +1,269 @@ + + + + + FilterBase + + + + 0 + 0 + 388 + 213 + + + + + 3 + 5 + 0 + 0 + + + + MusE: Midi Input Filter + + + + 6 + + + 2 + + + + + + 5 + 5 + 0 + 0 + + + + Event Filter + + + + 6 + + + 2 + + + + + + 5 + 0 + 0 + 0 + + + + Note On + + + + + + + + 5 + 0 + 0 + 0 + + + + Poly Pressure + + + + + + + + 5 + 0 + 0 + 0 + + + + Controller + + + + + + + + 1 + 0 + 0 + 0 + + + + Program Change + + + + + + + + 5 + 0 + 0 + 0 + + + + After Touch + + + + + + + + 5 + 0 + 0 + 0 + + + + Pitch Bend + + + + + + + + 5 + 0 + 0 + 0 + + + + Sysex + + + + + + + + + + + 5 + 5 + 0 + 0 + + + + Controller Filter + + + + 6 + + + 2 + + + + + + 5 + 0 + 0 + 0 + + + + + + + + + 5 + 0 + 0 + 0 + + + + + + + + + 5 + 0 + 0 + 0 + + + + + + + + + 5 + 5 + 0 + 0 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + CtrlComboBox + QComboBox +
ctrlcombo.h
+ 0 + +
+
+ + rf1 + rf2 + rf3 + rf4 + rf5 + rf6 + rf7 + + + +
diff --git a/attic/muse_qt4_evolution/midiplugins/libmidiplugin/CMakeLists.txt b/attic/muse_qt4_evolution/midiplugins/libmidiplugin/CMakeLists.txt new file mode 100644 index 00000000..5988205f --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/libmidiplugin/CMakeLists.txt @@ -0,0 +1,26 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +add_library ( midiplugin mempi.cpp ) + +set_target_properties( midiplugin + PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h" + ) + diff --git a/attic/muse_qt4_evolution/midiplugins/libmidiplugin/evdata.h b/attic/muse_qt4_evolution/midiplugins/libmidiplugin/evdata.h new file mode 100644 index 00000000..8247b6e0 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/libmidiplugin/evdata.h @@ -0,0 +1,64 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: evdata.h,v 1.2 2005/05/11 14:18:39 wschweer Exp $ +// +// (C) Copyright 1999-2003 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __EVDATA_H__ +#define __EVDATA_H__ + +//--------------------------------------------------------- +// EvData +// variable len event data (sysex, meta etc.) +//--------------------------------------------------------- + +class EvData { + int* refCount; + + public: + unsigned char* data; + int dataLen; + + EvData() { + data = 0; + dataLen = 0; + refCount = new int(1); + } + EvData(const EvData& ed) { + data = ed.data; + dataLen = ed.dataLen; + refCount = ed.refCount; + (*refCount)++; + } + + EvData& operator=(const EvData& ed) { + if (data == ed.data) + return *this; + if (--(*refCount) == 0) { + delete refCount; + delete[] data; + } + data = ed.data; + dataLen = ed.dataLen; + refCount = ed.refCount; + (*refCount)++; + return *this; + } + + ~EvData() { + if (--(*refCount) == 0) { + delete[] data; + delete refCount; + } + } + void setData(const unsigned char* p, int l) { + data = new unsigned char[l]; + memcpy(data, p, l); + dataLen = l; + } + }; + +#endif + diff --git a/attic/muse_qt4_evolution/midiplugins/libmidiplugin/mempi.cpp b/attic/muse_qt4_evolution/midiplugins/libmidiplugin/mempi.cpp new file mode 100644 index 00000000..91171c3b --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/libmidiplugin/mempi.cpp @@ -0,0 +1,81 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mempi.cpp,v 1.4 2005/05/24 15:27:48 wschweer Exp $ +// (C) Copyright 2005 Werner Schweer (ws@seh.de) +//========================================================= + +#include "mempi.h" + +static const int FIFO_SIZE = 128; + +//--------------------------------------------------------- +// MidiEvent +//--------------------------------------------------------- + +MidiEvent::MidiEvent(unsigned t, int tpe, const unsigned char* data, int len) + { + _time = t; + edata.setData(data, len); + _type = tpe; + } + +//--------------------------------------------------------- +// operator < +//--------------------------------------------------------- + +bool MidiEvent::operator<(const MidiEvent& e) const + { + if (time() != e.time()) + return time() < e.time(); + + // play note off events first to prevent overlapping + // notes + + if (channel() == e.channel()) + return type() == 0x80 + || (type() == 0x90 && dataB() == 0); + + int map[16] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10, 11, 12, 13, 14, 15 }; + return map[channel()] < map[e.channel()]; + } + +//--------------------------------------------------------- +// MempiP +// Mempi private data structure +//--------------------------------------------------------- + +struct MempiP { + int dummy; + }; + +//--------------------------------------------------------- +// Mempi +//--------------------------------------------------------- + +Mempi::Mempi(const char* n, const MempiHost* h) + { + _name = strdup(n); + host = h; + d = new MempiP; + } + +Mempi::~Mempi() + { + delete _name; + delete d; + } + +//--------------------------------------------------------- +// getGeometry +// dummy +//--------------------------------------------------------- + +void Mempi::getGeometry(int* x, int* y, int* w, int* h) const + { + x = 0; + y = 0; + w = 0; + h = 0; + } + diff --git a/attic/muse_qt4_evolution/midiplugins/libmidiplugin/mempi.h b/attic/muse_qt4_evolution/midiplugins/libmidiplugin/mempi.h new file mode 100644 index 00000000..a5f114b6 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/libmidiplugin/mempi.h @@ -0,0 +1,97 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mempi.h,v 1.10 2005/07/16 09:31:50 wschweer Exp $ +// (C) Copyright 2005 Werner Schweer (ws@seh.de) +//========================================================= + +// +// MusE experimental midi plugin interface +// + +#ifndef __MEMPI_H__ +#define __MEMPI_H__ + +#define MEMPI_MAJOR_VERSION 1 +#define MEMPI_MINOR_VERSION 1 + +#include +#include "evdata.h" +#include "memory.h" +#include "midievent.h" + +class MempiP; + +//--------------------------------------------------------- +// MempiHost +// Host Infos +//--------------------------------------------------------- + +struct MempiHost { + virtual int division() const; // midi division + virtual int tempo(unsigned tick) const; + virtual unsigned tick2frame(unsigned tick) const; + virtual unsigned frame2tick(unsigned frame) const; + virtual void bar(int tick, int* bar, int* beat, unsigned* rest) const; + virtual unsigned bar2tick(int bar, int beat, int tick) const; + virtual ~MempiHost() {} + }; + +//--------------------------------------------------------- +// Mempi +// Instance class +// MusE experimental midi plugin interface +// Instance virtual interface class +//--------------------------------------------------------- + +class Mempi { + MempiP* d; + const char* _name; // mempi instance name + + protected: + const MempiHost* host; + + public: + // modul interface + Mempi(const char* name, const MempiHost*); + virtual ~Mempi(); + virtual bool init() { return false; } + const char* name() const { return _name; } + + // process interface + virtual void process(unsigned, unsigned, MidiEventList*, MidiEventList*) = 0; + + // session interface + virtual void getInitData(int*, const unsigned char**) const {} + virtual void setInitData(int, const unsigned char*) {} + + // GUI interface routines + virtual bool hasGui() const { return false; } + virtual bool guiVisible() const { return false; } + virtual void showGui(bool) {} + virtual void getGeometry(int* x, int* y, int* w, int* h) const; + virtual void setGeometry(int, int, int, int) {} + }; + +//--------------------------------------------------------- +// MEMPI +// Class descriptor +//--------------------------------------------------------- + +enum MempiType { MEMPI_FILTER = 0, MEMPI_GENERATOR = 1 }; + +struct MEMPI { + const char* name; + const char* description; + const char* version; + MempiType type; + int majorMempiVersion, minorMempiVersion; + Mempi* (*instantiate)(const char* name, const MempiHost*); + }; + +extern "C" { + const MEMPI* mempi_descriptor(); + } + +#endif + diff --git a/attic/muse_qt4_evolution/midiplugins/libmidiplugin/midievent.cpp b/attic/muse_qt4_evolution/midiplugins/libmidiplugin/midievent.cpp new file mode 100644 index 00000000..972bc8a2 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/libmidiplugin/midievent.cpp @@ -0,0 +1,21 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mpevent.cpp,v 1.1 2005/05/08 17:01:30 wschweer Exp $ +// +// (C) Copyright 2002-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include "midievent.h" + +//--------------------------------------------------------- +// MEvent +//--------------------------------------------------------- + +MEvent::MEvent(unsigned t, int tpe, const unsigned char* data, int len) + { + _time = t; + edata.setData(data, len); + _type = tpe; + } + diff --git a/attic/muse_qt4_evolution/midiplugins/libmidiplugin/midievent.h b/attic/muse_qt4_evolution/midiplugins/libmidiplugin/midievent.h new file mode 100644 index 00000000..a21bec88 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/libmidiplugin/midievent.h @@ -0,0 +1,87 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mpevent.h,v 1.3 2005/06/06 14:24:53 wschweer Exp $ +// +// (C) Copyright 1999-2002 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MIDIEVENT_H__ +#define __MIDIEVENT_H__ + +#include +#include "evdata.h" +#include + +class Event; +class EvData; + +//--------------------------------------------------------- +// MidiEvent +//--------------------------------------------------------- + +class MidiEvent { + unsigned _time; + EvData edata; + unsigned char _channel, _type; + int _a, _b; + + public: + MidiEvent() {} + MidiEvent(unsigned tm, int c, int t, int a, int b) + : _time(tm), _channel(c & 0xf), _type(t), _a(a), _b(b) {} + MidiEvent(unsigned t, int type, const unsigned char* data, int len); + MidiEvent(unsigned t, int tpe, EvData d) : _time(t), edata(d), _type(tpe) {} + MidiEvent(unsigned t, int channel, const Event& e); + + ~MidiEvent() {} + + MidiEvent& operator=(const MidiEvent& ed) { + _time = ed._time; + edata = ed.edata; + _channel = ed._channel; + _type = ed._type; + _a = ed._a; + _b = ed._b; + return *this; + } + + int channel() const { return _channel; } + int type() const { return _type; } + int dataA() const { return _a; } + int dataB() const { return _b; } + unsigned time() const { return _time; } + + void setChannel(int val) { _channel = val; } + void setType(int val) { _type = val; } + void setA(int val) { _a = val; } + void setB(int val) { _b = val; } + void setTime(unsigned val) { _time = val; } + + const EvData& eventData() const { return edata; } + unsigned char* data() const { return edata.data; } + int len() const { return edata.dataLen; } + void setData(const EvData& e) { edata = e; } + void setData(const unsigned char* p, int len) { edata.setData(p, len); } + void dump() const; + bool isNote() const { return _type == 0x90; } + bool isNoteOff() const { return (_type == 0x80)||(_type == 0x90 && _b == 0); } + bool operator<(const MidiEvent&) const; + }; + +//--------------------------------------------------------- +// MidiEventList +//--------------------------------------------------------- + +// typedef std::multiset, +// __gnu_cxx::__mt_alloc > MPEL; + +struct MidiEventList : public std::multiset > + { + }; + +typedef MidiEventList::iterator iMidiEvent; +typedef MidiEventList::const_iterator ciMidiEvent; + +#endif + diff --git a/attic/muse_qt4_evolution/midiplugins/metronom/CMakeLists.txt b/attic/muse_qt4_evolution/midiplugins/metronom/CMakeLists.txt new file mode 100644 index 00000000..5153e6d4 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/metronom/CMakeLists.txt @@ -0,0 +1,46 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +QT4_WRAP_CPP ( metronom_mocs metronomgui.h ) +QT4_WRAP_UI ( metronom_uis metronomgui.ui ) + +add_library ( metronom SHARED + metronom.cpp + metronomgui.cpp + metronomgui.h + ${metronom_mocs} + ${metronom_uis} + ) +target_link_libraries( metronom + midiplugin + ${QT_LIBRARIES} + ) + +# - tell cmake to name target metronom.so instead of +# libmetronom.so +# - use precompiled header files +# +set_target_properties ( metronom + PROPERTIES PREFIX "" + COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all-pic.h" + ) + +install_targets ( /${CMAKE_INSTALL_LIBDIR}/${MusE_INSTALL_NAME}/midiplugins/ metronom ) + diff --git a/attic/muse_qt4_evolution/midiplugins/metronom/metronom.cpp b/attic/muse_qt4_evolution/midiplugins/metronom/metronom.cpp new file mode 100644 index 00000000..ece1e466 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/metronom/metronom.cpp @@ -0,0 +1,167 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: metronom.cpp,v 1.3 2005/11/16 17:55:59 wschweer Exp $ +// +// metronom - midi metronom +// +// (C) Copyright 2005 Werner Schweer (ws@seh.de) +//========================================================= + +#include "metronomgui.h" +#include "metronom.h" +#include "midi.h" +#include "midievent.h" + +//--------------------------------------------------------- +// Metronom +//--------------------------------------------------------- + +Metronom::Metronom(const char* name, const MempiHost* h) + : Mempi(name, h) + { + gui = 0; + } + +//--------------------------------------------------------- +// Metronom +//--------------------------------------------------------- + +Metronom::~Metronom() + { + if (gui) + delete gui; + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +bool Metronom::init() + { + nextTick = 0; + lastTo = 0; + data.measureNote = 63; + data.measureVelo = 127; + data.beatNote = 63; + data.beatVelo = 70; + + gui = new MetronomGui(this, 0); + gui->hide(); + gui->setWindowTitle(QString(name())); + + return false; + } + +//--------------------------------------------------------- +// getGeometry +//--------------------------------------------------------- + +void Metronom::getGeometry(int* x, int* y, int* w, int* h) const + { + QPoint pos(gui->pos()); + QSize size(gui->size()); + *x = pos.x(); + *y = pos.y(); + *w = size.width(); + *h = size.height(); + } + +//--------------------------------------------------------- +// setGeometry +//--------------------------------------------------------- + +void Metronom::setGeometry(int x, int y, int w, int h) + { + gui->resize(QSize(w, h)); + gui->move(QPoint(x, y)); + } + +//--------------------------------------------------------- +// process +//--------------------------------------------------------- + +void Metronom::process(unsigned from, unsigned to, MidiEventList* /*il*/, MidiEventList* ol) + { + if (from == to) { + nextTick = 0; + return; + } + if (lastTo != from) { // seek? +// printf(" seek? %d-%d\n", lastTo, from); + nextTick = 0; + } + lastTo = to; + if (nextTick > to) + return; + while (nextTick < to) { + int bar, beat; + unsigned tick; + if (nextTick < from) { + host->bar(from, &bar, &beat, &tick); + if (tick) + nextTick = host->bar2tick(bar, beat+1, 0); + else + nextTick = from; + } + host->bar(nextTick, &bar, &beat, &tick); + bool isMeasure = beat == 0; + + MidiEvent ev(nextTick, 0, ME_NOTEON, data.beatNote, data.beatVelo); + if (isMeasure) { + ev.setA(data.measureNote); + ev.setB(data.measureVelo); + } + ol->insert(ev); // insert note on + ev.setB(0); + ev.setTime(nextTick + 10); + ev.setB(0); + ol->insert(ev); // insert note off + + nextTick = host->bar2tick(bar, beat+1, 0); + } + } + +//--------------------------------------------------------- +// getInitData +//--------------------------------------------------------- + +void Metronom::getInitData(int* n, const unsigned char** p) const + { + *n = sizeof(data); + *p = (unsigned char*)&data; + } + +//--------------------------------------------------------- +// setInitData +//--------------------------------------------------------- + +void Metronom::setInitData(int n, const unsigned char* p) + { + memcpy((void*)&data, p, n); + if (gui) + gui->init(); + } + +//--------------------------------------------------------- +// inst +//--------------------------------------------------------- + +static Mempi* instantiate(const char* name, const MempiHost* h) + { + return new Metronom(name, h); + } + +extern "C" { + static MEMPI descriptor = { + "Metronom", + "MusE Simple Midi Metronom", + "0.1", // version string + MEMPI_GENERATOR, + MEMPI_MAJOR_VERSION, MEMPI_MINOR_VERSION, + instantiate + }; + + const MEMPI* mempi_descriptor() { return &descriptor; } + } + diff --git a/attic/muse_qt4_evolution/midiplugins/metronom/metronom.h b/attic/muse_qt4_evolution/midiplugins/metronom/metronom.h new file mode 100644 index 00000000..3d570613 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/metronom/metronom.h @@ -0,0 +1,53 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: metronom.h,v 1.3 2005/06/12 09:22:51 wschweer Exp $ +// +// metronom - simple midi metronom +// +// (C) Copyright 2005 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __METRONOM_H__ +#define __METRONOM_H__ + +#include "../libmidiplugin/mempi.h" + +//--------------------------------------------------------- +// metronom - simple midi metronom +//--------------------------------------------------------- + +class Metronom : public Mempi { + + protected: + struct InitData { + char measureNote; + char measureVelo; + char beatNote; + char beatVelo; + } data; + MetronomGui* gui; + friend class MetronomGui; + + unsigned int nextTick; + unsigned int lastTo; + + virtual void process(unsigned, unsigned, MidiEventList*, MidiEventList*); + + public: + Metronom(const char* name, const MempiHost*); + ~Metronom(); + virtual bool init(); + + virtual bool hasGui() const { return true; } + virtual bool guiVisible() const { return gui->isVisible(); } + virtual void showGui(bool val) { gui->setShown(val); } + virtual void getGeometry(int* x, int* y, int* w, int* h) const; + virtual void setGeometry(int, int, int, int); + + virtual void getInitData(int*, const unsigned char**) const; + virtual void setInitData(int, const unsigned char*); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/midiplugins/metronom/metronomgui.cpp b/attic/muse_qt4_evolution/midiplugins/metronom/metronomgui.cpp new file mode 100644 index 00000000..e6705f7c --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/metronom/metronomgui.cpp @@ -0,0 +1,75 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: metronomgui.cpp,v 1.2 2005/10/05 17:02:03 lunar_shuttle Exp $ +// +// (C) Copyright 2005 Werner Schweer (ws@seh.de) +//========================================================= + +#include "metronomgui.h" +#include "metronom.h" + +//--------------------------------------------------------- +// MidiMetronomConfig +//--------------------------------------------------------- + +MetronomGui::MetronomGui(Metronom* f, QWidget* parent) + : QDialog(parent) + { + setupUi(this); + metronom = f; + init(); + connect(beatNote, SIGNAL(valueChanged(int)), SLOT(beatNoteChanged(int))); + connect(measureVelocity, SIGNAL(valueChanged(int)), SLOT(measureVelocityChanged(int))); + connect(measureNote, SIGNAL(valueChanged(int)), SLOT(measureNoteChanged(int))); + connect(beatVelocity, SIGNAL(valueChanged(int)), SLOT(beatVelocityChanged(int))); + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +void MetronomGui::init() + { + beatNote->setValue(metronom->data.beatNote); + measureNote->setValue(metronom->data.measureNote); + beatVelocity->setValue(metronom->data.beatVelo); + measureVelocity->setValue(metronom->data.measureVelo); + } + +//--------------------------------------------------------- +// beatNoteChanged +//--------------------------------------------------------- + +void MetronomGui::beatNoteChanged(int val) + { + metronom->data.beatNote = val; + } + +//--------------------------------------------------------- +// measureVelocityChanged +//--------------------------------------------------------- + +void MetronomGui::measureVelocityChanged(int val) + { + metronom->data.measureVelo = val; + } + +//--------------------------------------------------------- +// measureNoteChanged +//--------------------------------------------------------- + +void MetronomGui::measureNoteChanged(int val) + { + metronom->data.measureNote = val; + } + +//--------------------------------------------------------- +// beatVelocityChanged +//--------------------------------------------------------- + +void MetronomGui::beatVelocityChanged(int val) + { + metronom->data.beatVelo = val; + } + diff --git a/attic/muse_qt4_evolution/midiplugins/metronom/metronomgui.h b/attic/muse_qt4_evolution/midiplugins/metronom/metronomgui.h new file mode 100644 index 00000000..cceea61d --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/metronom/metronomgui.h @@ -0,0 +1,36 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: metronomgui.h,v 1.3 2005/10/05 17:02:03 lunar_shuttle Exp $ +// +// (C) Copyright 2005 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __METRONOMGUI_H__ +#define __METRONOMGUI_H__ + +#include "ui_metronomgui.h" + +class Metronom; + +//--------------------------------------------------------- +// MetronomGui +//--------------------------------------------------------- + +class MetronomGui : public QDialog, public Ui::MetronomBase { + Q_OBJECT + Metronom* metronom; + + private slots: + void beatNoteChanged(int); + void measureVelocityChanged(int); + void measureNoteChanged(int); + void beatVelocityChanged(int); + + public: + MetronomGui(Metronom*, QWidget* parent=0); + void init(); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/midiplugins/metronom/metronomgui.ui b/attic/muse_qt4_evolution/midiplugins/metronom/metronomgui.ui new file mode 100644 index 00000000..188735d4 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/metronom/metronomgui.ui @@ -0,0 +1,150 @@ + + + + + MetronomBase + + + + 0 + 0 + 429 + 164 + + + + + 3 + 5 + 0 + 0 + + + + MusE: Midi Metronome + + + + 9 + + + 6 + + + + + 0 + + + 6 + + + + + + 0 + 0 + 0 + 0 + + + + + ZappedChancellor + 48 + 75 + false + true + false + false + + + + Metronome + + + Metronome + + + M + + + Qt::AlignCenter + + + + + + + 0 + + + 6 + + + + + Measure Note + + + + + + + Measure Velocity + + + + + + + Beat Velocity + + + + + + + Beat Note + + + + + + + 127 + + + + + + + 127 + + + + + + + 127 + + + + + + + 127 + + + + + + + + + + + qPixmapFromMimeSource + + + diff --git a/attic/muse_qt4_evolution/midiplugins/splitlayer/CMakeLists.txt b/attic/muse_qt4_evolution/midiplugins/splitlayer/CMakeLists.txt new file mode 100644 index 00000000..b6803d8b --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/splitlayer/CMakeLists.txt @@ -0,0 +1,45 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +QT4_WRAP_CPP ( splitlayer_mocs splitlayergui.h ) +## QT4_WRAP_UI ( splitlayer_uis splitlayergui.ui ) + +add_library ( splitlayer SHARED + splitlayer.cpp + splitlayergui.cpp + splitlayergui.h + ${splitlayer_mocs} + ) +target_link_libraries( splitlayer + midiplugin + ${QT_LIBRARIES} + ) + +# - tell cmake to name target splitlayer.so instead of +# libsplitlayer.so +# - use precompiled header files +# +set_target_properties ( splitlayer + PROPERTIES PREFIX "" + COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all-pic.h" + ) + +install_targets ( /${CMAKE_INSTALL_LIBDIR}/${MusE_INSTALL_NAME}/midiplugins/ splitlayer ) + diff --git a/attic/muse_qt4_evolution/midiplugins/splitlayer/splitlayer.cpp b/attic/muse_qt4_evolution/midiplugins/splitlayer/splitlayer.cpp new file mode 100644 index 00000000..7ea4ba3e --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/splitlayer/splitlayer.cpp @@ -0,0 +1,209 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2006 by Werner Schweer +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "splitlayergui.h" +#include "splitlayer.h" +#include "midi.h" +#include "midievent.h" + +//--------------------------------------------------------- +// SplitLayer +//--------------------------------------------------------- + +SplitLayer::SplitLayer(const char* name, const MempiHost* h) + : Mempi(name, h) + { + gui = 0; + } + +//--------------------------------------------------------- +// SplitLayer +//--------------------------------------------------------- + +SplitLayer::~SplitLayer() + { + if (gui) + delete gui; + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +bool SplitLayer::init() + { + data.startVelo[0] = 0; + data.endVelo[0] = 128; + data.startPitch[0] = 0; + data.endPitch[0] = 128; + data.pitchOffset[0] = 0; + data.veloOffset[0] = 0; + for (int i = 1; i < MIDI_CHANNELS; ++i) { + data.startVelo[i] = 0; + data.endVelo[i] = 0; + data.startPitch[i] = 0; + data.endPitch[i] = 0; + data.pitchOffset[i] = 0; + data.veloOffset[i] = 0; + } + memset(notes, 0, 128 * sizeof(int)); + learnMode = false; + gui = new SplitLayerGui(this, 0); + gui->hide(); + gui->setWindowTitle(QString(name())); + gui->init(); + return false; + } + +//--------------------------------------------------------- +// getGeometry +//--------------------------------------------------------- + +void SplitLayer::getGeometry(int* x, int* y, int* w, int* h) const + { + QPoint pos(gui->pos()); + QSize size(gui->size()); + *x = pos.x(); + *y = pos.y(); + *w = size.width(); + *h = size.height(); + } + +//--------------------------------------------------------- +// setGeometry +//--------------------------------------------------------- + +void SplitLayer::setGeometry(int x, int y, int w, int h) + { + gui->resize(QSize(w, h)); + gui->move(QPoint(x, y)); + } + +//--------------------------------------------------------- +// process +//--------------------------------------------------------- + +void SplitLayer::process(unsigned, unsigned, MidiEventList* il, MidiEventList* ol) + { + for (iMidiEvent i = il->begin(); i != il->end(); ++i) { + if (i->type() != ME_NOTEON && i->type() != ME_NOTEOFF) { + ol->insert(*i); + continue; + } + int pitch = i->dataA(); + int velo = i->dataB(); + if (learnMode) { + if (learnStartPitch) + data.startPitch[learnChannel] = pitch; + else + data.endPitch[learnChannel] = pitch; + learnMode = false; + gui->sendResetLearnMode(); + return; + } + if (i->type() == ME_NOTEON && velo) { + for (int ch = 0; ch < MIDI_CHANNELS; ++ch) { + MidiEvent event(*i); + if (pitch >= data.startPitch[ch] + && pitch <= data.endPitch[ch] + && velo >= data.startVelo[ch] + && velo <= data.endVelo[ch]) { + notes[pitch] |= (1 << ch); + event.setChannel(ch); + int p = pitch; + int v = velo; + p += data.pitchOffset[ch]; + if (p > 127) + p = 127; + else if (p < 0) + p = 0; + v += data.veloOffset[ch]; + if (v > 127) + v = 127; + else if (v < 0) + v = 0; + event.setA(p); + event.setB(v); + ol->insert(event); + } + } + } + else { + for (int ch = 0; ch < MIDI_CHANNELS; ++ch) { + if (notes[pitch] & (1 << ch)) { + MidiEvent event(*i); + event.setChannel(ch); + int p = pitch + data.pitchOffset[ch]; + if (p < 0) + p = 0; + else if (p > 127) + p = 127; + event.setA(p); + ol->insert(event); + } + } + notes[pitch] = 0; + } + } + } + +//--------------------------------------------------------- +// getInitData +//--------------------------------------------------------- + +void SplitLayer::getInitData(int* n, const unsigned char** p) const + { + *n = sizeof(data); + *p = (unsigned char*)&data; + } + +//--------------------------------------------------------- +// setInitData +//--------------------------------------------------------- + +void SplitLayer::setInitData(int n, const unsigned char* p) + { + memcpy((void*)&data, p, n); + if (gui) + gui->init(); + } + +//--------------------------------------------------------- +// inst +//--------------------------------------------------------- + +static Mempi* instantiate(const char* name, const MempiHost* h) + { + return new SplitLayer(name, h); + } + +extern "C" { + static MEMPI descriptor = { + "SplitLayer", + "MusE Midi Splits and Layers", + "0.1", // version string + MEMPI_FILTER, + MEMPI_MAJOR_VERSION, MEMPI_MINOR_VERSION, + instantiate + }; + + const MEMPI* mempi_descriptor() { return &descriptor; } + } + diff --git a/attic/muse_qt4_evolution/midiplugins/splitlayer/splitlayer.h b/attic/muse_qt4_evolution/midiplugins/splitlayer/splitlayer.h new file mode 100644 index 00000000..7c213c01 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/splitlayer/splitlayer.h @@ -0,0 +1,69 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2006 by Werner Schweer +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __METRONOM_H__ +#define __METRONOM_H__ + +#include "../libmidiplugin/mempi.h" + +static const int MIDI_CHANNELS = 16; + +//--------------------------------------------------------- +// SplitLayer - splits and layers for midi input +//--------------------------------------------------------- + +class SplitLayer : public Mempi { + + protected: + struct InitData { + int startVelo[MIDI_CHANNELS]; + int endVelo[MIDI_CHANNELS]; + int startPitch[MIDI_CHANNELS]; + int endPitch[MIDI_CHANNELS]; + int pitchOffset[MIDI_CHANNELS]; + int veloOffset[MIDI_CHANNELS]; + } data; + int notes[128]; // bitmapped note-on/channel values + bool learnMode; + int learnChannel; + bool learnStartPitch; + + SplitLayerGui* gui; + friend class SplitLayerGui; + + virtual void process(unsigned, unsigned, MidiEventList*, MidiEventList*); + + public: + SplitLayer(const char* name, const MempiHost*); + ~SplitLayer(); + virtual bool init(); + + virtual bool hasGui() const { return true; } + virtual bool guiVisible() const { return gui->isVisible(); } + virtual void showGui(bool val) { gui->setShown(val); } + virtual void getGeometry(int* x, int* y, int* w, int* h) const; + virtual void setGeometry(int, int, int, int); + + virtual void getInitData(int*, const unsigned char**) const; + virtual void setInitData(int, const unsigned char*); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/midiplugins/splitlayer/splitlayergui.cpp b/attic/muse_qt4_evolution/midiplugins/splitlayer/splitlayergui.cpp new file mode 100644 index 00000000..b5d2bdb4 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/splitlayer/splitlayergui.cpp @@ -0,0 +1,263 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2006 by Werner Schweer +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "splitlayergui.h" +#include "splitlayer.h" +#include "gui.h" + +//--------------------------------------------------------- +// SplitLayerGui +//--------------------------------------------------------- + +SplitLayerGui::SplitLayerGui(SplitLayer* f, QWidget* parent) + : QWidget(parent) + { + sl = f; + QGridLayout* grid = new QGridLayout; + grid->setSpacing(1); + setLayout(grid); + QSignalMapper* m1 = new QSignalMapper(this); + QSignalMapper* m2 = new QSignalMapper(this); + QSignalMapper* m3 = new QSignalMapper(this); + QSignalMapper* m4 = new QSignalMapper(this); + QSignalMapper* m5 = new QSignalMapper(this); + QSignalMapper* m6 = new QSignalMapper(this); + connect(m1, SIGNAL(mapped(int)), SLOT(startPitchChanged(int))); + connect(m2, SIGNAL(mapped(int)), SLOT(endPitchChanged(int))); + connect(m3, SIGNAL(mapped(int)), SLOT(pitchOffsetChanged(int))); + connect(m4, SIGNAL(mapped(int)), SLOT(startVeloChanged(int))); + connect(m5, SIGNAL(mapped(int)), SLOT(endVeloChanged(int))); + connect(m6, SIGNAL(mapped(int)), SLOT(veloOffsetChanged(int))); + for (int i = 0; i < MIDI_CHANNELS; ++i) { + QLabel* l = new QLabel(QString("Ch %1").arg(i+1)); + grid->addWidget(l, i, 0); + + p1[i] = new Awl::PitchEdit(0); + p1[i]->setToolTip(tr("start pitch for split")); + connect(p1[i], SIGNAL(valueChanged(int)), m1, SLOT(map())); + m1->setMapping(p1[i], i); + + a1[i] = new QAction(this); + a1[i]->setToolTip(tr("enable learn mode for start pitch")); + a1[i]->setCheckable(true); + QIcon icon; + icon.addFile(":/xpm/recordOn.svg", ICON_SIZE, QIcon::Normal, QIcon::On); + icon.addFile(":/xpm/recordOff.svg", ICON_SIZE, QIcon::Normal, QIcon::Off); + a1[i]->setIcon(icon); + a1[i]->setData(i); + QToolButton* rb1 = new QToolButton; + rb1->setDefaultAction(a1[i]); + connect(rb1, SIGNAL(triggered(QAction*)), SLOT(learnStartPitch(QAction*))); + + p2[i] = new Awl::PitchEdit(0); + p2[i]->setToolTip(tr("end pitch for split")); + connect(p2[i], SIGNAL(valueChanged(int)), m2, SLOT(map())); + m2->setMapping(p2[i], i); + + a2[i] = new QAction(this); + a2[i]->setToolTip(tr("enable learn mode for end pitch")); + a2[i]->setCheckable(true); + a2[i]->setIcon(icon); + a2[i]->setData(i); + QToolButton* rb2 = new QToolButton; + rb2->setDefaultAction(a2[i]); + connect(rb2, SIGNAL(triggered(QAction*)), SLOT(learnEndPitch(QAction*))); + + p3[i] = new Awl::PitchEdit(0); + p3[i]->setToolTip(tr("pitch offset for split")); + p3[i]->setDeltaMode(true); + connect(p3[i], SIGNAL(valueChanged(int)), m3, SLOT(map())); + m3->setMapping(p3[i], i); + + p4[i] = new QSpinBox; + p4[i]->setRange(0, 127); + p4[i]->setToolTip(tr("start velocity for split")); + connect(p4[i], SIGNAL(valueChanged(int)), m4, SLOT(map())); + m4->setMapping(p4[i], i); + + p5[i] = new QSpinBox; + p5[i]->setRange(0, 127); + p5[i]->setToolTip(tr("end velocity for split")); + connect(p5[i], SIGNAL(valueChanged(int)), m5, SLOT(map())); + m5->setMapping(p5[i], i); + + p6[i] = new QSpinBox; + p6[i]->setRange(-127, 127); + p6[i]->setToolTip(tr("velocity offset for split")); + connect(p6[i], SIGNAL(valueChanged(int)), m6, SLOT(map())); + m6->setMapping(p6[i], i); + + grid->addWidget(p1[i], i, 1); + grid->addWidget(rb1, i, 2); + grid->addWidget(p2[i], i, 3); + grid->addWidget(rb2, i, 4); + grid->addWidget(p3[i], i, 5); + grid->addWidget(p4[i], i, 7); + grid->addWidget(p5[i], i, 8); + grid->addWidget(p6[i], i, 9); + } + QFrame* fr = new QFrame; + fr->setFrameStyle(QFrame::VLine | QFrame::Raised); + fr->setLineWidth(4); + grid->addWidget(fr, 0, 6, MIDI_CHANNELS, 1); + + int filedes[2]; // 0 - reading 1 - writing + if (pipe(filedes) == -1) { + perror("SplitLayerGui:creating pipe"); + exit(-1); + } + fd2 = filedes[0]; + fd1 = filedes[1]; + + QSocketNotifier* socket = new QSocketNotifier(fd2, + QSocketNotifier::Read, this); + connect(socket, SIGNAL(activated(int)), SLOT(resetLearnMode(int))); + init(); + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +void SplitLayerGui::init() + { + for (int i = 0; i < MIDI_CHANNELS; ++i) { + p1[i]->setValue(sl->data.startPitch[i]); + p2[i]->setValue(sl->data.endPitch[i]); + p3[i]->setValue(sl->data.pitchOffset[i]); + p4[i]->setValue(sl->data.startVelo[i]); + p5[i]->setValue(sl->data.endVelo[i]); + p6[i]->setValue(sl->data.veloOffset[i]); + } + } + +//--------------------------------------------------------- +// learnStartPitch +//--------------------------------------------------------- + +void SplitLayerGui::learnStartPitch(QAction* a) + { + sl->learnChannel = a->data().toInt(); + sl->learnStartPitch = true; + sl->learnMode = true; + for (int i = 0; i < MIDI_CHANNELS; ++i) { + if (a != a1[i]) + a1[i]->setChecked(false); + if (a != a2[i]) + a2[i]->setChecked(false); + } + } + +//--------------------------------------------------------- +// learnEndPitch +//--------------------------------------------------------- + +void SplitLayerGui::learnEndPitch(QAction* a) + { + sl->learnChannel = a->data().toInt(); + sl->learnStartPitch = false; + sl->learnMode = true; + for (int i = 0; i < MIDI_CHANNELS; ++i) { + if (a != a1[i]) + a1[i]->setChecked(false); + if (a != a2[i]) + a2[i]->setChecked(false); + } + } + +//--------------------------------------------------------- +// startPitchChanged +//--------------------------------------------------------- + +void SplitLayerGui::startPitchChanged(int n) + { + sl->data.startPitch[n] = p1[n]->value(); + } + +//--------------------------------------------------------- +// endPitchChanged +//--------------------------------------------------------- + +void SplitLayerGui::endPitchChanged(int n) + { + sl->data.endPitch[n] = p2[n]->value(); + } + +//--------------------------------------------------------- +// pitchOffsetChanged +//--------------------------------------------------------- + +void SplitLayerGui::pitchOffsetChanged(int n) + { + sl->data.pitchOffset[n] = p3[n]->value(); + } + +//--------------------------------------------------------- +// startVeloChanged +//--------------------------------------------------------- + +void SplitLayerGui::startVeloChanged(int n) + { + sl->data.startVelo[n] = p4[n]->value(); + } + +//--------------------------------------------------------- +// endVeloChanged +//--------------------------------------------------------- + +void SplitLayerGui::endVeloChanged(int n) + { + sl->data.endVelo[n] = p5[n]->value(); + } + +//--------------------------------------------------------- +// veloOffsetChanged +//--------------------------------------------------------- + +void SplitLayerGui::veloOffsetChanged(int n) + { + sl->data.veloOffset[n] = p6[n]->value(); + } + +//--------------------------------------------------------- +// resetLearnMode +//--------------------------------------------------------- + +void SplitLayerGui::resetLearnMode(int fd) + { + char buffer[16]; + read(fd, buffer, 16); + + for (int i = 0; i < MIDI_CHANNELS; ++i) { + a1[i]->setChecked(false); + a2[i]->setChecked(false); + } + init(); + } + +//--------------------------------------------------------- +// sendResetLearnMode +//--------------------------------------------------------- + +void SplitLayerGui::sendResetLearnMode() + { + write(fd1, "X", 1); + } + diff --git a/attic/muse_qt4_evolution/midiplugins/splitlayer/splitlayergui.h b/attic/muse_qt4_evolution/midiplugins/splitlayer/splitlayergui.h new file mode 100644 index 00000000..4f2006ca --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/splitlayer/splitlayergui.h @@ -0,0 +1,65 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2006 by Werner Schweer +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __SPLITLAYERGUI_H__ +#define __SPLITLAYERGUI_H__ + +#include "awl/pitchedit.h" + +class SplitLayer; + +//--------------------------------------------------------- +// SplitLayerGui +//--------------------------------------------------------- + +class SplitLayerGui : public QWidget { + Q_OBJECT + SplitLayer* sl; + + Awl::PitchEdit* p1[16]; + Awl::PitchEdit* p2[16]; + Awl::PitchEdit* p3[16]; + QSpinBox* p4[16]; + QSpinBox* p5[16]; + QSpinBox* p6[16]; + + QAction* a1[16]; + QAction* a2[16]; + int fd1, fd2; + + private slots: + void learnStartPitch(QAction*); + void learnEndPitch(QAction*); + void startPitchChanged(int); + void endPitchChanged(int); + void pitchOffsetChanged(int); + void resetLearnMode(int); + void startVeloChanged(int); + void endVeloChanged(int); + void veloOffsetChanged(int); + + public: + SplitLayerGui(SplitLayer*, QWidget* parent=0); + void init(); + void sendResetLearnMode(); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/midiplugins/transform/CMakeLists.txt b/attic/muse_qt4_evolution/midiplugins/transform/CMakeLists.txt new file mode 100644 index 00000000..1ac2652c --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/transform/CMakeLists.txt @@ -0,0 +1,45 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +QT4_WRAP_CPP ( transform_mocs transform.h ) +QT4_WRAP_UI ( transform_uis transform.ui ) + +add_library ( transform SHARED + transform.cpp + ${transform_mocs} + ${transform_uis} + ) + +target_link_libraries( transform + midiplugin + ${QT_LIBRARIES} + ) + +# - tell cmake to name target transform.so instead of +# libtransform.so +# - use precompiled header files +# +set_target_properties ( transform + PROPERTIES PREFIX "" + COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all-pic.h" + ) + +install_targets ( /${CMAKE_INSTALL_LIBDIR}/${MusE_INSTALL_NAME}/midiplugins/ transform ) + diff --git a/attic/muse_qt4_evolution/midiplugins/transform/transform.cpp b/attic/muse_qt4_evolution/midiplugins/transform/transform.cpp new file mode 100644 index 00000000..1376d2fc --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/transform/transform.cpp @@ -0,0 +1,904 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: transform.cpp,v 1.8 2005/11/17 18:19:30 wschweer Exp $ +// +// (C) Copyright 2001-2005 Werner Schweer (ws@seh.de) +//========================================================= + +#include "midievent.h" +#include "transform.h" + +static int eventTypeTable[] = { + 1, 6, 4, 7, 8, 10, 11 + }; +static int procVal2Map[] = { 0, 1, 2, 3, 4, 5, 6, 7, 10, 11 }; + +struct TDict { + TransformFunction id; + const QString text; + TDict(TransformFunction f, const QString& s) : id(f), text(s) {} + }; + +static const TDict oplist[] = { + TDict(Trans, QString("Transform")), + TDict(Delete, QString("Filter")) + }; + +static const char* vall[] = { + "c","c#","d","d#","e","f","f#","g","g#","a","a#","h" + }; +static const char* valu[] = { + "C","C#","D","D#","E","F","F#","G","G#","A","A#","H" + }; + +//--------------------------------------------------------- +// pitch2string +//--------------------------------------------------------- + +static QString pitch2string(int v) + { + if (v < 0 || v > 127) + return QString("----"); + int octave = (v / 12) - 2; + QString o; + o.sprintf("%d", octave); + int i = v % 12; + QString s(octave < 0 ? valu[i] : vall[i]); + return s + o; + } +//--------------------------------------------------------- +// Transform +//--------------------------------------------------------- + +Transform::Transform(const char* name, const MempiHost* h) + : Mempi(name, h) + { + } + +bool Transform::init() + { + gui = new TransformDialog(this, 0); + gui->setWindowTitle(QString(name())); + gui->show(); + + data.selEventOp = All; + data.selType = 0x90; + data.selVal1 = Ignore; + data.selVal1a = 0; + data.selVal1b = 0; + data.selVal2 = Ignore; + data.selVal2a = 0; + data.selVal2b = 0; + data.procEvent = Keep; + data.eventType = 0x90; + data.procVal1 = Keep; + data.procVal1a = 0; + data.procVal1b = 0; + data.procVal2 = Keep; + data.procVal2a = 0; + data.procVal2b = 0; + data.funcOp = Trans; + data.quantVal = host->division(); + data.selChannel = Ignore; + data.selChannela = 0; + data.selChannelb = 0; + data.procChannel = Keep; + data.procChannela = 0; + data.procChannelb = 0; + return false; + } + +//--------------------------------------------------------- +// filterValOp +//--------------------------------------------------------- + +static bool filterValOp(ValOp op, int val, int val1, int val2) + { + switch (op) { + case Ignore: + break; + case Equal: + if (val != val1) + return true; + break; + case Unequal: + if (val == val1) + return true; + break; + case Higher: + if (val <= val1) + return true; + break; + case Lower: + if (val >= val1) + return true; + break; + case Inside: + if ((val < val1) || (val >= val2)) + return true; + break; + case Outside: + if ((val >= val1) && (val < val2)) + return true; + break; + } + return false; + } + +//--------------------------------------------------------- +// apply +// apply Select filter +// return 0 - not applied +// 1 - drop event +// 2 - event changed +//--------------------------------------------------------- + +void Transform::process(unsigned, unsigned, MidiEventList* il, MidiEventList* ol) + { + for (iMidiEvent i = il->begin(); i != il->end(); ++i) { + MidiEvent event(*i); + if (filterEvent(event) == 1) + continue; + ol->insert(event); + } + } + +//--------------------------------------------------------- +// filterEvent +//--------------------------------------------------------- + +int Transform::filterEvent(MidiEvent& event) + { + switch (data.selEventOp) { + case Equal: + switch(event.type()) { + case 0x90: + case 0x80: + if (data.selType != 0x90) + return 0; + break; + default: + if (event.type() != data.selType) + return 0; + break; + } + break; + case Unequal: + switch(event.type()) { + case 0x90: + case 0x80: + if (data.selType == 0x90) + return 0; + break; + default: + if (event.type() == data.selType) + return 0; + break; + } + break; + default: + break; + } + if (filterValOp(data.selVal1, event.dataA(), data.selVal1a, data.selVal1b)) + return 0; + if (filterValOp(data.selVal2, event.dataB(), data.selVal2a, data.selVal2b)) + return 0; + if (filterValOp(data.selChannel, event.channel(), data.selChannela, data.selChannelb)) + return 0; + + if (data.funcOp == Delete) + return 1; // discard event + + // transform event + if (data.procEvent != Keep) + event.setType(data.eventType); + + //--------------------------------------------------- + // transform value A + //--------------------------------------------------- + + int val = event.dataA(); + switch (data.procVal1) { + case Keep: + break; + case Plus: + val += data.procVal1a; + break; + case Minus: + val -= data.procVal1a; + break; + case Multiply: + val = int(val * (data.procVal1a/100.0) + .5); + break; + case Divide: + val = int(val / (data.procVal1a/100.0) + .5); + break; + case Fix: + val = data.procVal1a; + break; + case Value: + val = data.procVal2a; + break; + case Invert: + val = 127 - val; + break; + case ScaleMap: + printf("scale map not implemented\n"); + break; + case Flip: + val = data.procVal1a - val; + break; + case Dynamic: // "crescendo" + printf("transform not implemented\n"); + break; + case Random: + { + int range = data.procVal1b - data.procVal1a; + if (range > 0) + val = (rand() % range) + data.procVal1a; + else if (range < 0) + val = (rand() % -range) + data.procVal1b; + else + val = data.procVal1a; + } + break; + } + if (val < 0) + val = 0; + if (val > 127) + val = 127; + event.setA(val); + + //--------------------------------------------------- + // transform value B + //--------------------------------------------------- + + val = event.dataB(); + switch (data.procVal2) { + case Plus: + val += data.procVal2a; + break; + case Minus: + val -= data.procVal2a; + break; + case Multiply: + val = int(val * (data.procVal2a/100.0) + .5); + break; + case Divide: + val = int(val / (data.procVal2a/100.0) + .5); + break; + case Fix: + val = data.procVal2a; + break; + case Value: + val = data.procVal1a; + break; + case Invert: + val = 127 - val; + break; + case Dynamic: + printf("transform not implemented\n"); + break; + case Random: + { + int range = data.procVal2b - data.procVal2a; + if (range > 0) + val = (rand() % range) + data.procVal2a; + else if (range < 0) + val = (rand() % -range) + data.procVal2b; + else + val = data.procVal2a; + } + break; + case ScaleMap: + case Keep: + case Flip: + break; + } + if (val < 0) + val = 0; + if (val > 127) + val = 127; + event.setB(val); + + //--------------------------------------------------- + // transform channel + //--------------------------------------------------- + + val = event.channel(); + switch (data.procChannel) { + case Plus: + val += data.procChannela; + break; + case Minus: + val -= data.procChannela; + break; + case Multiply: + val = int(val * (data.procChannela/100.0) + .5); + break; + case Divide: + val = int(val / (data.procChannela/100.0) + .5); + break; + case Fix: + val = data.procChannela; + break; + case Value: + val = data.procChannela; + break; + case Invert: + val = 16 - val; + break; + case Dynamic: + printf("transform not implemented\n"); + break; + case Random: + { + int range = data.procChannelb - data.procChannela; + if (range > 0) + val = (rand() % range) + data.procChannela; + else if (range < 0) + val = (rand() % -range) + data.procChannelb; + else + val = data.procChannela; + } + break; + case ScaleMap: + case Keep: + case Flip: + break; + } + if (val < 0) + val = 0; + if (val > 15) + val = 15; + event.setChannel(val); + return 2; + } + +//--------------------------------------------------------- +// getGeometry +//--------------------------------------------------------- + +void Transform::getGeometry(int* x, int* y, int* w, int* h) const + { + QPoint pos(gui->pos()); + QSize size(gui->size()); + *x = pos.x(); + *y = pos.y(); + *w = size.width(); + *h = size.height(); + } + +//--------------------------------------------------------- +// setGeometry +//--------------------------------------------------------- + +void Transform::setGeometry(int x, int y, int w, int h) + { + gui->resize(QSize(w, h)); + gui->move(QPoint(x, y)); + } + +//--------------------------------------------------------- +// TransformDialog +// Widgets: +// selEventOp selType +// selVal1Op selVal1a selVal1b +// selVal2Op selVal2a selVal2b +// +// procEventOp procType +// procVal1Op procVal1a procVal1b +// procVal2Op procVal2a procVal2b +// funcOp funcQuantVal +// buttonNew buttonDelete +// +// selChannelOp selChannelVala selChannelValb +// procChannelOp procChannelVala procChannelValb +//--------------------------------------------------------- + +TransformDialog::TransformDialog(Transform* tf, QWidget* parent) + : QDialog(parent) + { + setupUi(this); + cmt = tf; + + for (unsigned i = 0; i < sizeof(oplist)/sizeof(*oplist); ++i) + funcOp->addItem(oplist[i].text, i); + + connect(selEventOp, SIGNAL(activated(int)), SLOT(selEventOpSel(int))); + connect(selType, SIGNAL(activated(int)), SLOT(selTypeSel(int))); + connect(selVal1Op, SIGNAL(activated(int)), SLOT(selVal1OpSel(int))); + connect(selVal2Op, SIGNAL(activated(int)), SLOT(selVal2OpSel(int))); + connect(procEventOp, SIGNAL(activated(int)), SLOT(procEventOpSel(int))); + connect(procType, SIGNAL(activated(int)), SLOT(procEventTypeSel(int))); + connect(procVal1Op, SIGNAL(activated(int)), SLOT(procVal1OpSel(int))); + connect(procVal2Op, SIGNAL(activated(int)), SLOT(procVal2OpSel(int))); + connect(funcOp, SIGNAL(activated(int)), SLOT(funcOpSel(int))); + connect(selVal1a, SIGNAL(valueChanged(int)), SLOT(selVal1aChanged(int))); + connect(selVal1b, SIGNAL(valueChanged(int)), SLOT(selVal1bChanged(int))); + connect(selVal2a, SIGNAL(valueChanged(int)), SLOT(selVal2aChanged(int))); + connect(selVal2b, SIGNAL(valueChanged(int)), SLOT(selVal2bChanged(int))); + connect(procVal1a, SIGNAL(valueChanged(int)), SLOT(procVal1aChanged(int))); + connect(procVal1b, SIGNAL(valueChanged(int)), SLOT(procVal1bChanged(int))); + connect(procVal2a, SIGNAL(valueChanged(int)), SLOT(procVal2aChanged(int))); + connect(procVal2b, SIGNAL(valueChanged(int)), SLOT(procVal2bChanged(int))); + connect(selChannelOp, SIGNAL(activated(int)), SLOT(selChannelOpSel(int))); + connect(selChannelVala, SIGNAL(valueChanged(int)), SLOT(selChannelValaChanged(int))); + connect(selChannelValb, SIGNAL(valueChanged(int)), SLOT(selChannelValbChanged(int))); + connect(procChannelOp, SIGNAL(activated(int)), SLOT(procChannelOpSel(int))); + connect(procChannelVala, SIGNAL(valueChanged(int)), SLOT(procChannelValaChanged(int))); + connect(procChannelValb, SIGNAL(valueChanged(int)), SLOT(procChannelValbChanged(int))); + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +void TransformDialog::init() + { + selEventOp->setCurrentIndex(cmt->data.selEventOp); + selEventOpSel(cmt->data.selEventOp); + + for (unsigned i = 0; i < sizeof(eventTypeTable)/sizeof(*eventTypeTable); ++i) { + if (eventTypeTable[i] == cmt->data.selType) { + selType->setCurrentIndex(i); + break; + } + } + + selVal1Op->setCurrentIndex(cmt->data.selVal1); + selVal1OpSel(cmt->data.selVal1); + + selVal2Op->setCurrentIndex(cmt->data.selVal2); + selVal2OpSel(cmt->data.selVal2); + + selChannelOp->setCurrentIndex(cmt->data.selChannel); + selChannelOpSel(cmt->data.selChannel); + + { + unsigned i; + for (i = 0; i < sizeof(oplist)/sizeof(*oplist); ++i) { + if (oplist[i].id == cmt->data.funcOp) { + funcOp->setCurrentIndex(i); + break; + } + } + if (i == sizeof(oplist)/sizeof(*oplist)) + printf("internal error: bad OpCode\n"); + funcOpSel(i); + } + + procEventOp->setCurrentIndex(cmt->data.procEvent); + procEventOpSel(cmt->data.procEvent); + + procVal1Op->setCurrentIndex(cmt->data.procVal1); + procVal1OpSel(cmt->data.procVal1); + + for (unsigned i = 0; i < sizeof(procVal2Map)/sizeof(*procVal2Map); ++i) { + if (procVal2Map[i] == cmt->data.procVal2) { + procVal2Op->setCurrentIndex(i); + break; + } + } + + selVal1a->setValue(cmt->data.selVal1a); + selVal1b->setValue(cmt->data.selVal1b); + selVal1aChanged(cmt->data.selVal1a); + selVal1bChanged(cmt->data.selVal1b); + + selVal2a->setValue(cmt->data.selVal2a); + selVal2b->setValue(cmt->data.selVal2b); + + selChannelVala->setValue(cmt->data.selChannela); + selChannelValb->setValue(cmt->data.selChannelb); + + procVal1a->setValue(cmt->data.procVal1a); + procVal1b->setValue(cmt->data.procVal1b); + + procVal2a->setValue(cmt->data.procVal2a); + procVal2b->setValue(cmt->data.procVal2b); + + procChannelVala->setValue(cmt->data.procChannela); + procChannelValb->setValue(cmt->data.procChannelb); + } + +//--------------------------------------------------------- +// setValOp +//--------------------------------------------------------- + +void TransformDialog::setValOp(QWidget* a, QWidget* b, ValOp op) + { + switch (op) { + case Ignore: + a->setEnabled(false); + b->setEnabled(false); + break; + case Equal: + case Unequal: + case Higher: + case Lower: + a->setEnabled(true); + b->setEnabled(false); + break; + case Inside: + case Outside: + a->setEnabled(true); + b->setEnabled(true); + break; + } + } + +//--------------------------------------------------------- +// selEventOpSel +//--------------------------------------------------------- + +void TransformDialog::selEventOpSel(int val) + { + selType->setEnabled(val != All); + cmt->data.selEventOp = ValOp(val); + selVal1aChanged(cmt->data.selVal1a); + selVal1bChanged(cmt->data.selVal1b); + } + +//--------------------------------------------------------- +// selTypeSel +//--------------------------------------------------------- + +void TransformDialog::selTypeSel(int val) + { + cmt->data.selType = eventTypeTable[val]; + selVal1aChanged(cmt->data.selVal1a); + selVal1bChanged(cmt->data.selVal1b); + } + +//--------------------------------------------------------- +// selVal1OpSel +//--------------------------------------------------------- + +void TransformDialog::selVal1OpSel(int val) + { + setValOp(selVal1a, selVal1b, ValOp(val)); + cmt->data.selVal1 = ValOp(val); + } + +//--------------------------------------------------------- +// selVal2OpSel +//--------------------------------------------------------- + +void TransformDialog::selVal2OpSel(int val) + { + setValOp(selVal2a, selVal2b, ValOp(val)); + cmt->data.selVal2 = ValOp(val); + } + +//--------------------------------------------------------- +// procEventOpSel +//--------------------------------------------------------- + +void TransformDialog::procEventOpSel(int val) + { + TransformOperator op = val == 0 ? Keep : Fix; + procType->setEnabled(op == Fix); + cmt->data.procEvent = op; + } + +//--------------------------------------------------------- +// procEventTypeSel +//--------------------------------------------------------- + +void TransformDialog::procEventTypeSel(int val) + { + cmt->data.eventType = eventTypeTable[val]; + } + +//--------------------------------------------------------- +// procVal1OpSel +//--------------------------------------------------------- + +void TransformDialog::procVal1OpSel(int val) + { + cmt->data.procVal1 = TransformOperator(val); + switch(TransformOperator(val)) { + case Keep: + case Invert: + procVal1a->setEnabled(false); + procVal1b->setEnabled(false); + break; + case Multiply: + case Divide: + procVal1a->setEnabled(true); + procVal1b->setEnabled(false); + break; + case Plus: + case Minus: + case Fix: + case Value: + case Flip: + procVal1a->setEnabled(true); + procVal1b->setEnabled(false); + break; + case Random: + case ScaleMap: + case Dynamic: + procVal1a->setEnabled(true); + procVal1b->setEnabled(true); + break; + } + } + +//--------------------------------------------------------- +// procVal2OpSel +//--------------------------------------------------------- + +void TransformDialog::procVal2OpSel(int val) + { + TransformOperator op = TransformOperator(procVal2Map[val]); + cmt->data.procVal2 = op; + + switch (op) { + case Keep: + case Invert: + procVal2a->setEnabled(false); + procVal2b->setEnabled(false); + break; + case Multiply: + case Divide: + procVal2a->setEnabled(true); + procVal2b->setEnabled(false); + break; + case Plus: + case Minus: + case Fix: + case Value: + procVal2a->setEnabled(true); + procVal2b->setEnabled(false); + break; + case Random: + case Dynamic: + procVal2a->setEnabled(true); + procVal2b->setEnabled(true); + break; + default: + break; + } + } + +//--------------------------------------------------------- +// funcOpSel +//--------------------------------------------------------- + +void TransformDialog::funcOpSel(int val) + { + TransformFunction op = oplist[val].id; + + bool isFuncOp(op == Trans); + + procEventOp->setEnabled(isFuncOp); + procType->setEnabled(isFuncOp); + procVal1Op->setEnabled(isFuncOp); + procVal1a->setEnabled(isFuncOp); + procVal1b->setEnabled(isFuncOp); + procVal2Op->setEnabled(isFuncOp); + procVal2a->setEnabled(isFuncOp); + procVal2b->setEnabled(isFuncOp); + procChannelOp->setEnabled(isFuncOp); + procChannelVala->setEnabled(isFuncOp); + procChannelValb->setEnabled(isFuncOp); + if (isFuncOp) { + procEventOpSel(cmt->data.procEvent); + procVal1OpSel(cmt->data.procVal1); + procVal2OpSel(cmt->data.procVal2); + procChannelOpSel(cmt->data.procChannel); + } + cmt->data.funcOp = op; + } + +//--------------------------------------------------------- +// selVal1aChanged +//--------------------------------------------------------- + +void TransformDialog::selVal1aChanged(int val) + { + cmt->data.selVal1a = val; + if ((cmt->data.selEventOp != All) + && (cmt->data.selType == 0x90)) { + selVal1a->setSuffix(" - " + pitch2string(val)); + } + else + selVal1a->setSuffix(QString("")); + } + +//--------------------------------------------------------- +// selVal1bChanged +//--------------------------------------------------------- + +void TransformDialog::selVal1bChanged(int val) + { + cmt->data.selVal1b = val; + if ((cmt->data.selEventOp != All) + && (cmt->data.selType == 0x90)) { + selVal1b->setSuffix(" - " + pitch2string(val)); + } + else + selVal1b->setSuffix(QString("")); + } + +//--------------------------------------------------------- +// selVal2aChanged +//--------------------------------------------------------- + +void TransformDialog::selVal2aChanged(int val) + { + cmt->data.selVal2a = val; + } + +//--------------------------------------------------------- +// selVal2bChanged +//--------------------------------------------------------- + +void TransformDialog::selVal2bChanged(int val) + { + cmt->data.selVal2b = val; + } + +//--------------------------------------------------------- +// procVal1aChanged +//--------------------------------------------------------- + +void TransformDialog::procVal1aChanged(int val) + { + cmt->data.procVal1a = val; + } + +//--------------------------------------------------------- +// procVal1bChanged +//--------------------------------------------------------- + +void TransformDialog::procVal1bChanged(int val) + { + cmt->data.procVal1b = val; + } + +//--------------------------------------------------------- +// procVal2aChanged +//--------------------------------------------------------- + +void TransformDialog::procVal2aChanged(int val) + { + cmt->data.procVal2a = val; + } + +//--------------------------------------------------------- +// procVal2bChanged +//--------------------------------------------------------- + +void TransformDialog::procVal2bChanged(int val) + { + cmt->data.procVal2b = val; + } + +//--------------------------------------------------------- +// selChannelOpSel +//--------------------------------------------------------- + +void TransformDialog::selChannelOpSel(int val) + { + setValOp(selChannelVala, selChannelValb, ValOp(val)); + cmt->data.selChannel = ValOp(val); + } + +//--------------------------------------------------------- +// selChannelValaChanged +//--------------------------------------------------------- + +void TransformDialog::selChannelValaChanged(int val) + { + cmt->data.selChannela = val; + } + +//--------------------------------------------------------- +// selChannelValbChanged +//--------------------------------------------------------- + +void TransformDialog::selChannelValbChanged(int val) + { + cmt->data.selChannelb = val; + } + +//--------------------------------------------------------- +// procChannelOpSel +//--------------------------------------------------------- + +void TransformDialog::procChannelOpSel(int val) + { + cmt->data.procChannel = TransformOperator(val); + switch(TransformOperator(val)) { + case Keep: + case Invert: + procChannelVala->setEnabled(false); + procChannelValb->setEnabled(false); + break; + case Multiply: + case Divide: + procChannelVala->setEnabled(true); + procChannelValb->setEnabled(false); + break; + case Plus: + case Minus: + case Fix: + case Value: + case Flip: + procChannelVala->setEnabled(true); + procChannelValb->setEnabled(false); + break; + case Random: + case ScaleMap: + case Dynamic: + procChannelVala->setEnabled(true); + procChannelValb->setEnabled(true); + break; + } + } + +//--------------------------------------------------------- +// procChannelValaChanged +//--------------------------------------------------------- + +void TransformDialog::procChannelValaChanged(int val) + { + cmt->data.procChannela = val; + } + +//--------------------------------------------------------- +// procChannelValbChanged +//--------------------------------------------------------- + +void TransformDialog::procChannelValbChanged(int val) + { + cmt->data.procChannelb = val; + } + +//--------------------------------------------------------- +// getInitData +//--------------------------------------------------------- + +void Transform::getInitData(int* n, const unsigned char** p) const + { + *n = sizeof(data); + *p = (unsigned char*)&data; + } + +//--------------------------------------------------------- +// setInitData +//--------------------------------------------------------- + +void Transform::setInitData(int n, const unsigned char* p) + { + memcpy((void*)&data, p, n); + if (gui) + gui->init(); + } + +//--------------------------------------------------------- +// inst +//--------------------------------------------------------- + +static Mempi* instantiate(const char* name, const MempiHost* h) + { + return new Transform(name, h); + } + +extern "C" { + static MEMPI descriptor = { + "Transformator", + "MusE Midi Event Transformator", + "0.1", // version string + MEMPI_FILTER, + MEMPI_MAJOR_VERSION, MEMPI_MINOR_VERSION, + instantiate + }; + + const MEMPI* mempi_descriptor() { return &descriptor; } + } + diff --git a/attic/muse_qt4_evolution/midiplugins/transform/transform.h b/attic/muse_qt4_evolution/midiplugins/transform/transform.h new file mode 100644 index 00000000..6f68698d --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/transform/transform.h @@ -0,0 +1,126 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: transform.h,v 1.5 2005/10/05 17:02:03 lunar_shuttle Exp $ +// +// (C) Copyright 2005 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __TRANSFORM_H__ +#define __TRANSFORM_H__ + +#include "../libmidiplugin/mempi.h" +#include "ui_transform.h" + +class Transform; + +namespace AL { + class Xml; + }; +using AL::Xml; + +enum ValOp { + All=0, Ignore=0, Equal=1, Unequal=2, Higher=3, Lower=4, + Inside=5, Outside=6 + }; + +enum TransformFunction { + Select, Quantize, Delete, Trans, Insert, Copy, Extract + }; + +enum TransformOperator { + Keep, Plus, Minus, Multiply, Divide, Fix, Value, Invert, + ScaleMap, Flip, Dynamic, Random + }; + +//--------------------------------------------------------- +// TransformDialog +//--------------------------------------------------------- + +class TransformDialog : public QDialog, public Ui::TransformDialogBase { + Q_OBJECT + Transform* cmt; + + void setValOp(QWidget* a, QWidget* b, ValOp op); + + signals: + void hideWindow(); + + private slots: + void selEventOpSel(int); + void selTypeSel(int); + void selVal1OpSel(int); + void selVal2OpSel(int); + void procEventOpSel(int); + void procEventTypeSel(int); + void procVal1OpSel(int); + void procVal2OpSel(int); + void funcOpSel(int); + void selVal1aChanged(int); + void selVal1bChanged(int); + void selVal2aChanged(int); + void selVal2bChanged(int); + void procVal1aChanged(int); + void procVal1bChanged(int); + void procVal2aChanged(int); + void procVal2bChanged(int); + void selChannelOpSel(int); + void selChannelValaChanged(int); + void selChannelValbChanged(int); + void procChannelOpSel(int); + void procChannelValaChanged(int); + void procChannelValbChanged(int); + + public: + TransformDialog(Transform*, QWidget* parent); + void init(); + }; + +//--------------------------------------------------------- +// Transform +//--------------------------------------------------------- + +class Transform : public Mempi { + int filterEvent(MidiEvent& event); + + public: + struct initData { + ValOp selEventOp; + int selType; + + ValOp selVal1; + int selVal1a, selVal1b; + ValOp selVal2; + int selVal2a, selVal2b; + ValOp selChannel; + int selChannela, selChannelb; + + TransformOperator procEvent; + int eventType; + TransformOperator procVal1; + int procVal1a, procVal1b; + TransformOperator procVal2; + int procVal2a, procVal2b; + TransformOperator procChannel; + int procChannela, procChannelb; + + TransformFunction funcOp; + int quantVal; + } data; + + TransformDialog* gui; + virtual void process(unsigned, unsigned, MidiEventList*, MidiEventList*); + + Transform(const char* name, const MempiHost*); + virtual bool init(); + virtual bool hasGui() const { return true; } + virtual bool guiVisible() const { return gui->isVisible(); } + virtual void showGui(bool val) { gui->setShown(val); } + virtual void getGeometry(int* x, int* y, int* w, int* h) const; + virtual void setGeometry(int, int, int, int); + virtual void getInitData(int*, const unsigned char**) const; + virtual void setInitData(int, const unsigned char*); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/midiplugins/transform/transform.ui b/attic/muse_qt4_evolution/midiplugins/transform/transform.ui new file mode 100644 index 00000000..c23cf343 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/transform/transform.ui @@ -0,0 +1,616 @@ + + + + + TransformDialogBase + + + + 0 + 0 + 630 + 418 + + + + MusE: Midi Input Transformator + + + true + + + + 11 + + + 6 + + + + + Filter + + + + 11 + + + 6 + + + + + + All + + + + + Equal + + + + + Unequal + + + + + + + + + Note + + + + + Poly Pressure + + + + + Control Change + + + + + Aftertouch + + + + + Pitch Bend + + + + + NRPN + + + + + RPN + + + + + + + + Value 2 + + + + + + + Value 1 + + + + + + + Event Type + + + + + + + + Ignore + + + + + Equal + + + + + Unequal + + + + + Higher + + + + + Lower + + + + + Inside + + + + + Outside + + + + + + + + 127 + + + + + + + 127 + + + + + + + 127 + + + + + + + + Ignore + + + + + Equal + + + + + Unequal + + + + + Higher + + + + + Lower + + + + + Inside + + + + + Outside + + + + + + + + + Ignore + + + + + Equal + + + + + Unequal + + + + + Higher + + + + + Lower + + + + + Inside + + + + + Outside + + + + + + + + Channel + + + + + + + 127 + + + + + + + 127 + + + + + + + 127 + + + + + + + + + + Processing + + + + 11 + + + 6 + + + + + Event Type + + + + + + + + Keep + + + + + Fix + + + + + + + + + Note + + + + + Poly Pressure + + + + + Control Change + + + + + Aftertouch + + + + + Pitch Bend + + + + + NRPN + + + + + RPN + + + + + + + + + Keep + + + + + Plus + + + + + Minus + + + + + Multiply + + + + + Divide + + + + + Fix + + + + + Value 2 + + + + + Invert + + + + + ScaleMap + + + + + Flip + + + + + Dyn + + + + + Random + + + + + + + + Value 1 + + + + + + + Value 2 + + + + + + + 9999 + + + + + + + 9999 + + + + + + + 127 + + + + + + + + Keep + + + + + Plus + + + + + Minus + + + + + Multiply + + + + + Divide + + + + + Fix + + + + + Value 1 + + + + + Invert + + + + + Dyn + + + + + Random + + + + + + + + + Keep + + + + + Plus + + + + + Minus + + + + + Multiply + + + + + Divide + + + + + Fix + + + + + Value 1 + + + + + Invert + + + + + Dyn + + + + + Random + + + + + + + + Channel + + + + + + + + + + + + + + + + + + + + + + qPixmapFromMimeSource + + selEventOp + selType + selVal1Op + selVal1a + selVal1b + selVal2Op + selVal2a + selVal2b + selChannelOp + selChannelVala + selChannelValb + procEventOp + procType + procVal1Op + procVal1b + procVal2Op + procVal2b + procChannelOp + procChannelValb + + + + diff --git a/attic/muse_qt4_evolution/midiplugins/trigg/CMakeLists.txt b/attic/muse_qt4_evolution/midiplugins/trigg/CMakeLists.txt new file mode 100644 index 00000000..397ccf81 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/trigg/CMakeLists.txt @@ -0,0 +1,47 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +QT4_WRAP_CPP ( trigg_mocs trigggui.h ) +QT4_WRAP_UI ( trigg_uis trigggui.ui ) + +add_library ( trigg SHARED + trigg.cpp + trigggui.cpp + trigggui.h + ${trigg_mocs} + ${trigg_uis} + ) + +target_link_libraries( trigg + midiplugin awl + ${QT_LIBRARIES} + ) + +# - tell cmake to name target name.so instead of +# libname.so +# - use precompiled header files +# +set_target_properties ( trigg + PROPERTIES PREFIX "" + COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all-pic.h" + ) + +install_targets ( /${CMAKE_INSTALL_LIBDIR}/${MusE_INSTALL_NAME}/midiplugins/ trigg ) + diff --git a/attic/muse_qt4_evolution/midiplugins/trigg/trigg.cpp b/attic/muse_qt4_evolution/midiplugins/trigg/trigg.cpp new file mode 100644 index 00000000..fb3703cb --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/trigg/trigg.cpp @@ -0,0 +1,131 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: filter.cpp,v 1.10 2005/11/06 17:49:34 wschweer Exp $ +// +// filter - simple midi filter +// +// (C) Copyright 2005 Werner Schweer (ws@seh.de) +//========================================================= + +#include "trigggui.h" +#include "trigg.h" +#include "midi.h" +#include "midievent.h" + +//--------------------------------------------------------- +// Trigg +//--------------------------------------------------------- + +Trigg::Trigg(const char* name, const MempiHost* h) + : Mempi(name, h) + { + data.note=30; // allow any events + data.velocity=127; + gui = 0; + } + +//--------------------------------------------------------- +// Trigg +//--------------------------------------------------------- + +Trigg::~Trigg() + { + if (gui) + delete gui; + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +bool Trigg::init() + { + gui = new TriggGui(this, 0); + gui->setWindowTitle("MusE: "+QString(name())); + gui->show(); + return false; + } + +//--------------------------------------------------------- +// getGeometry +//--------------------------------------------------------- + +void Trigg::getGeometry(int* x, int* y, int* w, int* h) const + { + QPoint pos(gui->pos()); + QSize size(gui->size()); + *x = pos.x(); + *y = pos.y(); + *w = size.width(); + *h = size.height(); + } + +//--------------------------------------------------------- +// setGeometry +//--------------------------------------------------------- + +void Trigg::setGeometry(int x, int y, int w, int h) + { + gui->resize(QSize(w, h)); + gui->move(QPoint(x, y)); + } + +//--------------------------------------------------------- +// process +//--------------------------------------------------------- + +void Trigg::process(unsigned , unsigned , MidiEventList* il, MidiEventList* ol) + { + + for (iMidiEvent i = il->begin(); i != il->end(); ++i) { + MidiEvent temp=*i; + if (temp.isNote() || temp.isNoteOff()) + { + // for each event modify note and velocity + printf("a=%d b=%d isNote=%d isNoteOff=%d\n",temp.dataA(),temp.dataB(),temp.isNote(),temp.isNoteOff()); + temp.setA(data.note); + if (!temp.isNoteOff()) + temp.setB(data.velocity); + printf("AFTER a=%d b=%d\n",temp.dataA(),temp.dataB()); + } + ol->insert(temp); + } + } + +void Trigg::getInitData(int* n, const unsigned char** p) const + { + *n = sizeof(data); + *p = (unsigned char*)&data; + printf("::getInitData note=%d vel=%d\n",data.note,data.velocity); + } + +void Trigg::setInitData(int n, const unsigned char* p) + { + memcpy((void*)&data, p, n); + if (gui) + gui->init(); + } + +//--------------------------------------------------------- +// inst +//--------------------------------------------------------- + +static Mempi* instantiate(const char* name, const MempiHost* h) + { + return new Trigg(name, h); + } + +extern "C" { + static MEMPI descriptor = { + "Trigg", + "Any note triggers a specified note with specified velocity", + "1.0", // filter version string + MEMPI_FILTER, // plugin type + MEMPI_MAJOR_VERSION, MEMPI_MINOR_VERSION, + instantiate + }; + + const MEMPI* mempi_descriptor() { return &descriptor; } + } + diff --git a/attic/muse_qt4_evolution/midiplugins/trigg/trigg.h b/attic/muse_qt4_evolution/midiplugins/trigg/trigg.h new file mode 100644 index 00000000..c29a06a0 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/trigg/trigg.h @@ -0,0 +1,49 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: filter.h,v 1.4 2005/06/12 08:18:37 wschweer Exp $ +// +// filter - simple midi filter +// +// (C) Copyright 2005 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __TRIGG_H__ +#define __TRIGG_H__ + +#include "../libmidiplugin/mempi.h" + +//--------------------------------------------------------- +// filter - simple midi filter +//--------------------------------------------------------- +class Trigg : public Mempi { + struct initData { + int note; + int velocity; + } data; + friend class TriggGui; + + TriggGui* gui; + + virtual void process(unsigned, unsigned, MidiEventList*, MidiEventList*); + + public: + Trigg(const char* name, const MempiHost*); + ~Trigg(); + virtual bool init(); + + void setNote(int t) { data.note = t; } + void setVelocity(int t) { data.velocity = t; } + + virtual bool hasGui() const { return true; } + virtual bool guiVisible() const { return gui->isVisible(); } + virtual void showGui(bool val) { gui->setShown(val); } + virtual void getGeometry(int* x, int* y, int* w, int* h) const; + virtual void setGeometry(int, int, int, int); + + virtual void getInitData(int*, const unsigned char**) const; + virtual void setInitData(int, const unsigned char*); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/midiplugins/trigg/trigggui.cpp b/attic/muse_qt4_evolution/midiplugins/trigg/trigggui.cpp new file mode 100644 index 00000000..0fd3c4c6 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/trigg/trigggui.cpp @@ -0,0 +1,56 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: filtergui.cpp,v 1.4 2005/11/06 17:49:34 wschweer Exp $ +// +// (C) Copyright 2005 Werner Schweer (ws@seh.de) +//========================================================= + +#include "trigggui.h" +#include "trigg.h" + +//--------------------------------------------------------- +// MidiTriggConfig +//--------------------------------------------------------- + +TriggGui::TriggGui(Trigg* f, QWidget* parent) + : QDialog(parent) + { + setupUi(this); + filter = f; + + connect(noteEntry, SIGNAL(valueChanged(int)), SLOT(setNote(int))); + connect(velocityEntry, SIGNAL(valueChanged(int)), SLOT(setVelocity(int))); + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- +void TriggGui::init() + { + Trigg::initData *data; + int n; + filter->getInitData(&n,(const unsigned char **)&data); + printf("::init note=%d vel=%d\n",data->note,data->velocity); + noteEntry->setValue(data->note); + velocityEntry->setValue(data->velocity); + } + +//--------------------------------------------------------- +// setNote +//--------------------------------------------------------- +void TriggGui::setNote(int value) + { + printf("TriggGui::setNote %d\n",value); + filter->setNote(value); + } + +//--------------------------------------------------------- +// setVelocity +//--------------------------------------------------------- +void TriggGui::setVelocity(int value) + { + printf("TriggGui::setVelocity %d\n",value); + filter->setVelocity(value); + } + diff --git a/attic/muse_qt4_evolution/midiplugins/trigg/trigggui.h b/attic/muse_qt4_evolution/midiplugins/trigg/trigggui.h new file mode 100644 index 00000000..f4c597fa --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/trigg/trigggui.h @@ -0,0 +1,48 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: filtergui.h,v 1.4 2005/11/06 17:49:34 wschweer Exp $ +// +// (C) Copyright 2005 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __FILTERGUI_H__ +#define __FILTERGUI_H__ + +#include "ui_trigggui.h" + +class Trigg; + +enum { + MIDI_FILTER_NOTEON = 1, + MIDI_FILTER_POLYP = 2, + MIDI_FILTER_CTRL = 4, + MIDI_FILTER_PROGRAM = 8, + MIDI_FILTER_AT = 16, + MIDI_FILTER_PITCH = 32, + MIDI_FILTER_SYSEX = 64 + }; + +//--------------------------------------------------------- +// TriggGui +//--------------------------------------------------------- + +class TriggGui : public QDialog, public Ui::TriggBase { + Q_OBJECT + + Trigg* filter; + + signals: + void hideWindow(); + + private slots: + void setNote(int ); + void setVelocity(int ); + + public: + TriggGui(Trigg*, QWidget* parent=0); + void init(); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/midiplugins/trigg/trigggui.ui b/attic/muse_qt4_evolution/midiplugins/trigg/trigggui.ui new file mode 100644 index 00000000..5c096e24 --- /dev/null +++ b/attic/muse_qt4_evolution/midiplugins/trigg/trigggui.ui @@ -0,0 +1,109 @@ + + + + + TriggBase + + + + 0 + 0 + 233 + 125 + + + + + 3 + 5 + 0 + 0 + + + + MusE: Midi Input Trigg + + + + 9 + + + 6 + + + + + + 5 + 5 + 0 + 0 + + + + Trigg + + + + 9 + + + 6 + + + + + 0 + + + 6 + + + + + Velocity + + + + + + + 127 + + + 30 + + + + + + + 127 + + + 0 + + + 127 + + + + + + + Note + + + + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/muse.pro b/attic/muse_qt4_evolution/muse.pro new file mode 100644 index 00000000..ce277be6 --- /dev/null +++ b/attic/muse_qt4_evolution/muse.pro @@ -0,0 +1,240 @@ +TRANSLATIONS = \ + share/locale/muse_de.ts \ + share/locale/muse_es.ts \ + share/locale/muse_fr.ts \ + share/locale/muse_ru.ts \ + share/locale/muse_sv_SE.ts \ + share/locale/muse_it.ts + +SOURCES = \ + plugins/freeverb/freeverb.cpp \ + plugins/freeverb/revmodel.cpp \ + plugins/doublechorus/doublechorus.cpp \ + plugins/doublechorus/simplechorusmodel.cpp \ + plugins/doublechorus/doublechorusmodel.cpp \ + awl/mslider.cpp \ + awl/volslider.cpp \ + awl/pitchlabel.cpp \ + awl/posedit.cpp \ + awl/combobox.cpp \ + awl/volknob.cpp \ + awl/slider.cpp \ + awl/awl.cpp \ + awl/tempolabel.cpp \ + awl/floatentry.cpp \ + awl/knob.cpp \ + awl/tempoedit.cpp \ + awl/midipanknob.cpp \ + awl/tcanvas.cpp \ + awl/panentry.cpp \ + awl/utils.cpp \ + awl/poslabel.cpp \ + awl/midimslider.cpp \ + awl/awlplugin.cpp \ + awl/midipanentry.cpp \ + awl/pitchedit.cpp \ + awl/midimeter.cpp \ + awl/volentry.cpp \ + awl/aslider.cpp \ + awl/midivolentry.cpp \ + awl/checkbox.cpp \ + awl/panknob.cpp \ + awl/sigedit.cpp \ + awl/ltest.cpp \ + midiplugins/metronom/metronomgui.cpp \ + midiplugins/metronom/metronom.cpp \ + midiplugins/dump/dump.cpp \ + midiplugins/filter/ctrlcombo.cpp \ + midiplugins/filter/filtergui.cpp \ + midiplugins/filter/filter.cpp \ + midiplugins/libmidiplugin/mempi.cpp \ + midiplugins/libmidiplugin/midievent.cpp \ + midiplugins/transform/transform.cpp \ + midiplugins/trigg/trigggui.cpp \ + midiplugins/trigg/trigg.cpp \ + midiplugins/splitlayer/splitlayergui.cpp \ + midiplugins/splitlayer/splitlayer.cpp \ + al/xml.cpp \ + al/marker.cpp \ + al/sig.cpp \ + al/tempo.cpp \ + al/al.cpp \ + al/pos.cpp \ + grepmidi/grepmidi.cpp \ + synti/deicsonze/deicsonze.cpp \ + synti/deicsonze/deicsonzepreset.cpp \ + synti/deicsonze/deicsonzegui.cpp \ + synti/deicsonze/deicsonzeplugin.cpp \ + synti/fluid/fluid.cpp \ + synti/fluid/fluidgui.cpp \ + synti/s1/s1.cpp \ + synti/vam/vam.cpp \ + synti/vam/vamgui.cpp \ + synti/simpledrums/simpledrums.cpp \ + synti/simpledrums/ssplugin.cpp \ + synti/simpledrums/simpledrumsgui.cpp \ + synti/simpledrums/ssplugingui.cpp \ + synti/organ/organgui.cpp \ + synti/organ/organ.cpp \ + synti/fluidsynth/fluidsynthgui.cpp \ + synti/fluidsynth/fluidsynti.cpp \ + synti/libsynti/poly.cpp \ + synti/libsynti/mess.cpp \ + synti/libsynti/mono.cpp \ + synti/libsynti/midievent.cpp \ + synti/libsynti/gui.cpp \ + synti/mus/mus.cpp \ + synti/zynaddsubfx/main.cpp \ + muse/arranger/arranger.cpp \ + muse/arranger/trackdrag.cpp \ + muse/arranger/partdrag.cpp \ + muse/arranger/tlwlayout.cpp \ + muse/arranger/tlswidget.cpp \ + muse/arranger/canvas.cpp \ + muse/arranger/configtrack.cpp \ + muse/arranger/tllineedit.cpp \ + muse/arranger/tlwidget.cpp \ + muse/arranger/trackinfo.cpp \ + muse/ctrl/ctrleditor.cpp \ + muse/ctrl/configmidictrl.cpp \ + muse/ctrl/ctrldialog.cpp \ + muse/widgets/tools.cpp \ + muse/widgets/shortcutconfig.cpp \ + muse/widgets/dentry.cpp \ + muse/widgets/comboQuant.cpp \ + muse/widgets/midisync.cpp \ + muse/widgets/mixdowndialog.cpp \ + muse/widgets/floatlabel.cpp \ + muse/widgets/splitter.cpp \ + muse/widgets/menutitle.cpp \ + muse/widgets/doublelabel.cpp \ + muse/widgets/fontsel.cpp \ + muse/widgets/tb1.cpp \ + muse/widgets/outportcombo.cpp \ + muse/widgets/filedialog.cpp \ + muse/widgets/utils.cpp \ + muse/widgets/editmetadialogbase.cpp \ + muse/widgets/quantcombo.cpp \ + muse/widgets/combobox.cpp \ + muse/widgets/shortcutcapturedialog.cpp \ + muse/widgets/rastercombo.cpp \ + muse/widgets/bigtime.cpp \ + muse/widgets/ctrlcombo.cpp \ + muse/widgets/comment.cpp \ + muse/widgets/noteinfo.cpp \ + muse/widgets/siglabel.cpp \ + muse/widgets/simplebutton.cpp \ + muse/marker/markerview.cpp \ + muse/instruments/editinstrument.cpp \ + muse/instruments/midictrledit.cpp \ + muse/instruments/minstrument.cpp \ + muse/midiedit/miditracker.cpp \ + muse/midiedit/velocity.cpp \ + muse/midiedit/gatetime.cpp \ + muse/midiedit/citem.cpp \ + muse/midiedit/prcanvas.cpp \ + muse/midiedit/dcanvas.cpp \ + muse/midiedit/midieditor.cpp \ + muse/midiedit/pianoroll.cpp \ + muse/midiedit/trackpattern.cpp \ + muse/midiedit/drummap.cpp \ + muse/midiedit/midicmd.cpp \ + muse/midiedit/ctrledit.cpp \ + muse/midiedit/drumedit.cpp \ + muse/midiedit/quantconfig.cpp \ + muse/midiedit/ecanvas.cpp \ + muse/waveedit/waveedit.cpp \ + muse/waveedit/waveview.cpp \ + muse/driver/posixtimer.cpp \ + muse/driver/dummyaudio.cpp \ + muse/driver/alsatimer.cpp \ + muse/driver/coretimer.cpp \ + muse/driver/rtctimer.cpp \ + muse/driver/coremidi.cpp \ + muse/driver/alsamidi.cpp \ + muse/driver/jack.cpp \ + muse/mixer/strip.cpp \ + muse/mixer/routedialog.cpp \ + muse/mixer/rack.cpp \ + muse/mixer/midirack.cpp \ + muse/mixer/mixer.cpp \ + muse/mixer/astrip.cpp \ + muse/mixer/mstrip.cpp \ + muse/liste/listedit.cpp \ + muse/liste/ctrllistedit.cpp \ + muse/master/masteredit.cpp \ + muse/master/master.cpp \ + muse/seqmsg.cpp \ + muse/audio.cpp \ + muse/plugingui.cpp \ + muse/icons.cpp \ + muse/ctrl.cpp \ + muse/waveevent.cpp \ + muse/undo.cpp \ + muse/track.cpp \ + muse/miditrack.cpp \ + muse/transpose.cpp \ + muse/ticksynth.cpp \ + muse/projectpropsdialog.cpp \ + muse/value.cpp \ + muse/conf.cpp \ + muse/globals.cpp \ + muse/mtc.cpp \ + muse/wavetrack.cpp \ + muse/help.cpp \ + muse/templatedialog.cpp \ + muse/midiseq.cpp \ + muse/part.cpp \ + muse/route.cpp \ + muse/extmidieditor.cpp \ + muse/vst.cpp \ + muse/synth.cpp \ + muse/eventlist.cpp \ + muse/midirc.cpp \ + muse/sync.cpp \ + muse/midi.cpp \ + muse/thread.cpp \ + muse/audiotrack.cpp \ + muse/audiogroup.cpp \ + muse/shortcuts.cpp \ + muse/helper.cpp \ + muse/plugin.cpp \ + muse/midiplugin.cpp \ + muse/wave.cpp \ + muse/editor.cpp \ + muse/midififo.cpp \ + muse/song.cpp \ + muse/songpart.cpp \ + muse/songtrack.cpp \ + muse/song.cpp \ + muse/midictrl.cpp \ + muse/esettings.cpp \ + muse/cobject.cpp \ + muse/transport.cpp \ + muse/dssihost.cpp \ + muse/gconfig.cpp \ + muse/preferences.cpp \ + muse/event.cpp \ + muse/midifile.cpp \ + muse/fifo.cpp \ + muse/muse.cpp \ + muse/songfile.cpp \ + muse/pipeline.cpp \ + muse/midievent.cpp \ + muse/midisynti.cpp \ + muse/miditransform.cpp \ + muse/audioprefetch.cpp \ + muse/audiowriteback.cpp \ + muse/importmidi.cpp \ + muse/exportmidi.cpp \ + muse/projectdialog.cpp \ + muse/ladspaplugin.cpp \ + muse/auxplugin.cpp \ + muse/midiinport.cpp \ + muse/audiooutput.cpp \ + muse/midiout.cpp \ + muse/audioinput.cpp \ + muse/midieventbase.cpp \ + muse/midioutport.cpp + + diff --git a/attic/muse_qt4_evolution/muse/CMakeLists.txt b/attic/muse_qt4_evolution/muse/CMakeLists.txt new file mode 100644 index 00000000..9ef460c3 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/CMakeLists.txt @@ -0,0 +1,226 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2008 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +include(${PROJECT_SOURCE_DIR}/pch.txt) + +include_directories( + ${CMAKE_CURRENT_BINARY_DIR} + ) + +subdirs ( + ctrl + midiedit + widgets + master + instruments + marker + liste + waveedit + ) + +QT4_WRAP_UI (muse_ui_headers + preferences.ui + exportmididialog.ui + configmidifile.ui + transport.ui + aboutbox.ui + transpose.ui + projectpropsdialog.ui + projectdialog.ui + templatedialog.ui + importmidi.ui + routedialog.ui + configtrack.ui + midiportinfo.ui + miditrackinfo.ui + ) + +QT4_WRAP_CPP ( muse_moc_headers + projectpropsdialog.h + projectdialog.h + templatedialog.h + preferences.h + plugingui.h + midiplugin.h + muse.h + song.h + transport.h + conf.h + editor.h + cobject.h + transpose.h + track.h + miditrackbase.h + midisynti.h + miditrack.h + wavetrack.h + audiotrack.h + audiooutput.h + audioinput.h + audiogroup.h + synth.h + exportmidi.h + importmidi.h + midiinport.h + midioutport.h + astrip.h + midirack.h + mixer.h + mstrip.h + rack.h + routedialog.h + strip.h + arranger.h + canvas.h + configtrack.h + partdrag.h + tllineedit.h + tlswidget.h + tlwidget.h + trackdrag.h + trackinfo.h + ) + +QT4_ADD_RESOURCES (muse_qrc_files muse.qrc) + +add_executable ( muse + ${muse_qrc_files} + ${muse_moc_headers} + ${muse_ui_headers} + ${PROJECT_BINARY_DIR}/all.h.pch + + ticksynth.cpp + vst.cpp + dssihost.cpp + synth.cpp + plugin.cpp + ladspaplugin.cpp + auxplugin.cpp + pipeline.cpp + mtc.cpp + thread.cpp + audio.cpp + audioprefetch.cpp + audiowriteback.cpp + globals.cpp + sync.cpp + part.cpp + undo.cpp + songfile.cpp + midi.cpp + importmidi.cpp + importmidi.h + midifile.cpp + icons.cpp + event.cpp + eventlist.cpp + midieventbase.cpp + waveevent.cpp + midievent.cpp + wave.cpp + seqmsg.cpp + help.cpp + midictrl.cpp + fifo.cpp + helper.cpp + route.cpp + shortcuts.cpp + ctrl.cpp + gconfig.cpp + midirc.cpp + midififo.cpp + midioutport.cpp + midiinport.cpp + midiout.cpp + + projectpropsdialog.cpp + projectdialog.cpp + templatedialog.cpp + preferences.cpp + plugingui.cpp + midiplugin.cpp + muse.cpp + song.cpp + songpart.cpp + songtrack.cpp + transport.cpp + conf.cpp + editor.cpp + cobject.cpp + transpose.cpp + track.cpp + miditrackbase.cpp + midisynti.cpp + miditrack.cpp + wavetrack.cpp + audiotrack.cpp + audiooutput.cpp + audioinput.cpp + audiogroup.cpp + exportmidi.cpp + revision.cpp + jack.cpp dummyaudio.cpp + astrip.cpp + midirack.cpp + mixer.cpp + mstrip.cpp + rack.cpp + routedialog.cpp + strip.cpp + + arranger.cpp + canvas.cpp + configtrack.cpp + partdrag.cpp + tllineedit.cpp + tlswidget.cpp + tlwidget.cpp + tlwlayout.cpp + trackdrag.cpp + trackinfo.cpp + ) + +set_target_properties( muse + PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h" + ) + +target_link_libraries(muse + midiedit + master + instruments + marker + liste + synti + waveedit + widgets + al + awl + ctrl + ${QT_LIBRARIES} + QtSvg + ${ALSA_LIB} + ${JACK_LIB} + ${SNDFILE_LIB} + ${SAMPLERATE_LIB} + ${LIBLO_LIB} + ) + +install_targets ( /bin muse ) + diff --git a/attic/muse_qt4_evolution/muse/aboutbox.ui b/attic/muse_qt4_evolution/muse/aboutbox.ui new file mode 100644 index 00000000..867c5536 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/aboutbox.ui @@ -0,0 +1,612 @@ + + AboutBox + + + + 0 + 0 + 585 + 348 + + + + + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + 221 + 223 + 228 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 85 + 85 + 85 + + + + + + + 199 + 199 + 199 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 239 + 237 + 165 + + + + + + + 0 + 0 + 0 + + + + + + + 103 + 141 + 178 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + 232 + 232 + 232 + + + + + + + + + 0 + 0 + 0 + + + + + + + 221 + 223 + 228 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 85 + 85 + 85 + + + + + + + 199 + 199 + 199 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 239 + 237 + 165 + + + + + + + 0 + 0 + 0 + + + + + + + 103 + 141 + 178 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + 232 + 232 + 232 + + + + + + + + + 128 + 128 + 128 + + + + + + + 221 + 223 + 228 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 85 + 85 + 85 + + + + + + + 199 + 199 + 199 + + + + + + + 199 + 199 + 199 + + + + + + + 255 + 255 + 255 + + + + + + + 128 + 128 + 128 + + + + + + + 239 + 237 + 165 + + + + + + + 239 + 237 + 165 + + + + + + + 0 + 0 + 0 + + + + + + + 86 + 117 + 148 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + 232 + 232 + 232 + + + + + + + + AboutBox + + + + + + + + + 0 + 0 + + + + + + + Qt::PlainText + + + :/xpm/muse_icon_64x64.png + + + 20 + + + + + + + + + + 14 + 75 + true + + + + MusE + + + 10 + + + + + + + Version: 2.0.1 + + + 20 + + + + + + + Revision: 628 + + + 20 + + + + + + + + 0 + 0 + + + + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Arial'; font-size:14pt; font-weight:600;"><span style=" font-size:10pt; font-weight:400;">(C) Copyright 1999-2008 Werner Schweer and Others. </span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Arial'; font-size:10pt;">See http://www.muse-sequencer.org for new versions and</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Arial'; font-size:10pt;">more information.</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Arial'; font-size:10pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Arial'; font-size:10pt;">Published under the GNU Public License</p></body></html> + + + false + + + + + + + + + + + QDialogButtonBox::Ok + + + + + + + + + + + + buttonBox + accepted() + AboutBox + accept() + + + 531 + 326 + + + 582 + 29 + + + + + diff --git a/attic/muse_qt4_evolution/muse/arranger.cpp b/attic/muse_qt4_evolution/muse/arranger.cpp new file mode 100644 index 00000000..82c859cb --- /dev/null +++ b/attic/muse_qt4_evolution/muse/arranger.cpp @@ -0,0 +1,1382 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "song.h" +#include "muse.h" +#include "arranger.h" +#include "tlwidget.h" +#include "tlswidget.h" +#include "icons.h" +#include "widgets/simplebutton.h" +#include "configtrack.h" +#include "canvas.h" +#include "widgets/utils.h" +#include "widgets/splitter.h" +#include "astrip.h" +#include "mstrip.h" +#include "audio.h" +#include "shortcuts.h" +#include "trackinfo.h" +#include "midictrl.h" +#include "gconfig.h" +#include "part.h" + +//--------------------------------------------------------- +// TrElement elements +// list of available track gui elements +//--------------------------------------------------------- + +const TrElement trElements[] = { + TrElement(TR_NAME, 1, "trackname", -1), + TrElement(TR_RECORD, 0, "record", + Track::M_MIDI | Track::M_AUDIO_OUTPUT | Track::M_WAVE), + TrElement(TR_OFF, 2, "off", + Track::M_AUDIO_OUTPUT + | Track::M_AUDIO_GROUP + | Track::M_WAVE + | Track::M_AUDIO_INPUT + | Track::M_AUDIO_SOFTSYNTH), + TrElement(TR_DRUMMAP, 2, "use drum map", Track::M_MIDI), + TrElement(TR_MUTE, 3, "mute", -1), + TrElement(TR_SOLO, 3, "solo", -1), + TrElement(TR_MONITOR, 3, "monitor", + Track::M_MIDI | Track::M_WAVE), + TrElement(TR_AREAD, 4, "automation read", + -1 & ~(Track::M_MIDI_IN | Track::M_MIDI)), + TrElement(TR_AWRITE, 4, "automation write", + -1 & ~(Track::M_MIDI_IN | Track::M_MIDI)), + TrElement(TR_OCHANNEL, 5, "output channel", Track::M_MIDI), + TrElement(TR_INSTRUMENT, 6, "instrument", Track::M_MIDI_OUT), + TrElement(TR_PATCH, 7, "patch", Track::M_MIDI), + }; + +const int nTrElements = sizeof(trElements)/sizeof(*trElements); + +TrGroupList glist[Track::TRACK_TYPES]; + +extern void populateAddTrack(QMenu*); + +//--------------------------------------------------------- +// sizeHint +//--------------------------------------------------------- + +QSize InfoStack::sizeHint() const + { + return QSize(infoWidth, height()); + } + +//--------------------------------------------------------- +// TLayout +// simple layout for trackList +//--------------------------------------------------------- + +class TLayout : public QLayout { + QList itemList; + + public: + TLayout() {} + ~TLayout(); + + void addItem(QLayoutItem* item); + void insertWidget(int index, QWidget* item); + Qt::Orientations expandingDirections() const { return 0; } + bool hasHeightForWidth() const { return false; } + int count() const { return itemList.size(); } + void setGeometry(const QRect &rect); + QSize sizeHint() const { return ((QWidget*)parent())->size(); } + QLayoutItem *itemAt(int index) const { return itemList.value(index); } + QLayoutItem *takeAt(int idx) { + return idx >= 0 && idx < itemList.size() ? itemList.takeAt(idx) : 0; + } + void clear() { + QLayoutItem* child; + while ((child = takeAt(0)) != 0) { + delete child; + } + } + }; + +//--------------------------------------------------------- +// TLayout +//--------------------------------------------------------- + +TLayout::~TLayout() + { + QLayoutItem* child; + while ((child = takeAt(0)) != 0) + delete child; + } + +//--------------------------------------------------------- +// insertWidget +//--------------------------------------------------------- + +void TLayout::insertWidget(int index, QWidget* item) + { + if (item->parent() == 0) + item->setParent((QWidget*)parent()); + itemList.insert(index, new QWidgetItem(item)); + update(); + } + +//--------------------------------------------------------- +// addItem +//--------------------------------------------------------- + +void TLayout::addItem(QLayoutItem* item) + { + itemList.append(item); + update(); + } + +//--------------------------------------------------------- +// setGeometry +//--------------------------------------------------------- + +void TLayout::setGeometry(const QRect& r) + { + int y = r.y(); + int n = itemList.size(); + int width = r.width(); // ((QWidget*)parent())->width(); + for (int i = 0; i < n; ++i) { + QLayoutItem *item = itemList.at(i); + QWidget* w = item->widget(); + int h = w->height(); + w->setGeometry(0, y, width, h); + y += h; + } + } + +//--------------------------------------------------------- +// TlsvLayout +//--------------------------------------------------------- + +class TlsvLayout : public QLayout { + QList itemList; + int dx, dy; + + public: + TlsvLayout() { + dx = 0; + dy = 0; + } + ~TlsvLayout(); + + void setOffset(int x, int y) { + dx = x; + dy = y; + } + void addItem(QLayoutItem* item); + void insertWidget(int index, QWidget* item); + Qt::Orientations expandingDirections() const { return 0; } + bool hasHeightForWidth() const { return false; } + int count() const { return itemList.size(); } + void setGeometry(const QRect &rect); + QSize sizeHint() const { return ((QWidget*)parent())->size(); } + QLayoutItem *itemAt(int index) const { return itemList.value(index); } + QLayoutItem *takeAt(int idx) { + return idx >= 0 && idx < itemList.size() ? itemList.takeAt(idx) : 0; + } + }; + +//--------------------------------------------------------- +// TlsvLayout +//--------------------------------------------------------- + +TlsvLayout::~TlsvLayout() + { + QLayoutItem* child; + while ((child = takeAt(0)) != 0) + delete child; + } + +//--------------------------------------------------------- +// insertWidget +//--------------------------------------------------------- + +void TlsvLayout::insertWidget(int index, QWidget* item) + { + if (item->parent() == 0) + item->setParent((QWidget*)parent()); + itemList.insert(index, new QWidgetItem(item)); + update(); + } + +//--------------------------------------------------------- +// addItem +//--------------------------------------------------------- + +void TlsvLayout::addItem(QLayoutItem* item) + { + itemList.append(item); + update(); + } + +//--------------------------------------------------------- +// setGeometry +//--------------------------------------------------------- + +void TlsvLayout::setGeometry(const QRect& r) + { + QLayoutItem *item = itemList.at(0); + QWidget* w = item->widget(); + w->setGeometry(dx, dy, r.width(), w->height()); + } + +//--------------------------------------------------------- +// newAddTrackMenu +//--------------------------------------------------------- + +QMenu* newAddTrackMenu(QWidget* parent) + { + QMenu* menu = new QMenu(parent); + populateAddTrack(menu); + return menu; + } + +//--------------------------------------------------------- +// Arranger +//--------------------------------------------------------- + +Arranger::Arranger(QMainWindow* parent) + : QWidget(parent) + { +// setFocusPolicy(Qt::StrongFocus); + setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + + for (int i = 0; i < Track::TRACK_TYPES; ++i) + trackInfos[i] = 0; + + zeroTrackInfo = 0; + _curTrack = 0; + strip = 0; + info = 0; + tool = PointerTool; + + for (int tt = 0; tt < Track::TRACK_TYPES; ++tt) { + int gn = 0; + TrElementList group; + for (int i = 0; i < nTrElements; ++i) { + if (!(trElements[i].trackMask & (1<setSpacing(0); + ml->setMargin(0); + setLayout(ml); + + infoDock = new QDockWidget(tr("TrackInfo")); + infoDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); + infoDockAction = infoDock->toggleViewAction(); + + mixerDock = new QDockWidget(tr("")); + mixerDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); + mixerDockAction = mixerDock->toggleViewAction(); + + parent->setDockNestingEnabled(true); + + parent->addDockWidget(Qt::LeftDockWidgetArea, infoDock, Qt::Horizontal); + parent->addDockWidget(Qt::LeftDockWidgetArea, mixerDock, Qt::Horizontal); + + infoView = new QScrollArea; + infoView->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); + + infoDock->setWidget(infoView); + infoView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + + trackInfo = new InfoStack(); + infoView->setWidget(trackInfo); + infoView->setWidgetResizable(true); + + trackInfoVisible = false; + mixerStripVisible = false; + + infoDock->setVisible(false); + mixerDock->setVisible(false); + + connect(infoDockAction, SIGNAL(toggled(bool)), SLOT(toggleTrackInfo(bool))); + connect(mixerDockAction, SIGNAL(toggled(bool)), SLOT(toggleMixerStrip(bool))); + + tlsv = new TrackListWidget; + tlsv->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); + tlsvLayout = new TlsvLayout; + tlsv->setLayout(tlsvLayout); + trackList = new QWidget; + trackList->setAttribute(Qt::WA_StaticContents); + trackList->setMouseTracking(true); + + tlsv->layout()->addWidget(trackList); + tl = new TLayout; + trackList->setLayout(tl); + + // + // Toolbox + // + QHBoxLayout* ttoolsLayout = new QHBoxLayout; + ttoolsLayout->setMargin(1); + ttoolsLayout->setSpacing(1); + + SimpleButton* configButton = new SimpleButton(configIcon, configIcon); + configButton->setAutoRaise(true); + configButton->setToolTip(tr("Config Tracklist")); + configButton->setFixedHeight(rulerHeight-4); + connect(configButton, SIGNAL(clicked()), SLOT(configTrackList())); + ttoolsLayout->addWidget(configButton); + ttoolsLayout->addStretch(100); + + gmute = newMuteButton(); + gmute->setFixedWidth(rulerHeight); + gmute->setToolTip(tr("all mute off")); + gmute->setFixedHeight(rulerHeight-4); + ttoolsLayout->addWidget(gmute); + setGMute(); + connect(song, SIGNAL(muteChanged(Track*,bool)), SLOT(setGMute())); + connect(gmute, SIGNAL(clicked(bool)), SLOT(offGMute())); + + gsolo = newSoloButton(); + gsolo->setFixedWidth(rulerHeight); + gsolo->setToolTip(tr("all solo off")); + gsolo->setFixedHeight(rulerHeight-4); + ttoolsLayout->addWidget(gsolo); + setGSolo(); + connect(song, SIGNAL(soloChanged(Track*,bool)), SLOT(setGSolo())); + connect(gsolo, SIGNAL(clicked(bool)), SLOT(offGSolo())); + + gar = newAutoReadButton(); + gar->setFixedWidth(rulerHeight); + gar->setToolTip(tr("all autoRead off")); + gar->setFixedHeight(rulerHeight-4); + ttoolsLayout->addWidget(gar); + setGar(); + connect(song, SIGNAL(autoReadChanged(Track*,bool)), SLOT(setGar())); + connect(gar, SIGNAL(clicked(bool)), SLOT(offGar())); + + gaw = newAutoWriteButton(); + gaw->setFixedWidth(rulerHeight); + gaw->setToolTip(tr("all autoWrite off")); + gaw->setFixedHeight(rulerHeight-4); + ttoolsLayout->addWidget(gaw); + setGaw(); + connect(song, SIGNAL(autoWriteChanged(Track*,bool)), SLOT(setGaw())); + connect(gaw, SIGNAL(clicked(bool)), SLOT(offGaw())); + + QHBoxLayout* infoboxLayout = new QHBoxLayout; + infoboxLayout->setMargin(1); + infoboxLayout->setSpacing(1); + + SimpleButton* tifButton = new SimpleButton(QString()); + tifButton->setCheckable(true); + tifButton->setFixedSize(infoHeight-2, infoHeight); + tifButton->setDefaultAction(infoDockAction); + infoDockAction->setText(tr("i")); + infoDockAction->setToolTip(tr("Show Track Info")); + infoboxLayout->addWidget(tifButton); + + SimpleButton* mstButton = new SimpleButton(QString()); + mstButton->setCheckable(true); + mstButton->setFixedSize(infoHeight-2, infoHeight); + mstButton->setDefaultAction(mixerDockAction); + mixerDockAction->setText(tr("m")); + mixerDockAction->setToolTip(tr("Show Mixer Strip")); + infoboxLayout->addWidget(mstButton); + + infoboxLayout->addStretch(100); + + split = new Splitter(Qt::Horizontal); + split->setOpaqueResize(true); + split->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + QWidget* tw = new QWidget; + split->addWidget(tw); + QVBoxLayout* trackListGrid = new QVBoxLayout; + trackListGrid->setMargin(0); + trackListGrid->setSpacing(0); + tw->setLayout(trackListGrid); + + trackListGrid->addLayout(ttoolsLayout); + QFrame* ruler = hLine(0); + ruler->setLineWidth(2); + trackListGrid->addWidget(ruler); + trackListGrid->addWidget(tlsv, 100); + trackListGrid->addLayout(infoboxLayout); + + // + // canvas widget + // + canvas = new PartCanvas; + canvas->setCornerWidget(new QSizeGrip(canvas)); + split->addWidget(canvas); + split->setStretchFactor(1, 100); + canvas->setTool(tool); + canvas->verticalScrollBar()->setSingleStep(minTrackHeight/2); + + connect(tlsv, SIGNAL(mouseWheel(QWheelEvent*)), SLOT(mouseWheel(QWheelEvent*))); + connect(song, SIGNAL(posChanged(int,const AL::Pos&,bool)), canvas, SLOT(setLocatorPos(int,const AL::Pos&,bool))); + connect(song, SIGNAL(lenChanged(const AL::Pos&)), canvas, SLOT(setEndPos(const AL::Pos&))); + connect(song, SIGNAL(tempoChanged()), canvas, SLOT(tempoChanged())); + connect(canvas, SIGNAL(kbdMovementUpdate(Track*, Part*)), SLOT(kbdMovementUpdate(Track*, Part*))); + connect(muse, SIGNAL(rasterChanged(int)), canvas, SLOT(setRaster(int))); + connect(canvas, SIGNAL(cursorPos(const AL::Pos&,bool)), SIGNAL(cursorPos(const AL::Pos&,bool))); + connect(canvas, SIGNAL(contentsMoving(int,int)), SLOT(setTLViewPos(int,int))); + connect(canvas, SIGNAL(posChanged(int,const AL::Pos&)), SLOT(setPos(int,const AL::Pos&))); + + connect(canvas, SIGNAL(createLRPart(Track*)), song, SLOT(cmdCreateLRPart(Track*))); + connect(canvas, SIGNAL(doubleClickPart(Part*)), SIGNAL(editPart(Part*))); + connect(canvas, SIGNAL(startEditor(Part*,int)), muse, SLOT(startEditor(Part*,int))); + connect(canvas, SIGNAL(partChanged(Part*,unsigned,unsigned)), + song, SLOT(cmdChangePart(Part*,unsigned,unsigned))); + connect(canvas, SIGNAL(addMarker(const AL::Pos&)), SLOT(addMarker(const AL::Pos&))); + connect(canvas, SIGNAL(removeMarker(const AL::Pos&)), SLOT(removeMarker(const AL::Pos&))); + + layout()->addWidget(split); + + connect(muse, SIGNAL(configChanged()), SLOT(updateConfiguration())); + connect(song, SIGNAL(trackSelectionChanged(Track*)), SLOT(setSelectedTrack(Track*))); + connect(song, SIGNAL(trackRemoved(Track*)), SLOT(removeTrack(Track*))); + connect(song, SIGNAL(trackAdded(Track*,int)), SLOT(insertTrack(Track*))); + connect(muse, SIGNAL(startLoadSong()), SLOT(startLoadSong())); + } + +//--------------------------------------------------------- +// setPos +//--------------------------------------------------------- + +void Arranger::setPos(int idx, const AL::Pos& pos) + { + song->setPos(idx, pos.snaped(muse->raster())); + } + +//--------------------------------------------------------- +// setTLViewPos +//--------------------------------------------------------- + +void Arranger::setTLViewPos(int /*x*/, int y) + { +#if 1 + int dy = y + trackList->y(); + tlsv->scroll(0, -dy); +#else + trackList->setGeometry(0, -y, trackList->width(), trackList->height()); +#endif + tlsvLayout->setOffset(0, -y); + } + +//--------------------------------------------------------- +// tlIndex +//--------------------------------------------------------- + +int Arranger::tlIndex(Track* t) const + { + const TrackList* stl = song->tracks(); + + int idx = 0; + for (ciTrack i = stl->begin(); i != stl->end(); ++i, ++idx) { + if (*i == t) + break; + ArrangerTrack* at = &(*i)->arrangerTrack; + if (at->tw == 0) + continue; + idx += (*i)->subtracks.size(); + } + return idx; + } + +int Arranger::tlIndex(ArrangerTrack* t) const + { + TrackList* stl = song->tracks(); + + int idx = 0; + for (ciTrack i = stl->begin(); i != stl->end(); ++i, ++idx) { + ArrangerTrack* at = &(*i)->arrangerTrack; + if (at->tw == 0) + continue; + ArrangerTrackList& atl = (*i)->subtracks; + for (iArrangerTrack k = atl.begin(); k != atl.end(); ++k) { + ++idx; + if (*k == t) + return idx; + } + } + return -1; // crash + } + +//--------------------------------------------------------- +// insertTrack +//--------------------------------------------------------- + +void Arranger::insertTrack1(Track* t) + { + int idx = tlIndex(t); + //------------------------- + // track list widget + //------------------------- + + TLWidget* tw = new TLWidget(t, &glist[t->type()]); + tw->setFixedHeight(t->arrangerTrack.h); + tl->insertWidget(idx, tw); + tw->show(); // needed if song is reloaded + + connect(tw, SIGNAL(plusClicked(TLWidget*)), SLOT(appendSubtrack(TLWidget*))); + connect(tw, SIGNAL(moveTrack(Track*,Track*)), SLOT(moveTrack(Track*,Track*))); + connect(this, SIGNAL(configChanged()), tw, SLOT(configChanged())); + connect(tw, SIGNAL(drag(int, int)), SLOT(drag(int,int))); + connect(tw, SIGNAL(startDrag(int)), SLOT(startDrag(int))); + connect(t, SIGNAL(partsChanged()), canvas->widget(), SLOT(update())); + + ArrangerTrack* at = &(t->arrangerTrack); + at->tw = tw; + } + +void Arranger::insertTrack(Track* t) + { + insertTrack1(t); + t->arrangerTrack.tw->show(); + updateIndex(); + if (_curTrack == 0) + setSelectedTrack(_curTrack); + } + +//--------------------------------------------------------- +// removeTrack +//--------------------------------------------------------- + +void Arranger::removeTrack(Track* t) + { + ArrangerTrack* at = &t->arrangerTrack; + if (at->tw == 0) + return; + + tl->removeWidget(at->tw); + + at->tw->close(); + at->tw = 0; + + for (iArrangerTrack i = t->subtracks.begin(); i != t->subtracks.end(); ++i) { + ArrangerTrack* at = *i; + tl->removeWidget(at->tw); + at->tw->close(); + } + t->subtracks.clear(); + + if (t == _curTrack) { + if (!song->tracks()->isEmpty()) + song->selectTrack(song->tracks()->front()); + } + updateIndex(); + } + +//--------------------------------------------------------- +// drag +//--------------------------------------------------------- + +void Arranger::drag(int trackIdx, int delta) + { + int h = startH + delta; + if (h < minTrackHeight) + h = minTrackHeight; + ArrangerTrack* at = atrack(trackIdx); + at->tw->setFixedHeight(h); + updateIndex(); + } + +//--------------------------------------------------------- +// startDrag +//--------------------------------------------------------- + +void Arranger::startDrag(int trackIdx) + { + ArrangerTrack* at = atrack(trackIdx); + startH = at->tw->height(); + } + +//--------------------------------------------------------- +// TrackListWidget +//--------------------------------------------------------- + +TrackListWidget::TrackListWidget(QWidget* parent) + : QWidget(parent) + { + setAttribute(Qt::WA_NoSystemBackground); + setAttribute(Qt::WA_StaticContents); + } + +//--------------------------------------------------------- +// paintEvent +//--------------------------------------------------------- + +void TrackListWidget::paintEvent(QPaintEvent* ev) + { + QPainter p(this); + p.eraseRect(ev->rect()); + } + +//--------------------------------------------------------- +// mousePressEvent +//--------------------------------------------------------- + +void TrackListWidget::mousePressEvent(QMouseEvent* ev) + { + if (ev->button() == Qt::RightButton) { + QMenu* menu = newAddTrackMenu(this); + menu->exec(ev->globalPos()); + } + } + +//--------------------------------------------------------- +// wheelEvent +//--------------------------------------------------------- + +void TrackListWidget::wheelEvent(QWheelEvent* e) + { + emit mouseWheel(e); + } + +//--------------------------------------------------------- +// mouseWheel +// get redirected mouse wheel events from TrackListWidget +//--------------------------------------------------------- + +void Arranger::mouseWheel(QWheelEvent* e) + { + if (e->orientation() != Qt::Vertical) + return; + QScrollBar* sb = canvas->verticalScrollBar(); + int step = qMin(QApplication::wheelScrollLines() * sb->singleStep(), sb->pageStep()); + if ((e->modifiers() & Qt::ControlModifier) || (e->modifiers() & Qt::ShiftModifier)) + step = sb->pageStep(); + int offset = e->delta() * step / 120; + if (sb->invertedControls()) + offset = -offset; + if (qAbs(offset) < 1) + return; + sb->setValue(sb->value() + offset); + e->accept(); + } + +//--------------------------------------------------------- +// appendSubtrack +// the user requests a new controller subtrack +//--------------------------------------------------------- + +void Arranger::appendSubtrack(TLWidget* trackWidget) + { + Track* t = trackWidget->track(); + + ArrangerTrack* at = new ArrangerTrack; + at->h = minTrackHeight; + at->ctrl = CTRL_NO_CTRL; + t->subtracks.push_back(at); + if(initSubtrack(t, at)==true) { + updateIndex(); + } + else { + t->subtracks.remove(at); + delete at; + } + } + +//--------------------------------------------------------- +// initSubtrack +//--------------------------------------------------------- + +bool Arranger::initSubtrack(Track* t, ArrangerTrack* at) + { + TLSWidget* tw = new TLSWidget(t, at, canvas); + tw->setFixedHeight(at->h); + + if(tw->setCtrl(at->ctrl) == true) { + tl->insertWidget(tlIndex(at), tw); + at->tw = tw; + connect(tw, SIGNAL(minusClicked(TLSWidget*)), SLOT(removeSubtrack(TLSWidget*))); + connect(tw, SIGNAL(controllerChanged(int)), canvas->widget(), SLOT(update())); + connect(tw, SIGNAL(drag(int, int)), SLOT(drag(int,int))); + connect(tw, SIGNAL(startDrag(int)), SLOT(startDrag(int))); + tw->show(); + } + else { + delete tw; + return false; + } + return true; + } + +//--------------------------------------------------------- +// removeSubtrack +//--------------------------------------------------------- + +void Arranger::removeSubtrack(TLSWidget* w) + { + Track* t = w->track(); + for (iArrangerTrack it = t->subtracks.begin(); it != t->subtracks.end(); ++it) { + ArrangerTrack* at = *it; + if (at->tw == w) { + tl->removeWidget(at->tw); +// at->tw->close(); + delete at->tw; + t->subtracks.erase(it); + delete at; + break; + } + } + updateIndex(); + } + +//--------------------------------------------------------- +// configTrackList +//--------------------------------------------------------- + +void Arranger::configTrackList() + { + if (configTrackEditor == 0) { + configTrackEditor = new ConfigTrackList(this); + connect(configTrackEditor, SIGNAL(trackConfigChanged()), SIGNAL(configChanged())); + } + configTrackEditor->show(); + } + +//--------------------------------------------------------- +// atrack +//--------------------------------------------------------- + +ArrangerTrack* Arranger::atrack(int idx) + { + int k = 0; + TrackList* stl = song->tracks(); + for (iTrack i = stl->begin(); i != stl->end(); ++i) { + ArrangerTrack* at = &(*i)->arrangerTrack; + if (idx == k) + return at; + ++k; + for (iArrangerTrack it = (*i)->subtracks.begin(); it != (*i)->subtracks.end(); ++it) { + ArrangerTrack* t = *it; + if (idx == k) + return t; + ++k; + } + } + return 0; + } + +//--------------------------------------------------------- +// updateIndex +// update vertical scrollbar & index values +//--------------------------------------------------------- + +void Arranger::updateIndex() + { + int idx = 0; + int h = 2 * defaultTrackHeight; // always show room for at least two + // tracks at end of list + + TrackList* stl = song->tracks(); + for (iTrack i = stl->begin(); i != stl->end(); ++i) { + ArrangerTrack* at = &(*i)->arrangerTrack; + if (at->tw == 0) + continue; + ((TLWidget*)at->tw)->setIdx(idx); + h += at->tw->height(); + ++idx; + for (iArrangerTrack it = (*i)->subtracks.begin(); it != (*i)->subtracks.end(); ++it) { + ArrangerTrack* t = *it; + if (t->tw == 0) + continue; + ((TLSWidget*)t->tw)->setIdx(idx); + h += t->tw->height(); + ++idx; + } + } + setGMute(); + setGSolo(); + setGar(); + setGaw(); + canvas->setVSize(h); + trackList->setFixedHeight(h + 32); + canvas->widget()->update(); + QPoint p(canvas->getWPos()); + setTLViewPos(0, p.y()); + } + +//--------------------------------------------------------- +// toggleTrackInfo +//--------------------------------------------------------- + +void Arranger::toggleTrackInfo(bool val) + { + trackInfoVisible = val; + if (trackInfoVisible) { + if (_curTrack == 0) { + if (zeroTrackInfo == 0) { + zeroTrackInfo = new QWidget(this); + trackInfo->addWidget(zeroTrackInfo); + } + trackInfo->setCurrentWidget(zeroTrackInfo); + + return; + } + Track::TrackType t = _curTrack->type(); + TrackInfo* w = trackInfos[t]; + if (w == 0) { + w = trackInfos[t] = createTrackInfo(); + trackInfo->addWidget(w); + } + w->init(_curTrack); + trackInfo->setCurrentWidget(w); + } +// infoDock->layout()->invalidate(); +// infoDock->layout()->update(); + } + +//--------------------------------------------------------- +// toggleMixerStrip +//--------------------------------------------------------- + +void Arranger::toggleMixerStrip(bool val) + { + mixerStripVisible = val; + if (mixerStripVisible && _curTrack) { + if (strip && _curTrack != strip->getTrack()) { + strip->close(); + strip = 0; + } + if (!strip) { + switch(_curTrack->type()) { + case Track::MIDI_IN: + strip = new MidiInPortStrip(0, (MidiInPort*)_curTrack, false); + break; + case Track::MIDI_OUT: + strip = new MidiOutPortStrip(0, (MidiOutPort*)_curTrack, false); + break; + case Track::MIDI_SYNTI: + strip = new MidiSyntiStrip(0, (MidiSynti*)_curTrack, false); + break; + case Track::MIDI: + strip = new MidiStrip(0, (MidiTrack*)_curTrack, false); + break; + default: + strip = new AudioStrip(0, (AudioTrack*)_curTrack, false); + break; + } + // + // it looks like the dock widget has a minimum + // width + strip->setFixedWidth(STRIP_WIDTH + 10); + mixerDock->setWidget(strip); + } + } + else { + if (strip) { + strip->close(); + strip = 0; + } + } + } + +//--------------------------------------------------------- +// startLoadSong +//--------------------------------------------------------- + +void Arranger::startLoadSong() + { + if (strip) + strip->close(); + strip = 0; + + TrackList* stl = song->tracks(); + for (iTrack i = stl->begin(); i != stl->end(); ++i) { + ArrangerTrack* at = &(*i)->arrangerTrack; + tl->removeWidget(at->tw); + at->tw->close(); + delete at->tw; + at->tw = 0; + for (iArrangerTrack it = (*i)->subtracks.begin(); it != (*i)->subtracks.end(); ++it) { + ArrangerTrack* at = *it; + tl->removeWidget(at->tw); + at->tw->close(); + delete at->tw; + } + (*i)->subtracks.clear(); + } + _curTrack = 0; + } + +//--------------------------------------------------------- +// endLoadSong +// create track list widgets +//--------------------------------------------------------- + +void Arranger::endLoadSong() + { + TrackList* stl = song->tracks(); + + for (iTrack i = stl->begin(); i != stl->end(); ++i) { + Track* t = *i; + insertTrack1(t); + for (iArrangerTrack i = t->subtracks.begin(); i != t->subtracks.end(); ++i) { + initSubtrack(t, *i); + } + } + updateIndex(); + setSelectedTrack(song->selectedTrack()); + infoDock->setVisible(trackInfoVisible); + mixerDock->setVisible(mixerStripVisible); + } + +//--------------------------------------------------------- +// updateConfiguration +//--------------------------------------------------------- + +void Arranger::updateConfiguration() + { + if (config.canvasUseBgPixmap) { + canvas->setCanvasBackground(QPixmap(config.canvasBgPixmap)); + } + else + canvas->setCanvasBackground(config.canvasBgColor); +//TD canvas->setShowGrid(config.canvasShowGrid); +//TD update(); + } + +//--------------------------------------------------------- +// readStatus +//--------------------------------------------------------- + +void Arranger::readStatus(QDomNode node) + { + TrackList* tl = song->tracks(); + iTrack it = tl->begin(); + + QPoint wpos; + double xmag = 0.05; + double ymag = 1.0; + + for (; !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + QString tag(e.tagName()); + QString s = e.text(); + int i = s.toInt(); + if (tag == "info") + trackInfoVisible = i; + else if (tag == "strip") + mixerStripVisible = i; + else if (tag == "TrackConf") { + } + else if (tag == "hmag") + xmag = s.toDouble(); + else if (tag == "vmag") + ymag = s.toDouble(); + else if (tag == "hpos") + wpos.setX(i); + else if (tag == "vpos") + wpos.setY(i); + else if (tag == "raster") { + muse->initRaster(i); + canvas->setRaster(i); + } + else if (tag == "splitter") { + split->readStatus(node); + QList sizes = split->sizes(); + split->setSizes(sizes); + } + else + printf("Arranger: unknown tag %s\n", tag.toLatin1().data()); + } + canvas->setMag(xmag, ymag); + canvas->setWPos(wpos); + } + +//--------------------------------------------------------- +// writeStatus +//--------------------------------------------------------- + +void Arranger::writeStatus(Xml& xml) + { + xml.stag("arranger"); + + for (int i = 0; i < Track::TRACK_TYPES; ++i) { + TrGroupList* gl = &glist[i]; + xml.stag(QString("TrackConf type=\"%1\"").arg(i)); + for (iTrGroup ig = gl->begin(); ig != gl->end(); ++ig) { + TrElementList& el = *ig; + xml.stag("group"); + for (iTrElement ie = el.begin(); ie != el.end(); ++ie) + xml.tagE(QString("element id=\"%1\"").arg((*ie)->id)); + xml.etag("group"); + } + xml.etag("TrackConf"); + } + xml.tag("info", trackInfoVisible); + xml.tag("strip", mixerStripVisible); + xml.tag("hmag", canvas->xmag()); + xml.tag("vmag", canvas->ymag()); + xml.tag("hpos", canvas->getWPos().x()); + xml.tag("vpos", canvas->getWPos().y()); + xml.tag("raster", muse->raster()); + split->writeStatus("splitter", xml); + xml.etag("arranger"); + } + +//--------------------------------------------------------- +// setGMute +//--------------------------------------------------------- + +void Arranger::setGMute() + { + TrackList* tl = song->tracks(); + bool mute = false; + for (iTrack i = tl->begin(); i != tl->end(); ++i) { + if ((*i)->mute()) { + mute = true; + break; + } + } + gmute->setChecked(mute); + } + +//--------------------------------------------------------- +// setGSolo +//--------------------------------------------------------- + +void Arranger::setGSolo() + { + TrackList* tl = song->tracks(); + bool solo = false; + for (iTrack i = tl->begin(); i != tl->end(); ++i) { + if ((*i)->solo()) { + solo = true; + break; + } + } + gsolo->setChecked(solo); + } + +//--------------------------------------------------------- +// setGar +//--------------------------------------------------------- + +void Arranger::setGar() + { + TrackList* tl = song->tracks(); + bool ar = false; + for (iTrack i = tl->begin(); i != tl->end(); ++i) { + if ((*i)->autoRead()) { + ar = true; + break; + } + } + if (ar == false) { + MidiTrackList* cl = song->midis(); + for (iMidiTrack i = cl->begin(); i != cl->end(); ++i) { + if ((*i)->autoRead()) { + ar = true; + break; + } + } + } + gar->setChecked(ar); + } + +//--------------------------------------------------------- +// setGaw +//--------------------------------------------------------- + +void Arranger::setGaw() + { + TrackList*tl = song->tracks(); + bool aw = false; + for (iTrack i = tl->begin(); i != tl->end(); ++i) { + if ((*i)->autoWrite()) + aw = true; + } + if (aw == false) { + MidiTrackList* cl = song->midis(); + for (iMidiTrack i = cl->begin(); i != cl->end(); ++i) { + if ((*i)->autoWrite()) { + aw = true; + break; + } + } + } + gaw->setChecked(aw); + } + +//--------------------------------------------------------- +// offGMute +//--------------------------------------------------------- + +void Arranger::offGMute() + { + TrackList*tl = song->tracks(); + for (iTrack i = tl->begin(); i != tl->end(); ++i) + song->setMute(*i,false); + gmute->setChecked(false); + } + +//--------------------------------------------------------- +// offGSolo +//--------------------------------------------------------- + +void Arranger::offGSolo() + { + TrackList*tl = song->tracks(); + for (iTrack i = tl->begin(); i != tl->end(); ++i) + song->setSolo(*i, false); + gsolo->setChecked(false); + } + +//--------------------------------------------------------- +// offGar +//--------------------------------------------------------- + +void Arranger::offGar() + { + TrackList*tl = song->tracks(); + for (iTrack i = tl->begin(); i != tl->end(); ++i) + song->setAutoRead(*i, false); + MidiTrackList* cl = song->midis(); + for (iMidiTrack i = cl->begin(); i != cl->end(); ++i) + song->setAutoRead(*i, false); + gar->setChecked(false); + } + +//--------------------------------------------------------- +// offGaw +//--------------------------------------------------------- + +void Arranger::offGaw() + { + TrackList*tl = song->tracks(); + for (iTrack i = tl->begin(); i != tl->end(); ++i) + song->setAutoWrite(*i, false); + MidiTrackList* cl = song->midis(); + for (iMidiTrack i = cl->begin(); i != cl->end(); ++i) + song->setAutoWrite(*i, false); + gaw->setChecked(false); + } + +//--------------------------------------------------------- +// setTool +//--------------------------------------------------------- + +void Arranger::setTool(int t) + { + tool = Tool(t); + canvas->setTool(tool); + } + +//--------------------------------------------------------- +// setSelectedTrack +//--------------------------------------------------------- + +void Arranger::setSelectedTrack(Track* t) + { + _curTrack = t; + toggleTrackInfo(trackInfoVisible); + toggleMixerStrip(mixerStripVisible); + } + +//--------------------------------------------------------- +// moveTrack +// move src before dst +//--------------------------------------------------------- + +void Arranger::moveTrack(Track* src, Track* dst) + { + audio->msgMoveTrack(src, dst); + tl->clear(); + TrackList* stl = song->tracks(); + for (iTrack i = stl->begin(); i != stl->end(); ++i) { + tl->addWidget((*i)->arrangerTrack.tw); + for (iArrangerTrack it = (*i)->subtracks.begin(); it != (*i)->subtracks.end(); ++it) + tl->addWidget((*it)->tw); + } + tl->setGeometry(((QWidget*)tl->parent())->geometry()); + updateIndex(); + } + +//--------------------------------------------------------- +//! \fn Arranger::keyPressEvent(QKeyEvent* e) +//! \brief Called when a key is pressed +//! @param e The key event +//--------------------------------------------------------- + +void Arranger::keyPressEvent(QKeyEvent* /*e*/) + { + printf("Arranger::keyPressEvent\n"); +#if 0 //TODOB + int key = e->key(); + bool keypress_handled = false; + + if (e->modifiers() & Qt::ShiftModifier) + key += Qt::SHIFT; + if (e->modifiers() & Qt::AltModifier) + key += Qt::ALT; + if (e->modifiers() & Qt::ControlModifier) + key += Qt::CTRL; + + if (shortcutsKbdMovement.isValid()) { + if (key == shortcuts[SHRT_SEL_LEFT].key || key == shortcuts[SHRT_SEL_LEFT_ADD].key) { + keypress_handled = true; + bool add = (key == shortcuts[SHRT_SEL_LEFT_ADD].key); + PartList* parts = shortcutsKbdMovement.track()->parts(); + Part* nextLeft = 0; + + for (iPart i = parts->begin(); i != parts->end(); i++) { + Part* tmp = i->second; + if (!nextLeft) { + if (tmp->tick() < shortcutsKbdMovement.getLpos()) + nextLeft = tmp; + } + else { + if (tmp->tick() > nextLeft->tick() && tmp->tick() < shortcutsKbdMovement.getLpos() ) + nextLeft = tmp; + } + } + if (nextLeft) { + song->selectPart(nextLeft, add); + shortcutsKbdMovement.setPart(nextLeft); + shortcutsKbdMovement.setPos(nextLeft->tick(), nextLeft->tick() + nextLeft->lenTick()); + } + } + else if (key == shortcuts[SHRT_SEL_RIGHT].key || key == shortcuts[SHRT_SEL_RIGHT_ADD].key) { + keypress_handled = true; + bool add = (key == shortcuts[SHRT_SEL_RIGHT_ADD].key); + PartList* parts = shortcutsKbdMovement.track()->parts(); + Part* nextRight = 0; + + for (iPart i = parts->begin(); i != parts->end(); i++) { + Part* tmp = i->second; + if (!nextRight) { + if (tmp->tick() > shortcutsKbdMovement.getLpos()) + nextRight = tmp; + } + else { + if (tmp->tick() < nextRight->tick() && tmp->tick() > shortcutsKbdMovement.getLpos() ) + nextRight = tmp; + } + } + if (nextRight) { + song->selectPart(nextRight, add); + shortcutsKbdMovement.setPart(nextRight); + shortcutsKbdMovement.setPos(nextRight->tick(), nextRight->tick() + nextRight->lenTick()); + } + } + + else if (key == shortcuts[SHRT_SEL_ABOVE].key) { + // TODO + } + else if (key == shortcuts[SHRT_SEL_BELOW].key) { + // TODO + } + } // -- end movement + else { + if (key == shortcuts[SHRT_TOOL_POINTER].key) { + emit toolChanged(PointerTool); + return; + } + else if (key == shortcuts[SHRT_TOOL_PENCIL].key) { + emit toolChanged(PencilTool); + return; + } + else if (key == shortcuts[SHRT_TOOL_RUBBER].key) { + emit toolChanged(RubberTool); + return; + } + else if (key == shortcuts[SHRT_TOOL_LINEDRAW].key) { + emit toolChanged(DrawTool); + return; + } + } + // If we haven't dealt with the keypress, pass it along + if (!keypress_handled) { + e->ignore(); + } +#endif +// e->ignore(); + } + + +/*! + \fn Arranger::kbdMovementUpdate(Track* t, Part* p) + \brief Slot connected to canvaswidget, called when a part is selected + @param t Track the selected part belongs to (null if no part selected) + @param p The selected Part (null if no part selected) + */ +void Arranger::kbdMovementUpdate(Track*, Part*) + { + printf("kbdMovementUpdate\n"); +// if (t && p ) { +// // If other track selected: +// if (t != shortcutsKbdMovement.track()) { +// TrackList* stl = song->tracks(); +// for (iTrack i = stl->begin(); i != stl->end(); ++i) { +// if (*i == t) { +// // Set focus and select current track +// t->arrangerTrack.tw->setFocus(); +// song->selectTrack(t); +// } +// } +// } +// shortcutsKbdMovement.setTrack(t); +// shortcutsKbdMovement.setPart(p); +// shortcutsKbdMovement.setPos(p->tick(), p->tick() + p->lenTick()); +// } +// else { // Deselected +// shortcutsKbdMovement.reset(); +// } + } + +//--------------------------------------------------------- +// addMarker +//--------------------------------------------------------- + +void Arranger::addMarker(const AL::Pos& pos) + { + song->addMarker(QString(), pos); + canvas->widget()->update(); + } + +//--------------------------------------------------------- +// removeMarker +//--------------------------------------------------------- + +void Arranger::removeMarker(const AL::Pos& pos) + { + AL::MarkerList* ml = song->marker(); + for (AL::iMarker i = ml->begin(); i != ml->end(); ++i) { + AL::iMarker ni = i; + ++ni; + if (i->second <= pos && (ni == ml->end() || ni->second > pos)) { + song->removeMarker(&(i->second)); + canvas->widget()->update(); + return; + } + } + printf("marker not found\n"); + } diff --git a/attic/muse_qt4_evolution/muse/arranger.h b/attic/muse_qt4_evolution/muse/arranger.h new file mode 100644 index 00000000..1c9f6e38 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/arranger.h @@ -0,0 +1,175 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __ARRANGER_H__ +#define __ARRANGER_H__ + +#include "widgets/tools.h" +#include "track.h" + +namespace AL { + class Xml; + class Pos; + }; +using AL::Xml; +class AL::Pos; + +class Track; +class TrackInfo; +class TLWidget; +class TLSWidget; +class PartCanvas; +class Part; +class SimpleButton; +class Strip; +class ArrangerTrack; +class Splitter; +class TlsvLayout; +class TLayout; + +//--------------------------------------------------------- +// InfoStack +//--------------------------------------------------------- + +class InfoStack : public QStackedWidget { + Q_OBJECT; + + virtual QSize sizeHint() const; + + public: + InfoStack() : QStackedWidget() {} + }; + +//--------------------------------------------------------- +// TrackListWidget +//--------------------------------------------------------- + +class TrackListWidget : public QWidget { + Q_OBJECT + + void mousePressEvent(QMouseEvent*); + void wheelEvent(QWheelEvent*); + virtual void paintEvent(QPaintEvent*); + + signals: + void mouseWheel(QWheelEvent*); + + public: + TrackListWidget(QWidget* parent = 0); + }; + +//--------------------------------------------------------- +// Arranger +//--------------------------------------------------------- + +class Arranger : public QWidget { + Q_OBJECT + + QAction* infoDockAction; + QAction* mixerDockAction; + + TrackInfo* trackInfos[Track::TRACK_TYPES]; + QWidget* zeroTrackInfo; + Tool tool; + QWidget* trackList; + PartCanvas* canvas; + TLayout* tl; // tracklist layout + TrackListWidget* tlsv; + TlsvLayout* tlsvLayout; + QDialog* configTrackEditor; + QStackedWidget* trackInfo; + QScrollArea* infoView; + Track* _curTrack; // current selected track + SimpleButton* gmute; + SimpleButton* gsolo; + SimpleButton* gar; + SimpleButton* gaw; + Strip* strip; + QStackedWidget* info; + + Splitter* split; + QDockWidget* infoDock; + QDockWidget* mixerDock; + + int startH; // start value for resize track height + + bool trackInfoVisible; + bool mixerStripVisible; + + void updateIndex(); + TrackInfo* createTrackInfo(); + int tlIndex(Track*) const; + int tlIndex(ArrangerTrack* t) const; + bool initSubtrack(Track* t, ArrangerTrack*); + ArrangerTrack* atrack(int idx); + void insertTrack1(Track*); + + private slots: + void startDrag(int idx); + void drag(int idx, int); + void setTLViewPos(int, int); + void appendSubtrack(TLWidget*); + void removeSubtrack(TLSWidget*); + void configTrackList(); + void toggleTrackInfo(bool); + void toggleMixerStrip(bool); + void setGMute(); + void setGSolo(); + void setGar(); + void setGaw(); + void offGMute(); + void offGSolo(); + void offGar(); + void offGaw(); + void setSelectedTrack(Track*); + void moveTrack(Track* src, Track* dst); + void kbdMovementUpdate(Track* t, Part* p); + void mouseWheel(QWheelEvent*); + void setPos(int, const AL::Pos&); + void addMarker(const AL::Pos&); + void removeMarker(const AL::Pos&); + + public slots: + void insertTrack(Track*); + void removeTrack(Track*); + void setTool(int t); + void updateConfiguration(); + void startLoadSong(); + + signals: + void configChanged(); + void toolChanged(int); + void editPart(Part*); + void cursorPos(const AL::Pos&,bool); + + public: + Arranger(QMainWindow* parent = 0); + void readStatus(QDomNode); + void writeStatus(Xml&); + Track* curTrack() const { return _curTrack; } + void endLoadSong(); + Strip* getStrip() const { return strip; } + + protected: + virtual void keyPressEvent(QKeyEvent* e); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/astrip.cpp b/attic/muse_qt4_evolution/muse/astrip.cpp new file mode 100644 index 00000000..8d6cdd09 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/astrip.cpp @@ -0,0 +1,791 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2000-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "audio.h" +#include "audiodev.h" +#include "song.h" +#include "astrip.h" +#include "synth.h" +#include "rack.h" +#include "gconfig.h" +#include "muse.h" +#include "widgets/simplebutton.h" +#include "widgets/utils.h" +#include "auxplugin.h" +#include "midiinport.h" +#include "midioutport.h" + +#include "awl/volknob.h" +#include "awl/panknob.h" +#include "awl/mslider.h" +#include "awl/volentry.h" +#include "awl/panentry.h" + +//--------------------------------------------------------- +// AudioStrip +// create mixer strip +//--------------------------------------------------------- + +AudioStrip::AudioStrip(Mixer* m, AudioTrack* t, bool align) + : Strip(m, t, align) + { + iR = 0; + oR = 0; + off = 0; + volume = -1.0; + channel = t->channels(); + + //--------------------------------------------------- + // prefader plugin rack + //--------------------------------------------------- + + rack1 = new EffectRack(this, t, true); + rack1->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + rack1->setFixedHeight(rack1->sizeHint().height() + 2); + grid->addWidget(rack1, 1, 0, 1, 2); + + //--------------------------------------------------- + // mono/stereo pre/post + //--------------------------------------------------- + + stereo = newStereoButton(); + stereo->setChecked(channel == 2); + stereo->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + stereo->setFixedHeight(LABEL_HEIGHT); + connect(stereo, SIGNAL(clicked(bool)), SLOT(stereoToggled(bool))); + + pre = new QToolButton; + pre->setObjectName("preButton"); + pre->setCheckable(true); + pre->setText(tr("Pre")); + pre->setToolTip(tr("pre fader - post fader")); + pre->setChecked(t->prefader()); + pre->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + pre->setFixedHeight(LABEL_HEIGHT); + connect(pre, SIGNAL(clicked(bool)), SLOT(preToggled(bool))); + + grid->addWidget(stereo, 2, 0); + grid->addWidget(pre, 2, 1); + + //--------------------------------------------------- + // slider, label + //--------------------------------------------------- + + slider = new Awl::MeterSlider(this); + slider->setRange(config.minSlider, config.maxSlider); + slider->setFixedWidth(60); + slider->setChannel(channel); + Ctrl* ctrl = t->getController(AC_VOLUME); + double vol = 0.0f; + if (ctrl) + vol = ctrl->curVal().f; + slider->setValue(vol); + grid->addWidget(slider, 3, 0, 1, 2); // 100, Qt::AlignRight); + + sl = new Awl::VolEntry(this); + sl->setSuffix(tr("dB")); + sl->setFrame(true); + sl->setValue(vol); + sl->setFixedHeight(entrySize.height()); + + connect(slider, SIGNAL(valueChanged(double,int)), SLOT(volumeChanged(double))); + connect(sl, SIGNAL(valueChanged(double,int)), SLOT(volumeChanged(double))); + + connect(slider, SIGNAL(sliderPressed(int)), SLOT(volumePressed())); + connect(slider, SIGNAL(sliderReleased(int)), SLOT(volumeReleased())); + connect(slider, SIGNAL(meterClicked()), SLOT(resetPeaks())); + grid->addWidget(sl, 4, 0, 1, 2); + + //--------------------------------------------------- + // pan, balance + //--------------------------------------------------- + + pan = addPanKnob(&panl, 5); + double panv = t->getController(AC_PAN)->curVal().f; + pan->setValue(panv); + panl->setValue(panv); + + //--------------------------------------------------- + // postfader plugin rack + //--------------------------------------------------- + + rack2 = new EffectRack(this, t, false); + rack2->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + rack2->setFixedHeight(rack1->sizeHint().height() + 2); + grid->addWidget(rack2, 7, 0, 1, 2); + + //--------------------------------------------------- + // mute, solo, record + //--------------------------------------------------- + + Track::TrackType type = t->type(); + + mute = newMuteButton(); + mute->setChecked(t->mute()); + mute->setFixedHeight(BUTTON_HEIGHT); + connect(mute, SIGNAL(clicked(bool)), SLOT(muteToggled(bool))); + connect(t, SIGNAL(muteChanged(bool)), mute, SLOT(setChecked(bool))); + + solo = newSoloButton(); + solo->setDisabled(true); + solo->setFixedHeight(BUTTON_HEIGHT); + connect(solo, SIGNAL(clicked(bool)), SLOT(soloToggled(bool))); + connect(t, SIGNAL(soloChanged(bool)), solo, SLOT(setChecked(bool))); + + off = newOffButton(); + off->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + off->setFixedHeight(BUTTON_HEIGHT); + off->setChecked(t->off()); + connect(off, SIGNAL(clicked(bool)), SLOT(offToggled(bool))); + connect(t, SIGNAL(offChanged(bool)), this, SLOT(updateOffState())); + + if (track->canRecord()) { + record = newRecordButton(); + record->setFixedHeight(BUTTON_HEIGHT); + if (type == Track::AUDIO_OUTPUT) + record->setToolTip(tr("record downmix")); + record->setChecked(t->recordFlag()); + connect(record, SIGNAL(clicked(bool)), SLOT(recordToggled(bool))); + connect(t, SIGNAL(recordChanged(bool)), record, SLOT(setChecked(bool))); + } + else + record = 0; + + grid->addWidget(off, 8, 0); + if (record) + grid->addWidget(record, 8, 1); + grid->addWidget(mute, 9, 0); + grid->addWidget(solo, 9, 1); + + //--------------------------------------------------- + // automation read write + //--------------------------------------------------- + + addAutomationButtons(10); + + //--------------------------------------------------- + // routing + //--------------------------------------------------- + + iR = newInRouteButton(); + grid->addWidget(iR, 12, 0); + connect(iR->menu(), SIGNAL(aboutToShow()), SLOT(iRouteShow())); + connect(iR->menu(), SIGNAL(aboutToHide()), SLOT(iRouteHide())); + connect(iR->menu(), SIGNAL(triggered(QAction*)), song, SLOT(routeChanged(QAction*))); + + oR = newOutRouteButton(); + grid->addWidget(oR, 12, 1); + connect(oR->menu(), SIGNAL(aboutToShow()), SLOT(oRouteShow())); + connect(oR->menu(), SIGNAL(aboutToHide()), SLOT(oRouteHide())); + connect(oR->menu(), SIGNAL(triggered(QAction*)), song, SLOT(routeChanged(QAction*))); + + if (off) { + updateOffState(); // init state + } + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + connect(track, SIGNAL(controllerChanged(int)), SLOT(controllerChanged(int))); + connect(track, SIGNAL(autoReadChanged(bool)), SLOT(autoChanged())); + connect(track, SIGNAL(autoWriteChanged(bool)), SLOT(autoChanged())); + autoChanged(); + } + +//--------------------------------------------------------- +// heartBeat +//--------------------------------------------------------- + +void AudioStrip::heartBeat() + { + int peakHold = (config.peakHoldTime * config.guiRefresh) / 1000; + for (int ch = 0; ch < channel; ++ch) { + int n = track->peakTimer(ch); + ++n; + double f = track->peak(ch); + if (n >= peakHold) { + // track->resetPeak(ch); + track->setPeak(ch, f * 0.7); + } + track->setPeakTimer(ch, n); + slider->setMeterVal(ch, track->meter(ch), f); + } + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void AudioStrip::songChanged(int val) + { + AudioTrack* src = (AudioTrack*)track; + if (val & SC_TRACK_MODIFIED) + updateLabel(); + if ((val & SC_ROUTE) && pre) + pre->setChecked(src->prefader()); + if (val & SC_CHANNELS) + updateChannels(); + } + +//--------------------------------------------------------- +// offToggled +//--------------------------------------------------------- + +void AudioStrip::offToggled(bool val) + { + song->setOff(track, !val); + } + +//--------------------------------------------------------- +// updateOffState +//--------------------------------------------------------- + +void AudioStrip::updateOffState() + { + bool val = !track->off(); + slider->setEnabled(val); + sl->setEnabled(val); + pan->setEnabled(val); + panl->setEnabled(val); + pre->setEnabled(val); + rack1->setEnabled(val); + rack2->setEnabled(val); + + if (track->type() != Track::AUDIO_SOFTSYNTH) + stereo->setEnabled(val); + label->setEnabled(val); + if (solo) + solo->setEnabled(val); + if (mute) + mute->setEnabled(val); + if (iR) + iR->setEnabled(val); + if (oR) + oR->setEnabled(val); + if (off) + off->setChecked(track->off()); + if (ar) + ar->setEnabled(val); + if (aw) + aw->setEnabled(val); + } + +//--------------------------------------------------------- +// preToggled +//--------------------------------------------------------- + +void AudioStrip::preToggled(bool val) + { + ((AudioTrack*)track)->setPrefader(val); + resetPeaks(); + song->update(SC_ROUTE); + } + +//--------------------------------------------------------- +// stereoToggled +//--------------------------------------------------------- + +void AudioStrip::stereoToggled(bool val) + { + int nc = val ? 1 : 2; + if (channel == nc) + return; + audio->msgSetChannels((AudioTrack*)track, nc); + song->update(SC_CHANNELS); + } + +//--------------------------------------------------------- +// volumeChanged +//--------------------------------------------------------- + +void AudioStrip::volumeChanged(double v) + { + CVal val; + val.f = v; + song->setControllerVal(track, AC_VOLUME, val); + } + +//--------------------------------------------------------- +// volumePressed +//--------------------------------------------------------- + +void AudioStrip::volumePressed() + { + ((AudioTrack*)track)->startAutoRecord(AC_VOLUME); + } + +//--------------------------------------------------------- +// volumeReleased +//--------------------------------------------------------- + +void AudioStrip::volumeReleased() + { + ((AudioTrack*)track)->stopAutoRecord(AC_VOLUME); + } + +//--------------------------------------------------------- +// panChanged +//--------------------------------------------------------- + +void AudioStrip::panChanged(double v) + { + if (v != panVal) { + CVal val; + val.f = v; + song->setControllerVal(track, AC_PAN, val); + panVal = v; + } + } + +//--------------------------------------------------------- +// setPan +//--------------------------------------------------------- + +void AudioStrip::setPan(double val) + { + if (val != panVal) { + panVal = val; + pan->setValue(val); + panl->setValue(val); + } + } + +//--------------------------------------------------------- +// panPressed +//--------------------------------------------------------- + +void AudioStrip::panPressed() + { + track->startAutoRecord(AC_PAN); + } + +//--------------------------------------------------------- +// panReleased +//--------------------------------------------------------- + +void AudioStrip::panReleased() + { + track->stopAutoRecord(AC_PAN); + } + +//--------------------------------------------------------- +// updateChannels +//--------------------------------------------------------- + +void AudioStrip::updateChannels() + { + AudioTrack* t = (AudioTrack*)track; + int c = t->channels(); + if (c == channel) + return; + channel = c; + slider->setChannel(c); + stereo->setChecked(channel == 2); + } + +//--------------------------------------------------------- +// addPanKnob +//--------------------------------------------------------- + +Awl::PanKnob* AudioStrip::addPanKnob(Awl::PanEntry** dlabel, int row) + { + Awl::PanKnob* knob = new Awl::PanKnob(this); + knob->setToolTip(tr("panorama")); + knob->setFixedHeight(entrySize.height() * 2); + + Awl::PanEntry* pl = new Awl::PanEntry(this); + pl->setPrecision(2); + + if (dlabel) + *dlabel = pl; +// pl->setFont(config.fonts[1]); + pl->setFrame(true); + + pl->setFixedSize(entrySize); + + QLabel* plb = new QLabel; + plb->setObjectName("knobLabel"); + plb->setText(tr("Pan")); + plb->setFixedSize(entrySize); + plb->setAlignment(Qt::AlignCenter); + + grid->addWidget(plb, row, 0); + grid->addWidget(pl, row+1, 0); + grid->addWidget(knob, row, 1, 2, 1); + + connect(knob, SIGNAL(valueChanged(double,int)), SLOT(panChanged(double))); + connect(pl, SIGNAL(valueChanged(double,int)), SLOT(panChanged(double))); + connect(knob, SIGNAL(sliderPressed(int)), SLOT(panPressed())); + connect(knob, SIGNAL(sliderReleased(int)), SLOT(panReleased())); + return knob; + } + +//--------------------------------------------------------- +// addAuxPorts +//--------------------------------------------------------- + +static void addAuxPorts(AudioTrack* track, QMenu* lb, const RouteList& rl) + { + QList pre = track->preAux(); + QList post = track->postAux(); + foreach (AuxPluginIF* p, pre) { + QString s = p->pluginInstance()->name(); + QAction* a = lb->addAction(p->pluginInstance()->name()); + a->setCheckable(true); +// Route route(RouteNode(p), RouteNode(track)); + Route route = Route(RouteNode(p), RouteNode(track)); + a->setData(QVariant::fromValue(route)); + a->setChecked(rl.indexOf(route) != -1); + } + foreach(AuxPluginIF* p, post) { + QAction* a = lb->addAction(p->pluginInstance()->name()); + a->setCheckable(true); +// Route route(RouteNode(p), RouteNode(track)); // does not compile?! + Route route = Route(RouteNode(p), RouteNode(track)); + a->setData(QVariant::fromValue(route)); + a->setChecked(rl.indexOf(route) != -1); + } + } + +//--------------------------------------------------------- +// addInPorts +//--------------------------------------------------------- + +static void addInPorts(AudioTrack* t, QMenu* lb, const RouteList& rl, bool input) + { + RouteNode a(t); + + InputList* al = song->inputs(); + for (iAudioInput i = al->begin(); i != al->end(); ++i) { + AudioTrack* track = (AudioTrack*)*i; + if (t == track) + continue; + QAction* it = lb->addAction(track->name()); + it->setCheckable(true); + RouteNode b(track); + Route route = input ? Route(b, a) : Route(a, b); + it->setData(QVariant::fromValue(route)); + it->setChecked(rl.indexOf(route) != -1); + if (input) + addAuxPorts(track, lb, rl); + } + } + +//--------------------------------------------------------- +// addOutPorts +//--------------------------------------------------------- + +static void addOutPorts(AudioTrack* t, QMenu* lb, const RouteList& rl) + { + OutputList* al = song->outputs(); + for (iAudioOutput i = al->begin(); i != al->end(); ++i) { + Track* track = *i; + if (t == track) + continue; + QAction* it = lb->addAction(track->name()); + it->setCheckable(true); + Route route = Route(RouteNode(t), RouteNode(track)); + it->setData(QVariant::fromValue(route)); + it->setChecked(rl.indexOf(route) != -1); + } + } + +//--------------------------------------------------------- +// addGroupPorts +//--------------------------------------------------------- + +static void addGroupPorts(AudioTrack* t, QMenu* lb, const RouteList& rl) + { + GroupList* al = song->groups(); + for (iAudioGroup i = al->begin(); i != al->end(); ++i) { + AudioTrack* track = (AudioTrack*)*i; + if (t == track) + continue; + QAction* it = lb->addAction(track->name()); + it->setCheckable(true); + Route route = Route(RouteNode(t), RouteNode(track)); + it->setData(QVariant::fromValue(route)); + it->setChecked(rl.indexOf(route) != -1); + } + } + +//--------------------------------------------------------- +// addWavePorts +//--------------------------------------------------------- + +static void addWavePorts(AudioTrack* t, QMenu* lb, const RouteList& rl, bool input) + { + RouteNode a(t); + WaveTrackList* al = song->waves(); + for (iWaveTrack i = al->begin(); i != al->end(); ++i) { + AudioTrack* track = (AudioTrack*)*i; + if (t == track) // cannot connect to itself + continue; + QAction* it = lb->addAction(track->name()); + it->setCheckable(true); + RouteNode b(track); + Route route = input ? Route(b, a) : Route(a, b); + it->setData(QVariant::fromValue(route)); + it->setChecked(rl.indexOf(route) != -1); + if (input) + addAuxPorts(track, lb, rl); + } + } + +//--------------------------------------------------------- +// addSyntiPorts +//--------------------------------------------------------- + +static void addSyntiPorts(AudioTrack* t, QMenu* lb, const RouteList& rl) + { + SynthIList* al = song->syntis(); + for (iSynthI i = al->begin(); i != al->end(); ++i) { + AudioTrack* track = (AudioTrack*)*i; + if (t == track) + continue; + QAction* it = lb->addAction(track->name()); + it->setCheckable(true); + RouteNode a(t); + RouteNode b(track); + Route route = Route(b, a); + it->setData(QVariant::fromValue(route)); + it->setChecked(rl.indexOf(route) != -1); + } + } + +//--------------------------------------------------------- +// iRouteShow +//--------------------------------------------------------- + +extern void addMidiTracks(QMenu* menu, Track* track, int channel, bool input); +extern void addMidiInPorts(QMenu* menu, Track* dtrack, int channel); + +void AudioStrip::iRouteShow() + { + QMenu* pup = iR->menu(); + pup->clear(); + AudioTrack* t = (AudioTrack*)track; + RouteList* irl = t->inRoutes(); + + switch(track->type()) { + default: + return; + case Track::AUDIO_INPUT: + { + for (int i = 0; i < channel; ++i) { + pup->addSeparator()->setText(QString(tr("Channel %1")).arg(i+1)); + QList ol = audioDriver->outputPorts(false); + foreach (PortName ip, ol) { + QAction* id = pup->addAction(ip.name); + id->setCheckable(true); + RouteNode src(ip.port, -1, RouteNode::AUDIOPORT); + RouteNode dst(t, i, RouteNode::TRACK); + Route route = Route(src, dst); + id->setData(QVariant::fromValue(route)); + id->setChecked(irl->indexOf(route) != -1); + } + } + } + break; + case Track::AUDIO_OUTPUT: + addWavePorts(t, pup, *irl, true); + addInPorts(t, pup, *irl, true); + addGroupPorts(t, pup, *irl); + addSyntiPorts(t, pup, *irl); + break; + case Track::WAVE: + addInPorts(t, pup, *irl, true); + break; + case Track::AUDIO_GROUP: + addWavePorts(t, pup, *irl, true); + addInPorts(t, pup, *irl, true); + addGroupPorts(t, pup, *irl); + addSyntiPorts(t, pup, *irl); + break; + case Track::AUDIO_SOFTSYNTH: + pup->addSeparator()->setText(tr("MidiChannel")); + for (int ch = 0; ch < MIDI_CHANNELS; ++ch) { + QMenu* m = pup->addMenu(QString("Channel %1").arg(ch+1)); + addMidiTracks(m, track, ch, true); + addMidiInPorts(m, track, ch); + } + break; + } + } + +//--------------------------------------------------------- +// iRouteHide +//--------------------------------------------------------- + +void AudioStrip::iRouteHide() + { + // dont leave the menu if SHIFT is pressed; this allows + // for fast selecting of more than one input source + // + if (qApp->keyboardModifiers() & Qt::ShiftModifier) { + iR->menu()->show(); + } + } + +//--------------------------------------------------------- +// oRouteHide +//--------------------------------------------------------- + +void AudioStrip::oRouteHide() + { + // dont leave the menu if SHIFT is pressed; this allows + // for fast selecting of more than one input source + // + if (qApp->keyboardModifiers() & Qt::ShiftModifier) { + oR->menu()->show(); + } + } + +//--------------------------------------------------------- +// oRouteShow +//--------------------------------------------------------- + +void AudioStrip::oRouteShow() + { + QMenu* pup = oR->menu(); + pup->clear(); + AudioTrack* t = (AudioTrack*)track; + RouteList* orl = t->outRoutes(); + + switch(track->type()) { + default: + return; + case Track::AUDIO_OUTPUT: + { + for (int i = 0; i < channel; ++i) { + char buffer[128]; + snprintf(buffer, 128, "%s %d", tr("Channel").toLatin1().data(), i+1); + pup->addSeparator()->setText(QString(buffer)); + + QList ol = audioDriver->inputPorts(false); + foreach (PortName ip, ol) { + QAction* action = pup->addAction(ip.name); + action->setCheckable(true); + RouteNode src(t, i, RouteNode::TRACK); + RouteNode dst(ip.port, -1, RouteNode::AUDIOPORT); + Route r = Route(src, dst); + action->setData(QVariant::fromValue(r)); + action->setChecked(orl->indexOf(r) != -1); + } + } + } + break; + case Track::AUDIO_INPUT: + addWavePorts(t, pup, *orl, false); + case Track::WAVE: + case Track::AUDIO_GROUP: + case Track::AUDIO_SOFTSYNTH: + addOutPorts(t, pup, *orl); + addGroupPorts(t, pup, *orl); + break; + } + } + +//--------------------------------------------------------- +// muteToggled +//--------------------------------------------------------- + +void AudioStrip::muteToggled(bool val) + { + song->setMute(track, val); + } + +//--------------------------------------------------------- +// soloToggled +//--------------------------------------------------------- + +void AudioStrip::soloToggled(bool val) + { + song->setSolo(track, val); + } + +//--------------------------------------------------------- +// recordToggled +//--------------------------------------------------------- + +void AudioStrip::recordToggled(bool val) + { + song->setRecordFlag(track, !val); + } + +//--------------------------------------------------------- +// controllerChanged +//--------------------------------------------------------- + +void AudioStrip::controllerChanged(int id) + { + double val = track->getController(id)->curVal().f; + switch (id) { + case AC_VOLUME: + slider->setValue(val); + sl->setValue(val); + break; + case AC_PAN: + pan->setValue(val); + panl->setValue(val); + panVal = val; + break; + case AC_MUTE: + break; + default: + break; + } + } + +//--------------------------------------------------------- +// autoChanged +//--------------------------------------------------------- + +void AudioStrip::autoChanged() + { + bool ar = track->autoRead(); + bool aw = track->autoWrite(); + + // controller are enabled if + // autoRead is off + // autoRead and autoWrite are on (touch mode) + + bool ec = !ar || (ar && aw); + slider->setEnabled(ec); + sl->setEnabled(ec); + pan->setEnabled(ec); + panl->setEnabled(ec); + } + +//--------------------------------------------------------- +// autoReadToggled +//--------------------------------------------------------- + +void AudioStrip::autoReadToggled(bool val) + { + song->setAutoRead(track, val); + } + +//--------------------------------------------------------- +// autoWriteToggled +//--------------------------------------------------------- + +void AudioStrip::autoWriteToggled(bool val) + { + song->setAutoWrite(track, val); + } + diff --git a/attic/muse_qt4_evolution/muse/astrip.h b/attic/muse_qt4_evolution/muse/astrip.h new file mode 100644 index 00000000..f0806fda --- /dev/null +++ b/attic/muse_qt4_evolution/muse/astrip.h @@ -0,0 +1,101 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __ASTRIP_H__ +#define __ASTRIP_H__ + +#include "strip.h" + +namespace Awl { + class MeterSlider; + class VolEntry; + class VolKnob; + class PanKnob; + class PanEntry; + }; + +class AudioTrack; +class SimpleButton; +class EffectRack; +class Mixer; + +//--------------------------------------------------------- +// AudioStrip +//--------------------------------------------------------- + +class AudioStrip : public Strip { + Q_OBJECT + + int channel; + EffectRack* rack1; + EffectRack* rack2; + + Awl::MeterSlider* slider; + Awl::VolEntry* sl; + double volume; + + Awl::PanKnob* pan; + Awl::PanEntry* panl; + double panVal; + + QToolButton* stereo; + QToolButton* pre; + + Awl::PanKnob* addPanKnob(Awl::PanEntry**, int); + + QToolButton* iR; + QToolButton* oR; + SimpleButton* off; + SimpleButton* record; + + void updateChannels(); + + private slots: + void stereoToggled(bool); + void preToggled(bool); + void offToggled(bool); + void iRouteShow(); + void iRouteHide(); + void oRouteShow(); + void oRouteHide(); + void volumeChanged(double); + void volumePressed(); + void volumeReleased(); + void panChanged(double); + void setPan(double); + void panPressed(); + void panReleased(); + void muteToggled(bool); + void soloToggled(bool); + void recordToggled(bool); + void autoChanged(); + virtual void controllerChanged(int id); + virtual void songChanged(int); + void autoReadToggled(bool); + void autoWriteToggled(bool); + void updateOffState(); + + public: + AudioStrip(Mixer*, AudioTrack*, bool align); + virtual void heartBeat(); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/audio.cpp b/attic/muse_qt4_evolution/muse/audio.cpp new file mode 100644 index 00000000..1ad9eefc --- /dev/null +++ b/attic/muse_qt4_evolution/muse/audio.cpp @@ -0,0 +1,655 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include + +#include "al/al.h" +#include "muse.h" +#include "globals.h" +#include "song.h" +#include "audiodev.h" +#include "audioprefetch.h" +#include "audiowriteback.h" +#include "audio.h" +#include "sync.h" +#include "midi.h" +#include "gconfig.h" +#include "al/sig.h" +#include "al/tempo.h" +#include "widgets/utils.h" +#include "synth.h" +#include "midioutport.h" +#include "midiinport.h" +#include "midictrl.h" +#include "sync.h" + +extern bool initJackAudio(); + +Audio* audio; +AudioDriver* audioDriver; // current audio device in use + +const char* seqMsgList[] = { + "SEQM_ADD_TRACK", + "SEQM_REMOVE_TRACK", + "SEQM_MOVE_TRACK", + "SEQM_ADD_PART", + "SEQM_REMOVE_PART", + "SEQM_CHANGE_PART", + "SEQM_ADD_EVENT", + "SEQM_REMOVE_EVENT", + "SEQM_CHANGE_EVENT", + "SEQM_ADD_TEMPO", +/*10*/"SEQM_SET_TEMPO", + "SEQM_REMOVE_TEMPO", + "SEQM_ADD_SIG", + "SEQM_REMOVE_SIG", + "SEQM_SET_GLOBAL_TEMPO", + "SEQM_UNDO", + "SEQM_REDO", + "SEQM_RESET_DEVICES", + "SEQM_INIT_DEVICES", + "AUDIO_ROUTEADD", + "AUDIO_ROUTEREMOVE", +/*20*/"AUDIO_ADDPLUGIN", + "AUDIO_ADDMIDIPLUGIN", + "AUDIO_SET_SEG_SIZE", + "AUDIO_SET_CHANNELS", + "MS_PROCESS", + "MS_START", + "MS_STOP", + "MS_SET_RTC", + "SEQM_IDLE", + "SEQM_ADD_CTRL", + "SEQM_REMOVE_CTRL" + }; + +const char* audioStates[] = { + "STOP", "START_PLAY", "PLAY", "LOOP1", "LOOP2", "SYNC", "PRECOUNT" + }; + + +//--------------------------------------------------------- +// Audio +//--------------------------------------------------------- + +Audio::Audio() + { + recording = false; + idle = false; + _freewheel = false; + _bounce = 0; + loopPassed = false; + + _seqTime.pos.setType(AL::FRAMES); + startRecordPos.setType(AL::TICKS); + endRecordPos.setType(AL::TICKS); + + //--------------------------------------------------- + // establish pipes/sockets + //--------------------------------------------------- + + int filedes[2]; // 0 - reading 1 - writing + if (pipe(filedes) == -1) { + perror("creating pipe0"); + fatalError("cannot create pipe0"); + } + fromThreadFdw = filedes[1]; // blocking file descriptor + fromThreadFdr = filedes[0]; // non blocking file descriptor + + int rv = fcntl(fromThreadFdw, F_SETFL, O_NONBLOCK); + if (rv == -1) + perror("set pipe O_NONBLOCK"); + + if (pipe(filedes) == -1) { + perror("creating pipe1"); + fatalError("cannot create pipe1"); + } + sigFd = filedes[1]; + QSocketNotifier* ss = new QSocketNotifier(filedes[0], QSocketNotifier::Read); + song->connect(ss, SIGNAL(activated(int)), song, SLOT(seqSignal(int))); + } + +//--------------------------------------------------------- +// start +// start audio processing +//--------------------------------------------------------- + +bool Audio::start() + { + TrackList* tl = song->tracks(); + + _seqTime.curTickPos = 0; + _seqTime.nextTickPos = 0; + _seqTime.pos.setFrame(~0); // make sure seek is not optimized away + + msg = 0; + + // + // init marker for synchronous loop processing + // + lmark = song->lPos().frame(); + rmark = song->rPos().frame(); + state = STOP; + muse->setHeartBeat(); + + if (audioDriver) { + // + // allocate ports + // + for (iTrack i = tl->begin(); i != tl->end(); ++i) + (*i)->activate1(); + seek(song->cpos()); + process(segmentSize, STOP); // warm up caches; audio must be stopped + } + else { + + // if audio device has disappeared it probably + // means jack has performed a shutdown + // try to restart and reconnect everything + + if (false == initJackAudio()) { + // + // allocate ports, first resetting the old connection + // + InputList* itl = song->inputs(); + for (iAudioInput i = itl->begin(); i != itl->end(); ++i) { + for (int x=0; x < (*i)->channels();x++) { + (*i)->setJackPort(Port(), x); // zero out the old connection + } + (*i)->activate1(); + } + + OutputList* otl = song->outputs(); + for (iAudioOutput i = otl->begin(); i != otl->end(); ++i) { + for (int x=0; x < (*i)->channels();x++) + (*i)->setJackPort(Port(), x); // zero out the old connection + (*i)->activate1(); + } + } + else { + printf("Failed to init audio!\n"); + return false; + } + } + audioDriver->start(realTimePriority); + audioDriver->stopTransport(); + return true; + } + +//--------------------------------------------------------- +// stop +// stop audio processing +// non realtime +//--------------------------------------------------------- + +void Audio::stop() + { +#if 0 + MidiOutPortList* opl = song->midiOutPorts(); + for (iMidiOutPort i = opl->begin(); i != opl->end(); ++i) + (*i)->deactivate(); + MidiInPortList* ipl = song->midiInPorts(); + for (iMidiInPort i = ipl->begin(); i != ipl->end(); ++i) + (*i)->deactivate(); +#endif + if (audioDriver) + audioDriver->stop(); + } + +//--------------------------------------------------------- +// sync +// return true if sync is completed +//--------------------------------------------------------- + +bool Audio::sync(int jackState, unsigned frame) + { +// printf("Audio::sync() state %s jackState %s frame 0x%x\n", audioStates[state], audioStates[jackState], frame); + bool done = true; + if (state == LOOP1) + state = LOOP2; + else { + State s = State(jackState); + // + // STOP -> START_PLAY start rolling + // STOP -> STOP seek in stop state + // PLAY -> START_PLAY seek in play state + + if (state != START_PLAY) { + Pos p(frame, AL::FRAMES); + seek(p); + if (!_freewheel) + done = audioPrefetch->seekDone(); + if (s == START_PLAY) + state = START_PLAY; + } + else { + if (frame != _seqTime.pos.frame()) { + // seek during seek + seek(Pos(frame, AL::FRAMES)); + } + done = audioPrefetch->seekDone(); + } + } + return done; + } + +//--------------------------------------------------------- +// setFreewheel +//--------------------------------------------------------- + +void Audio::setFreewheel(bool val) + { +// printf("JACK: freewheel callback %d\n", val); + _freewheel = val; + } + +//--------------------------------------------------------- +// shutdown +//--------------------------------------------------------- + +void Audio::shutdown() + { + audioState = AUDIO_STOP; +printf("JACK: shutdown callback\n"); + sendMsgToGui(MSG_JACK_SHUTDOWN); + } + +//--------------------------------------------------------- +// process +// process one audio buffer at position "_seqTime._pos " +// of size "frames" +//--------------------------------------------------------- + +void Audio::process(unsigned frames, int jackState) + { + _seqTime.lastFrameTime = audioDriver->frameTime(); + + for (iMidiOutPort i = song->midiOutPorts()->begin(); i != song->midiOutPorts()->end(); ++i) + audioDriver->startMidiCycle((*i)->jackPort(0)); + + // + // process messages from gui + // + if (msg) { + processMsg(); + msg = 0; // dont process again + int rv = write(fromThreadFdw, "x", 1); + if (rv != 1) { + fprintf(stderr, "audio: write(%d) pipe failed: %s\n", + fromThreadFdw, strerror(errno)); + } + } + + if (jackState != state) { + if (state == START_PLAY && jackState == PLAY) { + startRolling(); + if (_bounce) + sendMsgToGui(MSG_START_BOUNCE); + } + else if (state == LOOP2 && jackState == PLAY) { + Pos newPos(loopFrame, AL::FRAMES); + seek(newPos); + startRolling(); + } + else if (isPlaying() && jackState == STOP) + stopRolling(); + else if (state == START_PLAY && jackState == STOP) { + state = STOP; + updateController = true; + if (_bounce) + audioDriver->startTransport(); + else + sendMsgToGui(MSG_STOP); + } + else if (state == STOP && jackState == PLAY) + startRolling(); + } + + if (idle || (state == START_PLAY)) { + // deliver silence + OutputList* ol = song->outputs(); + for (iAudioOutput i = ol->begin(); i != ol->end(); ++i) + (*i)->silence(frames); + return; + } + + if (state == PLAY) { + // + // clear prefetch FIFO if left/right locators + // have changed + // + unsigned llmark = song->lPos().frame(); + unsigned rrmark = song->rPos().frame(); + + if (lmark != llmark || rmark != rrmark) { + // + // invalidate audio prefetch buffer + // + audioPrefetch->getFifo()->clear(); + audioPrefetch->msgSeek(_seqTime.startFrame()); + lmark = llmark; + rmark = rrmark; + } + } + + if (isPlaying()) { + if (_bounce == 1 && _seqTime.pos >= song->rPos()) { + _bounce = 2; + sendMsgToGui(MSG_STOP_BOUNCE); + } + // + // check for end of song + // + if ((_seqTime.curTickPos >= song->len()) + && !(song->record() || _bounce || song->loop())) { + audioDriver->stopTransport(); + return; + } + + // + // check for loop end + // + if (state == PLAY && song->loop() && !_bounce && !extSyncFlag) { + unsigned n = rmark - _seqTime.startFrame() - (3 * frames); + if (n < frames) { + // loop end in current cycle + // adjust loop start so we get exact loop len + if (n > lmark) + n = 0; + state = LOOP1; + loopFrame = lmark - n; + audioDriver->seekTransport(loopFrame); + } + } + + Pos ppp(_seqTime.pos); + ppp += frames; + _seqTime.nextTickPos = ppp.tick(); + } + + // + // compute current controller values + // (automation) + // + TrackList* tl = song->tracks(); + if (state == PLAY || updateController) { + updateController = false; + for (iTrack it = tl->begin(); it != tl->end(); ++it) { + if ((*it)->isMidiTrack()) + continue; + AudioTrack* track = (AudioTrack*)(*it); + if (!track->autoRead()) + continue; + CtrlList* cl = track->controller(); + for (iCtrl i = cl->begin(); i != cl->end(); ++i) { + Ctrl* c = i->second; + float val = c->value(_seqTime.startFrame()).f; + if (val != c->curVal().f) { + c->setCurVal(val); + c->setChanged(true); + } + } + } + } + + //----------------------------------------- + // process midi + //----------------------------------------- + + SynthIList* sl = song->syntis(); + { + MidiOutPortList* ol = song->midiOutPorts(); + MidiInPortList* mil = song->midiInPorts(); + MidiTrackList* mtl = song->midis(); + + for (iMidiInPort i = mil->begin(); i != mil->end(); ++i) + (*i)->beforeProcess(); + for (iMidiTrack i = mtl->begin(); i != mtl->end(); ++i) + (*i)->processMidi(&_seqTime); + for (iMidiOutPort i = ol->begin(); i != ol->end(); ++i) + (*i)->processMidi(&_seqTime); + for (iSynthI i = sl->begin(); i != sl->end(); ++i) + (*i)->processMidi(&_seqTime); + + for (iMidiInPort i = mil->begin(); i != mil->end(); ++i) + (*i)->afterProcess(); + } + + //----------------------------------------- + // process audio + //----------------------------------------- + + GroupList* gl = song->groups(); + InputList* il = song->inputs(); + WaveTrackList* wl = song->waves(); + + for (iAudioInput i = il->begin(); i != il->end(); ++i) + (*i)->process(); + for (iSynthI i = sl->begin(); i != sl->end(); ++i) + (*i)->process(); + + _curReadIndex = -1; + if (isPlaying() && !wl->empty()) { + Fifo1* fifo = audioPrefetch->getFifo(); + if (fifo->count() == 0) { + printf("MusE::Audio: fifo underflow at 0x%x\n", _seqTime.curTickPos); + audioPrefetch->msgTick(); + } + else { + bool msg = true; + do { + unsigned fifoPos = fifo->readPos(); + if (fifoPos == _seqTime.startFrame()) { + _curReadIndex = fifo->readIndex(); + break; + } + else { + if (msg) { + printf("Muse::Audio: wrong prefetch data 0x%x, expected 0x%x\n", + fifoPos, _seqTime.startFrame()); + msg = false; + } + if (fifoPos > _seqTime.startFrame()) { + // discard whole prefetch buffer + seek(_seqTime.pos + frames); + break; + } + fifo->pop(); // discard buffer + } + } while (fifo->count()); + } + } + for (iWaveTrack i = wl->begin(); i != wl->end(); ++i) { + if (song->bounceTrack != *i) + (*i)->process(); + } + for (iAudioGroup i = gl->begin(); i != gl->end(); ++i) + (*i)->process(); + + OutputList* aol = song->outputs(); + for (iAudioOutput i = aol->begin(); i != aol->end(); ++i) + (*i)->process(); + + if (_bounce == 1 && song->bounceTrack && song->bounceTrack->type() == Track::WAVE) + song->bounceTrack->process(); + + if (isPlaying()) { + if (!freewheel()) { + // + // consume prefetch buffer + // + if (_curReadIndex != -1) { + audioPrefetch->getFifo()->pop(); + audioPrefetch->msgTick(); // wakeup prefetch thread + } + } + if (recording && (_bounce == 0 || _bounce == 1)) + audioWriteback->trigger(); + _seqTime.pos += frames; + _seqTime.curTickPos = _seqTime.nextTickPos; + } + } + +//--------------------------------------------------------- +// processMsg +//--------------------------------------------------------- + +void Audio::processMsg() + { +// printf("---msg %d\n", msg->id); + switch(msg->id) { + case AUDIO_ROUTEADD: + addRoute(msg->route); + break; + case AUDIO_ROUTEREMOVE: + removeRoute(msg->route); + break; + case AUDIO_SET_CHANNELS: + msg->track->setChannels(msg->ival); + break; + case AUDIO_ADDPLUGIN: + ((AudioTrack*)msg->track)->addPlugin(msg->plugin, msg->ival, + msg->iival); + break; + + case AUDIO_SET_SEG_SIZE: + segmentSize = msg->ival; + AL::sampleRate = msg->iival; +#if 0 //TODO + audioOutput.segmentSizeChanged(); + for (int i = 0; i < mixerGroups; ++i) + audioGroups[i].segmentSizeChanged(); + for (iSynthI ii = synthiInstances.begin(); ii != synthiInstances.end();++ii) + (*ii)->segmentSizeChanged(); +#endif + break; + + case SEQM_INIT_DEVICES: + initMidiDevices(); + break; + case SEQM_RESET_DEVICES: + resetMidiDevices(); + break; + case SEQM_ADD_TEMPO: + case SEQM_REMOVE_TEMPO: + case SEQM_SET_GLOBAL_TEMPO: + case SEQM_SET_TEMPO: + song->processMsg(msg); + if (isPlaying()) + _seqTime.pos.setTick(_seqTime.curTickPos); + break; + + case SEQM_IDLE: + idle = msg->a; + break; + + case AUDIO_ADDMIDIPLUGIN: + ((MidiTrackBase*)msg->track)->addPlugin(msg->mplugin, msg->ival); + break; + default: + song->processMsg(msg); + break; + } + } + +//--------------------------------------------------------- +// seek +// - called before start play +// - initiated from gui +//--------------------------------------------------------- + +void Audio::seek(const Pos& p) + { + _seqTime.pos.setFrame(p.frame()); + _seqTime.curTickPos = _seqTime.pos.tick(); + _seqTime.nextTickPos = _seqTime.curTickPos; + updateController = true; + + loopPassed = true; // for record loop mode + if (state != LOOP2 && !freewheel()) + audioPrefetch->msgSeek(_seqTime.pos.frame()); + + MidiOutPortList* ol = song->midiOutPorts(); + for (iMidiOutPort i = ol->begin(); i != ol->end(); ++i) + (*i)->seek(_seqTime.curTickPos, _seqTime.pos.frame()); + SynthIList* sl = song->syntis(); + for (iSynthI i = sl->begin(); i != sl->end(); ++i) + (*i)->seek(_seqTime.curTickPos, _seqTime.pos.frame()); + sendMsgToGui(MSG_SEEK); + } + +//--------------------------------------------------------- +// startRolling +//--------------------------------------------------------- + +void Audio::startRolling() + { + if (song->record()) { + startRecordPos = _seqTime.pos; + recording = true; + TrackList* tracks = song->tracks(); + for (iTrack i = tracks->begin(); i != tracks->end(); ++i) { + if ((*i)->isMidiTrack()) + continue; + ((AudioTrack*)(*i))->recEvents()->clear(); + } + } + state = PLAY; + sendMsgToGui(MSG_PLAY); + + MidiOutPortList* ol = song->midiOutPorts(); + for (iMidiOutPort i = ol->begin(); i != ol->end(); ++i) + (*i)->start(); + SynthIList* sl = song->syntis(); + for (iSynthI i = sl->begin(); i != sl->end(); ++i) + (*i)->start(); + } + +//--------------------------------------------------------- +// stopRolling +// execution environment: realtime thread +//--------------------------------------------------------- + +void Audio::stopRolling() + { + state = STOP; + MidiOutPortList* ol = song->midiOutPorts(); + for (iMidiOutPort i = ol->begin(); i != ol->end(); ++i) + (*i)->stop(); + SynthIList* sl = song->syntis(); + for (iSynthI i = sl->begin(); i != sl->end(); ++i) + (*i)->stop(); + + recording = false; + endRecordPos = _seqTime.pos; + _bounce = 0; + sendMsgToGui(MSG_STOP); + seek(_seqTime.pos); + } + +//--------------------------------------------------------- +// sendMsgToGui +//--------------------------------------------------------- + +void Audio::sendMsgToGui(char c) + { + write(sigFd, &c, 1); + } + diff --git a/attic/muse_qt4_evolution/muse/audio.h b/attic/muse_qt4_evolution/muse/audio.h new file mode 100644 index 00000000..5d52ee0f --- /dev/null +++ b/attic/muse_qt4_evolution/muse/audio.h @@ -0,0 +1,306 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AUDIO_H__ +#define __AUDIO_H__ + +#include "thread.h" +#include "midievent.h" +#include "route.h" +#include "al/tempo.h" +#include "al/pos.h" +#include "event.h" +#include "ctrl.h" + +namespace AL { + class TimeSignature; + }; + +using AL::Xml; +class SndFile; +class PluginI; +class MidiPluginI; +class SynthI; +class AudioDriver; +class Track; +class AudioTrack; +class Part; +class Event; +class MidiEvent; +class Event; +class MidiTrack; +class MidiSeq; +class MidiTrackBase; + +//--------------------------------------------------------- +// GuiMessages +// messages from sequencer to GUI +// used in Audio::sendMsgToGui(char c) +//--------------------------------------------------------- + +#define MSG_STOP '0' +#define MSG_PLAY '1' +#define MSG_RECORD '2' +#define MSG_SEEK 'G' +#define MSG_JACK_SHUTDOWN 'S' +#define MSG_START_BOUNCE 'f' +#define MSG_STOP_BOUNCE 'F' +#define MSG_GRAPH_CHANGED 'C' +#define MSG_ALSA_CHANGED 'P' + +//--------------------------------------------------------- +// AudioMsgId +// this are the messages send from the GUI thread to +// the midi thread +//--------------------------------------------------------- + +enum { + SEQM_ADD_TRACK, + SEQM_REMOVE_TRACK, + SEQM_MOVE_TRACK, + SEQM_ADD_PART, + SEQM_REMOVE_PART, + SEQM_CHANGE_PART, + SEQM_ADD_EVENT, + SEQM_ADD_EVENTS, + SEQM_REMOVE_EVENT, + SEQM_CHANGE_EVENT, + SEQM_ADD_TEMPO, + SEQM_SET_TEMPO, + SEQM_REMOVE_TEMPO, + SEQM_ADD_SIG, + SEQM_REMOVE_SIG, + SEQM_SET_GLOBAL_TEMPO, + SEQM_UNDO, + SEQM_REDO, + SEQM_RESET_DEVICES, + SEQM_INIT_DEVICES, + // + AUDIO_ROUTEADD, + AUDIO_ROUTEREMOVE, + AUDIO_ADDPLUGIN, + AUDIO_ADDMIDIPLUGIN, + AUDIO_SET_SEG_SIZE, + AUDIO_SET_CHANNELS, + + MS_PROCESS, + MS_START, + MS_STOP, + MS_SET_RTC, + + SEQM_IDLE, + SEQM_ADD_CTRL, + SEQM_REMOVE_CTRL + }; + +extern const char* seqMsgList[]; // for debug + +//--------------------------------------------------------- +// Msg +//--------------------------------------------------------- + +struct AudioMsg : public ThreadMsg { // this should be an union + int serialNo; + SndFile* downmix; + Route route; + int ival; + int iival; + CVal cval1, cval2; + PluginI* plugin; + MidiPluginI* mplugin; + SynthI* synth; + Part* spart; + Part* dpart; + Track* track; + QList* el; + + const void *p1, *p2, *p3; + Event ev1, ev2; + char port, channel, ctrl; + int a, b, c; + Pos pos; + unsigned time; + }; + +class AudioOutput; + + +//--------------------------------------------------------- +// SeqTime +// timing information for sequencer cycle +//--------------------------------------------------------- + +extern unsigned int segmentSize; + +struct SeqTime { + unsigned lastFrameTime; // free running counter + + // transport values for current cycle: + Pos pos; // current play position + unsigned curTickPos; // pos at start of frame during play/record + unsigned nextTickPos; // pos at start of next frame during play/record + + unsigned startFrame() const { return pos.frame(); } + unsigned endFrame() const { return startFrame() + segmentSize; } + + //--------------------------------------------------------- + // tick2frame + // translate from tick to frameTime, this event has to + // be scheduled + //--------------------------------------------------------- + + unsigned tick2frame(unsigned tick) { + return AL::tempomap.tick2frame(tick) - pos.frame() + lastFrameTime + segmentSize; + } + unsigned frame2tick(unsigned frame) { + return AL::tempomap.frame2tick(frame - lastFrameTime + pos.frame()); + } + }; + +//--------------------------------------------------------- +// Audio +//--------------------------------------------------------- + +class Audio { + public: + enum State {STOP, START_PLAY, PLAY, LOOP1, LOOP2, SYNC, PRECOUNT}; + + private: + bool recording; // recording is active + bool idle; // do nothing in idle mode + bool _freewheel; + int _bounce; + bool loopPassed; + unsigned loopFrame; // startframe of loop if in LOOP mode + unsigned lmark; // left loop position + unsigned rmark; // right loop position + + SeqTime _seqTime; + Pos startRecordPos; + Pos endRecordPos; + + int _curReadIndex; + + State state; + bool updateController; + + AudioMsg* volatile msg; + int fromThreadFdw, fromThreadFdr; // message pipe + + int sigFd; // pipe fd for messages to gui + + bool filterEvent(const MidiEvent* event, int type, bool thru); + + void startRolling(); + void stopRolling(); + + void collectEvents(MidiTrack*, unsigned startTick, unsigned endTick); + void processMsg(); + void initMidiDevices(); + void resetMidiDevices(); + + public: + Audio(); + virtual ~Audio() {} + + void process(unsigned frames, int jackState); + bool sync(int state, unsigned frame); + void shutdown(); + + // transport: + bool start(); + void stop(); + void seek(const Pos& pos); + + bool isPlaying() const { return state == PLAY || state == LOOP1 || state == LOOP2; } + bool isRecording() const { return state == PLAY && recording; } + + //----------------------------------------- + // message interface + //----------------------------------------- + + void msgSeek(const Pos&); + void msgPlay(bool val); + + void msgRemoveTrack(Track*); + void msgRemoveTracks(); + void msgMoveTrack(Track*, Track*); + + void msgAddEvent(const Event&, Part*, bool u = true); + void msgAddEvents(QList* el, Part* part); + void msgDeleteEvent(const Event&, Part*, bool u = true); + void msgChangeEvent(const Event&, const Event&, Part*, bool u = true); + + void msgAddTempo(int tick, int tempo, bool doUndoFlag = true); + void msgSetTempo(int tick, int tempo, bool doUndoFlag = true); + void msgSetGlobalTempo(int val); + void msgDeleteTempo(int tick, int tempo, bool doUndoFlag = true); + void msgAddSig(int tick, const AL::TimeSignature&, bool doUndoFlag = true); + void msgRemoveSig(int tick, int z, int n, bool doUndoFlag = true); + void msgPanic(); + void sendMsg(AudioMsg*); + bool sendMessage(AudioMsg* m, bool doUndo); + void msgRoute(bool add, Route); + void msgRemoveRoute(Route); + void msgRemoveRoute1(Route); + void msgAddRoute(Route); + void msgAddRoute1(Route); + void msgAddPlugin(AudioTrack*, int idx, PluginI* plugin, bool prefader); + void msgAddMidiPlugin(MidiTrackBase*, int idx, MidiPluginI* plugin); + void msgSetMute(AudioTrack*, bool val); + void msgAddSynthI(SynthI* synth); + void msgRemoveSynthI(SynthI* synth); + void msgSetSegSize(int, int); + void msgSetChannels(AudioTrack*, int); + void msgSetOff(AudioTrack*, bool); + void msgUndo(); + void msgRedo(); + void msgLocalOff(); + void msgInitMidiDevices(); + void msgResetMidiDevices(); + void msgIdle(bool); + void msgBounce(); + void msgAddController(Track*, int id, unsigned time, CVal); + void msgRemoveController(Track*, int id, unsigned time); + void msgSetRtc(); + + const Pos& getStartRecordPos() const { return startRecordPos; } + const Pos& getEndRecordPos() const { return endRecordPos; } + + bool freewheel() const { return _freewheel; } + void setFreewheel(bool val); + + void sendMsgToGui(char c); + bool bounce() const { return _bounce != 0; } + MidiEvent* getMidiEvent(); + void popMidiEvent(); + int curReadIndex() const { return _curReadIndex; } + + const SeqTime* seqTime() const { return &_seqTime; } + }; + +extern int processAudio(unsigned long, void*); +extern void processAudio1(void*, void*); + +extern Audio* audio; +class AudioDriver; +extern AudioDriver* audioDriver; // current audio device in use +#endif + diff --git a/attic/muse_qt4_evolution/muse/audiodev.h b/attic/muse_qt4_evolution/muse/audiodev.h new file mode 100644 index 00000000..39521a03 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/audiodev.h @@ -0,0 +1,57 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AUDIODEV_H__ +#define __AUDIODEV_H__ + +#include "driver.h" + +class MidiInPort; + +//--------------------------------------------------------- +// AudioDevice +//--------------------------------------------------------- + +class AudioDriver : public Driver { + + public: + AudioDriver() {} + virtual ~AudioDriver() {} + + virtual void start(int priority) = 0; + virtual bool restart() { return false; } // return true on error + virtual void stop () = 0; + virtual unsigned frameTime() const = 0; + virtual float* getBuffer(Port, unsigned long nframes) = 0; + virtual void registerClient() = 0; + virtual Port registerOutPort(const QString& name, bool midi) = 0; + virtual Port registerInPort(const QString& name, bool midi) = 0; + virtual int realtimePriority() const = 0; // return zero if not realtime + virtual void startTransport() = 0; + virtual void stopTransport() = 0; + virtual void seekTransport(unsigned frame) = 0; + virtual void setFreewheel(bool f) = 0; + virtual void graphChanged() {} + virtual void startMidiCycle(Port) {} + virtual void collectMidiEvents(MidiInPort*, Port) {} + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/audiogroup.cpp b/attic/muse_qt4_evolution/muse/audiogroup.cpp new file mode 100644 index 00000000..7adc30e5 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/audiogroup.cpp @@ -0,0 +1,47 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "audiogroup.h" +#include "al/xml.h" + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void AudioGroup::read(QDomNode node) + { + while (!node.isNull()) { + AudioTrack::readProperties(node); + node = node.nextSibling(); + } + } + + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void AudioGroup::write(Xml& xml) const + { + xml.stag("AudioGroup"); + AudioTrack::writeProperties(xml); + xml.etag("AudioGroup"); + } + diff --git a/attic/muse_qt4_evolution/muse/audiogroup.h b/attic/muse_qt4_evolution/muse/audiogroup.h new file mode 100644 index 00000000..d9837c74 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/audiogroup.h @@ -0,0 +1,46 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AUDIOGROUP_H__ +#define __AUDIOGROUP_H__ + +#include "audiotrack.h" + +//--------------------------------------------------------- +// AudioGroup +//--------------------------------------------------------- + +class AudioGroup : public AudioTrack { + Q_OBJECT + + public: + AudioGroup() : AudioTrack() {} + virtual TrackType type() const { return AUDIO_GROUP; } + virtual void read(QDomNode); + virtual void write(Xml&) const; + virtual bool hasAuxSend() const { return true; } + }; + +typedef QList GroupList; +typedef GroupList::iterator iAudioGroup; +typedef GroupList::const_iterator ciAudioGroup; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/audioinput.cpp b/attic/muse_qt4_evolution/muse/audioinput.cpp new file mode 100644 index 00000000..fe7c57bb --- /dev/null +++ b/attic/muse_qt4_evolution/muse/audioinput.cpp @@ -0,0 +1,131 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "globals.h" +#include "audioinput.h" +#include "jackaudio.h" +#include "audio.h" + +//--------------------------------------------------------- +// AudioInput +//--------------------------------------------------------- + +AudioInput::AudioInput() + : AudioTrack() + { + // set Default for Input Ports: + _mute = muteDefault(); + _channels = 0; + setChannels(2); + // + // buffers are allocated from AudioTrack() + // and not needed by AudioInput which uses + // the JACK supplied buffers + for (int i = 0; i < MAX_CHANNELS; ++i) { + if (buffer[i]) { + free(buffer[i]); + buffer[i] = 0; + } + } + } + +//--------------------------------------------------------- +// ~AudioInput +//--------------------------------------------------------- + +AudioInput::~AudioInput() + { + for (int i = 0; i < _channels; ++i) { + if (!jackPort(i).isZero()) + audioDriver->unregisterPort(jackPort(i)); + } + // AudioInput does not own buffers (they are from JACK) + // make sure ~AudioTrack() does not delete them: + for (int i = 0; i < MAX_CHANNELS; ++i) + buffer[i] = 0; + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void AudioInput::write(Xml& xml) const + { + xml.stag("AudioInput"); + AudioTrack::writeProperties(xml); + xml.etag("AudioInput"); + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void AudioInput::read(QDomNode node) + { + for (;!node.isNull(); node = node.nextSibling()) { + AudioTrack::readProperties(node); + } + setName(name()); // allocate jack ports + } + +//--------------------------------------------------------- +// setChannels +//--------------------------------------------------------- + +void AudioInput::setChannels(int n) + { + if (n == _channels) + return; + AudioTrack::setChannels(n); + } + +//--------------------------------------------------------- +// setName +//--------------------------------------------------------- + +void AudioInput::setName(const QString& s) + { + Track::setName(s); + for (int i = 0; i < channels(); ++i) { + if (!jackPort(i).isZero()) { + char buffer[128]; + snprintf(buffer, 128, "%s-%d", _name.toAscii().data(), i); + if (!jackPort(i).isZero()) + audioDriver->setPortName(jackPort(i), buffer); + } + } + } + +//--------------------------------------------------------- +// collectInputData +// if buffer contains silence, set bufferEmpty to true +//--------------------------------------------------------- + +void AudioInput::collectInputData() + { + bufferEmpty = false; + for (int ch = 0; ch < channels(); ++ch) { + Port port = jackPort(ch); + if (!port.isZero()) + buffer[ch] = audioDriver->getBuffer(port, segmentSize); + } + } + + diff --git a/attic/muse_qt4_evolution/muse/audioinput.h b/attic/muse_qt4_evolution/muse/audioinput.h new file mode 100644 index 00000000..9982daf1 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/audioinput.h @@ -0,0 +1,53 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AUDIOINPUT_H__ +#define __AUDIOINPUT_H__ + +#include "audiotrack.h" + +//--------------------------------------------------------- +// AudioInput +//--------------------------------------------------------- + +class AudioInput : public AudioTrack { + Q_OBJECT + + void collectInputData(); + + public: + AudioInput(); + virtual ~AudioInput(); + virtual TrackType type() const { return AUDIO_INPUT; } + + virtual void read(QDomNode); + virtual void write(Xml&) const; + virtual void setName(const QString& s); + virtual void setChannels(int n); + virtual bool hasAuxSend() const { return true; } + virtual bool muteDefault() const { return true; } + }; + +typedef QList InputList; +typedef InputList::iterator iAudioInput; +typedef InputList::const_iterator ciAudioInput; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/audiooutput.cpp b/attic/muse_qt4_evolution/muse/audiooutput.cpp new file mode 100644 index 00000000..e4937a74 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/audiooutput.cpp @@ -0,0 +1,191 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "audiooutput.h" +#include "jackaudio.h" +#include "audio.h" +#include "globals.h" +#include "song.h" +#include "ticksynth.h" + +//--------------------------------------------------------- +// AudioOutput +//--------------------------------------------------------- + +AudioOutput::AudioOutput() + : AudioTrack() + { + _channels = 0; + setChannels(2); + + // + // buffers are allocated from AudioTrack() + // and not needed by AudioOutput which uses + // the JACK supplied buffers + + for (int i = 0; i < MAX_CHANNELS; ++i) { + if (buffer[i]) { + free(buffer[i]); + buffer[i] = 0; + } + } + } + +//--------------------------------------------------------- +// ~AudioOutput +//--------------------------------------------------------- + +AudioOutput::~AudioOutput() + { + for (int i = 0; i < _channels; ++i) { + if (!jackPort(i).isZero()) + audioDriver->unregisterPort(jackPort(i)); + } + // AudioOutput does not own buffers (they are from JACK) + // make sure ~AudioTrack() does not delete them: + for (int i = 0; i < MAX_CHANNELS; ++i) + buffer[i] = 0; + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void AudioOutput::write(Xml& xml) const + { + xml.stag("AudioOutput"); + AudioTrack::writeProperties(xml); + xml.etag("AudioOutput"); + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void AudioOutput::read(QDomNode node) + { + while (!node.isNull()) { + AudioTrack::readProperties(node); + node = node.nextSibling(); + } + setName(name()); // allocate jack ports + } + +//--------------------------------------------------------- +// setChannels +//--------------------------------------------------------- + +void AudioOutput::setChannels(int n) + { + if (n == _channels) + return; + AudioTrack::setChannels(n); + } + +//--------------------------------------------------------- +// silence +//--------------------------------------------------------- + +void AudioOutput::silence(unsigned n) + { + for (int i = 0; i < channels(); ++i) { + if (!jackPort(i).isZero()) + buffer[i] = audioDriver->getBuffer(jackPort(i), n); + else { + printf("PANIC: silence(): no buffer from audio driver\n"); + abort(); + return; + } + } + for (int i = 0; i < channels(); ++i) + memset(buffer[i], 0, n * sizeof(float)); + } + +//--------------------------------------------------------- +// setName +//--------------------------------------------------------- + +void AudioOutput::setName(const QString& s) + { + Track::setName(s); + for (int i = 0; i < channels(); ++i) { + if (!jackPort(i).isZero()) { + char buffer[128]; + snprintf(buffer, 128, "%s-%d", _name.toAscii().data(), i); + audioDriver->setPortName(jackPort(i), buffer); + } + } + } + +//--------------------------------------------------------- +// stopRecording +// gui context +//--------------------------------------------------------- + +void AudioOutput::stopRecording(const Pos& /*s*/, const Pos& /*e*/) + { + SndFile* sf = recFile(); + if (sf) + delete sf; // close + setRecFile(0); + setRecordFlag(false); + } + +//--------------------------------------------------------- +// process +// synthesize segmentSize frames at buffer offset "offset" +// current frame position is "pos" +//--------------------------------------------------------- + +void AudioOutput::process() + { + for (int c = 0; c < channels(); ++c) + buffer[c] = audioDriver->getBuffer(jackPort(c), segmentSize); + + AudioTrack::process(); + + if (bufferEmpty) { + for (int c = 0; c < channels(); ++c) + memset(buffer[c], 0, sizeof(float) * segmentSize); + } + + int n = segmentSize; + if (audio->isRecording() && recordFlag() && _recFile) { + // bounce to file + if (audio->freewheel()) + _recFile->write(channels(), buffer, n); + else + putFifo(channels(), n, buffer); + } + +#if 0 + if (audioClickFlag && song->click() && metronome) { + float b[n]; + float* bp[1]; + bp[0] = b; + metronome->getData(pos, 1, n, bp); + for (unsigned i = 0; i < n; ++i) { + for (int k = 0; k < channels(); ++k) + buffer[k][i] += b[i] * audioClickVolume; + } + } +#endif + } + diff --git a/attic/muse_qt4_evolution/muse/audiooutput.h b/attic/muse_qt4_evolution/muse/audiooutput.h new file mode 100644 index 00000000..8e0c5161 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/audiooutput.h @@ -0,0 +1,55 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AUDIOOUTPUT_H__ +#define __AUDIOOUTPUT_H__ + +#include "audiotrack.h" + +//--------------------------------------------------------- +// AudioOutput +//--------------------------------------------------------- + +class AudioOutput : public AudioTrack { + Q_OBJECT + + public: + AudioOutput(); + virtual ~AudioOutput(); + virtual TrackType type() const { return AUDIO_OUTPUT; } + + virtual void read(QDomNode); + virtual void write(Xml&) const; + virtual void setName(const QString& s); + virtual void setChannels(int n); + + virtual bool canRecord() const { return true; } + virtual void stopRecording(const AL::Pos&, const AL::Pos&); + + void silence(unsigned); + virtual void process(); + }; + +typedef QList OutputList; +typedef OutputList::iterator iAudioOutput; +typedef OutputList::const_iterator ciAudioOutput; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/audioprefetch.cpp b/attic/muse_qt4_evolution/muse/audioprefetch.cpp new file mode 100644 index 00000000..d433c1ac --- /dev/null +++ b/attic/muse_qt4_evolution/muse/audioprefetch.cpp @@ -0,0 +1,199 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include + +#include "audioprefetch.h" +#include "globals.h" +#include "track.h" +#include "song.h" +#include "audio.h" +#include "sync.h" +#include "fifo.h" + +enum { PREFETCH_TICK, PREFETCH_SEEK }; + +//--------------------------------------------------------- +// PrefetchMsg +//--------------------------------------------------------- + +struct PrefetchMsg : public ThreadMsg { + int pos; + }; + +AudioPrefetch* audioPrefetch; + +//--------------------------------------------------------- +// AudioPrefetch +//--------------------------------------------------------- + +AudioPrefetch::AudioPrefetch(const char* name) + : Thread(name) + { + seekPos = ~0; + writePos = ~0; + seekCount = 0; + } + +//--------------------------------------------------------- +// readMsg +//--------------------------------------------------------- + +static void readMsgP(void* p, void*) + { + AudioPrefetch* at = (AudioPrefetch*)p; + at->readMsg1(sizeof(PrefetchMsg)); + } + +//--------------------------------------------------------- +// start +//--------------------------------------------------------- + +void AudioPrefetch::start(int priority) + { + clearPollFd(); + addPollFd(toThreadFdr, POLLIN, ::readMsgP, this, 0); + Thread::start(priority); + } + +//--------------------------------------------------------- +// ~AudioPrefetch +//--------------------------------------------------------- + +AudioPrefetch::~AudioPrefetch() + { + } + +//--------------------------------------------------------- +// processMsg +//--------------------------------------------------------- + +void AudioPrefetch::processMsg1(const void* m) + { + const PrefetchMsg* msg = (PrefetchMsg*)m; + switch(msg->id) { + case PREFETCH_TICK: + prefetch(false); + seekPos = ~0; // invalidate cached last seek position + break; + + case PREFETCH_SEEK: + // process seek in background + seek(msg->pos); + break; + + default: + printf("AudioPrefetch::processMsg1: unknown message\n"); + } + } + +//--------------------------------------------------------- +// msgTick +// trigger audio prefetch with next buffer position +//--------------------------------------------------------- + +void AudioPrefetch::msgTick() + { + if (fifo.count() < FIFO_BUFFER/3) { + PrefetchMsg msg; + msg.id = PREFETCH_TICK; + while (sendMsg1(&msg, sizeof(msg))) { + printf("AudioPrefetch::msgTick(): send failed!\n"); + } + } + } + +//--------------------------------------------------------- +// msgSeek +// called from audio RT context +//--------------------------------------------------------- + +void AudioPrefetch::msgSeek(unsigned samplePos) + { + // + // optimize unecessary seeks; seekPos is invalidated on + // first prefetch tick + // + if (samplePos == seekPos) + return; + + //q_atomic_increment(&seekCount); + ++seekCount; + + PrefetchMsg msg; + msg.id = PREFETCH_SEEK; + msg.pos = samplePos; + msg.serialNo = 0; + while (sendMsg1(&msg, sizeof(msg))) { + printf("AudioPrefetch::msgSeek::sleep(1)\n"); + sleep(1); + } + } + +//--------------------------------------------------------- +// prefetch +//--------------------------------------------------------- + +void AudioPrefetch::prefetch(bool seekFlag) + { + WaveTrackList* tl = song->waves(); + if (tl->empty()) + return; + while (fifo.count() < FIFO_BUFFER) { + if (song->loop() && !audio->bounce() && !extSyncFlag) { + unsigned rpos = song->rPos().frame(); + unsigned n = rpos - writePos; + // + // dont loop if we are beyond right marker + // + if (writePos <= rpos && (n < segmentSize)) { + unsigned lpos = song->lPos().frame(); + // adjust loop start so we get exact loop len + if (n > lpos) + n = 0; + writePos = lpos - n; + } + } + int widx = fifo.setWritePos(writePos); + for (iWaveTrack it = tl->begin(); it != tl->end(); ++it) { + WaveTrack* track = *it; + if (!seekFlag && ((audio->isRecording() && track->recordFlag()) || !audio->isPlaying())) + continue; + track->fetchData(writePos, segmentSize, widx); + } + writePos += segmentSize; + fifo.push(); + } + } + +//--------------------------------------------------------- +// seek +//--------------------------------------------------------- + +void AudioPrefetch::seek(unsigned seekTo) + { + fifo.clear(); + writePos = seekTo; + prefetch(true); + seekPos = seekTo; + // q_atomic_decrement(&seekCount); + --seekCount; + } + diff --git a/attic/muse_qt4_evolution/muse/audioprefetch.h b/attic/muse_qt4_evolution/muse/audioprefetch.h new file mode 100644 index 00000000..14e8096c --- /dev/null +++ b/attic/muse_qt4_evolution/muse/audioprefetch.h @@ -0,0 +1,54 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AUDIOPREFETCH_H__ +#define __AUDIOPREFETCH_H__ + +#include "thread.h" +#include "fifo.h" + +//--------------------------------------------------------- +// AudioPrefetch +//--------------------------------------------------------- + +class AudioPrefetch : public Thread { + Fifo1 fifo; + unsigned writePos; + unsigned seekPos; // remember last seek to optimize seeks + + virtual void processMsg1(const void*); + void prefetch(bool seekFlag); + void seek(unsigned pos); + volatile int seekCount; + + public: + AudioPrefetch(const char* name); + ~AudioPrefetch(); + virtual void start(int); + + void msgTick(); + void msgSeek(unsigned pos); + bool seekDone() const { return seekCount == 0; } + Fifo1* getFifo() { return &fifo; } + }; + +extern AudioPrefetch* audioPrefetch; + +#endif diff --git a/attic/muse_qt4_evolution/muse/audiotrack.cpp b/attic/muse_qt4_evolution/muse/audiotrack.cpp new file mode 100644 index 00000000..04d215f2 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/audiotrack.cpp @@ -0,0 +1,582 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "al/al.h" +#include "al/dsp.h" +#include "al/xml.h" +#include "track.h" +#include "event.h" +#include "song.h" +#include "audio.h" +#include "wave.h" +#include "auxplugin.h" +#include "pipeline.h" +#include "audiodev.h" +#include "gconfig.h" + +//--------------------------------------------------------- +// AudioTrack +//--------------------------------------------------------- + +AudioTrack::AudioTrack() + : Track() + { + _tt = AL::FRAMES; + _prefader = false; + _prePipe = new Pipeline(); + _postPipe = new Pipeline(); + _recFile = 0; + _channels = 0; + bufferEmpty = false; + setChannels(1); + + // + // add two managed standard controller: + // volume and pan + // + Ctrl* c; + c = new Ctrl(AC_VOLUME, "Volume"); + c->setType(Ctrl::INTERPOLATE | Ctrl::LOG); + c->setRange(pow(10.0f, config.minSlider*0.05f), pow(10.0f, config.maxSlider*0.05f)); + + addController(c); + c = new Ctrl(AC_PAN, "Pan"); + c->setRange(-1.0f, +1.0f); + addController(c); + + for (int i = 0; i < MAX_CHANNELS; ++i) + posix_memalign((void**)(buffer + i), 16, sizeof(float) * segmentSize); + } + +//--------------------------------------------------------- +// ~AudioTrack +//--------------------------------------------------------- + +AudioTrack::~AudioTrack() + { + foreach(PluginI* plugin, *_prePipe) + delete plugin; + foreach(PluginI* plugin, *_postPipe) + delete plugin; + delete _prePipe; + delete _postPipe; + for (int i = 0; i < MAX_CHANNELS; ++i) { + if (buffer[i]) + free(buffer[i]); + } + } + +//--------------------------------------------------------- +// newPart +//--------------------------------------------------------- + +Part* AudioTrack::newPart(Part*, bool /*clone*/) + { + return 0; + } + +//--------------------------------------------------------- +// addPlugin +// idx = -1 append +// plugin = 0 remove plugin +//--------------------------------------------------------- + +void AudioTrack::addPlugin(PluginI* plugin, int idx, bool pre) + { + Pipeline* pipe = pre ? _prePipe : _postPipe; + if (plugin == 0) { + PluginI* oldPlugin = (*pipe)[idx]; + if (oldPlugin) { + int controller = oldPlugin->plugin()->parameter(); + for (int i = 0; i < controller; ++i) { + int id = genACnum(idx, i, pre); + removeController(id); + } + pipe->removeAt(idx); + } + } + else { + if (idx == -1) + idx = pipe->size(); + pipe->insert(idx, plugin); + int ncontroller = plugin->plugin()->parameter(); + for (int i = 0; i < ncontroller; ++i) { + int id = genACnum(idx, i, pre); + QString name(plugin->getParameterName(i)); + double min, max; + plugin->range(i, &min, &max); + Ctrl* cl = getController(id); + //printf("Plugin name: %s id:%d\n",name.toAscii().data(), id); + if (cl == 0) { + cl = new Ctrl(id, name); + cl->setRange(min, max); + float defaultValue = plugin->defaultValue(i); + cl->setDefault(defaultValue); + cl->setCurVal(defaultValue); + addController(cl); + } + cl->setRange(min, max); + cl->setName(name); + plugin->setParam(i, cl->curVal().f); + plugin->setControllerList(cl); + } + } + _preAux.clear(); + _postAux.clear(); + foreach(PluginI* pi, *_prePipe) { + if (pi->plugin() == auxPlugin) + _preAux.append((AuxPluginIF*)(pi->pluginIF(0))); + } + foreach(PluginI* pi, *_postPipe) { + if (pi->plugin() == auxPlugin) + _postAux.append((AuxPluginIF*)(pi->pluginIF(0))); + } + } + +//--------------------------------------------------------- +// plugin +//--------------------------------------------------------- + +PluginI* AudioTrack::plugin(int idx, bool prefader) const + { + Pipeline* pipe = prefader ? _prePipe : _postPipe; + return (*pipe)[idx]; + } + +//--------------------------------------------------------- +// addAuxSend +//--------------------------------------------------------- + +void AudioTrack::addAuxSend(int n) + { + if (n >= NUM_AUX) { + printf("too many aux sends (>%d)\n", n); + n = NUM_AUX; + } + for (int i = 0; i < n; ++i) { + Ctrl* c = getController(AC_AUX + i); + if (c) + continue; + QString s("AuxSend-"); + s += QString("%1").arg(i+1); + Ctrl* ctrl = new Ctrl(AC_AUX + i, s); + ctrl->setRange(pow(10.0f, config.minSlider*0.05f), pow(10.0f, config.maxSlider*0.05f)); + addController(ctrl); + + c = getController(AC_AUX_PAN + i); + if (c) + continue; + s = ("AuxSendPan-"); + s += QString("%1").arg(i+1); + ctrl = new Ctrl(AC_AUX_PAN + i, s); + ctrl->setRange(-1.0f, +1.0f); + addController(ctrl); + } + } + +//--------------------------------------------------------- +// AudioTrack::writeProperties +//--------------------------------------------------------- + +void AudioTrack::writeProperties(Xml& xml) const + { + Track::writeProperties(xml); + foreach (PluginI* plugin, *_prePipe) + plugin->writeConfiguration(xml, true); + foreach (PluginI* plugin, *_postPipe) + plugin->writeConfiguration(xml, false); + } + +//--------------------------------------------------------- +// AudioTrack::readProperties +//--------------------------------------------------------- + +bool AudioTrack::readProperties(QDomNode node) + { + QDomElement e = node.toElement(); + QString tag(e.tagName()); + if (tag == "plugin") { + PluginI* pi = new PluginI(this); + bool prefader; + if (pi->readConfiguration(node, &prefader)) { + delete pi; + } + else { + // insert plugin into first free slot + // of plugin rack + addPlugin(pi, -1, prefader); + } + } + else if (tag == "prefader") + _prefader = e.text().toInt(); + else if (tag == "recfile") + readRecfile(node.firstChild()); + else + return Track::readProperties(node); + return false; + } + +//--------------------------------------------------------- +// setAutoRead +//--------------------------------------------------------- + +void AudioTrack::setAutoRead(bool val) + { + if (_autoRead != val) { + _autoRead = val; + emit autoReadChanged(_autoRead); + } + } + +//--------------------------------------------------------- +// setAutoWrite +//--------------------------------------------------------- + +void AudioTrack::setAutoWrite(bool val) + { + if (_autoWrite != val) { + _autoWrite = val; + emit autoWriteChanged(_autoWrite); + } + } + +//--------------------------------------------------------- +// isMute +//--------------------------------------------------------- + +bool AudioTrack::isMute() const + { + if (_solo) + return false; + if (song->solo()) + return true; + return _mute; + } + +//--------------------------------------------------------- +// setSolo +//--------------------------------------------------------- + +bool AudioTrack::setSolo(bool val) + { + if (Track::setSolo(val)) { + if (mute()) + resetMeter(); + return true; + } + return false; + } + +//--------------------------------------------------------- +// readRecfile +//--------------------------------------------------------- + +void AudioTrack::readRecfile(QDomNode node) + { + QString path; + int channels = 2; + int format = SF_FORMAT_WAV | SF_FORMAT_PCM_16; + while (!node.isNull()) { + QDomElement e = node.toElement(); + QString tag(e.nodeName()); + if (tag == "path") + path = e.text(); + else if (tag == "channels") + channels = e.text().toInt(); + else if (tag == "format") + format = e.text().toInt(); + else + printf("MusE:readRecfile: unknown tag %s\n", e.tagName().toAscii().data()); + node = node.nextSibling(); + } + if (QFile::exists(path)) { + setRecFile(SndFile::getWave(path, true)); + } + else { + setRecFile(new SndFile(path)); + recFile()->setFormat(format, channels, AL::sampleRate); + if (recFile()->openWrite()) { + fprintf(stderr, "create wave file(%s) failed: %s\n", + path.toAscii().data(), recFile()->strerror().toAscii().data()); + delete _recFile; + _recFile = 0; + } + } + } + +//--------------------------------------------------------- +// putFifo +//--------------------------------------------------------- + +void AudioTrack::putFifo(int channels, unsigned long n, float** bp) + { + if (fifo.put(channels, n, bp, audio->seqTime()->pos.frame())) { + printf("AudioTrack(%s)::putFifo(): overrun\n", name().toAscii().data()); + } + } + +//--------------------------------------------------------- +// setMute +//--------------------------------------------------------- + +bool AudioTrack::setMute(bool f) + { + if (Track::setMute(f)) { + resetAllMeter(); + return true; + } + return false; + } + +//--------------------------------------------------------- +// setOff +//--------------------------------------------------------- + +bool AudioTrack::setOff(bool val) + { + if (Track::setOff(val)) { + resetAllMeter(); + return true; + } + return false; + } + +//--------------------------------------------------------- +// setPrefader +//--------------------------------------------------------- + +void AudioTrack::setPrefader(bool val) + { + _prefader = val; + if (!_prefader && isMute()) + resetAllMeter(); + } + +//--------------------------------------------------------- +// record +// called from audio writeback task +//--------------------------------------------------------- + +void AudioTrack::record() + { + float* recBuffer[_channels]; + + if (fifo.get(_channels, segmentSize, recBuffer)) { + printf("AudioTrack(%s)::record():: fifo underflow\n", + name().toAscii().data()); + return; + } + if (_recFile) { + _recFile->write(_channels, recBuffer, segmentSize); + } + else { + printf("AudioTrack(%s)::record(): no recFile\n", + name().toAscii().data()); + } + } + +//--------------------------------------------------------- +// setChannels +//--------------------------------------------------------- + +void AudioTrack::setChannels(int n) + { + if (n > MAX_CHANNELS) { + fprintf(stderr, "AudioTrack::setChannels(%d): too many channels(>%d)!\n", + n, MAX_CHANNELS); + n = MAX_CHANNELS; + } + Track::setChannels(n); + if (_prePipe) + _prePipe->setChannels(n); + if (_postPipe) + _postPipe->setChannels(n); + } + +//--------------------------------------------------------- +// startRecording +//--------------------------------------------------------- + +void AudioTrack::startRecording() + { + if (!recordFlag()) + return; + if (!_recFile) + _recFile = SndFile::createRecFile(_channels); + _recFile->openWrite(); + if (debugMsg) + printf("AudioTrack::startRecording: create internal file %s\n", + _recFile->finfo()->filePath().toAscii().data()); + } + +//--------------------------------------------------------- +// process +// this is called only once per cycle +//--------------------------------------------------------- + +void AudioTrack::process() + { + bufferEmpty = false; + if (_off) { + bufferEmpty = true; + return; + } + collectInputData(); + _prePipe->apply(channels(), segmentSize, buffer); + + if (_prefader) { + for (int i = 0; i < channels(); ++i) + setMeter(i, AL::dsp->peak(buffer[i], segmentSize, 0.0)); + } + + // + // TODO: we can only handle 1 or 2 channels + // + double vol[2]; + double _volume = _mute ? 0.0 : ctrlVal(AC_VOLUME).f; + double _pan = ctrlVal(AC_PAN).f; + vol[0] = _volume * (1.0 - _pan); + vol[1] = _volume * (1.0 + _pan); + + for (int i = 0; i < channels(); ++i) + AL::dsp->applyGainToBuffer(buffer[i], segmentSize, vol[i]); + + _postPipe->apply(channels(), segmentSize, buffer); + + if (!_prefader) { + for (int i = 0; i < channels(); ++i) + setMeter(i, AL::dsp->peak(buffer[i], segmentSize, 0.0)); + } + } + +//--------------------------------------------------------- +// add +// add audio buffer to track buffer +//--------------------------------------------------------- + +void AudioTrack::add(int srcChannels, float** srcBuffer) + { + int dstChannels = channels(); + float** dstBuffer = buffer; + + if (srcChannels == dstChannels) { + for (int c = 0; c < dstChannels; ++c) + AL::dsp->mix(dstBuffer[c], srcBuffer[c], segmentSize); + } + // + // mix mono to stereo + // + else if (srcChannels == 1 && dstChannels == 2) { + float* dp1 = dstBuffer[0]; + float* dp2 = dstBuffer[1]; + float* sp = srcBuffer[0]; + for (unsigned k = 0; k < segmentSize; ++k) { + dp1[k] += sp[k]; + dp2[k] += sp[k]; + } + } + // + // downmix stereo to mono + // + else if (srcChannels == 2 && dstChannels == 1) { + float* sp1 = srcBuffer[0]; + float* sp2 = srcBuffer[1]; + float* dp = dstBuffer[0]; + for (unsigned k = 0; k < segmentSize; ++k) + dp[k] += sp1[k] + sp2[k]; + } + } + +//--------------------------------------------------------- +// copy +// add audio buffer to track buffer +//--------------------------------------------------------- + +bool AudioTrack::copy(int srcChannels, float** srcBuffer) + { + int dstChannels = channels(); + + if (srcChannels == dstChannels) { + for (int c = 0; c < dstChannels; ++c) + AL::dsp->cpy(buffer[c], srcBuffer[c], segmentSize); + } + else if (srcChannels == 1 && dstChannels == 2) { + float* sp = srcBuffer[0]; + for (unsigned k = 0; k < segmentSize; ++k) { + float val = *sp++; + *(buffer[0] + k) = val; + *(buffer[1] + k) = val; + } + } + else if (srcChannels == 2 && dstChannels == 1) { + float* sp1 = srcBuffer[0]; + float* sp2 = srcBuffer[1]; + float* dp = buffer[0]; + for (unsigned k = 0; k < segmentSize; ++k) + dp[k] = sp1[k] + sp2[k]; + } + return true; + } + +//--------------------------------------------------------- +// collectInputData +// if buffer contains silence, set bufferEmpty to true +//--------------------------------------------------------- + +void AudioTrack::collectInputData() + { + bufferEmpty = false; + bool copyFlag = true; + foreach (const Route& r, _inRoutes) { + float** ptr; + int ch; + if (r.src.type == RouteNode::TRACK) { + AudioTrack* track = (AudioTrack*)r.src.track; + if (track->off() || song->bounceTrack == track) + continue; + ptr = track->buffer; + ch = track->channels(); + } + else if (r.src.type == RouteNode::AUXPLUGIN) { + ch = r.src.plugin->channel(); + ptr = r.src.plugin->buffer(); + } + else { + printf("AudioTrack::collectInputRoutes(): bad route type\n"); + return; + } + if (copyFlag) { + copy(ch, ptr); + copyFlag = false; + } + else + add(ch, ptr); + } + if (copyFlag) { + // + // no input, + // fill with silence + // + for (int i = 0; i < channels(); ++i) + memset(buffer[i], 0, sizeof(float) * segmentSize); + bufferEmpty = true; + } + } + diff --git a/attic/muse_qt4_evolution/muse/audiotrack.h b/attic/muse_qt4_evolution/muse/audiotrack.h new file mode 100644 index 00000000..1dc77d65 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/audiotrack.h @@ -0,0 +1,105 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AUDIOTRACK_H__ +#define __AUDIOTRACK_H__ + +#include "fifo.h" +#include "track.h" + +class Pipeline; +class SndFile; +class PluginI; +class AuxPluginIF; + +//--------------------------------------------------------- +// AudioTrack +//--------------------------------------------------------- + +class AudioTrack : public Track { + Q_OBJECT + + bool _prefader; // prefader metering + Pipeline* _prePipe; + Pipeline* _postPipe; + QList _preAux; + QList _postAux; + + void readRecfile(QDomNode); + + protected: + float* buffer[MAX_CHANNELS]; // this buffer is filled by process() + + bool bufferEmpty; // set by process() to optimize + // data flow + + SndFile* _recFile; + Fifo fifo; // fifo -> _recFile + + virtual bool setMute(bool val); + virtual bool setOff(bool val); + virtual bool setSolo(bool val); + virtual void collectInputData(); + + private slots: + virtual void setAutoRead(bool); + virtual void setAutoWrite(bool); + + public: + AudioTrack(); + virtual ~AudioTrack(); + + bool readProperties(QDomNode); + void writeProperties(Xml&) const; + + virtual Part* newPart(Part*p=0, bool clone=false); + + SndFile* recFile() const { return _recFile; } + void setRecFile(SndFile* sf) { _recFile = sf; } + + virtual void setChannels(int n); + + virtual bool isMute() const; + + void putFifo(int channels, unsigned long n, float** bp); + + void record(); + virtual void startRecording(); + virtual void stopRecording(const AL::Pos&, const AL::Pos&) {} + + bool prefader() const { return _prefader; } + void addAuxSend(int n); + void setPrefader(bool val); + Pipeline* prePipe() { return _prePipe; } + Pipeline* postPipe() { return _postPipe; } + + void addPlugin(PluginI* plugin, int idx, bool pre); + PluginI* plugin(int idx, bool prefader) const; + + virtual bool hasAuxSend() const { return false; } + virtual void process(); + void add(int channel, float**); + bool copy(int channel, float**); + bool isBufferEmpty() const { return bufferEmpty; } + QList preAux() const { return _preAux; } + QList postAux() const { return _postAux; } + }; + +#endif diff --git a/attic/muse_qt4_evolution/muse/audiowriteback.cpp b/attic/muse_qt4_evolution/muse/audiowriteback.cpp new file mode 100644 index 00000000..391c89bd --- /dev/null +++ b/attic/muse_qt4_evolution/muse/audiowriteback.cpp @@ -0,0 +1,101 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include + +#include "audiowriteback.h" +#include "globals.h" +#include "audio.h" +#include "song.h" + +AudioWriteback* audioWriteback; + +//--------------------------------------------------------- +// AudioWriteback +//--------------------------------------------------------- + +AudioWriteback::AudioWriteback(const char* name) + : Thread(name) + { + counter = 0; + } + +//--------------------------------------------------------- +// readMsg +//--------------------------------------------------------- + +static void readMsgP(void* p, void*) + { + AudioWriteback* at = (AudioWriteback*)p; + at->readMsg1(1); + } + +//--------------------------------------------------------- +// start +//--------------------------------------------------------- + +void AudioWriteback::start(int priority) + { + clearPollFd(); + addPollFd(toThreadFdr, POLLIN, ::readMsgP, this, 0); + Thread::start(priority); + } + +//--------------------------------------------------------- +// processMsg +//--------------------------------------------------------- + +void AudioWriteback::processMsg1(const void*) + { + while (counter) { + //q_atomic_decrement(&counter); + --counter; + + OutputList* ol = song->outputs(); + if (!ol->empty()) { + AudioOutput* ao = ol->front(); + if (ao->recordFlag()) + ao->record(); + } + WaveTrackList* tl = song->waves(); + for (iWaveTrack t = tl->begin(); t != tl->end(); ++t) { + WaveTrack* track = *t; + if (track->recordFlag()) + track->record(); + } + } + } + +//--------------------------------------------------------- +// trigger +// trigger audio writeback loop +//--------------------------------------------------------- + +void AudioWriteback::trigger() + { + // q_atomic_increment(&counter); + ++counter; + if (counter < 2) { + if (sendMsg1("0", 1)) { + printf("AudioWriteback::msgTick(): send failed!\n"); + } + } + } + diff --git a/attic/muse_qt4_evolution/muse/audiowriteback.h b/attic/muse_qt4_evolution/muse/audiowriteback.h new file mode 100644 index 00000000..000ff2f1 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/audiowriteback.h @@ -0,0 +1,44 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AUDIOWRITEBACK_H__ +#define __AUDIOWRITEBACK_H__ + +#include "thread.h" + +//--------------------------------------------------------- +// AudioWriteback +//--------------------------------------------------------- + +class AudioWriteback : public Thread { + virtual void processMsg1(const void*); + volatile int counter; + + public: + AudioWriteback(const char* name); + ~AudioWriteback() {} + virtual void start(int); + void trigger(); + bool active() const { return counter > 0; } + }; + +extern AudioWriteback* audioWriteback; + +#endif diff --git a/attic/muse_qt4_evolution/muse/auxplugin.cpp b/attic/muse_qt4_evolution/muse/auxplugin.cpp new file mode 100644 index 00000000..ad203c84 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/auxplugin.cpp @@ -0,0 +1,190 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "globaldefs.h" +#include "auxplugin.h" +#include "gconfig.h" + +AuxPlugin* auxPlugin; + +//--------------------------------------------------------- +// AuxPlugin +//--------------------------------------------------------- + +AuxPlugin::AuxPlugin() + : Plugin(0) + { + } + +//--------------------------------------------------------- +// range +//--------------------------------------------------------- + +void AuxPlugin::range(int idx, double* min, double* max) const + { + switch(idx) { + case 0: // volume + *min = pow(10.0f, config.minSlider * 0.05f); + *max = pow(10.0f, config.maxSlider * 0.05f); + break; + case 1: // pan + *min = -1.0; + *max = 1.0; + break; + default: + printf("AuxPlugin::bad index\n"); + break; + } + } + +//--------------------------------------------------------- +// createPIF +//--------------------------------------------------------- + +PluginIF* AuxPlugin::createPIF(PluginI* pi) + { + AuxPluginIF* pif = new AuxPluginIF(pi); + pif->init(pi->plugin()); + return pif; + } + +//--------------------------------------------------------- +// isLog +//--------------------------------------------------------- + +bool AuxPlugin::isLog(int idx) const + { + return idx == 0 ? true : false; + } + +//--------------------------------------------------------- +// isBool +//--------------------------------------------------------- + +bool AuxPlugin::isBool(int) const + { + return false; + } + +//--------------------------------------------------------- +// isInt +//--------------------------------------------------------- + +bool AuxPlugin::isInt(int) const + { + return false; + } + +//--------------------------------------------------------- +// defaultValue +//--------------------------------------------------------- + +double AuxPlugin::defaultValue(int idx) const + { + return idx == 0 ? -70.0 : 0.0; + } + +//--------------------------------------------------------- +// AuxPluginIF +//--------------------------------------------------------- + +AuxPluginIF::AuxPluginIF(PluginI* pi) + : PluginIF(pi) + { + for (int i = 0; i < MAX_CHANNELS; ++i) + posix_memalign((void**)(_buffer + i), 16, sizeof(float) * segmentSize); + } + +//--------------------------------------------------------- +// AuxPluginIF +//--------------------------------------------------------- + +AuxPluginIF::~AuxPluginIF() + { + for (int i = 0; i < MAX_CHANNELS; ++i) { + if (_buffer[i]) + free(_buffer[i]); + } + } + +//--------------------------------------------------------- +// apply +//--------------------------------------------------------- + +void AuxPluginIF::apply(unsigned nframes, float** s, float** /*dst*/) + { + // TODO: optimize copy away if there is no route + double vol[2]; + vol[0] = volume * (1.0 - pan); + vol[1] = volume * (1.0 + pan); + + for (int i = 0; i < pluginI->channel(); ++i) { + float* dst = _buffer[i]; + float* src = s[i]; + double v = vol[i]; + for (unsigned k = 0; k < nframes; ++k) + *dst++ = (*src++) * v; + } + } + +//--------------------------------------------------------- +// getParameterName +//--------------------------------------------------------- + +const char* AuxPluginIF::getParameterName(int i) const + { + if (i == 0) + return "Volume"; + else + return "Pan"; + } + +//--------------------------------------------------------- +// setParam +//--------------------------------------------------------- + +void AuxPluginIF::setParam(int i, double val) + { + if (i == 0) + volume = val; + else + pan = val; + } + +//--------------------------------------------------------- +// param +//--------------------------------------------------------- + +float AuxPluginIF::param(int i) const + { + return i == 0 ? volume : pan; + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +bool AuxPluginIF::init(Plugin* p) + { + volume = p->defaultValue(0); + pan = p->defaultValue(1); + return true; + } + diff --git a/attic/muse_qt4_evolution/muse/auxplugin.h b/attic/muse_qt4_evolution/muse/auxplugin.h new file mode 100644 index 00000000..cb9c2e4e --- /dev/null +++ b/attic/muse_qt4_evolution/muse/auxplugin.h @@ -0,0 +1,84 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AUXPLUGIN_H__ +#define __AUXPLUGIN_H__ + +#include "globaldefs.h" +#include "plugin.h" + +//--------------------------------------------------------- +// AuxPlugin +//--------------------------------------------------------- + +class AuxPlugin : public Plugin { + + public: + AuxPlugin(); + + virtual QString label() const { return "Aux"; } + virtual QString name() const { return "Aux"; } + virtual unsigned long id() const { return 0; } + virtual QString maker() const { return ""; } + virtual QString copyright() const { return ""; } + + void* instantiate() { return 0; } + virtual void range(int i, double*, double*) const; + virtual int parameter() const { return 2; } + virtual int inports() const { return 100; } + virtual int outports() const { return 100; } + + virtual bool inPlaceCapable() const { return true; } + virtual PluginIF* createPIF(PluginI*); + + virtual bool isLog(int k) const; + virtual bool isBool(int k) const; + virtual bool isInt(int k) const; + virtual double defaultValue(int) const; + }; + +//--------------------------------------------------------- +// AuxPluginIF +//--------------------------------------------------------- + +class AuxPluginIF : public PluginIF { + double volume; + double pan; + float* _buffer[MAX_CHANNELS]; // this buffer is filled by apply() + // _volume and _pan is applied + + public: + AuxPluginIF(PluginI* pi); + virtual ~AuxPluginIF(); + + virtual void apply(unsigned nframes, float** src, float** dst); + virtual void activate() {} + virtual void deactivate() {} + virtual void cleanup() {} + virtual const char* getParameterName(int i) const; + virtual void setParam(int i, double val); + virtual float param(int i) const; + bool init(Plugin*); + float** buffer() { return _buffer; } + int channel() const { return pluginInstance()->channel(); } + }; + +extern AuxPlugin* auxPlugin; +#endif diff --git a/attic/muse_qt4_evolution/muse/canvas.cpp b/attic/muse_qt4_evolution/muse/canvas.cpp new file mode 100644 index 00000000..c445c446 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/canvas.cpp @@ -0,0 +1,1187 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "canvas.h" +#include "al/al.h" +#include "al/sig.h" +#include "gconfig.h" +#include "song.h" +#include "icons.h" +#include "audio.h" +#include "partdrag.h" +#include "muse.h" +#include "midictrl.h" +#include "tlswidget.h" +#include "part.h" +#include "gui.h" + +#include + +static const int partLabelHeight = 13; +static const int handleWidth = 5; +static const int partBorderWidth = 2; + +enum { HIT_NOTHING, HIT_TRACK, HIT_PART, HIT_SUBTRACK }; + +//--------------------------------------------------------- +// PartCanvas +//--------------------------------------------------------- + +PartCanvas::PartCanvas() + : TimeCanvas(TIME_CANVAS) + { + setFocusPolicy(Qt::StrongFocus); + state = S_NORMAL; + _drawBackground = true; + lselected = -1; + starty = -1; + setMarkerList(song->marker()); + rubberBand=NULL; + connect(song, SIGNAL(markerChanged(int)), SLOT(markerChanged(int))); + } + +//--------------------------------------------------------- +// markerChanged +//--------------------------------------------------------- + +void PartCanvas::markerChanged(int val) + { + if (val == Song::MARKER_CUR) + updateRuler(); + } + +//--------------------------------------------------------- +// drawWavePart +// y0 - start of track +// th - track height +// from - x pixel coordinate start drawing +// to - x end drawing +// +// redraw area is QRect(from, y0, to-from, th) +//--------------------------------------------------------- + +void PartCanvas::drawWavePart(QPainter& p, Part* wp, int y0, int th, int from, int to) + { + int h = th/2; + int y = y0 + 1 + h; + int cc = th % 2 ? 0 : 1; + + const Pos pos(pix2pos(from)); + EventList* el = wp->events(); + for (iEvent e = el->begin(); e != el->end(); ++e) { + Event event = e->second; + SndFileR f = event.sndFile(); + if (f.isNull()) + continue; + unsigned channels = f.channels(); + if (channels == 0) { + printf("drawWavePart: channels==0! %s\n", f.finfo()->fileName().toLatin1().data()); + continue; + } + + int x1 = pos2pix(event.pos() + *wp); + int x2 = pos2pix(event.end() + *wp); + int w = x2 - x1; + if (w == 0) + continue; + + int samples = event.lenFrame(); + int xScale = (samples + w/2)/w; + int frame = pos.frame() - wp->frame() + - event.pos().frame() + event.spos(); + + if (h < 20) { + // + // combine multi channels into one waveform + // + for (int i = from; i < to; i++) { + SampleV sa[channels]; + f.read(sa, xScale, frame); + frame += xScale; + int peak = 0; + int rms = 0; + for (unsigned k = 0; k < channels; ++k) { + if (sa[k].peak > peak) + peak = sa[k].peak; + rms += sa[k].rms; + } + rms /= channels; + peak = (peak * (th-2)) >> 9; + rms = (rms * (th-2)) >> 9; + p.setPen(QColor(Qt::darkGray)); + p.drawLine(i, y - peak - cc, i, y + peak); + p.setPen(QColor(Qt::black)); + p.drawLine(i, y - rms - cc, i, y + rms); + } + } + else { + // + // multi channel display + // + h = th / (channels * 2); + int cc = th % (channels * 2) ? 0 : 1; + for (int i = from; i < to; i++) { + y = y0 + 1 + h; + SampleV sa[channels]; + f.read(sa, xScale, frame); + frame += xScale; + for (unsigned k = 0; k < channels; ++k) { + // peak = (sa[k].peak * h) / 256; + int peak = (sa[k].peak * (h - 1)) >> 8; + int rms = (sa[k].rms * (h - 1)) >> 8; + p.setPen(QColor(Qt::darkGray)); + p.drawLine(i, y - peak - cc, i, y + peak); + p.setPen(QColor(Qt::black)); + p.drawLine(i, y - rms - cc, i, y + rms); + y += 2 * h; + } + } + } + } + } + +//--------------------------------------------------------- +// paint +//--------------------------------------------------------- + +void PartCanvas::paint(QPainter& p, QRect r) + { + //printf("canvas paint %d %d %d %d\n", r.x(), r.y(), r.width(), r.height()); + QFont f = font(); + f.setPointSize(8); + p.setFont(f); + + int from = r.x(); + int to = from + r.width(); + + TrackList* tl = song->tracks(); + ArrangerTrack* at = 0; + for (iTrack i = tl->begin(); i != tl->end(); ++i) { + Track* t = *i; + at = &(t->arrangerTrack); + if (at->tw == 0) + continue; + + int y = at->tw->y(); // - splitWidth/2; + int h = at->tw->height() - 1; + + PartList* pl = t->parts(); + for (iPart ip = pl->begin(); ip != pl->end(); ++ip) { + Part* part = ip->second; + int x1 = pos2pix(*part); + int x2 = pos2pix(part->end()); + int len = x2 - x1; + + if (x2 <= from) + continue; + if (x1 > to) + break; + + QRect pr(x1, y, len, h - partBorderWidth); + bool clone = part->isClone(); + + QPen pen(QColor(100, 100, 100), partBorderWidth, clone ? Qt::DashLine : Qt::SolidLine); + QBrush brush(Qt::SolidPattern); + QLinearGradient lg(0, pr.y() - wpos.y()-r.y(), + 0, pr.y()+ 2*pr.height() -wpos.y()-r.y()); + lg.setColorAt(0, part->selected()?Qt::gray + :config.partColors[part->colorIndex()]); + lg.setColorAt(1, Qt::white); + QBrush brushLG(lg); + if (part->selected()) { + pen.setColor(config.partColors[part->colorIndex()]); + brush.setColor(config.selectPartBg); + p.setBrush(brushLG); + } + else if (part->mute()) { + pen.setColor(Qt::red); + brush.setColor(Qt::gray); + p.setBrush(brush); + } + else { + //brush.setColor(config.partColors[part->colorIndex()]); + p.setBrush(brushLG); + } + p.setPen(pen); + // + // we want to draw the rectangle without transformation + // to get equal border width horizontal and vertical + // + QRect rr(p.matrix().mapRect(pr).adjusted(1, 0, -1, 0)); + p.save(); + p.resetMatrix(); + p.drawRect(rr); + p.restore(); + + int xx1 = x1; + if (xx1 < from) + xx1 = from; + int xx2 = x2; + if (xx2 > to) + xx2 = to; + if (t->isMidiTrack()) + drawMidiPart(p, part, y, h, xx1, xx2); + else if (t->type() == Track::WAVE) + drawWavePart(p, part, y, h, xx1, xx2); + int yy = y + h - partLabelHeight; + p.drawText(x1 + 3, yy, len - 6, + partLabelHeight-1, Qt::AlignVCenter | Qt::AlignLeft, + part->name()); + + // redraw border + p.save(); + p.resetMatrix(); + p.setPen(pen); + p.setBrush(Qt::NoBrush); + p.drawRect(rr); + p.restore(); + } + + if (i != tl->begin()) { + p.setPen(QPen(Qt::lightGray, trackSeparator, Qt::SolidLine)); + p.drawLine(from, y + yTrackOffset, to, y + yTrackOffset); + } + for (iArrangerTrack i = t->subtracks.begin(); i != t->subtracks.end(); ++i) { + at = *i; + if (at->tw == 0) + continue; + TLSWidget* tls = (TLSWidget*)(at->tw); + int y = tls->y(); + // int h = tls->height(); + p.setPen(QPen(Qt::lightGray, trackSeparator, Qt::SolidLine)); + p.drawLine(from, y + yTrackOffset, to, y + yTrackOffset); + y += yTrackOffset + trackSeparator; + QPoint off(0, y); + p.translate(off); + // tls->paint(p, r); + tls->paint(p, QRect(from, 0, to-from, tls->height() - (yTrackOffset + trackSeparator))); + p.translate(-off); + } + } + if (at && at->tw) { + // draw last line + int y = at->tw->y() + at->tw->height() + yTrackOffset; + p.setPen(QPen(Qt::lightGray, trackSeparator, Qt::SolidLine)); + p.drawLine(from, y, to, y); + } + if (state == S_DRAG4 || state == S_DRAG1 || state == S_DRAG2 || state == S_DRAG5) { + p.setBrush(Qt::NoBrush); + p.setPen(QPen(QColor(Qt::red), partBorderWidth)); + p.drawRect(drag); + } + } + +//--------------------------------------------------------- +// drawMidiPart +//--------------------------------------------------------- + +void PartCanvas::drawMidiPart(QPainter& p, Part* mp, int y, int th, int from, int to) + { + p.setPen(Qt::black); + + EventList* events = mp->events(); + // iEvent ito(events->lower_bound(to)); + + iEvent ito = events->end(); +// int pos = pos2pix(*mp); + + if (config.canvasShowPartType & 2) { // show events + for (iEvent i = events->lower_bound(from); i != ito; ++i) { + EventType type = i->second.type(); + if ( + ((config.canvasShowPartEvent & 1) && (type == Note)) + || ((config.canvasShowPartEvent & 2) && (type == PAfter)) + || ((config.canvasShowPartEvent & 4) && (type == Controller)) + || ((config.canvasShowPartEvent &16) && (type == CAfter)) + || ((config.canvasShowPartEvent &64) && (type == Sysex || type == Meta)) + ) { + int t = pos2pix(*mp + i->second.pos()); + p.drawLine(t, y + 1, t, y + th - 2); + } + } + } + + else { // show Cakewalk Style + for (iEvent i = events->begin(); i != ito; ++i) { + if (i->second.type() != Note) + continue; + int x1 = pos2pix(*mp + i->second.pos()); + int x2 = pos2pix(*mp + i->second.end()); + + if (x1 > to) + break; + if (x2 < from) + continue; + + if (x2 > to) // clip to drawing area + x2 = to; + if (x1 < from) + x1 = from; + int pitch = i->second.pitch(); + int yy = y + th - (pitch * th / 127); + p.drawLine(x1, yy, x2, yy); + } + } + } + +//--------------------------------------------------------- +// searchPart +//--------------------------------------------------------- + +int PartCanvas::searchPart(const QPoint& pp) + { + Pos tp(pix2pos(pp.x())); + QPoint p(tp.tick(), pp.y() + wpos.y()); + +// printf("searchPart %d %d\n", p.x(), p.y()); + track = 0; + part = 0; + at = 0; + int yp = p.y(); + if (yp < 0) + return HIT_NOTHING; + + TrackList* tl = song->tracks(); + iTrack i; + int y1, y2; + for (i = tl->begin(); i != tl->end(); ++i) { + track = *i; + QWidget* tw = track->arrangerTrack.tw; + if (tw == 0) { + printf(" invisible Track\n"); + continue; + } + y1 = tw->y(); + y2 = y1 + tw->height(); + if (yp >= y1 && yp < y2) { +// printf(" track <%s> %d - %d\n", track->name().toLatin1().data(), y1, y2); + break; + } + for (iArrangerTrack i = track->subtracks.begin(); i != track->subtracks.end(); ++i) { + at = *i; + if (at->tw == 0) { + printf("----empty subtrack?\n"); + break; + } + y1 = at->tw->y(); + y2 = y1 + at->tw->height(); + if (yp >= y1 && yp < y2) { + return HIT_SUBTRACK; + } + } + } + if (i == tl->end()) { + track = 0; + at = 0; + return HIT_NOTHING; + } + + unsigned x = p.x(); + PartList* pl = track->parts(); + for (iPart ip = pl->begin(); ip != pl->end(); ++ip) { + part = ip->second; + if (x >= part->tick() && x < part->endTick()) { + ppos = mapx(part->tick()); + psize = rmapx(part->lenTick()); +// printf(" part\n"); + return HIT_PART; + } + } + part = 0; + return HIT_TRACK; + } + +//--------------------------------------------------------- +// contextMenu +//--------------------------------------------------------- + +void PartCanvas::contextMenu(const QPoint& pos) + { + QMenu* pop = new QMenu(widget()); + QAction* a; + if (part) { + pop->addAction(getAction("cut", this)); + pop->addAction(getAction("copy", this)); + pop->addSeparator(); + a = pop->addAction(tr("Rename")); + a->setData("rename"); + + QMenu* cp = pop->addMenu(tr("Color")); + + // part color selection + for (int i = 0; i < NUM_PARTCOLORS; ++i) { + a = cp->addAction(partColorNames[i]); + a->setData(QString("color%1").arg(i)); + QPixmap pm(20, 20); + QPainter p(&pm); + p.fillRect(0, 0, 20, 20, config.partColors[i]); + a->setIcon(QIcon(pm)); + } + pop->addAction(getAction("delete", this)); + pop->addAction(getAction("scissor", this)); + pop->addAction(getAction("glue", this)); + a = getAction("declone", this); + a->setEnabled(part->isClone()); + pop->addAction(a); + if (track->type() == Track::MIDI) { + a = pop->addAction(tr("AutoFill...")); + a->setData("autofill"); + } + pop->addSeparator(); + if (track->type() == Track::MIDI) { + MidiTrack* track = (MidiTrack*)part->track(); + if (track->useDrumMap()) { + a = pop->addAction(*edit_drummsIcon, tr("drums")); + a->setData("editdrums"); + } + else { + a = pop->addAction(QIcon(":/xpm/piano.xpm"), tr("pianoroll")); + a->setData("editpiano"); + } + a = pop->addAction(*edit_listIcon, tr("miditracker")); + a->setData("miditracker"); + pop->addAction(getAction("listedit", this)); + } + else { + a = pop->addAction(*waveIcon, tr("wave edit")); + a->setData("waveedit"); + } + + a = pop->exec(mapToGlobal(pos)); + if (a) { + QString cmd = a->data().toString(); + if (cmd == "rename") + renamePart(part); + else if (cmd == "delete") + song->cmdRemovePart(part); + else if (cmd == "scissor") + splitPart(part, startDrag); + else if (cmd == "glue") + song->cmdGluePart(part); + else if (cmd == "cut") + cutPart(part); + else if (cmd == "copy") + copyPart(part); + else if (cmd == "editpiano") + emit startEditor(part, 0); + else if (cmd == "miditracker") + emit startEditor(part, 2); + else if (cmd == "listedit") + emit startEditor(part, 1); + else if (cmd == "drumedit") + emit startEditor(part, 3); + else if (cmd == "waveedit") + emit startEditor(part, 4); + else if (cmd == "declone") + declonePart(part); + else if (cmd == "autofill") { + bool ok; + int ticksM = AL::sigmap.ticksMeasure(part->tick()); + int n = QInputDialog::getInteger(this, + tr("MusE: Get auto fill loop len"), + tr("Measures: "), + part->fillLen() / ticksM, + 0, 16, 1, &ok); + if (ok) { + part->setFillLen(n * ticksM); + } + } + else if (cmd.startsWith("color")) { + int idx = cmd.mid(5).toInt(); + part->setColorIndex(idx); + widget()->update(); + } + else { + printf("unknown action <%s>\n", cmd.toLatin1().data()); + } + } + } + else { + for (int i = 0; i < TOOLS; ++i) { + if ((arrangerTools & (1 << i))==0) + continue; + a = getAction(toolList[i], this); + pop->addAction(a); + a->setCheckable(true); + a->setChecked((1 <exec(mapToGlobal(pos)); + if (a) + muse->setTool(a->data().toString()); + } + } + +//--------------------------------------------------------- +// mousePressEvent +//--------------------------------------------------------- + +void PartCanvas::mousePress(QMouseEvent* me) + { + if (state == S_SUBTRACK) { + ((TLSWidget*)(at->tw))->mouseRelease(); + state = S_NORMAL; + } + + QPoint pos(me->pos().x(), me->pos().y() - rulerHeight); + startDrag = pos; + int hit = searchPart(startDrag); + + if (hit == HIT_SUBTRACK) { + TLSWidget* w = (TLSWidget*)(at->tw); + int y = wpos.y() + pos.y() - w->y(); + w->mousePress(QPoint(pos.x(), y), me); + // propagate drag events to subtrack if left button pressed: + if (me->button() == Qt::LeftButton) + state = S_SUBTRACK; + return; + } + else if ( hit == HIT_NOTHING ) { // nothing here we put up a rubberband + rubberBandStartPos = me->pos(); + if (!rubberBand) + rubberBand = new QRubberBand(QRubberBand::Rectangle, this); + rubberBand->setGeometry(QRect(rubberBandStartPos, QSize())); + rubberBand->show(); + } + + if (button & Qt::RightButton) { + contextMenu(me->pos()); + return; + } + + QRect r1,r2; + QPoint pos2; + int xpos = 0, y = 0, len = 0, h = 0; + + if (hit == HIT_PART) { + h = track->arrangerTrack.tw->height(); + len = rmapx(part->lenTick()); + y = track->arrangerTrack.tw->y() - splitWidth/2; + xpos = mapx(part->tick()); + + r1 = QRect(xpos, y, handleWidth, h); + r2 = QRect(xpos + len - handleWidth, y, handleWidth, h); + pos2 = QPoint(pos.x(), pos.y() + wpos.y()); + } + + switch (_tool) { + case PencilTool: + if (r1.contains(pos2)) + state = S_START_DRAG1; + else if (r2.contains(pos2)) + state = S_START_DRAG2; + else + state = S_START_DRAG5; + ppos = pos2pix(pix2pos(startDrag.x()).downSnaped(raster())); + psize = pos2pix(pix2pos(ppos+1).upSnaped(raster())) - ppos; + startDragTime = QTime::currentTime(); + setCursor(); + break; + case RubberTool: + if (part) + song->cmdRemovePart(part); + break; + case GlueTool: + if (part) + song->cmdGluePart(part); + break; + case CutTool: + if (part) + splitPart(part, pos); + break; + case MuteTool: + if (part) { + part->setMute(!part->mute()); + widget()->update(); + } + break; + default: + if (hit == HIT_PART) { + QRect r3(xpos, y, len, h); + + if (r1.contains(pos2)) { + state = S_START_DRAG1; + } + else if (r2.contains(pos2)) { + state = S_START_DRAG2; + } + else if (r3.contains(pos2)) { + state = S_START_DRAG3; + bool add = keyState & Qt::ShiftModifier; + song->selectPart(part, add); + emit kbdMovementUpdate(track, part); + } + } + if (state == S_NORMAL) { + song->selectPart(0, false); // deselect all parts + emit kbdMovementUpdate(0, 0); // Tell arranger nothing is selected (Keyboard movement) + } + startDragTime = QTime::currentTime(); + setCursor(); + break; + } + } + +//--------------------------------------------------------- +// mouseMove +//--------------------------------------------------------- + +void PartCanvas::mouseMove(QPoint pos) + { + + if(rubberBand) + rubberBand->setGeometry(QRect(rubberBandStartPos, pos).normalized()); + + if (state == S_SUBTRACK) { + TLSWidget* w = (TLSWidget*)(at->tw); + int y = wpos.y() + pos.y() - w->y() - rulerHeight; + w->mouseMove(QPoint(pos.x(), y)); + return; + } + pos -= rCanvasA.topLeft(); + bool update = false; + int x = pos.x(); + int delta = startDrag.x() - x; + int t = startDragTime.msecsTo(QTime::currentTime()); + bool dragActive = (startDrag - pos).manhattanLength() > + QApplication::startDragDistance() + || t > QApplication::startDragTime(); + switch (state) { + case S_START_DRAG1: + if (dragActive) + state = S_DRAG1; + break; + case S_START_DRAG2: + if (dragActive) + state = S_DRAG2; + break; + case S_START_DRAG3: + if (dragActive) + state = S_DRAG3; + break; + case S_START_DRAG5: + if (dragActive) + state = S_DRAG5; + break; + case S_NORMAL: + { + searchPart(pos); + bool found = false; + if (part) { + int h = track->arrangerTrack.tw->height(); + int xpos = mapx(part->tick()); + int len = rmapx(part->lenTick()); + int y = track->arrangerTrack.tw->y(); + QRect r1(xpos, y, handleWidth, h); + QRect r2(xpos + len - handleWidth, y, handleWidth, h); + if (r1.contains(pos) || r2.contains(pos)) + found = true; + } + if (found) { + widget()->setCursor(Qt::SizeHorCursor); + } + else + setCursor(); + } + break; + default: + break; + } + if (!track) + return; + int y = track->arrangerTrack.tw->y(); // - splitWidth/2; + int ph = track->arrangerTrack.tw->height() - 1 - partBorderWidth; + if (state == S_DRAG1) { + // + // drag left edge of part + // + Pos p(pix2pos(ppos - delta)); + p.snap(raster()); + int x1 = pos2pix(p); + int x2 = pos2pix(part->end()); + int size = x2 - x1; + drag.setRect(x1, y, size, ph); + update = true; + } + else if (state == S_DRAG2) { + // + // drag right edge of part + // + int size = psize - delta; + if (size < 10) + size = 10; + int x2 = mapx(AL::sigmap.raster(part->tick() + rmapxDev(size), raster())); + drag.setRect(ppos, y, x2 - ppos, ph); + update = true; + } + else if (state == S_DRAG5) { + // + // draw part with pencil tool + // + int size = psize - delta; + if (size < 10) + size = 10; + int x2 = mapx(AL::sigmap.raster(mapxDev(ppos + size), raster())); + drag.setRect(ppos, y, x2 - ppos, ph); + update = true; + } + else if (state == S_DRAG3) { + // + // drag whole part + // + srcPart = part; + QDrag* d = 0; + if (track->type() == Track::MIDI) + d = new MidiPartDrag(srcPart, this); + else if (track->type() == Track::WAVE) + d = new AudioPartDrag(srcPart, this); + if (d) { + Qt::KeyboardModifiers kb = QApplication::keyboardModifiers(); + Qt::DropActions da = kb ? (Qt::MoveAction | Qt::CopyAction | Qt::LinkAction) : Qt::MoveAction; + song->startUndo(); + _dragOffset = startDrag.x() - rCanvasA.x() - ppos; + if (d->start(da) == Qt::MoveAction) + song->removePart(srcPart); + song->endUndo(0); + update = true; + } + state = S_NORMAL; + } + if (update) + widget()->update(); + } + +//--------------------------------------------------------- +// mouseRelease +//--------------------------------------------------------- + +void PartCanvas::mouseRelease(QMouseEvent* me) + { + + if (rubberBand) + rubberBand->hide(); // TODO robert, nothing more happens for the moment/ + + if (state == S_SUBTRACK) { + ((TLSWidget*)(at->tw))->mouseRelease(); + state = S_NORMAL; + return; + } + + QPoint pos(me->pos()); + int x = pos.x(); + int delta = startDrag.x() - x; + + if (state == S_DRAG1) { + int val = mapxDev(ppos-delta); + int pos = AL::sigmap.raster(val, raster()); + int size = part->tick() + part->lenTick() - pos; + emit partChanged(part, pos, size); + } + else if (state == S_DRAG2) { + int size = psize - delta; + int x1 = part->tick(); + int x2 = AL::sigmap.raster(part->tick() + rmapxDev(size), raster()); + + int step = AL::sigmap.rasterStep(x1, raster()); + if (x2 - x1 < step) + x2 = AL::sigmap.raster(x1 + step, raster()); + emit partChanged(part, x1, x2-x1); + } + else if (state == S_DRAG5) { + if (track && (track->type() == Track::MIDI || track->type() == Track::WAVE)) { + Part* part = track->newPart(); + Pos p1 = pix2pos(drag.x()).snaped(raster()); + Pos p2 = pix2pos(drag.x() + drag.width()).snaped(raster()); + part->setPos(p1); + part->setLenTick(p2.tick() - p1.tick()); + song->cmdAddPart(part); + } + else + widget()->update(); + } + state = S_NORMAL; + setCursor(); + } + +//--------------------------------------------------------- +// mouseDoubleClickEvent +//--------------------------------------------------------- + +void PartCanvas::mouseDoubleClick(QMouseEvent* me) + { + QPoint pos(me->pos().x(), me->pos().y() - rulerHeight); + if (_tool != PointerTool) { +//TD mousePress(pos); + return; + } + bool shift = keyState & Qt::ShiftModifier; + if (searchPart(pos) == HIT_PART) { + if (button == Qt::LeftButton && shift) { + renamePart(part); + } + else if (button == Qt::LeftButton) { + emit doubleClickPart(part); + } + } + // + // double click creates new part between left and + // right mark + + else if (track && track->isMidiTrack()) + emit createLRPart(track); + } + + +//--------------------------------------------------------- +// keyboardNavigate +//--------------------------------------------------------- + +void PartCanvas::keyboardNavigate(QKeyEvent*) + { + printf("nothing here go away\n"); + } + + +//--------------------------------------------------------- +// setCursor +//--------------------------------------------------------- + +void PartCanvas::setCursor() + { + switch(state) { + case S_START_DRAG1: + case S_START_DRAG2: + case S_DRAG1: + case S_DRAG2: + widget()->setCursor(Qt::SizeHorCursor); + return; + default: + break; + } + TimeCanvas::setCursor(); + } + +//--------------------------------------------------------- +// declonePart +//--------------------------------------------------------- + +void PartCanvas::declonePart(Part* oPart) + { + Track* track = oPart->track(); + Part* nPart = track->newPart(oPart, false); + + EventList* se = oPart->events(); + for (iEvent i = se->begin(); i != se->end(); ++i) { + Event oldEvent = i->second; +// Event ev = oldEvent.clone(); + nPart->addEvent(oldEvent); + } + oPart->deref(); + song->cmdChangePart(oPart, nPart); + } + +//--------------------------------------------------------- +// splitPart +//--------------------------------------------------------- + +void PartCanvas::splitPart(Part* part, const QPoint& p) + { + song->cmdSplitPart(part, pix2pos(p.x()).snaped(raster())); + } + +//--------------------------------------------------------- +// renamePart +//--------------------------------------------------------- + +void PartCanvas::renamePart(Part* part) + { + bool ok; + + QString s = QInputDialog::getText(this, + tr("MusE: Change Part Name"), + tr("PartName:"), + QLineEdit::Normal, + part->name(), + &ok + ); + if (ok && s != part->name()) { + song->startUndo(); + Part* newPart = new Part(*part); + newPart->setName(s); + song->cmdChangePart(part, newPart); + widget()->update(); + } + } + +//--------------------------------------------------------- +// cutPart +//--------------------------------------------------------- + +void PartCanvas::cutPart(Part* part) + { + copyPart(part); + song->cmdRemovePart(part); + } + +//--------------------------------------------------------- +// copyPart +//--------------------------------------------------------- + +void PartCanvas::copyPart(Part* part) + { + QBuffer buffer; + buffer.open(QIODevice::WriteOnly); + AL::Xml xml(&buffer); + part->write(xml); + buffer.close(); + QMimeData* mimeData = new QMimeData; + mimeData->setData(MidiPartDrag::type, buffer.buffer()); + QApplication::clipboard()->setMimeData(mimeData); + } + +//--------------------------------------------------------- +// dragEnter +//--------------------------------------------------------- + +void PartCanvas::dragEnter(QDragEnterEvent* event) + { +#if 0 + QPoint p(event->pos() - rCanvasA.topLeft()); + searchPart(p); + if (!track) { + event->ignore(); + return; + } + int srcIsMidi = -1; + const QMimeData* md = event->mimeData(); + + if (MidiPartDrag::canDecode(md)) + srcIsMidi = 1; + else if (AudioPartDrag::canDecode(md)) + srcIsMidi = 0; + else if (WavUriDrag::canDecode(md)) + srcIsMidi = 0; + + int dstIsMidi = -1; + if (track->type() == Track::MIDI) + dstIsMidi = 1; + else if (track->type() == Track::WAVE) + dstIsMidi = 0; + + if ((srcIsMidi == -1) || (dstIsMidi != srcIsMidi)) { + event->ignore(); + return; + } + Qt::KeyboardModifiers kb = event->keyboardModifiers(); + if (kb == 0 && (Qt::MoveAction & event->possibleActions())) { + event->setDropAction(Qt::MoveAction); + event->accept(); + } + else +#endif + event->acceptProposedAction(); + } + +//--------------------------------------------------------- +// dragMoveEvent +//--------------------------------------------------------- + +void PartCanvas::dragMove(QDragMoveEvent* event) + { + QPoint p(event->pos() - rCanvasA.topLeft()); + searchPart(p); + if (!track) { + event->acceptProposedAction(); + return; + } + Part* srcPart = 0; + QString filename; + + bool srcIsMidi; + const QMimeData* md = event->mimeData(); + if (MidiPartDrag::canDecode(md)) { + MidiPartDrag::decode(md, srcPart); + srcIsMidi = true; + } + else if (AudioPartDrag::canDecode(md)) { + AudioPartDrag::decode(md, srcPart); + srcIsMidi = false; + } + else if (WavUriDrag::canDecode(md)) { + WavUriDrag::decode(md, &filename); + if (state != S_NORMAL) { + state = S_NORMAL; + widget()->update(); + } + if (track->type() == Track::WAVE) + event->acceptProposedAction(); + else + event->ignore(); + return; + } + else { + state = S_NORMAL; + event->ignore(); + return; + } + + int dstIsMidi = -1; + if (track->type() == Track::MIDI) + dstIsMidi = 1; + else if (track->type() == Track::WAVE) + dstIsMidi = 0; + if ((srcIsMidi == -1) || (dstIsMidi != srcIsMidi)) { + if (state != S_NORMAL) { + state = S_NORMAL; + widget()->update(); + } + event->ignore(); + return; + } + Qt::KeyboardModifiers kb = event->keyboardModifiers(); + if (kb == 0 && (Qt::MoveAction & event->possibleActions())) { + event->setDropAction(Qt::MoveAction); + event->accept(); + } + else + event->acceptProposedAction(); + state = S_DRAG4; + ArrangerTrack* at = &(track->arrangerTrack); + + PartCanvas* cw = (PartCanvas*)event->source(); + QRect updateRect(drag); + + Pos pos; + if (cw) + pos = pix2pos(p.x() - cw->dragOffset()).snaped(raster()); + else + pos = pix2pos(p.x()).snaped(raster()); + drag.setRect( + pos2pix(pos), + at->tw->y(), + rmapx(srcPart->lenTick()), + at->tw->height() - 1 - partBorderWidth + ); + delete srcPart; + updateRect |= drag; + updateRect.adjust(-1, -1 + rCanvasA.y(), 1, 1 + rCanvasA.y()); + widget()->update(updateRect); + } + +//--------------------------------------------------------- +// dropEvent +//--------------------------------------------------------- + +void PartCanvas::drop(QDropEvent* event) + { + state = S_NORMAL; + Part* dstPart = 0; + QString filename; + + QPoint pos(event->pos() - rCanvasA.topLeft()); + const QMimeData* md = event->mimeData(); + if (WavUriDrag::canDecode(md)) { + WavUriDrag::decode(md, &filename); + int tick = AL::sigmap.raster(mapxDev(pos.x()), raster()); + Pos pos(tick); + muse->importWaveToTrack(filename, track, pos); + widget()->update(); + return; + } + + bool isMidi = false; + if (MidiPartDrag::canDecode(md)) { + MidiPartDrag::decode(md, dstPart); + isMidi = true; + } + else if (AudioPartDrag::canDecode(md)) + AudioPartDrag::decode(md, dstPart); + + searchPart(pos); + if (!dstPart) + return; + PartCanvas* cw = (PartCanvas*)event->source(); + bool needEndUndo = false; + if (!track) { + if (isMidi) + track = new MidiTrack(); + else + track = new WaveTrack(); + track->setDefaultName(); + if (cw) + song->insertTrack(track, -1); + else { + song->startUndo(); + song->insertTrack(track, -1); + needEndUndo = true; + } + } + else if (isMidi != track->isMidiTrack()) + return; + + dstPart->setTrack(track); + + // + // cw == 0 means that we are dropping to + // another application + + unsigned tick; + if (cw) + tick = AL::sigmap.raster(mapxDev(pos.x() - cw->dragOffset()), raster()); + else + tick = AL::sigmap.raster(mapxDev(pos.x()), raster()); + + dstPart->setTick(tick); + + Qt::DropAction da = event->proposedAction(); + Qt::KeyboardModifiers kb = event->keyboardModifiers(); + if (kb == 0 && (Qt::MoveAction & event->possibleActions())) + da = Qt::MoveAction; + + if ((da == Qt::LinkAction) && (cw == this)) { + delete dstPart->events(); + dstPart->clone(srcPart->events()); + event->setDropAction(Qt::LinkAction); + } + else if (da == Qt::MoveAction) + event->setDropAction(Qt::MoveAction); + else + event->setDropAction(Qt::CopyAction); + event->accept(); + if (cw || needEndUndo) + song->addPart(dstPart); + else + song->cmdAddPart(dstPart); + if (needEndUndo) + song->endUndo(0); + widget()->update(); + } + +//--------------------------------------------------------- +// dragLeave +//--------------------------------------------------------- + +void PartCanvas::dragLeave(QDragLeaveEvent*) + { + if (state == S_DRAG4) { + state = S_NORMAL; + widget()->update(); + } + } + diff --git a/attic/muse_qt4_evolution/muse/canvas.h b/attic/muse_qt4_evolution/muse/canvas.h new file mode 100644 index 00000000..911936c2 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/canvas.h @@ -0,0 +1,124 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __CANVAS_H__ +#define __CANVAS_H__ + +#include "awl/tcanvas.h" +#include "widgets/tools.h" + +class CanvasWidget; +class Part; +class Track; +class ArrangerTrack; + +static const int HANDLE1 = 6; +static const int HANDLE2 = 3; + +//--------------------------------------------------------- +// PartCanvas +//--------------------------------------------------------- + +class PartCanvas : public TimeCanvas { + Q_OBJECT + + // DRAG1 drag part head + // DRAG2 drag part tail + // DRAG3 drag whole part + // DRAG4 Drag&Drop drag + // DRAG5 draw part with pencil tool + + enum { S_NORMAL, S_START_DRAG1, S_START_DRAG2, S_START_DRAG3, + S_DRAG1, S_DRAG2, S_DRAG3, + S_DRAG4, + S_START_DRAG5, S_DRAG5, // draw new Part + S_SUBTRACK + }; + int state; + QPoint startDrag; + int _dragOffset; + QRect drag; + QTime startDragTime; + unsigned ppos, psize; + + // values set by searchPart(): + Track* track; + Part* part; + ArrangerTrack* at; + + Part* srcPart; // src part of a drag/drop operation + + bool _drawBackground; + int selected; + int lselected; // in local coordinates + int starty; + int dragy; + + virtual void paint(QPainter&, QRect); + void drawWavePart(QPainter& p, Part* part, int, int, int, int); + void drawMidiPart(QPainter& p, Part* mp, int, int, int, int); + virtual void mousePress(QMouseEvent*); + virtual void mouseMove(QPoint); + virtual void mouseRelease(QMouseEvent*); + virtual void mouseDoubleClick(QMouseEvent*); + + virtual void dragEnter(QDragEnterEvent*); + virtual void drop(QDropEvent*); + virtual void dragMove(QDragMoveEvent*); + virtual void dragLeave(QDragLeaveEvent*); + + virtual void keyboardNavigate(QKeyEvent *e); + + + int searchPart(const QPoint& p); + + void declonePart(Part* part); + void renamePart(Part*); + void splitPart(Part*, const QPoint&); + void cutPart(Part*); + void copyPart(Part*); + + void setCursor(); + int dragOffset() const { return _dragOffset; } + void drawHandle(QPainter& p, int x, int y) { + p.fillRect(x-HANDLE2, y-HANDLE2, HANDLE1, HANDLE1, x == lselected ? Qt::red : Qt::yellow); + } + void contextMenu(const QPoint&); + + QRubberBand *rubberBand; + QPoint rubberBandStartPos; + + private slots: + void markerChanged(int); + + signals: + void kbdMovementUpdate(Track* t, Part* p); + void startEditor(Part*, int); + void createLRPart(Track*); + void partChanged(Part*, unsigned, unsigned); + void doubleClickPart(Part*); + + public: + PartCanvas(); + void setDrawBackground(bool val) { _drawBackground = val; } + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/cliplist/cliplist.cpp b/attic/muse_qt4_evolution/muse/cliplist/cliplist.cpp new file mode 100644 index 00000000..b39fa367 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/cliplist/cliplist.cpp @@ -0,0 +1,251 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: cliplist.cpp,v 1.10 2005/09/22 20:12:59 wschweer Exp $ +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include "cliplist.h" +#include "song.h" +#include "globals.h" +#include "wave.h" +#include "xml.h" +// #include "posedit.h" +#include "cliplisteditorbase.h" +//Added by qt3to4: +#include + +extern int mtcType; +enum { COL_NAME=0, COL_REFS, COL_POS, COL_LEN }; + +//--------------------------------------------------------- +// ClipItem +//--------------------------------------------------------- + +class ClipItem : public Q3ListViewItem { + SndFileR _wf; + + virtual QString text(int) const; + + public: + ClipItem(Q3ListView*, const SndFileR&); + SndFileR* wf() { return &_wf; } + }; + +ClipItem::ClipItem(Q3ListView* parent, const SndFileR& w) + : Q3ListViewItem(parent), _wf(w) + { + } + +//--------------------------------------------------------- +// samples2smpte +//--------------------------------------------------------- + +#if 0 +static QString samples2smpte(int samples) + { + double time = double(samples) / double(sampleRate); + int min = int(time) / 60; + int sec = int(time) % 60; + double rest = time - (min * 60 + sec); + switch(mtcType) { + case 0: // 24 frames sec + rest *= 24; + break; + case 1: // 25 + rest *= 25; + break; + case 2: // 30 drop frame + rest *= 30; + break; + case 3: // 30 non drop frame + rest *= 30; + break; + } + int frame = int(rest); + int subframe = int((rest-frame)*100); + QString s; + s.sprintf("%03d:%02d:%02d:%02d", min, sec, frame, subframe); + return s; + } +#endif + +//--------------------------------------------------------- +// text +//--------------------------------------------------------- + +QString ClipItem::text(int col) const + { + QString s(""); + switch(col) { + case COL_NAME: + s = _wf.name(); + break; + case COL_POS: + case COL_LEN: + break; + case COL_REFS: + s.setNum(_wf.getRefCount()); + break; + } + return s; + } + +//--------------------------------------------------------- +// ClipListEdit +//--------------------------------------------------------- + +ClipListEdit::ClipListEdit() + : TopWin(0, "cliplist", Qt::WType_TopLevel /*|WDestructiveClose*/) + { + setCaption(tr("MusE: Clip List Editor")); + + editor = new ClipListEditorBase(this, "edit"); + setCentralWidget(editor); + + editor->view->setColumnAlignment(COL_REFS, AlignRight); + + QFontMetrics fm(editor->view->font()); + int fw = style().pixelMetric(QStyle::PM_DefaultFrameWidth, this); + int w = 2 + fm.width('9') * 9 + fm.width(':') * 3 + fw * 4; + editor->view->setColumnAlignment(COL_POS, AlignRight); + editor->view->setColumnWidth(COL_POS, w); + editor->view->setColumnAlignment(COL_LEN, AlignRight); + editor->view->setColumnWidth(COL_LEN, w); + + connect(editor->view, SIGNAL(selectionChanged()), SLOT(clipSelectionChanged())); + connect(editor->view, SIGNAL(clicked(Q3ListViewItem*)), SLOT(clicked(Q3ListViewItem*))); + + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + connect(editor->start, SIGNAL(valueChanged(const Pos&)), SLOT(startChanged(const Pos&))); + connect(editor->len, SIGNAL(valueChanged(const Pos&)), SLOT(lenChanged(const Pos&))); + + updateList(); + } + +//--------------------------------------------------------- +// updateList +//--------------------------------------------------------- + +void ClipListEdit::updateList() + { + editor->view->clear(); + for (iSndFile f = SndFile::sndFiles.begin(); f != SndFile::sndFiles.end(); ++f) { + new ClipItem(editor->view, *f); + } + clipSelectionChanged(); + } + +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void ClipListEdit::closeEvent(QCloseEvent* e) + { + emit deleted((int)this); + e->accept(); + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void ClipListEdit::songChanged(int) + { + updateList(); + } + +//--------------------------------------------------------- +// readStatus +//--------------------------------------------------------- + +void ClipListEdit::readStatus(QDomNode node) + { +#if 0 //TODO2 + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + if (token == Xml::Error || token == Xml::End) + break; + switch (token) { + case Xml::TagStart: + if (tag == "topwin") + TopWin::readStatus(xml); + else + xml.unknown("CliplistEdit"); + break; + case Xml::TagEnd: + if (tag == "cliplist") + return; + default: + break; + } + } +#endif + } + +//--------------------------------------------------------- +// writeStatus +//--------------------------------------------------------- + +void ClipListEdit::writeStatus(Xml& xml) const + { + xml.tag("cliplist"); + TopWin::writeStatus(xml); + xml.etag("cliplist"); + } + +//--------------------------------------------------------- +// startChanged +//--------------------------------------------------------- + +void ClipListEdit::startChanged(const Pos& pos) + { +// editor->view->triggerUpdate(); + } + +//--------------------------------------------------------- +// lenChanged +//--------------------------------------------------------- + +void ClipListEdit::lenChanged(const Pos& pos) + { +// curClip.setLenFrame(pos.frame()); +// editor->view->triggerUpdate(); + } + +//--------------------------------------------------------- +// clipSelectionChanged +//--------------------------------------------------------- + +void ClipListEdit::clipSelectionChanged() + { + ClipItem* item = (ClipItem*)(editor->view->selectedItem()); +// if (item == 0) { + editor->start->setEnabled(false); + editor->len->setEnabled(false); + return; +#if 0 + } + editor->start->setEnabled(true); + editor->len->setEnabled(true); + Pos pos, len; + pos.setType(Pos::FRAMES); + len.setType(Pos::FRAMES); + pos.setFrame(curClip.spos()); + len.setFrame(curClip.lenFrame()); + editor->start->setValue(pos); + editor->len->setValue(len); +#endif + } + +//--------------------------------------------------------- +// clicked +//--------------------------------------------------------- + +void ClipListEdit::clicked(Q3ListViewItem*) + { +// printf("clicked\n"); + } + diff --git a/attic/muse_qt4_evolution/muse/cliplist/cliplist.h b/attic/muse_qt4_evolution/muse/cliplist/cliplist.h new file mode 100644 index 00000000..c3a6d5aa --- /dev/null +++ b/attic/muse_qt4_evolution/muse/cliplist/cliplist.h @@ -0,0 +1,47 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: cliplist.h,v 1.7 2006/01/06 22:48:09 wschweer Exp $ +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __CLIPLIST_H__ +#define __CLIPLIST_H__ + +#include "../cobject.h" +#include "event.h" + +class Xml; +class Pos; +class ClipListEditorBase; + +//--------------------------------------------------------- +// ClipListEdit +//--------------------------------------------------------- + +class ClipListEdit : public TopWin { + Q_OBJECT + ClipListEditorBase* editor; + + virtual void closeEvent(QCloseEvent*); + void updateList(); + + private slots: + void songChanged(int); + void startChanged(const Pos&); + void lenChanged(const Pos&); + void clipSelectionChanged(); + void clicked(Q3ListViewItem*); + + signals: + void deleted(int); + + public: + ClipListEdit(); + virtual void readStatus(QDomNode); + virtual void writeStatus(Xml&) const; + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/cobject.cpp b/attic/muse_qt4_evolution/muse/cobject.cpp new file mode 100644 index 00000000..6339a2b7 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/cobject.cpp @@ -0,0 +1,55 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "cobject.h" +#include "al/xml.h" +#include "gui.h" + +//--------------------------------------------------------- +// TopWin +//--------------------------------------------------------- + +TopWin::TopWin() + : QMainWindow() + { + setIconSize(ICON_SIZE); + } + +//--------------------------------------------------------- +// readStatus +//--------------------------------------------------------- + +void TopWin::read(QDomNode node) + { + for (node = node.firstChild(); !node.isNull(); node = node.nextSibling()) + AL::readProperties(this, node); + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void TopWin::write(Xml& xml) const + { + xml.stag(metaObject()->className()); + xml.writeProperties(this); + xml.etag(metaObject()->className()); + } + diff --git a/attic/muse_qt4_evolution/muse/cobject.h b/attic/muse_qt4_evolution/muse/cobject.h new file mode 100644 index 00000000..0dcbdf9d --- /dev/null +++ b/attic/muse_qt4_evolution/muse/cobject.h @@ -0,0 +1,46 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __COBJECT_H__ +#define __COBJECT_H__ + +namespace AL { + class Xml; + }; +using AL::Xml; + +//--------------------------------------------------------- +// TopWin +//--------------------------------------------------------- + +class TopWin : public QMainWindow + { + Q_OBJECT + Q_PROPERTY(bool muse) // hack: start MusE property list + Q_PROPERTY(QRect geometry READ geometry WRITE setGeometry) + + public: + virtual void read(QDomNode); + virtual void write(Xml& xml) const; + TopWin(); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/conf.cpp b/attic/muse_qt4_evolution/muse/conf.cpp new file mode 100644 index 00000000..162f6f9b --- /dev/null +++ b/attic/muse_qt4_evolution/muse/conf.cpp @@ -0,0 +1,694 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "al/al.h" +#include "muse.h" +#include "shortcuts.h" +#include "transport.h" +#include "widgets/bigtime.h" +#include "conf.h" +#include "gconfig.h" +#include "al/xml.h" +#include "widgets/midisync.h" +#include "sync.h" +#include "mixer.h" +#include "globals.h" +#include "midirc.h" +#include "awl/tcanvas.h" +#include "midiedit/pianoroll.h" +#include "midiedit/drumedit.h" + +extern void writeMidiTransforms(Xml& xml); +extern void readMidiTransform(QDomNode); + +//--------------------------------------------------------- +// readColor +//--------------------------------------------------------- + +QColor readColor(QDomNode node) + { + QDomElement e = node.toElement(); + int r = e.attribute("r","0").toInt(); + int g = e.attribute("g","0").toInt(); + int b = e.attribute("b","0").toInt(); + return QColor(r, g, b); + } + +//--------------------------------------------------------- +// readConfiguration +//--------------------------------------------------------- + +void readConfiguration(QDomNode node) + { + for (; !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + QString tag(e.tagName()); + QString s(e.text()); + int i = s.toInt(); + if (tag == "palette0") + QColorDialog::setCustomColor(0, readColor(node).rgb()); + else if (tag == "palette1") + QColorDialog::setCustomColor(1, readColor(node).rgb()); + else if (tag == "palette2") + QColorDialog::setCustomColor(2, readColor(node).rgb()); + else if (tag == "palette3") + QColorDialog::setCustomColor(3, readColor(node).rgb()); + else if (tag == "palette4") + QColorDialog::setCustomColor(4, readColor(node).rgb()); + else if (tag == "palette5") + QColorDialog::setCustomColor(5, readColor(node).rgb()); + else if (tag == "palette6") + QColorDialog::setCustomColor(6, readColor(node).rgb()); + else if (tag == "palette7") + QColorDialog::setCustomColor(7, readColor(node).rgb()); + else if (tag == "palette8") + QColorDialog::setCustomColor(8, readColor(node).rgb()); + else if (tag == "palette9") + QColorDialog::setCustomColor(9, readColor(node).rgb()); + else if (tag == "palette10") + QColorDialog::setCustomColor(10, readColor(node).rgb()); + else if (tag == "palette11") + QColorDialog::setCustomColor(11, readColor(node).rgb()); + else if (tag == "palette12") + QColorDialog::setCustomColor(12, readColor(node).rgb()); + else if (tag == "palette13") + QColorDialog::setCustomColor(13, readColor(node).rgb()); + else if (tag == "palette14") + QColorDialog::setCustomColor(14, readColor(node).rgb()); + else if (tag == "palette15") + QColorDialog::setCustomColor(15, readColor(node).rgb()); + else if (tag == "selectPartBg") + config.selectPartBg = readColor(node); + else if (tag == "outputTrackBg") + config.trackBg[Track::AUDIO_OUTPUT] = readColor(node); + else if (tag == "groupTrackBg") + config.trackBg[Track::AUDIO_GROUP] = readColor(node); + else if (tag == "waveTrackBg") + config.trackBg[Track::WAVE] = readColor(node); + else if (tag == "inputTrackBg") + config.trackBg[Track::AUDIO_INPUT] = readColor(node); + else if (tag == "synthTrackBg") + config.trackBg[Track::AUDIO_SOFTSYNTH] = readColor(node); + else if (tag == "midiTrackBg") + config.trackBg[Track::MIDI] = readColor(node); + else if (tag == "midiOutputBg") + config.trackBg[Track::MIDI_OUT] = readColor(node); + else if (tag == "midiInputBg") + config.trackBg[Track::MIDI_IN] = readColor(node); + else if (tag == "midiSyntiBg") + config.trackBg[Track::MIDI_SYNTI] = readColor(node); + else if (tag == "extendedMidi") + config.extendedMidi = i; + else if (tag == "midiExportDivision") + config.midiDivision = i; + else if (tag == "copyright") + config.copyright = s; + else if (tag == "smfFormat") + config.smfFormat = i; + else if (tag == "bigtimeVisible") + config.bigTimeVisible = i; + else if (tag == "transportVisible") + config.transportVisible = i; + else if (tag == "mixer1Visible") + config.mixer1Visible = i; + else if (tag == "mixer2Visible") + config.mixer2Visible = i; + else if (tag == "showSplashScreen") + config.showSplashScreen = i; + else if (tag == "canvasShowPartType") + config.canvasShowPartType = i; + else if (tag == "canvasShowPartEvent") + config.canvasShowPartEvent = i; + else if (tag == "canvasShowGrid") + config.canvasShowGrid = i; + else if (tag == "canvasBgPixmap") + config.canvasBgPixmap = s; + else if (tag == "canvasUsePixmap") + config.canvasUseBgPixmap = i; + else if (tag == "geometryMain") + ; // obsolete + else if (tag == "geometryTransport") + config.geometryTransport = AL::readGeometry(node); + else if (tag == "geometryBigTime") + config.geometryBigTime = AL::readGeometry(node); + else if (tag == "geometryPianoroll") + config.geometryPianoroll = AL::readGeometry(node); + else if (tag == "geometryDrumedit") + config.geometryDrumedit = AL::readGeometry(node); + else if (tag == "mixer1") + config.mixer1.read(node); + else if (tag == "mixer2") + config.mixer2.read(node); + else if (tag == "bigtimeForegroundcolor") + config.bigTimeForegroundColor = readColor(node); + else if (tag == "bigtimeBackgroundcolor") + config.bigTimeBackgroundColor = readColor(node); + else if (tag == "freewheelMode") + config.useJackFreewheelMode = i; + else if (tag == "mtctype") + AL::mtcType = i; + else if (tag == "extSync") + extSyncFlag = i; + else if (tag == "syncgentype") { + // for compatibility + int syncGenType= i; + genMTCSync = syncGenType == 1; + genMCSync = syncGenType == 2; + } + else if (tag == "genMTCSync") + genMTCSync = i; + else if (tag == "genMCSync") + genMCSync = i; + else if (tag == "genMMC") + genMMC = i; + else if (tag == "acceptMTC") + acceptMTC = i; + else if (tag == "acceptMMC") + acceptMMC = i; + else if (tag == "acceptMC") + acceptMC = i; + else if (tag == "mtcoffset") { + QStringList l = s.simplified().split(":", QString::SkipEmptyParts); + if (l.size() != 5) { + printf("cannot convert mtcoffset <%s>n\n", s.toAscii().data()); + } + else { + int h = l.at(0).toInt(); + int m = l.at(0).toInt(); + int s = l.at(0).toInt(); + int f = l.at(0).toInt(); + int sf = l.at(0).toInt(); + mtcOffset = MTC(h, m, s, f, sf); + } + } + else if (tag == "shortcuts") + readShortCuts(node.firstChild()); + else if (tag == "midiRC") + midiRCList.read(node); + else if (tag == "division") + config.division = i; + else if (tag == "guiDivision") + config.guiDivision = i; + else if (tag == "rtcTicks") + config.rtcTicks = i; + else if (tag == "minMeter") + config.minMeter = s.toDouble(); + else if (tag == "maxMeter") + config.maxMeter = s.toDouble(); + else if (tag == "minSlider") + config.minSlider = s.toDouble(); + else if (tag == "maxSlider") + config.maxSlider = s.toDouble(); + else if (tag == "guiRefresh") + config.guiRefresh = i; + else if (tag == "peakHoldTime") + config.peakHoldTime = i; + else if (tag == "helpBrowser") + config.helpBrowser = s; +//TD else if (tag == "midiTransform") +// readMidiTransform(node.firstChild()); + else if (tag == "startMode") + config.startMode = (StartMode)i; + else if (tag == "startProject") + config.startProject = s; + else if (tag == "followMode") + TimeCanvas::followMode = (FollowMode)i; + else if (tag == "defaultMidiInputDevice") + config.defaultMidiInputDevice = s; + else if (tag == "defaultMidiOutputDevice") + config.defaultMidiOutputDevice = s; + else if (tag == "defaultMidiInstrument") + config.defaultMidiInstrument = s; + else if (tag == "connectToAllMidiDevices") + config.connectToAllMidiDevices = i; + else if (tag == "connectToAllMidiTracks") + config.connectToAllMidiTracks = i; + else if (tag == "createDefaultMidiInput") + config.createDefaultMidiInput = i; + else if (tag == "projectPath") + config.projectPath = s; + else if (tag == "templatePath") + config.templatePath = s; + else if (tag == "instrumentPath") + config.instrumentPath = s; + else if (tag == "importMidiPath") { + config.importMidiPath = s; + lastMidiPath = museUser + "/" + s; + } + else if (tag == "importWavePath") { + config.importWavePath = s; + lastWavePath = museUser + "/" + s; + } + else if (tag == "PianoRoll") + PianoRoll::readConfiguration(node); + else if (tag == "DrumEdit") + DrumEdit::readConfiguration(node); + else { + printf("MusE:readConfiguration(): unknown tag %s\n", + e.tagName().toAscii().data()); + } + } + } + +//--------------------------------------------------------- +// probeMachineSpecificConfiguration +//--------------------------------------------------------- + +static void probeMachineSpecificConfiguration() + { + // set a default help browser (crude way to find out) + if (!system("which konqueror &>/dev/null")) { + config.helpBrowser = QString("konqueror"); + } + else if (!system("which opera &>/dev/null")) { + config.helpBrowser = QString("opera"); + } + else if (!system("which firebird &>/dev/null")) { + config.helpBrowser = QString("firebird"); + } + else if (!system("which mozilla &>/dev/null")) { + config.helpBrowser = QString("mozilla"); + } + else { + // was not able to find a browser + } + // More preconfiguration + } + +//--------------------------------------------------------- +// readConfiguration +//--------------------------------------------------------- + +bool readConfiguration() + { + if (debugMsg) + printf("readConfiguration <%s>\n", configName.toAscii().data()); + + QFile qf(configName); + if (!qf.open(QIODevice::ReadOnly)) { + if (debugMsg || debugMode) + fprintf(stderr, "NO Config File <%s> found\n", configName.toAscii().data()); + + // if the config file does not exist launch probeMachineSpecificConfiguration + probeMachineSpecificConfiguration(); + return true; + } + if (debugMsg) + printf("readConfiguration <%s>\n", configName.toAscii().data()); + + QDomDocument doc; + int line, column; + QString err; + if (!doc.setContent(&qf, false, &err, &line, &column)) { + QString col, ln, error; + col.setNum(column); + ln.setNum(line); + error = err + "\n at line: " + ln + " col: " + col; + printf("error reading med file: %s\n", error.toAscii().data()); + return true; + } + QDomNode node = doc.documentElement(); + while (!node.isNull()) { + QDomElement e = node.toElement(); + if (e.isNull()) + continue; + if (e.tagName() == "muse") { + node = node.firstChild(); + // QString version = e.attribute(QString("version")); + while (!node.isNull()) { + QDomElement e = node.toElement(); + if (e.tagName() == "configuration") + readConfiguration(node.firstChild()); + else + printf("MusE:readConfiguration(): unknown tag %s\n", e.tagName().toAscii().data()); + node = node.nextSibling(); + } + } + else + printf("MusE:readConfiguration() %s not supported\n", e.tagName().toAscii().data()); + node = node.nextSibling(); + } + return false; + } + +//--------------------------------------------------------- +// writeGlobalConfiguration +//--------------------------------------------------------- + +void MusE::writeGlobalConfiguration() const + { + QFile f(configName); + if (!f.open(QIODevice::WriteOnly)) { + printf("save configuration to <%s> failed: %s\n", + configName.toAscii().data(), strerror(errno)); + return; + } + Xml xml(&f); + xml.header(); + xml.stag("muse version=\"2.0\""); + writeGlobalConfiguration(xml); + xml.etag("muse"); + f.close(); + } + +void MusE::writeGlobalConfiguration(Xml& xml) const + { + xml.stag("configuration"); + + xml.tag("division", config.division); + xml.tag("rtcTicks", config.rtcTicks); + xml.tag("minMeter", config.minMeter); + xml.tag("maxMeter", config.maxMeter); + xml.tag("minSlider", config.minSlider); + xml.tag("maxSlider", config.maxSlider); + xml.tag("guiRefresh", config.guiRefresh); + xml.tag("peakHoldTime", config.peakHoldTime); + xml.tag("helpBrowser", config.helpBrowser); + xml.tag("extendedMidi", config.extendedMidi); + xml.tag("midiExportDivision", config.midiDivision); + xml.tag("guiDivision", config.guiDivision); + xml.tag("copyright", config.copyright); + xml.tag("smfFormat", config.smfFormat); + xml.tag("startMode", config.startMode); + if (!config.startProject.isEmpty()) + xml.tag("startProject", config.startProject); + xml.tag("freewheelMode", config.useJackFreewheelMode); + + for (int i = 0; i < QColorDialog::customCount(); ++i) { + char buffer[32]; + snprintf(buffer, 32, "palette%d", i); + xml.tag(buffer, QColorDialog::customColor(i)); + } + + xml.tag("selectPartBg", config.selectPartBg); + + static const char* colorNames[Track::TRACK_TYPES] = { + "outputTrackBg", + "groupTrackBg", + "waveTrackBg", + "inputTrackBg", + "synthTrackBg", + "midiTrackBg", + "midiOutputBg", + "midiInputBg", + "midiSyntiBg" + }; + for (int i = 0; i < Track::TRACK_TYPES; ++i) + xml.tag(colorNames[i], config.trackBg[i]); + + xml.tag("mtctype", AL::mtcType); + + xml.stag("mtcoffset"); + xml.put(QString("%1:%2:%3:%4:%5") + .arg(mtcOffset.h()).arg(mtcOffset.m()).arg(mtcOffset.s()) + .arg(mtcOffset.f()).arg(mtcOffset.sf())); + xml.etag("mtcoffset"); + + xml.tag("extSync", extSyncFlag); + xml.tag("genMTCSync", genMTCSync); + xml.tag("genMCSync", genMCSync); + xml.tag("genMMC", genMMC); + xml.tag("acceptMTC", acceptMTC); + xml.tag("acceptMMC", acceptMMC); + xml.tag("acceptMC", acceptMC); + + xml.tag("geometryTransport", config.geometryTransport); + xml.tag("geometryBigTime", config.geometryBigTime); + xml.tag("geometryPianoroll", config.geometryPianoroll); + xml.tag("geometryDrumedit", config.geometryDrumedit); + + xml.tag("bigtimeVisible", config.bigTimeVisible); + xml.tag("transportVisible", config.transportVisible); + + xml.tag("mixer1Visible", config.mixer1Visible); + xml.tag("mixer2Visible", config.mixer2Visible); + + config.mixer1.write(xml, "mixer1"); + config.mixer2.write(xml, "mixer2"); + + xml.tag("showSplashScreen", config.showSplashScreen); + xml.tag("canvasShowPartType", config.canvasShowPartType); + xml.tag("canvasShowPartEvent", config.canvasShowPartEvent); + xml.tag("canvasShowGrid", config.canvasShowGrid); + xml.tag("canvasUsePixmap", config.canvasUseBgPixmap); + xml.tag("canvasBgPixmap", config.canvasBgPixmap); + + xml.tag("bigtimeForegroundcolor", config.bigTimeForegroundColor); + xml.tag("bigtimeBackgroundcolor", config.bigTimeBackgroundColor); + + writeShortCuts(xml); + midiRCList.write(xml); + xml.tag("followMode", TimeCanvas::followMode); + + xml.tag("defaultMidiInputDevice", config.defaultMidiInputDevice); + xml.tag("defaultMidiOutputDevice", config.defaultMidiOutputDevice); + xml.tag("defaultMidiInstrument", config.defaultMidiInstrument); + xml.tag("connectToAllMidiDevices", config.connectToAllMidiDevices); + xml.tag("connectToAllMidiTracks", config.connectToAllMidiTracks); + xml.tag("createDefaultMidiInput", config.createDefaultMidiInput); + xml.tag("projectPath", config.projectPath); + xml.tag("templatePath", config.templatePath); + xml.tag("instrumentPath", config.instrumentPath); + xml.tag("importMidiPath", config.importMidiPath); + xml.tag("importWavePath", config.importWavePath); + + PianoRoll::writeConfiguration(xml); + DrumEdit::writeConfiguration(xml); + xml.etag("configuration"); + } + +//--------------------------------------------------------- +// writeConfiguration +// write song specific configuration +//--------------------------------------------------------- + +void MusE::writeConfiguration(Xml& xml) const + { + xml.stag("configuration"); + + xml.tag("mtctype", AL::mtcType); + xml.stag("mtcoffset"); + xml.put(QString("%1:%2:%3:%4:%5") + .arg(mtcOffset.h()).arg(mtcOffset.m()).arg(mtcOffset.s()) + .arg(mtcOffset.f()).arg(mtcOffset.sf())); + xml.etag("mtcoffset"); + xml.tag("extSync", extSyncFlag); + xml.tag("genMTCSync", genMTCSync); + xml.tag("genMCSync", genMCSync); + xml.tag("genMMC", genMMC); + xml.tag("acceptMTC", acceptMTC); + xml.tag("acceptMMC", acceptMMC); + xml.tag("acceptMC", acceptMC); + + xml.tag("bigtimeVisible", bt_id->isChecked()); + xml.tag("transportVisible", tr_id->isChecked()); + + if (transport) + xml.tag("geometryTransport", transport); + if (bigtime) + xml.tag("geometryBigTime", bigtime); + + xml.tag("mixer1Visible", aid1a->isChecked()); + xml.tag("mixer2Visible", aid1b->isChecked()); + if (mixer1) + mixer1->write(xml, "mixer1"); + if (mixer2) + mixer2->write(xml, "mixer2"); + + xml.etag("configuration"); + } + +//--------------------------------------------------------- +// configMidiSync +//--------------------------------------------------------- + +void MusE::configMidiSync() + { + if (!midiSyncConfig) { + midiSyncConfig = new MidiSyncConfig(this); + connect(midiSyncConfig, SIGNAL(syncChanged()), SLOT(syncChanged())); + } + midiSyncConfig->raise(); + midiSyncConfig->show(); + } + +//--------------------------------------------------------- +// syncChanged +//--------------------------------------------------------- + +void MusE::syncChanged() + { + transport->syncChanged(); + } + +//--------------------------------------------------------- +// configMidiFile +//--------------------------------------------------------- + +void MusE::configMidiFile() + { + if (!midiFileConfig) + midiFileConfig = new MidiFileConfig(); + midiFileConfig->updateValues(); + + if (midiFileConfig->isVisible()) { + midiFileConfig->raise(); +//TD midiFileConfig->setActiveWindow(); + } + else + midiFileConfig->show(); + } + +//--------------------------------------------------------- +// MidiFileConfig +// config properties of exported midi files +//--------------------------------------------------------- + +MidiFileConfig::MidiFileConfig() + : ConfigMidiFileBase() + { + setupUi(this); + connect(buttonOk, SIGNAL(clicked()), SLOT(okClicked())); + connect(buttonCancel, SIGNAL(clicked()), SLOT(cancelClicked())); + } + +//--------------------------------------------------------- +// updateValues +//--------------------------------------------------------- + +void MidiFileConfig::updateValues() + { + int divisionIdx = 2; + switch(config.midiDivision) { + case 96: divisionIdx = 0; break; + case 192: divisionIdx = 1; break; + case 384: divisionIdx = 2; break; + } + divisionCombo->setCurrentIndex(divisionIdx); + formatCombo->setCurrentIndex(config.smfFormat); + extendedFormat->setChecked(config.extendedMidi); + copyrightEdit->setText(config.copyright); + } + +//--------------------------------------------------------- +// okClicked +//--------------------------------------------------------- + +void MidiFileConfig::okClicked() + { + int divisionIdx = divisionCombo->currentIndex(); + + int divisions[3] = { 96, 192, 384 }; + if (divisionIdx >= 0 && divisionIdx < 3) + config.midiDivision = divisions[divisionIdx]; + config.extendedMidi = extendedFormat->isChecked(); + config.smfFormat = formatCombo->currentIndex(); + config.copyright = copyrightEdit->text(); + + muse->changeConfig(true); // write config file + close(); + } + +//--------------------------------------------------------- +// cancelClicked +//--------------------------------------------------------- + +void MidiFileConfig::cancelClicked() + { + close(); + } + +//--------------------------------------------------------- +// configGlobalSettings +//--------------------------------------------------------- + +//void MusE::configGlobalSettings() +// { +// if (!globalSettingsConfig) +// globalSettingsConfig = new GlobalSettingsConfig(); +// +// if (globalSettingsConfig->isVisible()) { +// globalSettingsConfig->raise(); +////TD globalSettingsConfig->setActiveWindow(); +// } +// else +// globalSettingsConfig->show(); +// } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void MixerConfig::write(Xml& xml, const char* name) + { + xml.stag(QString(name)); + xml.tag("geometry", geometry); + xml.tag("showMidiTracks", showMidiTracks); + xml.tag("showMidiSyntiPorts", showMidiSyntiPorts); + xml.tag("showMidiTracks", showMidiTracks); + xml.tag("showOutputTracks", showOutputTracks); + xml.tag("showWaveTracks", showWaveTracks); + xml.tag("showGroupTracks", showGroupTracks); + xml.tag("showInputTracks", showInputTracks); + xml.tag("showAuxTracks", showAuxTracks); + xml.tag("showSyntiTracks", showSyntiTracks); + xml.tag("showMidiInPorts", showMidiInPorts); + xml.tag("showMidiOutPorts", showMidiOutPorts); + xml.etag(name); + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void MixerConfig::read(QDomNode node) + { + for (node = node.firstChild(); !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + QString tag(e.tagName()); + QString s = e.text(); + int i = s.toInt(); + if (tag == "geometry") + geometry = AL::readGeometry(node); + else if (tag == "showMidiTracks") + showMidiTracks = i; + else if (tag == "showMidiSyntiPorts") + showMidiSyntiPorts = i; + else if (tag == "showOutputTracks") + showOutputTracks = i; + else if (tag == "showWaveTracks") + showWaveTracks = i; + else if (tag == "showGroupTracks") + showGroupTracks = i; + else if (tag == "showInputTracks") + showInputTracks = i; + else if (tag == "showAuxTracks") + showAuxTracks = i; + else if (tag == "showSyntiTracks") + showSyntiTracks = i; + else if (tag == "showMidiInPorts") + showMidiInPorts = i; + else if (tag == "showMidiOutPorts") + showMidiOutPorts = i; + else + printf("MusE:MixerConfig: unknown tag %s\n", e.tagName().toAscii().data()); + } + } + diff --git a/attic/muse_qt4_evolution/muse/conf.h b/attic/muse_qt4_evolution/muse/conf.h new file mode 100644 index 00000000..b026c080 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/conf.h @@ -0,0 +1,46 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __CONF_H__ +#define __CONF_H__ + +#include "ui_configmidifile.h" + +//--------------------------------------------------------- +// MidiFileConfig +// config properties of exported midi files +//--------------------------------------------------------- + +class MidiFileConfig : public QDialog, public Ui::ConfigMidiFileBase { + Q_OBJECT + + private slots: + void okClicked(); + void cancelClicked(); + + public: + MidiFileConfig(); + void updateValues(); + }; + +extern bool readConfiguration(); +extern void readConfiguration(QDomNode); +#endif + diff --git a/attic/muse_qt4_evolution/muse/configmidifile.ui b/attic/muse_qt4_evolution/muse/configmidifile.ui new file mode 100644 index 00000000..ca96f3f5 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/configmidifile.ui @@ -0,0 +1,153 @@ + + + + + ConfigMidiFileBase + + + + 0 + 0 + 541 + 280 + + + + MusE: Config Midi File Export + + + true + + + + 11 + + + 6 + + + + + 0 + + + 6 + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 20 + 20 + + + + + + + + &OK + + + + + + true + + + true + + + + + + + &Cancel + + + + + + true + + + + + + + + + + 0 (single track) + + + + + 1 (multiple tracks) + + + + + + + + Format: + + + + + + + + 96 + + + + + 192 + + + + + 384 + + + + + + + + Division: + + + + + + + Copyright: + + + + + + + + + + Enable extended smf format + + + + + + + qPixmapFromMimeSource + + + diff --git a/attic/muse_qt4_evolution/muse/configtrack.cpp b/attic/muse_qt4_evolution/muse/configtrack.cpp new file mode 100644 index 00000000..a8fee6a3 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/configtrack.cpp @@ -0,0 +1,265 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "configtrack.h" +#include "trelement.h" +#include "arranger.h" + +//--------------------------------------------------------- +// ConfigTrackList +//--------------------------------------------------------- + +ConfigTrackList::ConfigTrackList(QWidget* parent) + : QDialog(parent) + { + setupUi(this); + // does not work: + configuredList->setSelectionMode(QAbstractItemView::SingleSelection); + availableList->setSelectionMode(QAbstractItemView::SingleSelection); + + up->setEnabled(false); + down->setEnabled(false); + addItem->setEnabled(false); + removeItem->setEnabled(false); + dirty = false; + curType = 0; + init(); + + connect(trackType, SIGNAL(activated(int)), SLOT(trackTypeChanged(int))); + connect(availableList, SIGNAL(itemSelectionChanged()), SLOT(availableSelected())); + connect(configuredList, SIGNAL(itemSelectionChanged()), SLOT(configuredSelected())); + connect(up, SIGNAL(clicked()), SLOT(upClicked())); + connect(down, SIGNAL(clicked()), SLOT(downClicked())); + connect(addItem, SIGNAL(clicked()), SLOT(addItemClicked())); + connect(removeItem, SIGNAL(clicked()), SLOT(removeItemClicked())); + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +void ConfigTrackList::init() + { + trackType->clear(); + for (int tt = 0; tt < Track::TRACK_TYPES; ++tt) { + list[tt] = glist[tt]; + trackType->addItem(Track::_clname[tt]); + } + trackTypeChanged(curType); + } + +//--------------------------------------------------------- +// done +//--------------------------------------------------------- + +void ConfigTrackList::done(int code) + { + if (code) { + // OK pressed + if (dirty) + saveTrackType(); + for (int tt = 0; tt < Track::TRACK_TYPES; ++tt) + glist[tt] = list[tt]; + emit trackConfigChanged(); + } + else { + dirty = false; + init(); + } + QDialog::done(code); + } + +//--------------------------------------------------------- +// saveTrackType +//--------------------------------------------------------- + +void ConfigTrackList::saveTrackType() + { + dirty = false; + list[curType].clear(); + int gn = 0; + TrElementList group; + int n = configuredList->count(); + for (int i = 0; i < n; ++i) { + QString s = configuredList->item(i)->text(); + int k; + for (k = 0; k < nTrElements; ++k) + if (trElements[k].name == s) + break; + if (trElements[k].grp != gn) { + list[curType].push_back(group); + group.clear(); + gn = trElements[k].grp; + } + group.push_back(&trElements[k]); + } + if (!group.empty()) + list[curType].push_back(group); + } + +//--------------------------------------------------------- +// trackTypeChanged +//--------------------------------------------------------- + +void ConfigTrackList::trackTypeChanged(int type) + { + curType = type; + if (dirty) + saveTrackType(); + + configuredList->clear(); + TrGroupList& gl = list[type]; + for (iTrGroup i = gl.begin(); i != gl.end(); ++i) { + for (iTrElement k = i->begin(); k != i->end(); ++k) + configuredList->addItem((*k)->name); + } + + availableList->clear(); + for (int i = 0; i < nTrElements; ++i) { + QString name(trElements[i].name); + bool f = false; + + // is gui element available for this track type? + + for (int i = 0; i < nTrElements; ++i) { + const TrElement& el = trElements[i]; + if (el.name == name) { + if (el.trackMask & (1 << type)) { + f = true; + break; + } + } + } + if (!f) + continue; + + // is gui element already configured? + + for (iTrGroup i = gl.begin(); i != gl.end(); ++i) { + for (iTrElement k = i->begin(); k != i->end(); ++k) { + if (name == (*k)->name) { + f = false; + break; + } + } + if (!f) + break; + } + if (f) { + availableList->addItem(name); + } + } + } + +//--------------------------------------------------------- +// configuredSelected +//--------------------------------------------------------- + +void ConfigTrackList::configuredSelected() + { + QListWidgetItem* item = configuredList->selectedItems().at(0); + up->setEnabled(item != 0); + down->setEnabled(item != 0); + removeItem->setEnabled(item != 0); + } + +//--------------------------------------------------------- +// availableSelected +//--------------------------------------------------------- + +void ConfigTrackList::availableSelected() + { + QListWidgetItem* item = availableList->selectedItems().at(0); + addItem->setEnabled(item != 0); + } + +//--------------------------------------------------------- +// upClicked +//--------------------------------------------------------- + +void ConfigTrackList::upClicked() + { + QListWidgetItem* item = configuredList->selectedItems().at(0); + int n = configuredList->row(item); + if (n <= 0) + return; + QString s = item->text(); + delete item; + configuredList->insertItem(n-1, s); + configuredList->setItemSelected(configuredList->item(n-1), true); + dirty = true; + } + +//--------------------------------------------------------- +// downClicked +//--------------------------------------------------------- + +void ConfigTrackList::downClicked() + { + QListWidgetItem* item = configuredList->selectedItems().at(0); + int n = configuredList->row(item); + if (n >= int(configuredList->count()-1)) + return; + QString s = item->text(); + + delete item; + configuredList->insertItem(n+1, s); + configuredList->setItemSelected(configuredList->item(n+1), true); + dirty = true; + } + +//--------------------------------------------------------- +// addItemClicked +//--------------------------------------------------------- + +void ConfigTrackList::addItemClicked() + { + QListWidgetItem* item = availableList->selectedItems().at(0); + if (item == 0) + return; + QString s = item->text(); + delete item; + configuredList->addItem(s); + configuredList->setItemSelected(configuredList->item(configuredList->count()-1), true); + QListWidgetItem* ci = availableList->currentItem(); + if (ci) + availableList->setItemSelected(ci, true); + dirty = true; + } + +//--------------------------------------------------------- +// removeItemClicked +//--------------------------------------------------------- + +void ConfigTrackList::removeItemClicked() + { + QListWidgetItem* item = configuredList->selectedItems().at(0); + if (item == 0) + return; + QString s = item->text(); + delete item; + availableList->addItem(s); + availableList->setItemSelected(availableList->item(availableList->count()-1), true); + QListWidgetItem* ci = configuredList->item(configuredList->currentRow()); + if (ci) + configuredList->setItemSelected(ci, true); + dirty = true; + } + diff --git a/attic/muse_qt4_evolution/muse/configtrack.h b/attic/muse_qt4_evolution/muse/configtrack.h new file mode 100644 index 00000000..47dd0f4a --- /dev/null +++ b/attic/muse_qt4_evolution/muse/configtrack.h @@ -0,0 +1,61 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __CONFIG_TRACK_H__ +#define __CONFIG_TRACK_H__ + +#include "ui_configtrack.h" +#include "track.h" +#include "trelement.h" + +struct TrElement; +class TrGroupList; + +//--------------------------------------------------------- +// ConfigTrackList +//--------------------------------------------------------- + +class ConfigTrackList : public QDialog, Ui::ConfigTrackListBase { + Q_OBJECT + + TrGroupList list[Track::TRACK_TYPES]; + void init(); + bool dirty; + void saveTrackType(); + int curType; + + private slots: + void trackTypeChanged(int); + void availableSelected(); + void configuredSelected(); + void upClicked(); + void downClicked(); + void addItemClicked(); + void removeItemClicked(); + virtual void done(int); + + signals: + void trackConfigChanged(); + + public: + ConfigTrackList(QWidget*); + }; + +#endif diff --git a/attic/muse_qt4_evolution/muse/configtrack.ui b/attic/muse_qt4_evolution/muse/configtrack.ui new file mode 100644 index 00000000..350b405a --- /dev/null +++ b/attic/muse_qt4_evolution/muse/configtrack.ui @@ -0,0 +1,299 @@ + + + + + ConfigTrackListBase + + + + 0 + 0 + 545 + 352 + + + + MusE: Config Track List + + + true + + + + 11 + + + 6 + + + + + 0 + + + 6 + + + + + Track Type: + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 40 + 20 + + + + + + + + + + 0 + + + 6 + + + + + 0 + + + 6 + + + + + Available Items: + + + + + + + QAbstractItemView::SelectRows + + + 0 + + + + + + + + + 0 + + + 6 + + + + + Add + + + + + + + Remove + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 40 + + + + + + + + Up + + + + + + + Down + + + + + + + + + 0 + + + 6 + + + + + Configured Items + + + + + + + QAbstractItemView::SelectRows + + + + + + + + + + + 0 + + + 6 + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 40 + 20 + + + + + + + + + + 0 + + + 6 + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 20 + 20 + + + + + + + + &OK + + + + + + true + + + true + + + + + + + &Cancel + + + + + + true + + + + + + + + + qPixmapFromMimeSource + + + + ok + clicked() + ConfigTrackListBase + accept() + + + 393 + 321 + + + 259 + 326 + + + + + cancel + clicked() + ConfigTrackListBase + reject() + + + 484 + 327 + + + 437 + 283 + + + + + diff --git a/attic/muse_qt4_evolution/muse/ctrl.cpp b/attic/muse_qt4_evolution/muse/ctrl.cpp new file mode 100644 index 00000000..82e8efef --- /dev/null +++ b/attic/muse_qt4_evolution/muse/ctrl.cpp @@ -0,0 +1,450 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "fastlog.h" +#include "globals.h" +#include "ctrl.h" +#include "al/xml.h" +#include "midictrl.h" + +//--------------------------------------------------------- +// Ctrl +//--------------------------------------------------------- + +Ctrl::Ctrl(int id, const QString& s, int t) + : _id(id), _name(s), _type(t) + { + setRange(.0f, 1.f); + _default.f = 0.0f; + _curVal.f = 0.0f; + _touched = false; + _changed = false; + _moveWithPart = false; + } + +Ctrl::Ctrl(int id, const QString& s, int t, float a, float b) + : _id(id), _name(s), _type(t) + { + if (_type & INT) + setRange(int(a), int(b)); + else + setRange(a, b); + _default.f = 0.0f; + _curVal.f = 0.0f; + _touched = false; + _changed = false; + _moveWithPart = false; + } + +Ctrl::Ctrl() + { + _type = INTERPOLATE; + setRange(0.0f, 1.0f); + _id = 0; + _default.f = 0.0f; + _curVal.f = 0.0f; + _touched = false; + _changed = false; + _moveWithPart = false; + } + +Ctrl::Ctrl(const MidiController* mc) + { + _type = DISCRETE | INT; + setRange(mc->minVal(), mc->maxVal()); + _id = mc->num(); + _default.i = mc->initVal(); + _curVal.i = CTRL_VAL_UNKNOWN; + _name = mc->name(); + _touched = false; + _changed = false; + _moveWithPart = false; + } + +//--------------------------------------------------------- +// value +//--------------------------------------------------------- + +CVal Ctrl::value(unsigned time) + { + CVal rv; + + if (empty() || _touched) + return _curVal; + if (_type & DISCRETE) { + // + // midi controller + // + ciCtrlVal i = upperBound(time); + if (i == end()) { + --i; + rv = i.value(); + } + else if (i == begin()) { + if (i.key() == time) + rv = i.value(); + else + return _curVal; + } + else { + --i; + rv = i.value(); + } + } + else { + // + // linear interpolated audio + // controller + // + ciCtrlVal i = upperBound(time); + if (i == end()) { + --i; + rv = i.value(); + } + else { + int frame2 = i.key(); + CVal val2 = i.value(); + int frame1; + CVal val1; + if (i == begin()) { + rv = val2; + } + else { + --i; + frame1 = i.key(); + val1 = i.value(); + time -= frame1; + frame2 -= frame1; + if (_type & INT) { + val2.i -= val1.i; + rv.i = val1.i + (time * val2.i)/frame2; + } + else { + val2.f -= val1.f; + rv.f = val1.f + (time * val2.f)/frame2; + } + } + } + } + if (_type & LOG) { + if (rv.f <= -1000.0f) + rv.f = 0.0f; + else + rv.f = pow(10.0f, rv.f); + } + return rv; + } + +//--------------------------------------------------------- +// add +// return true if new value added +//--------------------------------------------------------- + +bool Ctrl::add(unsigned frame, CVal val) + { + if (_type & LOG) { + if (val.f <= 0.0) + val.f = -1001.0f; + else + val.f = log10(val.f); + } + bool rv = find(frame) == end(); + insert(frame, val); + return rv; + } + +//--------------------------------------------------------- +// del +//--------------------------------------------------------- + +void Ctrl::del(unsigned frame) + { + iCtrlVal e = find(frame); + erase(e); + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void Ctrl::read(QDomNode node, bool) + { + QDomElement e = node.toElement(); + _id = e.attribute("id").toInt(); + _name = e.attribute("name"); + _type = e.attribute("type","0").toInt(); + + const char* minS = "0.0f"; + const char* maxS = "1.0f"; + + if (_type & INT) { + minS = "0"; + maxS = "127"; + _curVal.i = e.attribute("cur","-1").toInt(); + _default.i = e.attribute("default","-1").toInt(); + } + else { + if (_id == AC_PAN) { + minS = "-1.0f"; + maxS = "+1.0f"; + } + _curVal.f = e.attribute("cur","0.0").toFloat(); + _default.f = e.attribute("default","0.0").toFloat(); + } + setCurVal(_curVal); + if (_type & INT) { + min.i = e.attribute("min", minS).toInt(); + max.i = e.attribute("max", maxS).toInt(); + } + else { + min.f = e.attribute("min", minS).toFloat(); + max.f = e.attribute("max", maxS).toFloat(); + } + + QStringList vp = e.text().simplified().split(",", QString::SkipEmptyParts); + int n = vp.size(); + for (int i = 0; i < n; ++i) { + QStringList sl = vp.at(i).simplified().split(" "); + bool ok; + int frame = sl.at(0).toInt(&ok, 0); + if (!ok) { + printf("Ctrl::read(1): conversion <%s><%s> to int failed\n", + vp.at(i).simplified().toAscii().data(), + sl.at(0).toAscii().data()); + break; + } + CVal val; + if (_type & INT) + val.i = sl.at(1).toInt(&ok, 0); + else + val.f = sl.at(1).toDouble(&ok); + if (!ok) { + printf("Ctrl::read(2): conversion <%s><%s> failed\n", + vp.at(i).simplified().toAscii().data(), + sl.at(1).toAscii().data()); + break; + } + add(frame, val); + } + } + +//--------------------------------------------------------- +// add +//--------------------------------------------------------- + +void CtrlList::add(Ctrl* vl) + { + insert(std::pair(vl->id(), vl)); + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void Ctrl::write(Xml& xml) + { + QString s("controller id=\"%1\" name=\"%2\" cur=\"%3\" type=\"%4\" min=\"%5\" max=\"%6\" default=\"%7\""); + + QString cn = Xml::xmlString(_name); + + if (empty()) { + if (_type & INT) + xml.tagE(s.arg(id()).arg(cn).arg(curVal().i).arg(_type).arg(min.i).arg(max.i).arg(_default.i).toAscii().data()); + else + xml.tagE(s.arg(id()).arg(cn).arg(curVal().f).arg(_type).arg(min.f).arg(max.f).arg(_default.f).toAscii().data()); + return; + } + if (_type & INT) + xml.stag(s.arg(id()).arg(cn).arg(curVal().i).arg(_type).arg(min.i).arg(max.i).arg(_default.i).toAscii().data()); + else + xml.stag(s.arg(id()).arg(cn).arg(curVal().f).arg(_type).arg(min.f).arg(max.f).arg(_default.f).toAscii().data()); + + int i = 0; + for (ciCtrlVal ic = begin(); ic != end(); ++ic) { + if (i == 0) + xml.putLevel(); + int time = ic.key(); + CVal val = ic.value(); + if (_type & LOG) + val.f = (val.f <= -1000.0) ? 0.0f : pow(10.0f, val.f); + if (_type & INT) { + xml << time << ' ' << val.i << ','; + } + else + xml << time << ' ' << val.f << ','; + ++i; + if (i >= 4) { + xml << endl; + i = 0; + } + } + if (i) + xml << endl; + xml.etag("controller"); + } + +//--------------------------------------------------------- +// val2pixelR +// input val is "raw" data +//--------------------------------------------------------- + +int Ctrl::val2pixelR(CVal val, int maxpixel) + { + maxpixel -= 1; + if (_type & INT) + return maxpixel - ((maxpixel * (val.i - min.i) + (max.i-min.i)/2) / (max.i - min.i)); + else { + if ((_type & LOG) && (val.f <= -1000.0f)) + return maxpixel; + int pixel = maxpixel - lrint(double(maxpixel) * (val.f - min.f) / (max.f-min.f)); + if (pixel < 0) { + printf("%d - lrint(double(%d) * (%f - %f)/(%f-%f)\n", + maxpixel, maxpixel, val.f, min.f, max.f, min.f); + printf(" %f/%f = %f\n", + val.f-min.f, max.f-min.f, (val.f-min.f)/(max.f-min.f)); + } + return pixel; +// return maxpixel - lrint(double(maxpixel) * (val.f - min.f) / (max.f-min.f)); + } + } + +int Ctrl::val2pixelR(int val, int maxpixel) + { + maxpixel -= 1; + int range = max.i - min.i; + return maxpixel - ((maxpixel * (val - min.i) + range / 2) / range); + } + +//--------------------------------------------------------- +// cur2pixel +//--------------------------------------------------------- + +int Ctrl::cur2pixel(int maxpixel) + { +#if 0 + return val2pixelR(_curVal, maxpixel); +#else + maxpixel -= 1; + + if (_type & INT) + return maxpixel - ((maxpixel * (_curVal.i - min.i) + (max.i-min.i)/2) / (max.i - min.i)); + float f = _curVal.f; + if (_type & LOG) { + if (f <= 0.0) + return maxpixel; + else + f = fast_log10(f); + } + return maxpixel - lrint(double(maxpixel) * (f - min.f) / (max.f-min.f)); +#endif + } + +//--------------------------------------------------------- +// pixel2val +//--------------------------------------------------------- + +CVal Ctrl::pixel2val(int pixel, int maxpixel) + { + maxpixel -= 1; + pixel = maxpixel - pixel; + +// printf("pixel2val %d(%d) int %d, min %d, max %d\n", +// pixel, maxpixel, _type & INT, min.i, max.i); + CVal rv; + if (_type & INT) { + rv.i = (pixel * (max.i - min.i) + (maxpixel+min.i)/2) / maxpixel + min.i; + if (rv.i < min.i) + rv.i = min.i; + else if (rv.i > max.i) + rv.i = max.i; + } + else { + rv.f = double(pixel) * (max.f - min.f) / double(maxpixel) + min.f; + if (rv.f < min.f) + rv.f = min.f; + else if (rv.f > max.f) + rv.f = max.f; + if (_type & LOG) + rv.f = pow(10.0f, rv.f); + } + return rv; + } + +//--------------------------------------------------------- +// pixel2valR +//--------------------------------------------------------- + +CVal Ctrl::pixel2valR(int pixel, int maxpixel) + { + maxpixel -= 1; + pixel = maxpixel - pixel; + +// printf("pixel2val %d(%d) int %d, min %d, max %d\n", +// pixel, maxpixel, _type & INT, min.i, max.i); + CVal rv; + if (_type & INT) { + rv.i = (pixel * (max.i - min.i) + (maxpixel+min.i)/2) / maxpixel + min.i; + if (rv.i < min.i) + rv.i = min.i; + else if (rv.i > max.i) + rv.i = max.i; + } + else { + rv.f = double(pixel) * (max.f - min.f) / double(maxpixel) + min.f; + if (rv.f < min.f) + rv.f = min.f; + else if (rv.f > max.f) + rv.f = max.f; + } + return rv; + } + +//--------------------------------------------------------- +// setRange +//--------------------------------------------------------- + +void Ctrl::setRange(double _min, double _max) + { + if (_type & LOG) { + min.f = log10(_min); + max.f = log10(_max); + } + else { + min.f = _min; + max.f = _max; + } + } + +void Ctrl::setRange(int _min, int _max) + { + min.i = _min; + max.i = _max; + } + +//--------------------------------------------------------- +// setRange +//--------------------------------------------------------- + +void Ctrl::setRange(CVal mi, CVal ma) + { + min = mi; + max = ma; + } + diff --git a/attic/muse_qt4_evolution/muse/ctrl.h b/attic/muse_qt4_evolution/muse/ctrl.h new file mode 100644 index 00000000..eccd17c0 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/ctrl.h @@ -0,0 +1,236 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __CTRL_H__ +#define __CTRL_H__ + +namespace AL { + class Xml; + }; +using AL::Xml; + +class MidiController; + +// +// predefined audio controller id's: +// +const int NUM_AUX = 32; // max number of aux channels + +const int AC_VOLUME = 0; +const int AC_PAN = 1; +const int AC_MUTE = 2; +const int AC_AUX = 3; // 3 -- 3+NUM_AUX +const int AC_AUX_PAN = AC_AUX + NUM_AUX; + +const int CTRL_PLUGIN_MASK = 0x3ff0000; +const int CTRL_PLUGIN_OFFSET = 0x10000; +const int CTRL_INDEX_MASK = 0xffff; +const int CTRL_PREFADER = 0x40000000; + +//--------------------------------------------------------- +// genACnum +// create a controller number out of plugin index, +// controller index and prefader flag +//--------------------------------------------------------- + +inline static int genACnum(int plugin, int ctrl, bool prefader) { + int pre = prefader ? CTRL_PREFADER : 0; + return pre | ((plugin+1) * CTRL_PLUGIN_OFFSET + ctrl); + } + +//--------------------------------------------------------- +// getCtrlPlugin +// destill plugin index, controller index and prefader +// flag from controller id +//--------------------------------------------------------- + +inline static void getCtrlPlugin(int id, bool* prefader, int* pluginIndex, + int* ctrlIndex) { + *prefader = (id & CTRL_PREFADER) ? true : false; + *pluginIndex = ((id & CTRL_PLUGIN_MASK) / CTRL_PLUGIN_OFFSET) - 1; + *ctrlIndex = id & CTRL_INDEX_MASK; + } + +//--------------------------------------------------------- +// ControllerName +//--------------------------------------------------------- + +struct ControllerName { + QString name; + int id; + ControllerName(const QString& s, int i) : name(s), id(i) {} + }; + +typedef std::vector ControllerNameList; +typedef ControllerNameList::iterator iControllerName; +typedef ControllerNameList::const_iterator ciControllerName; + +//--------------------------------------------------------- +// CVal +// Controller value, either float for audio or +// int for midi. +// +//--------------------------------------------------------- + +struct CVal { + union { + float f; + int i; + }; + }; + +//--------------------------------------------------------- +// CtrlVal +// This structure represents a controller event. Time +// is a midi tick value or a frame value depending on +// then containing controller list Ctrl +//--------------------------------------------------------- + +struct CtrlVal { + int time; + CVal val; + CtrlVal(int f, CVal v) { + time = f; + val = v; + } + CtrlVal(int f) { + time = f; + } + }; + +//--------------------------------------------------------- +// CtrlRecVal +// recorded controller event, mixer automation +//--------------------------------------------------------- + +struct CtrlRecVal : public CtrlVal { + int id; + int type; // 0 - ctrlVal, 1 - start, 2 - end + CtrlRecVal(int f, int n, CVal v) : CtrlVal(f, v), id(n), type(0) {} + CtrlRecVal(int f, int n, int t) : CtrlVal(f), id(n), type(t) {} + }; + +//--------------------------------------------------------- +// CtrlRecList +//--------------------------------------------------------- + +class CtrlRecList : public std::list { + public: + }; + +typedef CtrlRecList::iterator iCtrlRec; + +typedef QMap CTRL; +typedef CTRL::iterator iCtrlVal; +typedef CTRL::const_iterator ciCtrlVal; + +//--------------------------------------------------------- +// Ctrl +// this is a controller list +// +// CtrlType == LOG +// values are internally represented as log10(value) +//--------------------------------------------------------- + +class Ctrl : public CTRL { + public: + enum CtrlType { + INTERPOLATE = 0, // values are linear interpolated + DISCRETE = 1, // midi controller events + LINEAR = 0, + LOG = 2, + INT = 4 + }; + + private: + int _id; + QString _name; + int _type; // bitmask of CtrlType + CVal _default; + CVal _curVal; // used to optimize controller events + CVal min, max; + bool _changed; + bool _touched; + bool _moveWithPart; + + public: + Ctrl(); + Ctrl(const MidiController*); + Ctrl(int id, const QString& name, int t=INTERPOLATE); + Ctrl(int id, const QString& name, int t, float a, float b); + int type() const { return _type; } + void setType(int t) { _type = t; } + + const CVal& getDefault() const { return _default; } + void setDefault(float val) { _default.f = val; } + void setDefault(CVal val) { _default = val; } + void setDefault(int val) { _default.i = val; } + + const CVal& curVal() const { return _curVal; } + void setCurVal(CVal v) { _curVal = v; _changed = true; } + void setCurVal(float v) { _curVal.f = v; _changed = true; } + void setCurVal(int v) { _curVal.i = v; _changed = true; } + + int id() const { return _id; } + void setId(int i) { _id = i; } + QString name() const { return _name; } + void setName(const QString& s) { _name = s; } + CVal value(unsigned); + bool add(unsigned, CVal); + void del(unsigned); + void setChanged(bool val) { _changed = val; } + bool changed() const { return _changed; } + void setTouched(bool val) { _touched = val; } + bool touched() const { return _touched; } + void setRange(double min, double max); + void setRange(int min, int max); + void setRange(CVal, CVal); + CVal minVal() const { return min; } + CVal maxVal() const { return max; } + bool moveWithPart() const { return _moveWithPart; } + void setMoveWithPart(bool v) { _moveWithPart = v; } + + void read(QDomNode node, bool midi); + void write(Xml&); + int val2pixelR(CVal, int maxpixel); + int cur2pixel(int maxpixel); + int val2pixelR(int, int maxpixel); + CVal pixel2val(int pixel, int maxpixel); + CVal pixel2valR(int pixel, int maxpixel); + }; + +//--------------------------------------------------------- +// CtrlList +// List of controller value lists. +// This list represents the controller state of a +// mixer strip +//--------------------------------------------------------- + +typedef std::map > CLIST; +typedef CLIST::iterator iCtrl; +typedef CLIST::const_iterator ciCtrl; + +class CtrlList : public CLIST { + public: + void add(Ctrl* vl); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/ctrl/CMakeLists.txt b/attic/muse_qt4_evolution/muse/ctrl/CMakeLists.txt new file mode 100644 index 00000000..0bdb5be6 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/ctrl/CMakeLists.txt @@ -0,0 +1,46 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +QT4_WRAP_CPP (ctrl_mocs + configmidictrl.h + definemidictrl.h + ctrldialog.h + ctrledit.h + ) + +QT4_WRAP_UI (ctrl_ui_headers + configmidictrl.ui + definemidictrl.ui + ctrldialog.ui + ) + +add_library ( ctrl STATIC + configmidictrl.cpp + definemidictrl.cpp + ctrldialog.cpp + ctrleditor.cpp + ctrledit.cpp + ${ctrl_mocs} + ${ctrl_ui_headers} + ) +set_target_properties( ctrl + PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h" + ) + diff --git a/attic/muse_qt4_evolution/muse/ctrl/configmidictrl.cpp b/attic/muse_qt4_evolution/muse/ctrl/configmidictrl.cpp new file mode 100644 index 00000000..395518a8 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/ctrl/configmidictrl.cpp @@ -0,0 +1,202 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "configmidictrl.h" +#include "definemidictrl.h" +#include "miditrack.h" +#include "midioutport.h" +#include "midictrl.h" +#include "midiout.h" +#include "instruments/minstrument.h" + +//--------------------------------------------------------- +// ConfigMidiCtrl +//--------------------------------------------------------- + +ConfigMidiCtrl::ConfigMidiCtrl(MidiTrack* t) + { + setupUi(this); + track = t; + + //--------------------------------------------------- + // populate list of managed controllers + //--------------------------------------------------- + + ControllerNameList* cn = track->controllerNames(); + for (iControllerName i = cn->begin(); i != cn->end(); ++i) + managedController->addItem(i->name); + + //--------------------------------------------------- + // populate list of available controllers + //--------------------------------------------------- + + if (track->type() == Track::MIDI) { + MidiTrack* mc = (MidiTrack*)track; + portName->setText(track->name()); + instrumentName->setText(mc->instrument()->iname()); + // + // populate popup with all controllers available for + // current instrument + // + MidiControllerList* mcl = mc->instrument()->controller(); + for (iMidiController ci = mcl->begin(); ci != mcl->end(); ++ci) { + iControllerName i; + for (i = cn->begin(); i != cn->end(); ++i) { + if (i->name == (*ci)->name()) + break; + } + if (i == cn->end()) + availableController->addItem((*ci)->name()); + } + } + + delete cn; + buttonAdd->setEnabled(false); + buttonRemove->setEnabled(false); + + connect(buttonAdd, SIGNAL(clicked()), SLOT(addClicked())); + connect(buttonRemove, SIGNAL(clicked()), SLOT(removeClicked())); + connect(availableController, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), SLOT(availableSelected(QListWidgetItem*))); + connect(managedController, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), SLOT(managedSelected(QListWidgetItem*))); + connect(defineButton, SIGNAL(clicked()), SLOT(defineClicked())); + } + +//--------------------------------------------------------- +// addClicked +//--------------------------------------------------------- + +void ConfigMidiCtrl::addClicked() + { + QListWidgetItem* n = availableController->currentItem(); + if (n == 0) + return; + QString s(n->text()); + for (int i = 0; i < managedController->count(); ++i) { + if (s == managedController->item(i)->text()) + return; + } + managedController->addItem(s); + managedController->setCurrentItem(managedController->item(managedController->count()-1)); + delete n; + buttonAdd->setEnabled(false); + } + +//--------------------------------------------------------- +// removeClicked +//--------------------------------------------------------- + +void ConfigMidiCtrl::removeClicked() + { + QListWidgetItem* n = managedController->currentItem(); + if (n == 0) + return; + availableController->addItem(n->text()); + delete n; + buttonRemove->setEnabled(false); + } + +//--------------------------------------------------------- +// availableSelected +//--------------------------------------------------------- + +void ConfigMidiCtrl::availableSelected(QListWidgetItem* item) + { + buttonAdd->setEnabled(item != 0); + } + +//--------------------------------------------------------- +// managedSelected +//--------------------------------------------------------- + +void ConfigMidiCtrl::managedSelected(QListWidgetItem* item) + { + buttonRemove->setEnabled(item != 0); + } + +//--------------------------------------------------------- +// done +//--------------------------------------------------------- + +void ConfigMidiCtrl::done(int code) + { + if (!code) { + QDialog::done(code); + return; + } + if (track->type() == Track::MIDI) { + ControllerNameList* cn = track->controllerNames(); + MidiInstrument* instr = track->instrument(); + MidiControllerList* mcl = instr->controller(); + + // + // search for new, added controller + // + int n = managedController->count(); + for (int i = 0; i < n; ++i) { + QString name(managedController->item(i)->text()); + iControllerName ii = cn->begin(); + for (; ii != cn->end(); ++ii) { + if (ii->name == name) + break; + } + if (ii == cn->end()) { + // add controller "name" to list of managed controller + // + for (iMidiController ci = mcl->begin(); ci != mcl->end(); ++ci) { + if ((*ci)->name() == name) { + Ctrl* ctrl = new Ctrl(*ci); + track->addController(ctrl); + break; + } + } + } + } + + // + // search for removed controller + // + for (iControllerName ii = cn->begin(); ii != cn->end(); ++ii) { + int i; + for (i = 0; i < n; ++i) { + if (managedController->item(i)->text() == ii->name) + break; + } + if (i == n) + track->removeController(ii->id); + } + delete cn; + } + QDialog::done(code); + } + +//--------------------------------------------------------- +// defineClicked +//--------------------------------------------------------- + +void ConfigMidiCtrl::defineClicked() + { + DefineMidiCtrl dc(track, this); + if (dc.exec()) { + Ctrl* ctrl = new Ctrl(dc.midiController()); + track->addController(ctrl); + QDialog::done(0); + } + } + diff --git a/attic/muse_qt4_evolution/muse/ctrl/configmidictrl.h b/attic/muse_qt4_evolution/muse/ctrl/configmidictrl.h new file mode 100644 index 00000000..0af11e36 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/ctrl/configmidictrl.h @@ -0,0 +1,51 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __CONFIGMIDICTRL_H__ +#define __CONFIGMIDICTRL_H__ + +#include "ui_configmidictrl.h" + +class MidiTrack; + +//--------------------------------------------------------- +// ConfigMidiCtrl +//--------------------------------------------------------- + +class ConfigMidiCtrl : public QDialog, public Ui::ConfigMidiCtrlBase { + Q_OBJECT + + MidiTrack* track; + + private slots: + void addClicked(); + void removeClicked(); + void availableSelected(QListWidgetItem*); + void managedSelected(QListWidgetItem*); + virtual void done(int); + void defineClicked(); + + public: + ConfigMidiCtrl(MidiTrack*); + }; + +#endif + + diff --git a/attic/muse_qt4_evolution/muse/ctrl/configmidictrl.ui b/attic/muse_qt4_evolution/muse/ctrl/configmidictrl.ui new file mode 100644 index 00000000..1960c490 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/ctrl/configmidictrl.ui @@ -0,0 +1,204 @@ + + ConfigMidiCtrlBase + + + + 0 + 0 + 506 + 355 + + + + MusE: Config Midi Controller + + + + 9 + + + 6 + + + + + 0 + + + 6 + + + + + Midi Instrument: + + + + + + + true + + + + + + + true + + + + + + + <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Midi Port:</p></body></html> + + + + + + + + + + 5 + 0 + 0 + 0 + + + + <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Automated Controller:</p></body></html> + + + + + + + + + + Qt::Vertical + + + + 75 + 81 + + + + + + + + + 5 + 0 + 0 + 0 + + + + <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Available Controller:</p></body></html> + + + + + + + + + + Remove + + + + + + + Add + + + + + + + 0 + + + 6 + + + + + Define new Controller + + + + + + + Qt::Horizontal + + + + 131 + 31 + + + + + + + + OK + + + + + + + Cancel + + + + + + + + + + + buttonOk + clicked() + ConfigMidiCtrlBase + accept() + + + 278 + 253 + + + 96 + 254 + + + + + buttonCancel + clicked() + ConfigMidiCtrlBase + reject() + + + 369 + 253 + + + 179 + 282 + + + + + diff --git a/attic/muse_qt4_evolution/muse/ctrl/ctrldialog.cpp b/attic/muse_qt4_evolution/muse/ctrl/ctrldialog.cpp new file mode 100644 index 00000000..fd8a073c --- /dev/null +++ b/attic/muse_qt4_evolution/muse/ctrl/ctrldialog.cpp @@ -0,0 +1,191 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "ctrldialog.h" +#include "midictrl.h" +#include "track.h" +#include "miditrack.h" +#include "audiotrack.h" +#include "plugin.h" +#include "pipeline.h" +#include "ctrl/configmidictrl.h" + +//--------------------------------------------------------- +// CtrlDialog +//--------------------------------------------------------- + +CtrlDialog::CtrlDialog(Track* track, int ci, QWidget* parent) + : QDialog(parent) + { + t = track; + currentId = ci; + setupUi(this); + QTreeWidgetItem* header = tw->headerItem(); + header->setTextAlignment(0, Qt::AlignLeft); + header->setTextAlignment(1, Qt::AlignHCenter); + + tw->header()->setResizeMode(0, QHeaderView::Stretch); + header->setToolTip(0, tr("controller name")); + header->setToolTip(1, tr("flag if controller contains data")); + + updateController(); + otherButton->setEnabled(track->type() == Track::MIDI); + connect(tw, + SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), + SLOT(itemDoubleClicked(QTreeWidgetItem*, int))); + connect(otherButton, SIGNAL(clicked()), SLOT(otherClicked())); + } + +//--------------------------------------------------------- +// updateController +//--------------------------------------------------------- + +void CtrlDialog::updateController() + { + tw->clear(); + QTreeWidgetItem* ci; + if (t->type() == Track::MIDI) { + // + // add special controll for midi tracks + // + ci = new QTreeWidgetItem(tw, CTRL_VELOCITY); + ci->setText(0, "Velocity"); + if (CTRL_VELOCITY == currentId) { + tw->setCurrentItem(ci); + tw->setItemSelected(ci, true); + } + if (((MidiTrack*)(t))->drumMap()) { + ci = new QTreeWidgetItem(tw, CTRL_SVELOCITY); + ci->setText(0, "Single Velocity"); + + if (CTRL_SVELOCITY == currentId) { + tw->setCurrentItem(ci); + tw->setItemSelected(ci, true); + } + } + } + else if (!t->isMidiTrack()) { + + // + // present plugin parameter + // + Pipeline* pl = ((AudioTrack*)t)->prePipe(); + int idx = 0; + foreach (PluginI* plugin, *pl) { + ci = new QTreeWidgetItem(tw, CTRL_NO_CTRL); + ci->setText(0, plugin->name()); + int ncontroller = plugin->plugin()->parameter(); + for (int i = 0; i < ncontroller; ++i) { + QString name(plugin->getParameterName(i)); + int id = genACnum(idx, i, true); + QTreeWidgetItem* cci = new QTreeWidgetItem(ci, id); + cci->setText(0, name); + Ctrl* ctrl = t->getController(id); + if (ctrl) { + if (!ctrl->empty()) + cci->setText(1, "*"); + if (id == currentId) { + tw->setCurrentItem(cci); + tw->setItemSelected(cci, true); + } + } + else + printf("updateController: controller %x not found\n", id); + } + } + pl = ((AudioTrack*)t)->postPipe(); + idx = 0; + foreach (PluginI* plugin, *pl) { + ci = new QTreeWidgetItem(tw, CTRL_NO_CTRL); + ci->setText(0, plugin->name()); + int ncontroller = plugin->plugin()->parameter(); + for (int i = 0; i < ncontroller; ++i) { + QString name(plugin->getParameterName(i)); + int id = genACnum(idx, i, false); + QTreeWidgetItem* cci = new QTreeWidgetItem(ci, id); + cci->setText(0, name); + Ctrl* ctrl = t->getController(id); + if (!ctrl->empty()) + cci->setText(1, "*"); + if (id == currentId) { + tw->setCurrentItem(cci); + tw->setItemSelected(cci, true); + } + } + } + } + + ControllerNameList* cn = t->controllerNames(); + for (iControllerName i = cn->begin(); i != cn->end(); ++i) { + ci = new QTreeWidgetItem(tw, i->id); + ci->setText(0, i->name); + Ctrl* ctrl = t->getController(i->id); + if (!ctrl->empty()) + ci->setText(1, "*"); + + if (i->id == currentId) { + tw->setCurrentItem(ci); + tw->setItemSelected(ci, true); + } + } + } + +//--------------------------------------------------------- +// itemDoubleClicked +//--------------------------------------------------------- + +void CtrlDialog::itemDoubleClicked(QTreeWidgetItem* item, int) + { + if (item->type() != CTRL_NO_CTRL) + accept(); + } + +//--------------------------------------------------------- +// CtrlDialog +//--------------------------------------------------------- + +int CtrlDialog::curId() const + { + QTreeWidgetItem* item = tw->currentItem(); + if (item == 0) + return CTRL_NO_CTRL; + return item->type(); + } + +//--------------------------------------------------------- +// otherClicked +// Add another controller to the list of "managed" +// controllers. +//--------------------------------------------------------- + +void CtrlDialog::otherClicked() + { + QTreeWidgetItem* item = tw->currentItem(); + if (item) + currentId = item->type(); + // + // present the list of available controller for + // the selected midi instrument + // + ConfigMidiCtrl mce((MidiTrack*)t); + mce.exec(); + updateController(); + } + diff --git a/attic/muse_qt4_evolution/muse/ctrl/ctrldialog.h b/attic/muse_qt4_evolution/muse/ctrl/ctrldialog.h new file mode 100644 index 00000000..3cb51ef2 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/ctrl/ctrldialog.h @@ -0,0 +1,49 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __CTRL_DIALOG_H__ +#define __CTRL_DIALOG_H__ + +#include "ui_ctrldialog.h" + +class Track; + +//--------------------------------------------------------- +// CtrlDialog +//--------------------------------------------------------- + +class CtrlDialog : public QDialog, public Ui_CtrlDialogBase { + Q_OBJECT + + Track* t; + int currentId; + void updateController(); + + private slots: + void itemDoubleClicked(QTreeWidgetItem*, int); + void otherClicked(); + + public: + CtrlDialog(Track*, int, QWidget* parent = 0); + int curId() const; + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/ctrl/ctrldialog.ui b/attic/muse_qt4_evolution/muse/ctrl/ctrldialog.ui new file mode 100644 index 00000000..178cf1d3 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/ctrl/ctrldialog.ui @@ -0,0 +1,126 @@ + + CtrlDialogBase + + + + 0 + 0 + 390 + 300 + + + + MusE: Select Controller + + + + 9 + + + 6 + + + + + true + + + true + + + 3 + + + + Controller + + + + + A + + + + + + + + 0 + + + 6 + + + + + Other + + + + + + + Qt::Horizontal + + + + 131 + 31 + + + + + + + + OK + + + + + + + Cancel + + + + + + + + + + + okButton + clicked() + CtrlDialogBase + accept() + + + 278 + 253 + + + 96 + 254 + + + + + cancelButton + clicked() + CtrlDialogBase + reject() + + + 369 + 253 + + + 179 + 282 + + + + + diff --git a/attic/muse_qt4_evolution/muse/ctrl/ctrledit.cpp b/attic/muse_qt4_evolution/muse/ctrl/ctrledit.cpp new file mode 100644 index 00000000..20022f47 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/ctrl/ctrledit.cpp @@ -0,0 +1,184 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "ctrledit.h" +#include "midictrl.h" +#include "widgets/simplebutton.h" +#include "widgets/utils.h" +#include "ctrl/configmidictrl.h" +#include "ctrl/ctrldialog.h" +#include "widgets/tools.h" +#include "miditrack.h" +#include "midioutport.h" + +//--------------------------------------------------------- +// CtrlEdit +//--------------------------------------------------------- + +CtrlEdit::CtrlEdit(QWidget* parent, TimeCanvas* timeCanvas, Track* t) + : QObject(parent), _track(t) + { + y = 0; + _height = 0; + setDrawCtrlName(true); + + _tc = timeCanvas; + _ctrl = &veloList; + if (t->type() == Track::MIDI) { + ctrlId = CTRL_VELOCITY; + _ctrl = &veloList; + } + else { + ctrlId = AC_VOLUME; + _ctrl = t->getController(ctrlId); + } + + sel = new SimpleButton(tr("Sel"), parent); + sel->setToolTip(tr("select controller")); + sel->setAutoRaise(false); + + minus = newMinusButton(); + minus->setParent(parent); + minus->setToolTip(tr("remove controller view")); + minus->setAutoRaise(false); + + connect(_track, SIGNAL(controllerChanged(int)), SLOT(controllerListChanged(int))); + connect(sel, SIGNAL(clicked()), SLOT(showControllerList())); + } + +//--------------------------------------------------------- +// CtrlEdit +//--------------------------------------------------------- + +CtrlEdit::~CtrlEdit() + { + delete sel; + delete minus; + } + +//--------------------------------------------------------- +// setCtrl +//--------------------------------------------------------- + +void CtrlEdit::setCtrl(int id) + { + _ctrl = 0; + + if (_track->type() == Track::MIDI) { + if (id == CTRL_VELOCITY) + _ctrl = &veloList; + else if (id == CTRL_SVELOCITY) + _ctrl = &sveloList; + else + _ctrl = _track->getController(id); + } + else + _ctrl = _track->getController(id); + + if (!_ctrl) + printf("CtrlEdit::setCtrl(%d): not found for track <%s>\n", id, + _track->name().toLocal8Bit().data()); + } + +//--------------------------------------------------------- +// showControllerList +//--------------------------------------------------------- + +void CtrlEdit::showControllerList() + { + Ctrl* c = ctrl(); + int id; + if (c) + id = c->id(); + else + id = CTRL_NO_CTRL; + CtrlDialog cd(_track, id); + int rv = cd.exec(); + if (rv != 1) + return; + id = cd.curId(); + if (id == CTRL_NO_CTRL) + return; + changeController(id); + } + +//--------------------------------------------------------- +// changeController +//--------------------------------------------------------- + +void CtrlEdit::changeController(int id) + { + if (id == CTRL_VELOCITY) { + ctrlId = id; + _ctrl = &veloList; + } + else if (id == CTRL_SVELOCITY) { + ctrlId = id; + _ctrl = &sveloList; + } + else if (id == CTRL_OTHER) { // "other" + if (track()->type() == Track::MIDI) { + ConfigMidiCtrl* mce = new ConfigMidiCtrl((MidiTrack*)track()); + mce->exec(); + sel->showMenu(); + } + else + printf("CtrlEdit::changeController: not impl.\n"); + } + else { + ctrlId = id; + _ctrl = track()->getController(ctrlId); + } + _tc->updateCanvasB(); + } + +//--------------------------------------------------------- +// controllerListChanged +//--------------------------------------------------------- + +void CtrlEdit::controllerListChanged(int id) + { + if (id != ctrlId) + return; + tc()->widget()->update(tc()->rCanvasB); + } + +//--------------------------------------------------------- +// pixel2val +//--------------------------------------------------------- + +int CtrlEdit::pixel2val(int y) const + { + if (ctrl() == 0) + return 0; + CVal val = ctrl()->pixel2val(y, _height - splitWidth); + return val.i; + } + + +//--------------------------------------------------------- +// setSinglePitch +//--------------------------------------------------------- + +void CtrlEdit::setSinglePitch(int val) + { + singlePitch = val; + } + diff --git a/attic/muse_qt4_evolution/muse/ctrl/ctrledit.h b/attic/muse_qt4_evolution/muse/ctrl/ctrledit.h new file mode 100644 index 00000000..d942c84f --- /dev/null +++ b/attic/muse_qt4_evolution/muse/ctrl/ctrledit.h @@ -0,0 +1,76 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __CTRL_EDIT_H__ +#define __CTRL_EDIT_H__ + +#include "ctrleditor.h" +#include "gui.h" + +class SimpleButton; +class TimeCanvas; + +//--------------------------------------------------------- +// CtrlEdit +//--------------------------------------------------------- + +class CtrlEdit : public QObject, public CtrlEditor { + Q_OBJECT + + Track* const _track; + Ctrl* _ctrl; + TimeCanvas* _tc; + int _height; + + virtual Ctrl* ctrl() const { return _ctrl; } + virtual TimeCanvas* tc() const { return _tc; } + virtual Track* track() const { return _track; } + + public: + int ctrlId; + int y; + SimpleButton* minus; + SimpleButton* sel; + QMenu* ctrlList; + + private slots: + void showControllerList(); + void changeController(int); + void controllerListChanged(int); + + public: + CtrlEdit(QWidget*, TimeCanvas*, Track*); + ~CtrlEdit(); + int pixel2val(int) const; + void setHeight(int val) { _height = val; } + int height() const { return _height; } + virtual int cheight() const { return _height - splitWidth; } + void setCtrl(Ctrl* c) { _ctrl = c; } + void setCtrl(int id); + Ctrl* ctrl() { return _ctrl; } + void setSinglePitch(int); + }; + + +typedef std::vector CtrlEditList; +typedef CtrlEditList::iterator iCtrlEdit; +typedef CtrlEditList::const_iterator ciCtrlEdit; +#endif + diff --git a/attic/muse_qt4_evolution/muse/ctrl/ctrleditor.cpp b/attic/muse_qt4_evolution/muse/ctrl/ctrleditor.cpp new file mode 100644 index 00000000..cc89c4c6 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/ctrl/ctrleditor.cpp @@ -0,0 +1,492 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "ctrleditor.h" +#include "track.h" +#include "awl/tcanvas.h" +#include "ctrl.h" +#include "midictrl.h" +#include "gconfig.h" +#include "song.h" +#include "part.h" +#include "tools.h" +#include "muse.h" +#include "gui.h" + +static const int HANDLE1 = 6; +static const int HANDLE2 = 3; +static const int veloWidth = 3; + +Ctrl veloList(CTRL_VELOCITY, "velocity", Ctrl::DISCRETE |Ctrl::INT, 0.0, 127.0); // dummy +Ctrl sveloList(CTRL_SVELOCITY, "single velocity", Ctrl::DISCRETE |Ctrl::INT, 0.0, 127.0); // dummy + +//--------------------------------------------------------- +// CtrlEditor +//--------------------------------------------------------- + +CtrlEditor::CtrlEditor() + { + _drawCtrlName = false; + dragy = -1; + lselected = 0; + singlePitch = -1; + drawRuler = false; + } + +//--------------------------------------------------------- +// drawHandle +//--------------------------------------------------------- + +inline static void drawHandle(QPainter& p, int x, int y, int lselected) + { + p.fillRect(x-HANDLE2, y-HANDLE2, HANDLE1, HANDLE1, + x == lselected ? Qt::red : Qt::yellow); + } + +//--------------------------------------------------------- +// ctrlY +//--------------------------------------------------------- + +int CtrlEditor::ctrlY(int x, const CVal& val) const + { + if (dragy != -1 && lselected == x) + return dragy; + return ctrl()->val2pixelR(val, th) + HANDLE2; + } + +//--------------------------------------------------------- +// paint +//--------------------------------------------------------- + +void CtrlEditor::paint(QPainter& p, const QRect& r) + { + if (!ctrl()) + return; + int from = r.x() - HANDLE1; + if (from < 0) + from = 0; + int to = r.x() + r.width() + HANDLE1; + th = cheight() - HANDLE1 + splitWidth; + + p.save(); + bool aR = track()->autoRead(); + p.setPen(QPen(aR ? Qt::white : Qt::gray, 2)); + + TType tt = track()->timeType(); + + if (ctrl()->id() == CTRL_VELOCITY) { + p.setRenderHint(QPainter::Antialiasing, false); + p.setPen(QPen(Qt::blue, veloWidth)); + PartList* pl = track()->parts(); + for (iPart ip = pl->begin(); ip != pl->end(); ++ip) { + Part* part = ip->second; + int pos1 = tc()->pos2pix(*part); + int pos2 = tc()->pos2pix(part->end()); + + if (pos2 <= from) + continue; + if (pos1 > to) + break; + + EventList* events = part->events(); + for (iEvent e = events->begin(); e != events->end(); ++e) { + const Event& ev = e->second; + if (ev.type() != Note) + continue; + int pos = tc()->pos2pix(ev.pos() + *part); + if (pos <= from) + continue; + if (pos > to) + break; + int id = ctrl()->id(); + if (id == CTRL_VELOCITY || + (id == CTRL_SVELOCITY && ev.pitch() == singlePitch)) { + int y1 = ctrl()->val2pixelR(ev.velo(), th+3) + 1; + p.drawLine(pos, th+3, pos, y1); + } + } + } + } + else { + p.setRenderHint(QPainter::Antialiasing, true); + if (ctrl()->empty()) { + if (aR) { + int y = ctrl()->cur2pixel(th) + HANDLE2; + p.drawLine(r.x(), y, r.x() + r.width(), y); + } + } + else { + int x1, y1, x2, y2; + int hx = -1; + int hy = 0; + + Pos pos1 = tc()->pix2pos(from); + ciCtrlVal i = ctrl()->lowerBound(pos1.time(tt)); + + if (i == ctrl()->end()) { + --i; + int x = tc()->pos2pix(Pos(i.key(), tt)); + int y = ctrlY(x, i.value()); + p.drawLine(r.x(), y, r.x() + r.width(), y); + } + else { + if (i == ctrl()->begin()) { + x1 = tc()->pos2pix(Pos(i.key(), tt)); + y1 = ctrlY(x1, i.value()); + x1 = r.x(); + } + else { + --i; + x1 = tc()->pos2pix(Pos(i.key(), tt)); + y1 = ctrlY(x1, i.value()); + hx = x1; + hy = y1; + ++i; + } + do { + x2 = tc()->pos2pix(Pos(i.key(), tt)); + y2 = ctrlY(x2, i.value()); + if (ctrl()->type() & Ctrl::DISCRETE) { + p.drawLine(x1, y1, x2, y1); + p.drawLine(x2, y1, x2, y2); + } + else + p.drawLine(x1, y1, x2, y2); + if (x2 >= to) + break; + if (hx != -1) + drawHandle(p, hx, hy, lselected); + hx = x2; + hy = y2; + x1 = x2; + y1 = y2; + ++i; + } while (i != ctrl()->end()); + if (x2 < to) + p.drawLine(x2, y1, to, y1); + if (hx != -1) + drawHandle(p, hx, hy, lselected); + } + } + if (!aR) { + int y = ctrl()->cur2pixel(th) + HANDLE2; + p.drawLine(r.x(), y, r.x() + r.width(), y); + } + } + + if (drawRuler) { + p.setPen(QPen(Qt::white, 2)); + p.setRenderHint(QPainter::Antialiasing, true); + p.drawLine(ruler1, ruler2); + } + // + // this does not work well a.t.m: + // + if (_drawCtrlName) { + QString s(ctrl()->name()); + QFont f(tc()->font()); +// p.setFont(config.fonts[3]); + p.setPen(Qt::black); + QFontMetrics fm(f); + int ly = fm.lineSpacing() + 2; + p.drawText(2, ly, s); + } + p.restore(); + } + +//--------------------------------------------------------- +// mousePress +//--------------------------------------------------------- + +void CtrlEditor::mousePress(const QPoint& pos, QMouseEvent* me) + { + int button = me->button(); + Qt::KeyboardModifiers modifiers = me->modifiers(); + Tool tool = tc()->tool(); + if (button & Qt::RightButton) { + QMenu pop(tc()); + QAction* a; + for (int i = 0; i < TOOLS; ++i) { + int id = 1 << i; + if ((arrangerTools & id) == 0) + continue; + a = getAction(toolList[i], &pop); + pop.addAction(a); + a->setCheckable(true); + if (id == (int)tool) + a->setChecked(true); + } + a = pop.addSeparator(); + a = pop.addAction("List Editor"); + a->setData(1 << (TOOLS+1)); + + a = pop.exec(me->globalPos()); + if (a) { + int n = a->data().toInt(); + if (n == (1 << (TOOLS+1))) { + Pos t(tc()->pix2pos(pos.x())); + muse->showListEditor(t, track(), 0, ctrl()); + } + else + muse->setTool(n); + } + return; + } + + int wh = cheight(); + int y = pos.y(); + int x = pos.x(); + + int cid = ctrl()->id(); + + if (tool == PencilTool || (modifiers & Qt::ShiftModifier)) { + selected = tc()->pix2pos(x); + lselected = x; + dragy = y; + dragx = x; + dragYoffset = 0; + if (cid == CTRL_VELOCITY || cid == CTRL_SVELOCITY) + song->startUndo(); + else { + // add controller: + CVal val = ctrl()->pixel2val(dragy-HANDLE2, wh - HANDLE1 + splitWidth); + song->cmdAddControllerVal(track(), ctrl(), selected, val); + tc()->widget()->update(); + } + } + else if (tool == PointerTool || tool == RubberTool) { + if (cid == CTRL_VELOCITY || cid == CTRL_SVELOCITY) { + dragx = x; + song->startUndo(); + return; + } + + Pos pos1(tc()->pix2pos(x - HANDLE2)); + Pos pos2(tc()->pix2pos(x + HANDLE2)); + + TType tt = track()->timeType(); + ciCtrlVal s = ctrl()->upperBound(pos1.time(tt)); + ciCtrlVal e = ctrl()->upperBound(pos2.time(tt)); + for (ciCtrlVal i = s; i != e; ++i) { + int yy = ctrl()->val2pixelR(i.value(), wh - HANDLE1 + splitWidth) + HANDLE2; + startY = yy; + if ((yy >= (y-HANDLE2)) && (yy < (y + HANDLE2))) { + if (tt == AL::TICKS) + selected.setTick(i.key()); + else + selected.setFrame(i.key()); + lselected = tc()->pos2pix(selected); + if (tool == RubberTool || button == Qt::RightButton + || modifiers & Qt::ControlModifier) { + song->cmdRemoveControllerVal(track(), ctrl()->id(), i.key()); + dragy = -1; + } + else { + dragy = yy; + dragYoffset = dragy - y; + } + tc()->widget()->update(); + break; + } + } + } + else if (tool == DrawTool) { + ruler1 = ruler2 = pos; + drawRuler = true; + } + } + +//--------------------------------------------------------- +// mouseRelease +//--------------------------------------------------------- + +void CtrlEditor::mouseRelease() + { + if (tc()->tool() == DrawTool) { + song->startUndo(); + drawRuler = false; + int from, to, y1, y2; + if (ruler1.x() > ruler2.x()) { + from = ruler2.x(); + to = ruler1.x(); + y1 = ruler2.y(); + y2 = ruler1.y(); + } + else { + from = ruler1.x(); + to = ruler2.x(); + y1 = ruler1.y(); + y2 = ruler2.y(); + } + MidiController::ControllerType type = midiControllerType(ctrl()->id()); + if (type == MidiController::Velo) { + PartList* pl = track()->parts(); + for (iPart ip = pl->begin(); ip != pl->end(); ++ip) { + Part* part = ip->second; + int pos1 = tc()->pos2pix(*part); + int pos2 = tc()->pos2pix(part->end()); + + if (pos2 <= from) + continue; + if (pos1 > to) + break; + + EventList* events = part->events(); + for (iEvent e = events->begin(); e != events->end(); ++e) { + if (e->second.type() != Note) + continue; + int pos = tc()->pos2pix(e->second.pos() + *part); + if (pos <= from) + continue; + if (pos > to) + break; + int id = ctrl()->id(); + if (id == CTRL_VELOCITY || + (CTRL_SVELOCITY && e->second.pitch() == singlePitch)) { + int y = y1 + (y2 - y1) * (pos - from) / (to - from); + int val = (ctrl()->pixel2val(y+HANDLE2, cheight()-HANDLE1+splitWidth)).i; + Event clone = e->second.clone(); + clone.setB(val); + song->changeEvent(e->second, clone, part); + song->undoOp(UndoOp::ModifyEvent, clone, e->second, part); + } + } + } + } + else { + printf("ctrleditor:: not implemented\n"); + } + song->endUndo(SC_EVENT_MODIFIED); + tc()->widget()->update(); + return; + } + if (ctrl()->id() == CTRL_VELOCITY || ctrl()->id() == CTRL_SVELOCITY) + song->endUndo(SC_EVENT_MODIFIED); + else { + if (dragy != -1 && dragy != startY) { + int wh = cheight() + splitWidth - HANDLE1; + CVal val = ctrl()->pixel2val(dragy - HANDLE2, wh); + // modify controller: + song->cmdAddControllerVal(track(), ctrl(), selected, val); + } + dragy = -1; + } + } + +//--------------------------------------------------------- +// mouseMove +// called only with mouse button pressed +//--------------------------------------------------------- + +void CtrlEditor::mouseMove(const QPoint& pos) + { + Tool tool = tc()->tool(); + int cid = ctrl()->id(); + + if (tool == DrawTool) { + ruler2 = pos; + tc()->widget()->update(); + return; + } + if (cid == CTRL_VELOCITY || cid == CTRL_SVELOCITY) { + AL::Pos p1(tc()->pix2pos(dragx)); + AL::Pos p2(tc()->pix2pos(pos.x())); + dragx = pos.x(); + + int wh = cheight() - HANDLE1 + splitWidth; + int val = (ctrl()->pixel2val(pos.y() - HANDLE2, wh)).i; + unsigned tick1 = p1.tick(); + Part* part = track()->parts()->findPart(tick1); + if (part == 0) + return; + unsigned tick2 = p2.tick(); + if (tick1 > tick2) { + int tmp = tick2; + tick2 = tick1; + tick1 = tmp; + } + if (part->tick() > tick1) + tick1 = 0; + else + tick1 -= part->tick(); // event time is relative to part + if (part->tick() > tick2) + tick2 = 0; + else + tick2 -= part->tick(); + + // + // change velocity for all notes at tick time + // + EventList* el = part->events(); + EventList tel; + for (iEvent ie = el->lower_bound(tick1); ie != el->lower_bound(tick2); ie++) { + Event e = ie->second; + if (!e.isNote() || e.dataB() == val) + continue; + tel.add(e); + } + for (iEvent ie = tel.begin(); ie != tel.end(); ++ie) { + Event e = ie->second; + Event clone = e.clone(); + clone.setB(val); + song->changeEvent(e, clone, part); + song->undoOp(UndoOp::ModifyEvent, clone, e, part); + } + } + else { + if (tool == RubberTool) { + int wh = cheight(); + int y = pos.y(); + int x = pos.x(); + + Pos pos1(tc()->pix2pos(x - HANDLE2)); + Pos pos2(tc()->pix2pos(x + HANDLE2)); + + TType tt = track()->timeType(); + ciCtrlVal s = ctrl()->upperBound(pos1.time(tt)); + ciCtrlVal e = ctrl()->upperBound(pos2.time(tt)); + for (ciCtrlVal i = s; i != e; ++i) { + int yy = ctrl()->val2pixelR(i.value(), wh); + startY = yy; + if ((yy >= (y-HANDLE2)) && (yy < (y + HANDLE2))) { + if (tt == AL::TICKS) + selected.setTick(i.key()); + else + selected.setFrame(i.key()); + lselected = tc()->pos2pix(selected); + song->cmdRemoveControllerVal(track(), ctrl()->id(), i.key()); + dragy = -1; + break; + } + } + } + if (dragy != -1) { + int th = cheight() + splitWidth - HANDLE2 - 1; + dragy = pos.y() + dragYoffset; + if (dragy < HANDLE2) + dragy = HANDLE2; + else if (dragy > th) { + dragy = th; + } + } + } + tc()->widget()->update(); + } + diff --git a/attic/muse_qt4_evolution/muse/ctrl/ctrleditor.h b/attic/muse_qt4_evolution/muse/ctrl/ctrleditor.h new file mode 100644 index 00000000..e33a8b29 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/ctrl/ctrleditor.h @@ -0,0 +1,76 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __CTRL_EDITOR_H__ +#define __CTRL_EDITOR_H__ + +#include "al/pos.h" + +class Ctrl; +class TimeCanvas; +class Track; +struct CVal; + +//--------------------------------------------------------- +// CtrlEditor +//--------------------------------------------------------- + +class CtrlEditor { + bool _drawCtrlName; + int dragx, dragy; + int dragYoffset; + int startY; + + int th; // effective track height, temp value + + int lselected; // cached pixel position of current value + AL::Pos selected; // current selected controller value + + bool drawRuler; + QPoint ruler1; + QPoint ruler2; + + virtual Ctrl* ctrl() const = 0; + virtual TimeCanvas* tc() const = 0; + virtual int cheight() const = 0; + virtual Track* track() const = 0; + + bool searchHandle(unsigned* time) const; + + int ctrlY(int x, const CVal&) const; + + protected: + int singlePitch; + + public: + CtrlEditor(); + virtual ~CtrlEditor() {} + void paint(QPainter& p, const QRect& r); + void setDrawCtrlName(bool val) { _drawCtrlName = val; } + void mousePress(const QPoint&, QMouseEvent*); + void mouseRelease(); + void mouseMove(const QPoint& pos); + }; + + +extern Ctrl veloList; +extern Ctrl sveloList; +#endif + diff --git a/attic/muse_qt4_evolution/muse/ctrl/definemidictrl.cpp b/attic/muse_qt4_evolution/muse/ctrl/definemidictrl.cpp new file mode 100644 index 00000000..197d7572 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/ctrl/definemidictrl.cpp @@ -0,0 +1,110 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "definemidictrl.h" +#include "miditrack.h" +#include "instruments/minstrument.h" + +//--------------------------------------------------------- +// DefineMidiCtrlDialog +// controllerName QLineEdit +// controllerType QComboBox +// msbId lsbId minVal maxVal initVal QSpinBox +// moveWithPart QCheckBox +//--------------------------------------------------------- + +DefineMidiCtrl::DefineMidiCtrl(MidiTrack* t, QWidget* parent) + : QDialog(parent) + { + setupUi(this); + track = t; + connect(controllerType, SIGNAL(currentIndexChanged(int)), SLOT(typeChanged(int))); + } + +//--------------------------------------------------------- +// done +// val == 1 -> OK +//--------------------------------------------------------- + +void DefineMidiCtrl::done(int val) + { + if (val) { + ctrl.setName(controllerName->text()); + ctrl.setComment(controllerComment->toPlainText()); + int num = MidiController::genNum( + MidiController::ControllerType(controllerType->currentIndex()), + msbId->value(), lsbId->value()); + ctrl.setNum(num); + ctrl.setMinVal(minVal->value()); + ctrl.setMaxVal(maxVal->value()); + ctrl.setInitVal(initVal->value()); + ctrl.setMoveWithPart(moveWithPart->isChecked()); + + // + // add controller to instrument + // + MidiInstrument* instrument = track->instrument(); + MidiControllerList* mcl = instrument->controller(); + MidiController* c = new MidiController(ctrl); + mcl->append(c); + } + + QDialog::done(val); + } + +//--------------------------------------------------------- +// typeChanged +//--------------------------------------------------------- + +void DefineMidiCtrl::typeChanged(int val) + { + MidiController::ControllerType t = (MidiController::ControllerType)val; + switch (t) { + case MidiController::RPN: + case MidiController::NRPN: + case MidiController::Controller7: + msbId->setEnabled(false); + lsbId->setEnabled(true); + maxVal->setRange(0, 127); + maxVal->setValue(127); + initVal->setRange(0, 127); + break; + case MidiController::Controller14: + case MidiController::RPN14: + case MidiController::NRPN14: + msbId->setEnabled(true); + lsbId->setEnabled(true); + maxVal->setRange(0, 128*128-1); + maxVal->setValue(128*128-1); + initVal->setRange(0, 128*128-1); + break; + case MidiController::Pitch: + case MidiController::Program: + msbId->setEnabled(false); + lsbId->setEnabled(false); + maxVal->setRange(0, 128*128-1); + initVal->setRange(0, 128*128-1); + maxVal->setValue(128*128-1); + break; + default: + break; + } + } + diff --git a/attic/muse_qt4_evolution/muse/ctrl/definemidictrl.h b/attic/muse_qt4_evolution/muse/ctrl/definemidictrl.h new file mode 100644 index 00000000..bc0df6a9 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/ctrl/definemidictrl.h @@ -0,0 +1,51 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __DEFINEMIDICTRL_H__ +#define __DEFINEMIDICTRL_H__ + +#include "ui_definemidictrl.h" +#include "midictrl.h" + +class MidiTrack; + +//--------------------------------------------------------- +// DefineMidiCtrl +//--------------------------------------------------------- + +class DefineMidiCtrl : public QDialog, public Ui::DefineMidiCtrlBase { + Q_OBJECT + + MidiTrack* track; + MidiController ctrl; + + private slots: + virtual void done(int); + void typeChanged(int); + + public: + DefineMidiCtrl(MidiTrack* t, QWidget* parent = 0); + const MidiController* midiController() const { return &ctrl; } + }; + +#endif + + + diff --git a/attic/muse_qt4_evolution/muse/ctrl/definemidictrl.ui b/attic/muse_qt4_evolution/muse/ctrl/definemidictrl.ui new file mode 100644 index 00000000..a66e55cb --- /dev/null +++ b/attic/muse_qt4_evolution/muse/ctrl/definemidictrl.ui @@ -0,0 +1,285 @@ + + DefineMidiCtrlBase + + + + 0 + 0 + 558 + 344 + + + + Dialog + + + + 9 + + + 6 + + + + + 0 + + + 6 + + + + + + 24 + 75 + true + + + + QFrame::Raised + + + 5 + + + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Arial'; font-size:24pt; font-weight:600; font-style:normal; text-decoration:none;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:400;"> </span><span style=" font-weight:400;">CTRL </span></p></body></html> + + + + + + + Controller Name: + + + + + + + + + + Controller Type: + + + + + + + + 7-Bit + + + + + 14-Bit + + + + + 7-Bit RPN + + + + + 14-Bit RPN + + + + + 7-Bit NRPN + + + + + 14-Bit NRPN + + + + + + + + + + Comment: + + + + + + + + + + 0 + + + 6 + + + + + 0 + + + 6 + + + + + 0x00 + + + + + + + + + + Id LSB + + + + + + + 0x00 + + + + + + + + + + Id MSB + + + + + + + Move with Part + + + + + + + + + 0 + + + 6 + + + + + + + + 0x00 + + + + + + + 0x00 + + + + + + + Init Value + + + + + + + + + + Min.Value + + + + + + + + + + Max.Value + + + + + + + 0x00 + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok + + + + + + + + + okButton + accepted() + DefineMidiCtrlBase + accept() + + + 248 + 254 + + + 157 + 274 + + + + + okButton + rejected() + DefineMidiCtrlBase + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/attic/muse_qt4_evolution/muse/debug.h b/attic/muse_qt4_evolution/muse/debug.h new file mode 100644 index 00000000..0820fef3 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/debug.h @@ -0,0 +1,44 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MUSE_DEBUG_H__ +#define __MUSE_DEBUG_H__ + +#include "globals.h" + +#ifdef DEBUG_1 +#define M_REPORT(string) printf("%s:%d:%s: " string "\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); +#define M_REPORTARG(format, args...) printf("%s:%d:%s: " format "\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, ##args); +#define M_DEBUG(string) if (debugMsg) fprintf(stderr, "%s:%d:%s: " string "\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); +#define M_DEBUGARG(format, args...) if (debugMsg) fprintf(stderr, "%s:%d:%s: " format "\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, ##args); +#define M_ERROR(string) fprintf(stderr, "%s:%d:%s: " string "\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); +#define M_ERRORARG(format, args...) fprintf(stderr, "%s:%d:%s: " format "\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, ##args); +#else +#define M_REPORT(string) +#define M_REPORTARG(format, args...) +#define M_DEBUG(string) +#define M_DEBUGARG(format, args...) +#define M_ERROR(string) +#define M_ERRORARG(format, args...) +#endif + +#define DEBUG_ARGS __FILE__ << ":" << __LINE__ << ":" << __PRETTY_FUNCTION__ << ": " + +#endif /* __MUSE_DEBUG_H__ */ diff --git a/attic/muse_qt4_evolution/muse/default_click.h b/attic/muse_qt4_evolution/muse/default_click.h new file mode 100644 index 00000000..d6907c80 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/default_click.h @@ -0,0 +1,1213 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 20002 Paul Davis +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +static const float defaultClick[] = { + -0.0019836426, 0.0097045898, 0.019165039, 0.028594971, 0.036102295, + 0.040679932, 0.040649414, 0.036560059, 0.029693604, 0.016967773, + 0.0057067871, -0.008026123, -0.021453857, -0.026153564, + -0.031921387, -0.036834717, -0.04397583, -0.046844482, + -0.045349121, -0.041748047, -0.032623291, -0.026611328, + -0.026702881, -0.025482178, -0.013092041, 0.0055847168, + 0.023040771, 0.027435303, 0.043426514, 0.07925415, 0.1086731, + 0.09463501, 0.039154053, -0.027832031, -0.081542969, -0.099090576, + -0.089385986, -0.051055908, -0.0023803711, 0.031951904, + 0.044128418, 0.029998779, 0.0086669922, 0.0022888184, 0.0082092285, + 0.0085144043, -0.0057983398, -0.027496338, -0.036834717, + -0.021759033, -0.020721436, -0.024078369, -0.025360107, + -0.090698242, -0.16491699, -0.16052246, -0.090454102, 0.0031433105, + 0.013031006, 0.034790039, 0.30599976, 0.58151245, 0.5078125, + 0.32858276, 0.21975708, -0.050018311, -0.34790039, -0.46588135, + -0.26513672, 0.12893677, 0.19259644, 0.11685181, 0.095825195, + -0.039154053, -0.041473389, 0.0069274902, -0.14685059, -0.32232666, + -0.21795654, 0.051086426, 0.18112183, 0.30905151, 0.47305298, + 0.60980225, 0.59518433, 0.46920776, 0.51705933, 0.47116089, + 0.31832886, 0.20901489, 0.059539795, -0.10055542, -0.23834229, + -0.26708984, -0.27468872, -0.29516602, -0.22879028, -0.12854004, + -0.064300537, -0.0068664551, 0.060211182, 0.10339355, 0.12594604, + 0.12954712, 0.063568115, -0.041046143, -0.1184082, -0.19332886, + -0.27337646, -0.34906006, -0.40966797, -0.46533203, -0.45361328, + -0.39672852, -0.32958984, -0.15246582, 0.086853027, 0.23678589, + 0.24838257, 0.13034058, -0.15222168, -0.5199585, -0.80224609, + -0.9397583, -0.89654541, -0.71923828, -0.47998047, -0.14666748, + 0.26187134, 0.54995728, 0.69186401, 0.84616089, 0.79928589, + 0.53170776, 0.39968872, 0.32455444, 0.2137146, 0.19454956, + 0.24069214, 0.22750854, 0.14596558, 0.047058105, -0.04876709, + -0.13095093, -0.19775391, -0.16293335, -0.059265137, 0.027526855, + 0.13961792, 0.26803589, 0.35470581, 0.37600708, 0.34085083, + 0.2572937, 0.13265991, -0.008026123, -0.12841797, -0.22216797, + -0.30899048, -0.37841797, -0.4251709, -0.45947266, -0.48376465, + -0.50341797, -0.52294922, -0.54516602, -0.58447266, -0.62121582, + -0.63989258, -0.64990234, -0.63037109, -0.568573, -0.46630859, + -0.36468506, -0.27618408, -0.18487549, -0.11065674, -0.070404053, + -0.066101074, -0.049835205, -0.026611328, -0.013061523, + 0.011444092, 0.034576416, 0.046112061, 0.052215576, 0.045501709, + 0.030059814, 0.011657715, 0.026489258, 0.056121826, 0.10122681, + 0.20016479, 0.33053589, 0.45944214, 0.54830933, 0.57751465, 0.5625, + 0.55612183, 0.55319214, 0.5697937, 0.64987183, 0.73553467, + 0.78170776, 0.84420776, 0.89987183, 0.90475464, 0.85861206, + 0.75338745, 0.57077026, 0.3354187, 0.067779541, -0.1741333, + -0.36557007, -0.47802734, -0.51281738, -0.47766113, -0.36865234, + -0.22381592, -0.065765381, 0.066680908, 0.12365723, 0.098114014, + 0.020965576, -0.10775757, -0.27294922, -0.41845703, -0.50146484, + -0.52563477, -0.48291016, -0.38186646, -0.27264404, -0.16925049, + -0.07043457, 0.003326416, 0.025085449, -0.028320312, -0.11358643, + -0.18164062, -0.21984863, -0.21286011, -0.16635132, -0.12728882, + -0.088104248, 0.016693115, 0.18893433, 0.40280151, 0.59127808, + 0.67233276, 0.64682007, 0.54733276, 0.4213562, 0.30703735, + 0.19845581, 0.12661743, 0.095611572, 0.10531616, 0.17950439, + 0.29904175, 0.41726685, 0.47506714, 0.48678589, 0.48873901, + 0.46694946, 0.42233276, 0.38088989, 0.34689331, 0.30709839, + 0.26022339, 0.18258667, 0.064544678, -0.09085083, -0.25634766, + -0.41540527, -0.54693604, -0.62731934, -0.6809082, -0.70849609, + -0.71044922, -0.68469238, -0.64886475, -0.62115479, -0.6104126, + -0.62451172, -0.65185547, -0.67504883, -0.68969727, -0.70257568, + -0.71337891, -0.68994141, -0.61865234, -0.49755859, -0.32177734, + -0.10437012, 0.11209106, 0.30691528, 0.46789551, 0.51602173, + 0.44674683, 0.32055664, 0.1769104, 0.06072998, 0.0075378418, + -0.013641357, -0.0038146973, 0.082244873, 0.22116089, 0.35787964, + 0.47689819, 0.60266113, 0.71801758, 0.81747437, 0.91799927, + 0.97079468, 0.97677612, 0.93850708, 0.83322144, 0.65866089, + 0.42324829, 0.14834595, -0.10574341, -0.31484985, -0.46813965, + -0.54833984, -0.55517578, -0.51220703, -0.43115234, -0.34613037, + -0.29052734, -0.2699585, -0.29443359, -0.33349609, -0.38720703, + -0.45751953, -0.51318359, -0.54800415, -0.55706787, -0.5402832, + -0.48666382, -0.41162109, -0.32958984, -0.24560547, -0.19873047, + -0.18457031, -0.19171143, -0.21240234, -0.23876953, -0.25823975, + -0.26184082, -0.24902344, -0.21612549, -0.16552734, -0.11083984, + -0.058349609, -0.0034179688, 0.053283691, 0.12722778, 0.23052979, + 0.35769653, 0.51147461, 0.68243408, 0.85015869, 0.96902466, + 0.99908447, 0.99899292, 0.99453735, 0.87936401, 0.72964478, + 0.59124756, 0.45162964, 0.29949951, 0.18435669, 0.087219238, + 0.0085754395, -0.031677246, -0.057434082, -0.06338501, + -0.050262451, -0.021179199, 0.010986328, 0.035095215, 0.041900635, + 0.026275635, -0.008972168, -0.067260742, -0.14938354, -0.24298096, + -0.33901978, -0.44342041, -0.53179932, -0.59924316, -0.64294434, + -0.66220093, -0.65362549, -0.61437988, -0.56277466, -0.48764038, + -0.41287231, -0.3420105, -0.25909424, -0.17782593, -0.10604858, + -0.033355713, 0.037872314, 0.097198486, 0.15203857, 0.19644165, + 0.23324585, 0.2668457, 0.29403687, 0.31442261, 0.33148193, + 0.33639526, 0.32794189, 0.31109619, 0.30651855, 0.30456543, + 0.31005859, 0.32266235, 0.34017944, 0.36062622, 0.37988281, + 0.39459229, 0.40344238, 0.41464233, 0.41500854, 0.41091919, + 0.40512085, 0.39819336, 0.3843689, 0.36633301, 0.33621216, + 0.28076172, 0.19436646, 0.083892822, -0.056732178, -0.21832275, + -0.38809204, -0.55502319, -0.70330811, -0.82672119, -0.909729, + -0.93505859, -0.9085083, -0.84347534, -0.74786377, -0.63342285, + -0.52468872, -0.42883301, -0.35321045, -0.29504395, -0.26339722, + -0.23782349, -0.21252441, -0.19006348, -0.16159058, -0.12472534, + -0.075958252, -0.012115479, 0.056091309, 0.11953735, 0.17373657, + 0.22116089, 0.25097656, 0.25982666, 0.2539978, 0.24578857, + 0.24325562, 0.25292969, 0.28744507, 0.34677124, 0.42510986, + 0.51596069, 0.60205078, 0.67550659, 0.71774292, 0.728302, + 0.70874023, 0.6612854, 0.59188843, 0.49536133, 0.37322998, + 0.23904419, 0.10256958, -0.030303955, -0.15093994, -0.24526978, + -0.31253052, -0.3414917, -0.33178711, -0.29302979, -0.23806763, + -0.17816162, -0.13470459, -0.12387085, -0.15142822, -0.20706177, + -0.28427124, -0.37112427, -0.44927979, -0.50619507, -0.53219604, + -0.53118896, -0.49990845, -0.45379639, -0.39599609, -0.31643677, + -0.22329712, -0.15414429, -0.1050415, -0.075592041, -0.0753479, + -0.088775635, -0.099090576, -0.086639404, -0.035797119, + 0.052154541, 0.1661377, 0.28082275, 0.39169312, 0.50491333, + 0.59762573, 0.67288208, 0.71621704, 0.73251343, 0.71405029, + 0.66171265, 0.60040283, 0.53762817, 0.46520996, 0.3727417, + 0.26971436, 0.17245483, 0.092346191, 0.034851074, 0.0072937012, + 0.007232666, 0.017547607, 0.01852417, 0.020172119, 0.023345947, + 0.014434814, -0.013946533, -0.054168701, -0.094726562, -0.14425659, + -0.20623779, -0.27316284, -0.34069824, -0.40481567, -0.4647522, + -0.51278687, -0.55215454, -0.57962036, -0.58953857, -0.59140015, + -0.57885742, -0.55456543, -0.51055908, -0.45095825, -0.37948608, + -0.29974365, -0.22027588, -0.13543701, -0.047271729, 0.033721924, + 0.1005249, 0.14877319, 0.18429565, 0.20465088, 0.21621704, + 0.2272644, 0.23416138, 0.24511719, 0.26138306, 0.2805481, + 0.3006897, 0.32943726, 0.36660767, 0.40802002, 0.44424438, + 0.47698975, 0.50256348, 0.52005005, 0.5267334, 0.52258301, + 0.50723267, 0.47485352, 0.42205811, 0.34805298, 0.26202393, + 0.16522217, 0.067749023, -0.024169922, -0.1060791, -0.18280029, + -0.25424194, -0.31921387, -0.37774658, -0.43612671, -0.50094604, + -0.56121826, -0.61495972, -0.66091919, -0.69436646, -0.70004272, + -0.67868042, -0.63104248, -0.56182861, -0.48074341, -0.39840698, + -0.31900024, -0.24609375, -0.18695068, -0.1461792, -0.11993408, + -0.11032104, -0.10159302, -0.091918945, -0.076904297, -0.069580078, + -0.058898926, -0.038146973, -0.012542725, 0.014831543, 0.043304443, + 0.082824707, 0.13180542, 0.1895752, 0.25256348, 0.32229614, + 0.38531494, 0.43493652, 0.4697876, 0.48736572, 0.48733521, + 0.46533203, 0.42901611, 0.38223267, 0.33636475, 0.2819519, + 0.22467041, 0.16455078, 0.10604858, 0.047485352, -0.010040283, + -0.057098389, -0.093933105, -0.12252808, -0.14291382, -0.15545654, + -0.16064453, -0.16348267, -0.16918945, -0.17095947, -0.17773438, + -0.19436646, -0.21868896, -0.25158691, -0.2890625, -0.33297729, + -0.37677002, -0.41171265, -0.43563843, -0.44619751, -0.44320679, + -0.42520142, -0.39151001, -0.34609985, -0.29324341, -0.23846436, + -0.18026733, -0.12319946, -0.068023682, -0.017944336, 0.033691406, + 0.08416748, 0.13388062, 0.18310547, 0.23513794, 0.28579712, + 0.3314209, 0.37133789, 0.40841675, 0.44143677, 0.46252441, + 0.47073364, 0.46435547, 0.44342041, 0.40725708, 0.35971069, + 0.30911255, 0.26272583, 0.22372437, 0.19876099, 0.18948364, + 0.18948364, 0.19799805, 0.21658325, 0.23733521, 0.25439453, + 0.26513672, 0.26702881, 0.25582886, 0.2338562, 0.19677734, + 0.15100098, 0.097106934, 0.036804199, -0.02456665, -0.087005615, + -0.14819336, -0.20632935, -0.26040649, -0.30117798, -0.33422852, + -0.35610962, -0.36178589, -0.3522644, -0.3237915, -0.28857422, + -0.24789429, -0.20108032, -0.14822388, -0.097442627, -0.055877686, + -0.019500732, 0.0064086914, 0.024627686, 0.033721924, 0.042114258, + 0.052032471, 0.069763184, 0.094207764, 0.12030029, 0.14993286, + 0.18215942, 0.22003174, 0.26171875, 0.30029297, 0.33355713, + 0.35992432, 0.3833313, 0.40148926, 0.41094971, 0.40899658, + 0.39849854, 0.37387085, 0.34091187, 0.30215454, 0.26016235, + 0.2170105, 0.17681885, 0.13604736, 0.093658447, 0.049316406, + 0.0074462891, -0.037322998, -0.086120605, -0.13262939, -0.18286133, + -0.22872925, -0.26879883, -0.3026123, -0.33206177, -0.35943604, + -0.37924194, -0.39431763, -0.40466309, -0.40936279, -0.40270996, + -0.38815308, -0.36676025, -0.3421936, -0.31149292, -0.27597046, + -0.24679565, -0.22177124, -0.20294189, -0.19259644, -0.18527222, + -0.18157959, -0.17645264, -0.16998291, -0.1524353, -0.12554932, + -0.086669922, -0.03894043, 0.016204834, 0.075744629, 0.13665771, + 0.18896484, 0.23040771, 0.26107788, 0.28408813, 0.29443359, + 0.29440308, 0.28460693, 0.27456665, 0.26107788, 0.24020386, + 0.21322632, 0.18551636, 0.15698242, 0.12554932, 0.095855713, + 0.069152832, 0.045501709, 0.020141602, -0.0030517578, -0.026702881, + -0.0496521, -0.071960449, -0.098327637, -0.12268066, -0.14907837, + -0.17523193, -0.20068359, -0.22494507, -0.2482605, -0.27352905, + -0.29666138, -0.31420898, -0.32751465, -0.33670044, -0.33874512, + -0.32943726, -0.31417847, -0.29504395, -0.26898193, -0.23904419, + -0.20245361, -0.16390991, -0.1210022, -0.078308105, -0.039337158, + -0.0037231445, 0.029174805, 0.05847168, 0.084106445, 0.1078186, + 0.13174438, 0.15719604, 0.17941284, 0.20126343, 0.22348022, + 0.2432251, 0.2578125, 0.2640686, 0.26593018, 0.25933838, + 0.24685669, 0.2288208, 0.21047974, 0.19494629, 0.18075562, + 0.17199707, 0.17199707, 0.17175293, 0.1729126, 0.17126465, + 0.16873169, 0.16256714, 0.15036011, 0.1355896, 0.11254883, + 0.083465576, 0.050079346, 0.01159668, -0.030029297, -0.074707031, + -0.11532593, -0.15432739, -0.18942261, -0.21673584, -0.23681641, + -0.24554443, -0.24703979, -0.24472046, -0.23815918, -0.22784424, + -0.21243286, -0.19384766, -0.17596436, -0.15844727, -0.14089966, + -0.12030029, -0.099395752, -0.076538086, -0.058746338, + -0.034484863, -0.0097351074, 0.015625, 0.037445068, 0.063079834, + 0.087738037, 0.11401367, 0.13973999, 0.16848755, 0.19680786, + 0.2244873, 0.25567627, 0.28305054, 0.30465698, 0.31854248, + 0.32287598, 0.31808472, 0.30102539, 0.27633667, 0.24591064, + 0.20962524, 0.17144775, 0.13021851, 0.09487915, 0.057861328, + 0.023651123, -0.014129639, -0.051239014, -0.086639404, -0.12316895, + -0.15304565, -0.18545532, -0.21154785, -0.23434448, -0.25100708, + -0.26113892, -0.26712036, -0.26678467, -0.26687622, -0.262146, + -0.25656128, -0.24734497, -0.23501587, -0.22433472, -0.20773315, + -0.19207764, -0.17459106, -0.15997314, -0.14196777, -0.12670898, + -0.1166687, -0.10726929, -0.099243164, -0.090179443, -0.078521729, + -0.062225342, -0.038360596, -0.0068054199, 0.031402588, + 0.072143555, 0.11181641, 0.15362549, 0.19085693, 0.22195435, + 0.24661255, 0.26379395, 0.27166748, 0.27072144, 0.26507568, + 0.25247192, 0.2348938, 0.21447754, 0.18756104, 0.15771484, + 0.13241577, 0.10873413, 0.087036133, 0.065460205, 0.046875, + 0.029754639, 0.013153076, -0.0065917969, -0.024993896, + -0.046051025, -0.067810059, -0.092285156, -0.11779785, -0.14529419, + -0.17376709, -0.19503784, -0.21487427, -0.23205566, -0.24533081, + -0.25128174, -0.2522583, -0.24685669, -0.23486328, -0.21954346, + -0.19946289, -0.1786499, -0.15280151, -0.12744141, -0.098022461, + -0.069091797, -0.038146973, -0.0079040527, 0.024719238, + 0.054351807, 0.082275391, 0.11019897, 0.13510132, 0.15545654, + 0.17276001, 0.1854248, 0.19042969, 0.19281006, 0.1930542, + 0.19232178, 0.18795776, 0.17938232, 0.17156982, 0.16223145, + 0.15603638, 0.15182495, 0.15118408, 0.14651489, 0.14263916, + 0.13916016, 0.1343689, 0.12649536, 0.11480713, 0.10400391, + 0.091766357, 0.079589844, 0.063781738, 0.04776001, 0.029510498, + 0.013061523, -0.0087890625, -0.034454346, -0.06362915, + -0.097381592, -0.12896729, -0.15893555, -0.18429565, -0.20910645, + -0.22930908, -0.2411499, -0.25009155, -0.2505188, -0.24719238, + -0.23956299, -0.22445679, -0.20892334, -0.18774414, -0.16699219, + -0.14205933, -0.12145996, -0.10317993, -0.085449219, -0.066101074, + -0.050048828, -0.03326416, -0.014404297, 0.0099182129, 0.041809082, + 0.077087402, 0.11599731, 0.14718628, 0.18060303, 0.20654297, + 0.23117065, 0.25247192, 0.27026367, 0.28042603, 0.27871704, + 0.27175903, 0.25527954, 0.2315979, 0.20584106, 0.17654419, + 0.1446228, 0.1086731, 0.073699951, 0.040588379, 0.011627197, + -0.016143799, -0.044189453, -0.071838379, -0.098449707, + -0.12316895, -0.14602661, -0.16595459, -0.17871094, -0.18606567, + -0.19488525, -0.20278931, -0.209198, -0.21121216, -0.21276855, + -0.21395874, -0.21328735, -0.21072388, -0.20718384, -0.20404053, + -0.19812012, -0.19073486, -0.17901611, -0.16781616, -0.15267944, + -0.13824463, -0.12042236, -0.098999023, -0.077453613, -0.053497314, + -0.029022217, -0.001373291, 0.022583008, 0.050720215, 0.077026367, + 0.10748291, 0.13626099, 0.16424561, 0.18908691, 0.21191406, + 0.2300415, 0.2428894, 0.25292969, 0.25643921, 0.25924683, + 0.25518799, 0.24127197, 0.22161865, 0.19989014, 0.17800903, + 0.14935303, 0.12268066, 0.094787598, 0.068878174, 0.041046143, + 0.018585205, 0.0020141602, -0.0094604492, -0.01651001, -0.02243042, + -0.031860352, -0.049102783, -0.072113037, -0.098083496, + -0.12472534, -0.14935303, -0.17062378, -0.18566895, -0.19500732, + -0.19784546, -0.19299316, -0.18365479, -0.17153931, -0.1555481, + -0.13491821, -0.11233521, -0.090209961, -0.063781738, -0.038879395, + -0.017089844, 0.0027770996, 0.021697998, 0.041046143, 0.059844971, + 0.078674316, 0.093536377, 0.10656738, 0.11816406, 0.12698364, + 0.13323975, 0.13742065, 0.14559937, 0.1522522, 0.15563965, + 0.15548706, 0.1583252, 0.15756226, 0.15576172, 0.15216064, + 0.1479187, 0.14260864, 0.13577271, 0.1272583, 0.11904907, + 0.10968018, 0.10412598, 0.096618652, 0.087615967, 0.07522583, + 0.059265137, 0.039978027, 0.017852783, -0.0061950684, -0.029510498, + -0.05065918, -0.075500488, -0.099395752, -0.12225342, -0.1418457, + -0.16101074, -0.17797852, -0.1932373, -0.20556641, -0.20901489, + -0.21026611, -0.20684814, -0.20016479, -0.18768311, -0.17312622, + -0.15994263, -0.14834595, -0.13482666, -0.11865234, -0.10229492, + -0.083404541, -0.063079834, -0.039276123, -0.014129639, + 0.011199951, 0.035583496, 0.059417725, 0.079925537, 0.098571777, + 0.11416626, 0.1270752, 0.14013672, 0.15286255, 0.16619873, + 0.17810059, 0.18783569, 0.19454956, 0.19598389, 0.19143677, + 0.18264771, 0.16867065, 0.15258789, 0.13143921, 0.10482788, + 0.075073242, 0.045928955, 0.018371582, -0.0075683594, -0.032928467, + -0.054992676, -0.072662354, -0.089813232, -0.10479736, -0.12127686, + -0.13748169, -0.15161133, -0.16473389, -0.17370605, -0.18240356, + -0.18569946, -0.18682861, -0.18756104, -0.18310547, -0.18099976, + -0.17584229, -0.17102051, -0.16162109, -0.15145874, -0.1421814, + -0.12973022, -0.11398315, -0.096557617, -0.078460693, -0.061035156, + -0.042541504, -0.023590088, -0.0029296875, 0.020996094, + 0.044403076, 0.068237305, 0.092926025, 0.11682129, 0.13772583, + 0.15460205, 0.17050171, 0.18438721, 0.19360352, 0.19952393, + 0.20303345, 0.2048645, 0.20132446, 0.1930542, 0.18280029, + 0.16989136, 0.1546936, 0.13711548, 0.12115479, 0.10336304, + 0.087890625, 0.068023682, 0.049804688, 0.028320312, 0.0081787109, + -0.012664795, -0.030334473, -0.046783447, -0.061584473, + -0.073883057, -0.084655762, -0.093719482, -0.10314941, -0.11251831, + -0.12094116, -0.1300354, -0.13421631, -0.13647461, -0.13491821, + -0.13186646, -0.12530518, -0.11520386, -0.10275269, -0.088775635, + -0.074310303, -0.061462402, -0.046875, -0.032409668, -0.014892578, + 0.00057983398, 0.016967773, 0.031738281, 0.0440979, 0.054656982, + 0.063659668, 0.073791504, 0.081176758, 0.088562012, 0.095916748, + 0.10043335, 0.10443115, 0.10519409, 0.1076355, 0.1071167, + 0.10748291, 0.10601807, 0.1026001, 0.10031128, 0.095123291, + 0.08972168, 0.082763672, 0.075164795, 0.06729126, 0.057922363, + 0.049865723, 0.042144775, 0.035125732, 0.026367188, 0.016571045, + 0.0040893555, -0.0084228516, -0.025054932, -0.042053223, + -0.060974121, -0.077178955, -0.093902588, -0.10845947, -0.1229248, + -0.13531494, -0.14489746, -0.15274048, -0.15701294, -0.15966797, + -0.15670776, -0.15130615, -0.140625, -0.12561035, -0.10900879, + -0.091644287, -0.077362061, -0.063690186, -0.051879883, + -0.04083252, -0.028869629, -0.017059326, -0.0053710938, + 0.0051574707, 0.020172119, 0.034484863, 0.051361084, 0.067810059, + 0.085540771, 0.10223389, 0.11761475, 0.13146973, 0.14044189, + 0.1468811, 0.14923096, 0.14846802, 0.14407349, 0.13641357, + 0.12796021, 0.11773682, 0.1076355, 0.09463501, 0.081207275, + 0.065124512, 0.050323486, 0.035552979, 0.020965576, 0.0063476562, + -0.0094299316, -0.024810791, -0.040008545, -0.054534912, + -0.0703125, -0.084228516, -0.096862793, -0.10809326, -0.1171875, + -0.12515259, -0.13067627, -0.13568115, -0.13632202, -0.13449097, + -0.131073, -0.12503052, -0.11868286, -0.11099243, -0.10317993, + -0.095306396, -0.087158203, -0.077667236, -0.068115234, + -0.059082031, -0.047241211, -0.033966064, -0.019805908, + -0.0041503906, 0.012573242, 0.030029297, 0.047637939, 0.063751221, + 0.079162598, 0.092987061, 0.1055603, 0.11737061, 0.12628174, + 0.13504028, 0.14266968, 0.14840698, 0.1519165, 0.15158081, + 0.14685059, 0.14041138, 0.13082886, 0.11962891, 0.10525513, + 0.089599609, 0.072784424, 0.057556152, 0.044464111, 0.032470703, + 0.02053833, 0.0086364746, -0.0019226074, -0.013336182, + -0.026184082, -0.039398193, -0.052368164, -0.064605713, + -0.076293945, -0.086303711, -0.09475708, -0.10128784, -0.10568237, + -0.10748291, -0.10894775, -0.10787964, -0.10577393, -0.10229492, + -0.097198486, -0.090087891, -0.081695557, -0.07244873, + -0.062927246, -0.051940918, -0.041748047, -0.028839111, + -0.015960693, -0.0022277832, 0.011779785, 0.024932861, 0.038482666, + 0.048614502, 0.059326172, 0.066925049, 0.072021484, 0.077026367, + 0.079681396, 0.082733154, 0.082855225, 0.081481934, 0.08001709, + 0.079833984, 0.079345703, 0.079162598, 0.078582764, 0.078521729, + 0.078582764, 0.077575684, 0.073059082, 0.065612793, 0.055480957, + 0.044189453, 0.031768799, 0.019744873, 0.008972168, -0.00094604492, + -0.0081176758, -0.013885498, -0.018463135, -0.025634766, + -0.032623291, -0.041442871, -0.05279541, -0.0652771, -0.078399658, + -0.088256836, -0.098297119, -0.10681152, -0.112854, -0.11355591, + -0.11132812, -0.10617065, -0.098449707, -0.087738037, -0.077606201, + -0.068054199, -0.059051514, -0.051330566, -0.041503906, + -0.031066895, -0.019470215, -0.0077514648, 0.0030517578, + 0.014892578, 0.026062012, 0.038879395, 0.050079346, 0.060028076, + 0.069793701, 0.076568604, 0.082611084, 0.088989258, 0.094360352, + 0.098754883, 0.10293579, 0.10635376, 0.10720825, 0.10586548, + 0.10314941, 0.0987854, 0.093475342, 0.087432861, 0.079406738, + 0.070159912, 0.059204102, 0.048095703, 0.036529541, 0.023071289, + 0.010406494, -0.0024719238, -0.01361084, -0.026184082, + -0.036682129, -0.047180176, -0.056213379, -0.065765381, + -0.07510376, -0.082702637, -0.091064453, -0.09677124, -0.10232544, + -0.10546875, -0.1072998, -0.10693359, -0.10385132, -0.10055542, + -0.093078613, -0.085235596, -0.075439453, -0.065643311, + -0.054138184, -0.042449951, -0.029785156, -0.017822266, + -0.0068359375, 0.0038452148, 0.01373291, 0.023773193, 0.033081055, + 0.042053223, 0.049560547, 0.057952881, 0.066223145, 0.075775146, + 0.083190918, 0.08984375, 0.096191406, 0.10202026, 0.10595703, + 0.10742188, 0.10778809, 0.10528564, 0.1020813, 0.096069336, + 0.08883667, 0.07925415, 0.069458008, 0.057952881, 0.047454834, + 0.036804199, 0.026397705, 0.015777588, 0.004119873, -0.0077819824, + -0.019927979, -0.030822754, -0.040405273, -0.048980713, + -0.056610107, -0.062805176, -0.069366455, -0.074035645, + -0.077026367, -0.079406738, -0.079986572, -0.080322266, + -0.078338623, -0.07598877, -0.072479248, -0.067230225, + -0.061218262, -0.055847168, -0.050048828, -0.043823242, + -0.037536621, -0.030792236, -0.02230835, -0.012634277, + -0.0030822754, 0.0069580078, 0.016204834, 0.023040771, 0.03024292, + 0.036865234, 0.043518066, 0.051025391, 0.056396484, 0.061645508, + 0.063720703, 0.065185547, 0.065032959, 0.0652771, 0.06439209, + 0.06451416, 0.063598633, 0.062011719, 0.058654785, 0.055297852, + 0.053131104, 0.051208496, 0.048950195, 0.046905518, 0.042175293, + 0.035675049, 0.028411865, 0.019622803, 0.0091247559, -0.0016174316, + -0.012207031, -0.022521973, -0.031616211, -0.040618896, + -0.047302246, -0.052734375, -0.057098389, -0.060455322, + -0.064849854, -0.068664551, -0.07321167, -0.074829102, -0.07623291, + -0.075378418, -0.072814941, -0.069152832, -0.064819336, + -0.059417725, -0.052368164, -0.044769287, -0.036712646, + -0.027679443, -0.018005371, -0.0093383789, 0.0010375977, + 0.011474609, 0.022399902, 0.03125, 0.03793335, 0.042449951, + 0.045379639, 0.048065186, 0.050567627, 0.054260254, 0.058166504, + 0.062316895, 0.066436768, 0.068786621, 0.072113037, 0.074707031, + 0.077453613, 0.076507568, 0.074523926, 0.071838379, 0.06729126, + 0.061126709, 0.053771973, 0.045410156, 0.037078857, 0.027862549, + 0.019134521, 0.0096435547, 0.00079345703, -0.0076293945, + -0.016296387, -0.024810791, -0.034454346, -0.043334961, + -0.052703857, -0.06048584, -0.066101074, -0.070739746, -0.07220459, + -0.073394775, -0.072967529, -0.072509766, -0.072296143, + -0.070404053, -0.06842041, -0.064819336, -0.062072754, + -0.058624268, -0.05380249, -0.048400879, -0.039764404, + -0.031280518, -0.021881104, -0.012786865, -0.0053100586, + 0.0022888184, 0.0081176758, 0.014038086, 0.020568848, 0.026885986, + 0.032867432, 0.037628174, 0.042999268, 0.046722412, 0.052276611, + 0.056884766, 0.061584473, 0.065124512, 0.066955566, 0.068054199, + 0.067565918, 0.066589355, 0.06362915, 0.058410645, 0.052764893, + 0.045349121, 0.036987305, 0.029144287, 0.021606445, 0.015197754, + 0.0087280273, 0.0020446777, -0.004699707, -0.012115479, + -0.018920898, -0.02633667, -0.032897949, -0.037841797, + -0.042205811, -0.046783447, -0.050567627, -0.055114746, + -0.05847168, -0.061004639, -0.061401367, -0.059173584, + -0.056915283, -0.053955078, -0.049255371, -0.043121338, + -0.037384033, -0.032501221, -0.027709961, -0.023468018, + -0.018951416, -0.01385498, -0.0096740723, -0.005279541, + -0.0010986328, 0.0033874512, 0.0088806152, 0.01348877, 0.01953125, + 0.025024414, 0.031097412, 0.036895752, 0.0418396, 0.045837402, + 0.048492432, 0.050231934, 0.051208496, 0.052490234, 0.052856445, + 0.053344727, 0.052581787, 0.051452637, 0.049224854, 0.046356201, + 0.042938232, 0.038543701, 0.034362793, 0.029602051, 0.025726318, + 0.021606445, 0.017272949, 0.013641357, 0.009185791, 0.0037841797, + -0.0022888184, -0.0105896, -0.019439697, -0.027709961, + -0.034454346, -0.039642334, -0.044464111, -0.046569824, + -0.048400879, -0.047546387, -0.046142578, -0.043395996, + -0.040405273, -0.037994385, -0.035217285, -0.03414917, + -0.031890869, -0.029205322, -0.026306152, -0.021820068, + -0.018035889, -0.01361084, -0.0084228516, -0.001373291, + 0.0057067871, 0.011962891, 0.018157959, 0.022766113, 0.02722168, + 0.030090332, 0.032928467, 0.03503418, 0.036895752, 0.039001465, + 0.04107666, 0.042816162, 0.04397583, 0.045074463, 0.045562744, + 0.045654297, 0.045532227, 0.045135498, 0.043518066, 0.040618896, + 0.036437988, 0.032012939, 0.027099609, 0.021911621, 0.016296387, + 0.010955811, 0.006072998, 0.00048828125, -0.0053100586, + -0.011535645, -0.017303467, -0.023529053, -0.028717041, + -0.03427124, -0.038604736, -0.042572021, -0.045074463, + -0.046661377, -0.047851562, -0.04776001, -0.047668457, + -0.046691895, -0.045379639, -0.04385376, -0.042297363, + -0.040435791, -0.037322998, -0.033691406, -0.029205322, + -0.024749756, -0.019775391, -0.014556885, -0.0090942383, + -0.0034790039, 0.0011901855, 0.0063171387, 0.0095214844, + 0.013519287, 0.016174316, 0.019622803, 0.022094727, 0.024627686, + 0.027435303, 0.029876709, 0.032958984, 0.035858154, 0.038208008, + 0.039398193, 0.040374756, 0.040222168, 0.039978027, 0.039154053, + 0.037811279, 0.034820557, 0.030822754, 0.025695801, 0.020721436, + 0.015991211, 0.010864258, 0.006439209, 0.0018005371, -0.002166748, + -0.0062561035, -0.0096740723, -0.013244629, -0.01663208, + -0.019927979, -0.023742676, -0.026611328, -0.029907227, + -0.032684326, -0.035064697, -0.037261963, -0.037811279, + -0.037902832, -0.036437988, -0.033233643, -0.029876709, + -0.026031494, -0.021759033, -0.017456055, -0.014251709, + -0.011566162, -0.0094909668, -0.0071105957, -0.0048217773, + -0.0027770996, 0.00036621094, 0.0036010742, 0.0076904297, + 0.01159668, 0.015350342, 0.019226074, 0.021697998, 0.024749756, + 0.026947021, 0.029266357, 0.030853271, 0.032104492, 0.032470703, + 0.032165527, 0.03225708, 0.031860352, 0.03213501, 0.032104492, + 0.03213501, 0.031860352, 0.031005859, 0.029205322, 0.026550293, + 0.023406982, 0.01940918, 0.015258789, 0.010437012, 0.005859375, + 0.0013122559, -0.003112793, -0.0067443848, -0.010040283, + -0.01361084, -0.016662598, -0.020324707, -0.023193359, + -0.026062012, -0.028503418, -0.029663086, -0.030487061, + -0.030059814, -0.029418945, -0.027374268, -0.025024414, + -0.022857666, -0.0206604, -0.018585205, -0.016113281, -0.013397217, + -0.010192871, -0.0072021484, -0.0043029785, -0.002166748, 0, + 0.0024414062, 0.005065918, 0.0079345703, 0.01071167, 0.012878418, + 0.015380859, 0.017669678, 0.019958496, 0.021575928, 0.023284912, + 0.024078369, 0.024719238, 0.025024414, 0.02557373, 0.02633667, + 0.026275635, 0.02520752, 0.024017334, 0.022369385, 0.021057129, + 0.019622803, 0.017578125, 0.015258789, 0.012054443, 0.0086975098, + 0.0051269531, 0.0020141602, -0.00082397461, -0.00390625, + -0.0068054199, -0.010406494, -0.014129639, -0.017425537, + -0.020385742, -0.02230835, -0.025054932, -0.026916504, + -0.028961182, -0.029724121, -0.029937744, -0.029907227, + -0.02911377, -0.027770996, -0.025238037, -0.023010254, + -0.019714355, -0.016540527, -0.013641357, -0.011077881, + -0.008605957, -0.0062866211, -0.0043945312, -0.0021972656, + -0.00067138672, 0.0012512207, 0.0020751953, 0.0036315918, + 0.0053405762, 0.0081481934, 0.011352539, 0.014709473, 0.017944336, + 0.020202637, 0.022003174, 0.023742676, 0.02520752, 0.026031494, + 0.026062012, 0.025421143, 0.024261475, 0.022766113, 0.020904541, + 0.019287109, 0.017852783, 0.017333984, 0.017181396, 0.016357422, + 0.014770508, 0.012298584, 0.0095825195, 0.0057373047, 0.0017089844, + -0.0032043457, -0.0075073242, -0.011260986, -0.014068604, + -0.016021729, -0.017608643, -0.0184021, -0.019104004, -0.019775391, + -0.020507812, -0.020721436, -0.020355225, -0.019348145, + -0.017974854, -0.016235352, -0.014648438, -0.013183594, + -0.011657715, -0.010498047, -0.0097961426, -0.0091552734, + -0.0082702637, -0.0070800781, -0.0055236816, -0.003112793, + -0.00054931641, 0.0024719238, 0.0049743652, 0.0075073242, + 0.0095825195, 0.011352539, 0.012512207, 0.013580322, 0.014251709, + 0.015045166, 0.016113281, 0.017089844, 0.018096924, 0.018890381, + 0.019897461, 0.020629883, 0.020965576, 0.020782471, 0.019744873, + 0.018371582, 0.016113281, 0.014068604, 0.011260986, 0.0094604492, + 0.0072631836, 0.0054016113, 0.0033874512, 0.0014343262, + -0.0007019043, -0.0032958984, -0.0055847168, -0.0082397461, + -0.010650635, -0.013275146, -0.015167236, -0.016662598, + -0.017852783, -0.018218994, -0.018157959, -0.017486572, + -0.017181396, -0.01675415, -0.01651001, -0.015808105, -0.015014648, + -0.01385498, -0.012390137, -0.01083374, -0.0090332031, + -0.0072937012, -0.0054626465, -0.0038757324, -0.0022888184, + -0.00051879883, 0.0011901855, 0.0027770996, 0.0043334961, + 0.0057067871, 0.0071716309, 0.0084533691, 0.010101318, 0.011047363, + 0.011993408, 0.012969971, 0.013092041, 0.013427734, 0.013641357, + 0.013946533, 0.014221191, 0.014099121, 0.01385498, 0.012756348, + 0.012054443, 0.011322021, 0.010162354, 0.0087280273, 0.0073547363, + 0.0061950684, 0.0046386719, 0.0029602051, 0.0014953613, + -0.00033569336, -0.0021362305, -0.0043640137, -0.0064086914, + -0.0086975098, -0.010498047, -0.012023926, -0.013092041, + -0.013366699, -0.01348877, -0.013793945, -0.013763428, + -0.013977051, -0.013824463, -0.013519287, -0.013305664, + -0.012878418, -0.012390137, -0.011352539, -0.010131836, + -0.0085144043, -0.0065307617, -0.0048217773, -0.0028076172, + -0.00094604492, 0.00082397461, 0.0019836426, 0.0028991699, + 0.0037841797, 0.0042114258, 0.0050048828, 0.0057067871, + 0.0067443848, 0.0078735352, 0.0088195801, 0.0099182129, + 0.010986328, 0.011657715, 0.012145996, 0.012573242, 0.012969971, + 0.013000488, 0.0128479, 0.012481689, 0.011993408, 0.011352539, + 0.010498047, 0.0093688965, 0.0081176758, 0.0067749023, + 0.0054931641, 0.0044250488, 0.0032958984, 0.001953125, + 0.00054931641, -0.00085449219, -0.0026855469, -0.0042114258, + -0.0060119629, -0.0071716309, -0.0086364746, -0.0095825195, + -0.010284424, -0.010528564, -0.010498047, -0.010284424, + -0.0096740723, -0.0094299316, -0.0088195801, -0.0082092285, + -0.0076599121, -0.007232666, -0.0068359375, -0.0063171387, + -0.0056152344, -0.0047607422, -0.0038146973, -0.0027770996, + -0.0015563965, -0.00061035156, 0.00057983398, 0.0016174316, + 0.002532959, 0.0032348633, 0.0037536621, 0.0041503906, + 0.0043945312, 0.0048217773, 0.0053405762, 0.0060119629, + 0.0067443848, 0.0075073242, 0.0080566406, 0.0084228516, + 0.008392334, 0.0083618164, 0.0080566406, 0.0076293945, + 0.0071411133, 0.0067749023, 0.0062255859, 0.0054626465, + 0.0046081543, 0.0036315918, 0.0026550293, 0.0014648438, + 0.0002746582, -0.00076293945, -0.0018615723, -0.0027160645, + -0.0035400391, -0.0041809082, -0.0048522949, -0.0054626465, + -0.0061035156, -0.0067138672, -0.0072021484, -0.0072937012, + -0.0072937012, -0.0069885254, -0.0065002441, -0.0059204102, + -0.0051269531, -0.0045471191, -0.0039672852, -0.0036010742, + -0.0031738281, -0.0027770996, -0.0023803711, -0.0018310547, + -0.0012817383, -0.00064086914, -3.0517578e-05, 0.00064086914, + 0.0011901855, 0.0017700195, 0.0021972656, 0.002532959, + 0.0028381348, 0.003112793, 0.0034484863, 0.0038146973, + 0.0040893555, 0.0043334961, 0.0044250488, 0.0044555664, + 0.0045776367, 0.0046691895, 0.0047302246, 0.0046691895, + 0.0045471191, 0.0042724609, 0.00390625, 0.0035095215, 0.0029296875, + 0.0024414062, 0.001953125, 0.0014343262, 0.00085449219, + 0.00021362305, -0.00018310547, -0.00073242188, -0.0012207031, + -0.001739502, -0.002166748, 0 + }; + +static const unsigned defaultClickLength = sizeof(defaultClick) / sizeof(*defaultClick); + +static const float defaultClickEmphasis[] = { + 0.002166748, 0.0023193359, 0.001739502, 0.002166748, 0.0021362305, + 0.0018615723, 0.0020446777, 0.002166748, 0.0019836426, 0.0022277832, + 0.0018310547, 0.0023803711, 0.0022277832, 0.001953125, 0.0022888184, + 0.0018005371, 0.0025024414, 0.0018310547, 0.0019836426, 0.001953125, + 0.0020446777, 0.0017700195, 0.0021057129, 0.0020751953, + 0.0019836426, 0.0014343262, 0.0024414062, 0.0015869141, + 0.0022888184, 0.0016784668, 0.0025024414, 0.0017089844, + 0.0024719238, 0.0020141602, 0.0026855469, 0.0013427734, + 0.0028381348, 0.0015563965, 0.0020446777, 0.0018615723, 0.002532959, + 0.0015258789, 0.0021972656, 0.0016784668, 0.002166748, 0.0016479492, + 0.0021362305, 0.0018920898, 0.0021362305, 0.0017700195, + 0.0020141602, 0.0022277832, 0.001739502, 0.0022583008, 0.001953125, + 0.0021362305, 0.0018920898, 0.0020446777, 0.001953125, 0.0026550293, + 0.0014953613, 0.0023803711, 0.001953125, 0.0021972656, 0.0015869141, + 0.0017700195, 0.0020141602, 0.0022277832, 0.0015258789, + 0.0015869141, -0.0045471191, -0.011230469, -0.009185791, + -0.0038757324, -0.020690918, -0.030731201, -0.0088806152, + 0.0032958984, -0.0068664551, -0.0024719238, 0.024688721, + 0.035400391, 0.014892578, 0.0047607422, 0.011779785, 0.0035095215, + -0.012573242, -0.0059814453, 0.0065612793, 0.0039672852, + 0.0014343262, 0.010406494, 0.027374268, 0.021942139, 0.0065612793, + 0.010681152, 0.024688721, 0.024291992, 0.012451172, 0.023590088, + 0.033203125, 0.024139404, 0.010375977, 0.016662598, 0.026885986, + 0.039215088, 0.038330078, 0.039703369, 0.048309326, 0.046447754, + 0.029937744, 0.031311035, 0.066497803, 0.052856445, -0.0074768066, + -0.016998291, 0.016784668, 0.039428711, 0.021759033, 0.0040893555, + -0.0016174316, 0.012451172, 0.052215576, 0.047485352, 0.017150879, + 0.015075684, 0.013397217, 0.024475098, 0.035247803, 0.039978027, + 0.06137085, 0.080108643, 0.078521729, 0.054779053, 0.0625, + 0.1076355, 0.10934448, 0.079803467, 0.056945801, 0.056182861, + 0.047851562, 0.028503418, 0.022979736, 0.010803223, -0.015686035, + -0.050811768, -0.072509766, -0.057891846, -0.032073975, + -0.051300049, -0.078887939, -0.069366455, -0.038146973, + -0.0099182129, 0.010528564, 0.048492432, 0.082305908, 0.084838867, + 0.059753418, 0.0043029785, -0.087158203, -0.18395996, -0.2911377, + -0.37133789, -0.33422852, -0.28649902, -0.31976318, -0.33630371, + -0.22824097, 0.020385742, 0.24456787, 0.31582642, 0.37380981, + 0.40820312, 0.40539551, 0.41415405, 0.34210205, 0.20877075, + 0.010498047, -0.17623901, -0.22705078, -0.15548706, -0.039855957, + 0.0067443848, -0.0022277832, -0.050048828, -0.10186768, -0.11407471, + -0.1050415, -0.067352295, 0.0018615723, 0.079742432, 0.11517334, + 0.12005615, 0.14709473, 0.19543457, 0.2015686, 0.150177, + 0.052703857, -0.029602051, -0.084838867, -0.14590454, -0.18951416, + -0.18814087, -0.15014648, -0.11505127, -0.094360352, -0.076721191, + -0.037872314, 0.011749268, 0.034851074, 0.060791016, 0.11419678, + 0.14096069, 0.13140869, 0.1277771, 0.12313843, 0.10934448, + 0.055541992, -0.026397705, -0.07144165, -0.050262451, -0.0097961426, + -0.02822876, -0.15008545, -0.28927612, -0.32809448, -0.2772522, + -0.15994263, 0.016448975, 0.13085938, 0.12866211, 0.1072998, + 0.094177246, 0.036346436, -0.026245117, -0.040496826, -0.01348877, + 0.0085144043, 0.0070800781, -0.0086669922, -0.0038452148, + 0.040252686, 0.077026367, 0.071960449, 0.032470703, 0.002166748, + 0.0065612793, 0.0053100586, -0.025115967, -0.058532715, + -0.060699463, -0.015563965, 0.048278809, 0.086273193, 0.078582764, + 0.031524658, -0.026580811, -0.077911377, -0.11288452, -0.13244629, + -0.15325928, -0.14471436, -0.095672607, -0.048858643, -0.012115479, + 0.023132324, 0.051544189, 0.046691895, 0.01373291, -0.0097961426, + -0.016143799, -0.022460938, -0.025726318, 0.0075378418, 0.091522217, + 0.19741821, 0.23269653, 0.16726685, 0.12173462, 0.12973022, + 0.064300537, -0.12158203, -0.29794312, -0.33813477, -0.27990723, + -0.19500732, -0.063903809, 0.10449219, 0.23712158, 0.34381104, + 0.41766357, 0.37658691, 0.22747803, 0.056365967, -0.088317871, + -0.19509888, -0.21295166, -0.15499878, -0.1114502, -0.093597412, + -0.071289062, -0.034606934, 0.009552002, 0.068084717, 0.12075806, + 0.13098145, 0.11383057, 0.08291626, 0.037322998, -0.017211914, + -0.05456543, -0.074829102, -0.087768555, -0.076202393, -0.022735596, + 0.032653809, 0.045623779, 0.045806885, 0.040496826, 0.016845703, + -0.023712158, -0.057769775, -0.07232666, -0.055145264, + -0.00091552734, 0.063201904, 0.11480713, 0.13497925, 0.11572266, + 0.030731201, -0.11346436, -0.23406982, -0.27478027, -0.23690796, + -0.13735962, -0.016479492, 0.076904297, 0.09487915, 0.070220947, + 0.058074951, 0.05355835, 0.017181396, -0.096893311, -0.21951294, + -0.26168823, -0.20983887, -0.093109131, 0.051879883, 0.15631104, + 0.18319702, 0.15551758, 0.078826904, -0.012084961, -0.083007812, + -0.10766602, -0.085479736, -0.059906006, -0.040039062, -0.031646729, + -0.046142578, -0.065551758, -0.03414917, 0.025482178, 0.046325684, + 0.054473877, 0.073303223, 0.073791504, 0.068786621, 0.082366943, + 0.080596924, 0.052215576, 0.015594482, -0.0053405762, 0.0040588379, + 0.032501221, 0.065551758, 0.093322754, 0.1199646, 0.13677979, + 0.14523315, 0.1401062, 0.12902832, 0.11553955, 0.09664917, + 0.091278076, 0.13305664, 0.24594116, 0.38180542, 0.45907593, + 0.45343018, 0.4213562, 0.36801147, 0.31027222, 0.30541992, + 0.33691406, 0.35479736, 0.3321228, 0.27334595, 0.25701904, + 0.23641968, 0.18139648, 0.16793823, 0.17538452, 0.17803955, + 0.19009399, 0.25280762, 0.38833618, 0.54940796, 0.70336914, + 0.74789429, 0.64334106, 0.49359131, 0.30703735, 0.071624756, + -0.075897217, -0.096191406, -0.076568604, 0.023406982, 0.15078735, + 0.21612549, 0.30493164, 0.39697266, 0.41009521, 0.32348633, + 0.24707031, 0.20645142, 0.11102295, 0.0075073242, -0.046325684, + -0.038085938, 0.014251709, 0.096618652, 0.1842041, 0.21417236, + 0.15905762, 0.0016174316, -0.25387573, -0.57302856, -0.85641479, + -0.99038696, -0.99038696, -0.99038696, -0.99038696, -0.99038696, + -0.90664673, -0.64364624, -0.42892456, -0.32131958, -0.23550415, + -0.25338745, -0.32595825, -0.44995117, -0.57858276, -0.68716431, + -0.80804443, -0.90670776, -0.9654541, -0.97409058, -0.95211792, + -0.90264893, -0.85357666, -0.80429077, -0.7482605, -0.69125366, + -0.60876465, -0.46228027, -0.23776245, -0.049041748, 0.019989014, + 0.048950195, 0.033172607, -0.02142334, -0.084259033, -0.15020752, + -0.16220093, -0.14608765, -0.14526367, -0.16497803, -0.1781311, + -0.19717407, -0.24871826, -0.26089478, -0.21688843, -0.19818115, + -0.23718262, -0.2824707, -0.32797241, -0.36758423, -0.3258667, + -0.18960571, -0.082885742, -0.056365967, -0.054534912, -0.10766602, + -0.26501465, -0.44006348, -0.58209229, -0.71032715, -0.77719116, + -0.76467896, -0.68914795, -0.51403809, -0.27841187, -0.092163086, + 0.056030273, 0.16799927, 0.19827271, 0.18478394, 0.17562866, + 0.15100098, 0.066619873, -0.040313721, -0.15875244, -0.27044678, + -0.35754395, -0.39682007, -0.34078979, -0.22293091, -0.13269043, + -0.048034668, 0.0730896, 0.19732666, 0.30789185, 0.39804077, + 0.44244385, 0.41928101, 0.35534668, 0.29177856, 0.22891235, + 0.18084717, 0.15231323, 0.13360596, 0.13049316, 0.13156128, + 0.1293335, 0.11477661, 0.12258911, 0.1824646, 0.26675415, + 0.35171509, 0.43341064, 0.49163818, 0.51086426, 0.50985718, + 0.49337769, 0.45962524, 0.43182373, 0.42025757, 0.4161377, + 0.40631104, 0.40435791, 0.42172241, 0.44003296, 0.45986938, + 0.47451782, 0.47540283, 0.48825073, 0.51907349, 0.5612793, + 0.62319946, 0.7109375, 0.79650879, 0.86904907, 0.92111206, + 0.96124268, 0.96994019, 0.92593384, 0.83483887, 0.70803833, + 0.57583618, 0.45834351, 0.3828125, 0.35479736, 0.35110474, + 0.38894653, 0.45022583, 0.49264526, 0.48919678, 0.45336914, + 0.40823364, 0.35009766, 0.28097534, 0.22503662, 0.18313599, + 0.14697266, 0.11010742, 0.07019043, 0.023956299, -0.024658203, + -0.087219238, -0.14846802, -0.19796753, -0.23556519, -0.25576782, + -0.25366211, -0.2333374, -0.19955444, -0.13546753, -0.052581787, + 0.018371582, 0.079620361, 0.14343262, 0.20013428, 0.2388916, + 0.25930786, 0.26889038, 0.26208496, 0.24691772, 0.22842407, + 0.19110107, 0.14624023, 0.093017578, 0.034301758, -0.044189453, + -0.1378479, -0.22967529, -0.29983521, -0.32650757, -0.31271362, + -0.26196289, -0.19345093, -0.11380005, -0.032806396, 0.038330078, + 0.087677002, 0.10690308, 0.092254639, 0.035766602, -0.057952881, + -0.17190552, -0.28945923, -0.40023804, -0.49761963, -0.5635376, + -0.59222412, -0.60348511, -0.61352539, -0.60958862, -0.57702637, + -0.53674316, -0.49453735, -0.45465088, -0.42507935, -0.40863037, + -0.4095459, -0.42730713, -0.45852661, -0.49362183, -0.53048706, + -0.55499268, -0.5526123, -0.52798462, -0.49053955, -0.44320679, + -0.38500977, -0.30548096, -0.2182312, -0.14306641, -0.073547363, + -0.0094299316, 0.045196533, 0.083312988, 0.11129761, 0.14489746, + 0.19921875, 0.24578857, 0.25418091, 0.23397827, 0.20111084, + 0.14822388, 0.078582764, 0.020812988, -0.012390137, -0.02520752, + -0.010559082, 0.026947021, 0.081542969, 0.13687134, 0.18441772, + 0.21426392, 0.22711182, 0.21377563, 0.17559814, 0.12246704, + 0.060882568, -0.0017089844, -0.067504883, -0.12475586, -0.16159058, + -0.16809082, -0.15145874, -0.12081909, -0.077362061, -0.03012085, + 0.011444092, 0.044189453, 0.075256348, 0.1050415, 0.13238525, + 0.15667725, 0.17337036, 0.17050171, 0.14389038, 0.10055542, + 0.057220459, 0.016204834, -0.012664795, -0.025024414, -0.014221191, + 0.012939453, 0.063781738, 0.12664795, 0.19824219, 0.26501465, + 0.32858276, 0.3782959, 0.40698242, 0.42160034, 0.42788696, + 0.43948364, 0.46075439, 0.48413086, 0.49819946, 0.50167847, + 0.49963379, 0.48529053, 0.45324707, 0.40890503, 0.36273193, + 0.31619263, 0.27200317, 0.23919678, 0.21868896, 0.2046814, + 0.18276978, 0.15286255, 0.11727905, 0.071807861, 0.015777588, + -0.054199219, -0.12478638, -0.19580078, -0.25622559, -0.30892944, + -0.34820557, -0.37606812, -0.39535522, -0.40704346, -0.42147827, + -0.43313599, -0.4447937, -0.44998169, -0.44503784, -0.431427, + -0.40750122, -0.37838745, -0.34109497, -0.29644775, -0.24822998, + -0.1991272, -0.15881348, -0.12728882, -0.10827637, -0.09979248, + -0.094055176, -0.091125488, -0.089508057, -0.087646484, -0.0809021, + -0.072387695, -0.055328369, -0.035583496, -0.0079956055, + 0.018188477, 0.04309082, 0.060577393, 0.073272705, 0.080413818, + 0.084503174, 0.083343506, 0.07522583, 0.071136475, 0.076141357, + 0.088348389, 0.10449219, 0.12374878, 0.14376831, 0.1534729, + 0.14807129, 0.1255188, 0.092559814, 0.047485352, -0.0028076172, + -0.062286377, -0.12301636, -0.17855835, -0.22631836, -0.26260376, + -0.28588867, -0.29559326, -0.29629517, -0.287323, -0.27877808, + -0.26751709, -0.25668335, -0.24749756, -0.24139404, -0.24041748, + -0.23944092, -0.23544312, -0.22592163, -0.20898438, -0.184021, + -0.15014648, -0.11633301, -0.082702637, -0.0496521, -0.017944336, + 0.017486572, 0.052581787, 0.092041016, 0.13427734, 0.18481445, + 0.24057007, 0.29467773, 0.33944702, 0.37042236, 0.38433838, + 0.38241577, 0.36376953, 0.33966064, 0.31497192, 0.29443359, + 0.27792358, 0.2600708, 0.24700928, 0.23727417, 0.23452759, + 0.23358154, 0.23257446, 0.23406982, 0.23239136, 0.23312378, + 0.22958374, 0.22579956, 0.21710205, 0.20043945, 0.17419434, + 0.13870239, 0.096466064, 0.051971436, 0.010437012, -0.024963379, + -0.052490234, -0.066467285, -0.068969727, -0.058563232, + -0.044616699, -0.030029297, -0.017486572, -0.0077209473, + -0.0032043457, -0.0048217773, -0.012481689, -0.027801514, + -0.042724609, -0.060211182, -0.072937012, -0.081756592, + -0.082977295, -0.07800293, -0.064605713, -0.043792725, -0.013031006, + 0.028625488, 0.077667236, 0.13046265, 0.18130493, 0.22851562, + 0.26617432, 0.29119873, 0.3039856, 0.30383301, 0.2925415, + 0.27261353, 0.24078369, 0.20632935, 0.16989136, 0.13552856, + 0.1038208, 0.074462891, 0.045898438, 0.013061523, -0.021087646, + -0.06072998, -0.099700928, -0.14016724, -0.17874146, -0.21130371, + -0.23596191, -0.25204468, -0.26132202, -0.26803589, -0.27981567, + -0.29934692, -0.32730103, -0.36425781, -0.40698242, -0.45092773, + -0.48971558, -0.51776123, -0.53198242, -0.5333252, -0.52218628, + -0.50076294, -0.47000122, -0.43017578, -0.38583374, -0.33612061, + -0.28347778, -0.23306274, -0.18682861, -0.14859009, -0.11853027, + -0.099853516, -0.09072876, -0.088562012, -0.091369629, -0.098022461, + -0.10787964, -0.11395264, -0.11013794, -0.093841553, -0.069274902, + -0.035369873, 0.0026245117, 0.046783447, 0.090698242, 0.1315918, + 0.16296387, 0.18664551, 0.2038269, 0.2154541, 0.22036743, + 0.21444702, 0.20489502, 0.18753052, 0.16650391, 0.13882446, + 0.10861206, 0.078735352, 0.049346924, 0.024078369, 0.0013427734, + -0.017974854, -0.032165527, -0.043243408, -0.050262451, -0.05670166, + -0.061157227, -0.068695068, -0.078918457, -0.085601807, + -0.090698242, -0.093658447, -0.095581055, -0.092529297, -0.08404541, + -0.068939209, -0.053649902, -0.037017822, -0.016448975, + 0.0096740723, 0.041687012, 0.074798584, 0.10549927, 0.13494873, + 0.16445923, 0.1937561, 0.2208252, 0.24539185, 0.26721191, + 0.28359985, 0.29733276, 0.30651855, 0.31622314, 0.32266235, + 0.31842041, 0.31008911, 0.29681396, 0.2819519, 0.26678467, + 0.25457764, 0.24642944, 0.24273682, 0.23709106, 0.22891235, + 0.2197876, 0.21051025, 0.20257568, 0.19024658, 0.17764282, + 0.1607666, 0.14309692, 0.12210083, 0.096893311, 0.073150635, + 0.049530029, 0.028045654, 0.0048522949, -0.017669678, -0.036224365, + -0.050506592, -0.059112549, -0.066345215, -0.068939209, + -0.070495605, -0.073059082, -0.073028564, -0.076812744, + -0.080963135, -0.092010498, -0.10275269, -0.11016846, -0.11907959, + -0.12677002, -0.13555908, -0.13842773, -0.13674927, -0.13088989, + -0.11846924, -0.099334717, -0.072784424, -0.042541504, + -0.0082702637, 0.031524658, 0.072387695, 0.10968018, 0.13861084, + 0.15847778, 0.16812134, 0.16650391, 0.15774536, 0.14169312, + 0.12005615, 0.092895508, 0.061737061, 0.02923584, -0.0022277832, + -0.032836914, -0.05670166, -0.075439453, -0.093322754, -0.1121521, + -0.13204956, -0.15255737, -0.17541504, -0.19900513, -0.21817017, + -0.23519897, -0.25091553, -0.27148438, -0.29296875, -0.31069946, + -0.3243103, -0.33599854, -0.34689331, -0.35461426, -0.3598938, + -0.36212158, -0.36105347, -0.35699463, -0.34725952, -0.33319092, + -0.31484985, -0.29327393, -0.26959229, -0.24423218, -0.21859741, + -0.18777466, -0.15194702, -0.11468506, -0.079498291, -0.0496521, + -0.023529053, 0.001159668, 0.025848389, 0.044494629, 0.054168701, + 0.058135986, 0.059844971, 0.066894531, 0.075195312, 0.087585449, + 0.10009766, 0.11755371, 0.13864136, 0.16278076, 0.18545532, + 0.20370483, 0.22076416, 0.23773193, 0.25531006, 0.26928711, + 0.27508545, 0.27371216, 0.26660156, 0.25100708, 0.2260437, + 0.1942749, 0.16079712, 0.12878418, 0.10110474, 0.07244873, + 0.046051025, 0.024993896, 0.010284424, -0.0010070801, -0.0082397461, + -0.011383057, -0.0072937012, -0.0034179688, 0.0040893555, + 0.013519287, 0.022583008, 0.031219482, 0.032714844, 0.034851074, + 0.033508301, 0.033935547, 0.030975342, 0.031982422, 0.039794922, + 0.05569458, 0.077392578, 0.10113525, 0.1277771, 0.15429688, + 0.18026733, 0.20275879, 0.21591187, 0.22341919, 0.224823, + 0.22775269, 0.22766113, 0.22491455, 0.2170105, 0.20431519, + 0.19171143, 0.17459106, 0.15859985, 0.14315796, 0.12554932, + 0.10998535, 0.09463501, 0.083435059, 0.070465088, 0.057983398, + 0.048278809, 0.041351318, 0.036224365, 0.030639648, 0.021850586, + 0.012176514, -0.0034484863, -0.022735596, -0.045166016, + -0.068908691, -0.094421387, -0.11810303, -0.13882446, -0.15774536, + -0.17269897, -0.18533325, -0.19125366, -0.19116211, -0.18655396, + -0.18423462, -0.18267822, -0.17877197, -0.17248535, -0.16625977, + -0.16271973, -0.16104126, -0.16125488, -0.16192627, -0.16333008, + -0.16461182, -0.16616821, -0.16235352, -0.15325928, -0.13644409, + -0.11523438, -0.090240479, -0.058013916, -0.024383545, 0.0089111328, + 0.039093018, 0.067749023, 0.096221924, 0.11837769, 0.13458252, + 0.13946533, 0.13269043, 0.12045288, 0.099212646, 0.073608398, + 0.042266846, 0.011627197, -0.019042969, -0.04876709, -0.07409668, + -0.096038818, -0.11062622, -0.1239624, -0.1340332, -0.14199829, + -0.14428711, -0.14074707, -0.13641357, -0.13253784, -0.13400269, + -0.13830566, -0.1505127, -0.16162109, -0.17391968, -0.1847229, + -0.19418335, -0.2019043, -0.20770264, -0.21234131, -0.21121216, + -0.20510864, -0.19058228, -0.16986084, -0.14498901, -0.11407471, + -0.082061768, -0.048492432, -0.015533447, 0.018341064, 0.052185059, + 0.078826904, 0.10336304, 0.12106323, 0.1315918, 0.13513184, + 0.13653564, 0.13986206, 0.14501953, 0.14926147, 0.15634155, + 0.16189575, 0.16915894, 0.17584229, 0.18264771, 0.19329834, + 0.20681763, 0.22433472, 0.24029541, 0.25708008, 0.27435303, + 0.28552246, 0.28768921, 0.2796936, 0.26013184, 0.23287964, + 0.20193481, 0.17483521, 0.14996338, 0.12689209, 0.10336304, + 0.081939697, 0.063842773, 0.047302246, 0.031677246, 0.01953125, + 0.010559082, 0.0013427734, -0.0082397461, -0.016357422, + -0.019348145, -0.023223877, -0.023406982, -0.023895264, + -0.022155762, -0.020477295, -0.017089844, -0.013031006, + -0.0098571777, -0.0046691895, 6.1035156e-05, 0.0072937012, + 0.0128479, 0.025878906, 0.040618896, 0.055908203, 0.066558838, + 0.072021484, 0.076965332, 0.080383301, 0.081237793, 0.077575684, + 0.072113037, 0.067443848, 0.064880371, 0.063720703, 0.058959961, + 0.054534912, 0.047576904, 0.039276123, 0.025390625, 0.010986328, + -0.0061645508, -0.018859863, -0.028900146, -0.036376953, + -0.041473389, -0.047241211, -0.054260254, -0.063049316, -0.0730896, + -0.081085205, -0.090118408, -0.10089111, -0.11264038, -0.12442017, + -0.1350708, -0.14535522, -0.15383911, -0.16052246, -0.16329956, + -0.1668396, -0.17166138, -0.17819214, -0.18157959, -0.18133545, + -0.17935181, -0.1758728, -0.17181396, -0.16687012, -0.16067505, + -0.15344238, -0.14562988, -0.13626099, -0.12780762, -0.11743164, + -0.10961914, -0.098510742, -0.085601807, -0.071716309, -0.05758667, + -0.041412354, -0.024078369, -0.0043640137, 0.015960693, 0.037567139, + 0.060455322, 0.082855225, 0.10211182, 0.11419678, 0.12088013, + 0.12197876, 0.12145996, 0.11743164, 0.11026001, 0.096984863, + 0.077789307, 0.054504395, 0.031890869, 0.010986328, -0.0061340332, + -0.020507812, -0.032836914, -0.042541504, -0.050476074, + -0.056762695, -0.06137085, -0.065032959, -0.064727783, -0.064147949, + -0.060119629, -0.05770874, -0.056549072, -0.057098389, -0.059692383, + -0.063140869, -0.067321777, -0.072021484, -0.075439453, + -0.078033447, -0.077575684, -0.073059082, -0.063995361, + -0.049560547, -0.030212402, -0.008605957, 0.015930176, 0.039794922, + 0.065917969, 0.090820312, 0.11099243, 0.12619019, 0.13739014, + 0.1472168, 0.15374756, 0.15893555, 0.16152954, 0.16671753, + 0.17425537, 0.17889404, 0.18060303, 0.17886353, 0.17861938, + 0.17984009, 0.18179321, 0.18499756, 0.18548584, 0.18609619, + 0.18521118, 0.18234253, 0.17956543, 0.17547607, 0.1690979, + 0.16101074, 0.15505981, 0.14837646, 0.13739014, 0.12255859, + 0.10522461, 0.082397461, 0.05770874, 0.030609131, 0.0046691895, + -0.018676758, -0.037872314, -0.054779053, -0.069458008, + -0.078826904, -0.084136963, -0.085479736, -0.083404541, + -0.076324463, -0.066314697, -0.056060791, -0.049926758, + -0.043182373, -0.040252686, -0.037811279, -0.038543701, + -0.039276123, -0.040771484, -0.041687012, -0.042053223, + -0.043548584, -0.040161133, -0.034637451, -0.024841309, + -0.015197754, -0.0059509277, 0.001159668, 0.0042114258, + 0.0062866211, 0.0049438477, 0.0047302246, 0.0028686523, + -0.00082397461, -0.0034790039, -0.0077514648, -0.01260376, + -0.019500732, -0.02645874, -0.032409668, -0.041351318, -0.049163818, + -0.058532715, -0.068603516, -0.078948975, -0.088897705, + -0.094543457, -0.097167969, -0.095581055, -0.094726562, + -0.095001221, -0.095336914, -0.094726562, -0.096160889, -0.09866333, + -0.10427856, -0.1104126, -0.11727905, -0.12301636, -0.13006592, + -0.13479614, -0.13574219, -0.13119507, -0.12451172, -0.11630249, + -0.10476685, -0.094543457, -0.08416748, -0.074066162, -0.061767578, + -0.050415039, -0.040557861, -0.031402588, -0.023834229, -0.01361084, + -0.0036010742, 0.0055236816, 0.013122559, 0.02142334, 0.029418945, + 0.041717529, 0.056518555, 0.075714111, 0.095062256, 0.11523438, + 0.13363647, 0.146698, 0.15646362, 0.16061401, 0.16043091, + 0.15634155, 0.14889526, 0.13769531, 0.12127686, 0.10272217, + 0.085418701, 0.070739746, 0.055541992, 0.040405273, 0.024200439, + 0.010803223, -0.00048828125, -0.0087890625, -0.012481689, + -0.014404297, -0.014068604, -0.011230469, -0.0081787109, + -0.0049438477, -0.0041809082, -0.0060119629, -0.012237549, + -0.020355225, -0.027832031, -0.034759521, -0.042053223, -0.04675293, + -0.045349121, -0.042297363, -0.03604126, -0.027862549, -0.015777588, + -0.0011291504, 0.013397217, 0.030212402, 0.04598999, 0.061401367, + 0.074615479, 0.086242676, 0.094238281, 0.09979248, 0.10458374, + 0.10662842, 0.10894775, 0.11077881, 0.11056519, 0.11022949, + 0.10903931, 0.1072998, 0.10266113, 0.098999023, 0.095977783, + 0.095916748, 0.095611572, 0.094909668, 0.093963623, 0.092895508, + 0.092559814, 0.090423584, 0.084014893, 0.073852539, 0.059020996, + 0.044830322, 0.02822876, 0.012023926, -0.0049743652, -0.020050049, + -0.036193848, -0.052398682, -0.066253662, -0.078796387, + -0.089019775, -0.098083496, -0.10592651, -0.11224365, -0.11618042, + -0.11715698, -0.11807251, -0.11676025, -0.11459351, -0.11108398, + -0.10748291, -0.10400391, -0.10064697, -0.096923828, -0.092163086, + -0.086639404, -0.08114624, -0.075531006, -0.071838379, -0.06854248, + -0.064971924, -0.061035156, -0.054382324, -0.047393799, + -0.043518066, -0.04095459, -0.041351318, -0.041259766, -0.041931152, + -0.04095459, -0.037841797, -0.034210205, -0.029541016, -0.026550293, + -0.02444458, -0.024139404, -0.026397705, -0.03036499, -0.035675049, + -0.041046143, -0.04675293, -0.054168701, -0.061218262, -0.065704346, + -0.066650391, -0.066650391, -0.063537598, -0.06048584, -0.055664062, + -0.053375244, -0.052642822, -0.052764893, -0.054718018, + -0.053955078, -0.05355835, -0.052764893, -0.053405762, -0.056213379, + -0.06036377, -0.062744141, -0.063110352, -0.06072998, -0.054504395, + -0.044647217, -0.034057617, -0.022949219, -0.011810303, 0.002532959, + 0.015594482, 0.024383545, 0.032165527, 0.03894043, 0.047302246, + 0.055236816, 0.064605713, 0.072387695, 0.081115723, 0.088348389, + 0.094940186, 0.10223389, 0.11135864, 0.12249756, 0.13082886, + 0.13803101, 0.14520264, 0.14993286, 0.15118408, 0.14987183, + 0.14846802, 0.14581299, 0.13851929, 0.12878418, 0.11639404, + 0.10375977, 0.09173584, 0.078796387, 0.063842773, 0.048980713, + 0.034576416, 0.022338867, 0.011932373, 0.0039672852, 0.0011291504, + -0.00094604492, -0.0015563965, -0.0034484863, -0.0050354004, + -0.0083312988, -0.012390137, -0.01651001, -0.019683838, + -0.022003174, -0.024414062, -0.027557373, -0.03137207, -0.03314209, + -0.030700684, -0.028045654, -0.025482178, -0.022247314, + -0.018737793, -0.013275146, -0.0074157715, 0.0010070801, + 0.0093078613, 0.01763916, 0.027404785, 0.035583496, 0.043151855, + 0.047485352, 0.051239014, 0.053649902, 0.054626465, 0.054382324, + 0.053039551, 0.050323486, 0.046691895, 0.044158936, 0.041534424, + 0.039794922, 0.035797119, 0.031494141, 0.026580811, 0.021575928, + 0.017944336, 0.014038086, 0.0093688965, 0.0051574707, + -0.00067138672, -0.0070495605, -0.014984131, -0.021728516, + -0.030151367, -0.037719727, -0.049804688, -0.062255859, + -0.073791504, -0.08416748, -0.089599609, -0.096496582, -0.10055542, + -0.10531616, -0.10870361, -0.11083984, -0.11102295, -0.10925293, + -0.10610962, -0.10125732, -0.094848633, -0.086700439, -0.07925415, + -0.074005127, -0.070770264, -0.068511963, -0.065643311, + -0.060577393, -0.054595947, -0.049407959, -0.043914795, + -0.039794922, -0.033813477, -0.027923584, -0.022674561, + -0.017791748, -0.01260376, -0.008972168, -0.0076293945, + -0.0053100586, -0.0030517578, -0.0024719238, -0.0032043457, + -0.0035705566, -0.002746582, -0.0013427734, -0.0011901855, + -0.0012817383, -0.0016479492, -0.0030212402, -0.0040588379, + -0.0071411133, -0.0085449219, -0.010375977, -0.01171875, + -0.011230469, -0.012512207, -0.013305664, -0.014190674, + -0.014099121, -0.015625, -0.01763916, -0.020202637, -0.020172119, + -0.017730713, -0.014068604, -0.0097351074, -0.0065917969, + -0.0020751953, 0.0018310547, 0.0045471191, 0.0046691895, + 0.003326416, 0.0018615723, -0.00021362305, 0.0010986328, + 0.0056152344, 0.011962891, 0.019866943, 0.029846191, 0.040130615, + 0.050811768, 0.058746338, 0.068267822, 0.076721191, 0.083862305, + 0.091491699, 0.096008301, 0.10150146, 0.1036377, 0.10562134, + 0.10449219, 0.1026001, 0.10076904, 0.099822998, 0.098297119, + 0.095245361, 0.094207764, 0.091949463, 0.092773438, 0.093048096, + 0.093658447, 0.090881348, 0.084747314, 0.078186035, 0.068328857, + 0.058197021, 0.044403076, 0.031768799, 0.019866943, 0.010345459, + 0.0029602051, -0.0044555664, -0.011932373, -0.018920898, + -0.024993896, -0.029205322, -0.031768799, -0.034790039, + -0.036773682, -0.037841797, -0.04019165, -0.042785645, -0.045928955, + -0.045776367, -0.044006348, -0.040649414, -0.037902832, + -0.036834717, -0.035308838, -0.033569336, -0.030090332, + -0.025543213, -0.020263672, -0.014678955, -0.0094604492, + -0.0042114258, -0.00067138672, 0.0016784668, 0.0021362305, + 0.0038452148, 0.007598877, 0.0099487305, 0.013793945, 0.015838623, + 0.01852417, 0.019958496, 0.021087646, 0.021270752, 0.021911621, + 0.021789551, 0.020965576, 0.01776123, 0.013275146, 0.0070495605, + 0.00076293945, -0.004119873, -0.007232666, -0.009552002, + -0.012695312, -0.016052246, -0.019226074, -0.02331543, -0.028625488, + -0.032348633, -0.035736084, -0.038909912, -0.044372559, + -0.050354004, -0.056610107, -0.061309814, -0.065704346, + -0.065948486, -0.067230225, -0.06652832, -0.0652771, -0.061981201, + -0.057128906, -0.052185059, -0.046112061, -0.041595459, + -0.035461426, -0.031097412, -0.025970459, -0.022979736, + -0.019836426, -0.015899658, -0.01260376, -0.0087585449, + -0.0061950684, -0.0028991699, -0.0014953613, 0.0018615723, + 0.0055847168, 0.008605957, 0.011871338, 0.015594482, 0.020629883, + 0.025970459, 0.030212402, 0.034973145, 0.037322998, 0.037597656, + 0.036254883, 0.034698486, 0.032440186, 0.029937744, 0.026062012, + 0.021972656, 0.018432617, 0.013397217, 0.010528564, 0.0077514648, + 0.0076904297, 0.0078430176, 0.0095825195, 0.012512207, 0.01550293, + 0.017486572, 0.017150879, 0.015563965, 0.013031006, 0.010070801, + 0.0068969727, 0.0039367676, 0.0021057129, 0.0018920898, + 0.0032653809, 0.0064697266, 0.0092163086, 0.010437012, 0.0097961426, + 0.0078125, 0.0053405762, 0.0048828125, 0.0055236816, 0.0086669922, + 0.013061523, 0.019897461, 0.027252197, 0.035675049, 0.043518066, + 0.050018311, 0.056427002, 0.06072998, 0.062011719, 0.061859131, + 0.060546875, 0.060577393, 0.059173584, 0.056945801, 0.054138184, + 0.053283691, 0.053131104, 0.052764893, 0.050811768, 0.04864502, + 0.046295166, 0.044921875, 0.043182373, 0.040161133, 0.036529541, + 0.032287598, 0.028411865, 0.022247314, 0.015960693, 0.0095825195, + 0.0032958984, -0.0028991699, -0.01159668, -0.018249512, -0.02532959, + -0.03137207, -0.035919189, -0.040710449, -0.044006348, -0.049163818, + -0.052246094, -0.055969238, -0.056396484, -0.055511475, + -0.052825928, -0.049194336, -0.046844482, -0.04598999, -0.045227051, + -0.044586182, -0.042388916, -0.039611816, -0.037719727, + -0.035766602, -0.032806396, -0.030700684, -0.027313232, -0.02444458, + -0.020019531, -0.015533447, -0.012145996, -0.0091552734, + -0.0064697266, -0.0040893555, -0.00048828125, 0.001953125, + 0.0048522949, 0.0061950684, 0.007019043, 0.0083007812, 0.0091247559, + 0.0094909668, 0.0098876953, 0.010894775, 0.011566162, 0.0105896, + 0.0083007812, 0.0047607422, 0.0010986328, -0.0036621094, + -0.0073242188, -0.010223389, -0.011505127, -0.011993408, + -0.012786865, -0.015350342, -0.017669678, -0.019500732, + -0.022613525, -0.025115967, -0.027862549, -0.027832031, + -0.028320312, -0.029602051, -0.030761719, -0.033111572, + -0.033630371, -0.032592773, -0.030914307, -0.027008057, -0.02355957, + -0.020507812, -0.017211914, -0.014709473, -0.0097351074, + -0.0033874512, 0.0032958984, 0.010284424, 0.014007568, 0.017272949, + 0.017791748, 0.018371582, 0.018096924, 0.017272949, 0.016326904, + 0.016021729, 0.017028809, 0.020507812, 0.025238037, 0.031280518, + 0.036834717, 0.040283203, 0.04284668, 0.045410156, 0.048339844, + 0.050109863, 0.04800415, 0.044311523, 0.040557861, 0.036010742, + 0.031982422, 0.026977539, 0.022766113, 0.018829346, 0.015411377, + 0.012359619, 0.010925293, 0.0095214844, 0.010498047, 0.012054443, + 0.014221191, 0.016326904, 0.017150879, 0.016784668, 0.01473999, + 0.012481689, 0.0090026855, 0.0057678223, 0.002746582, + -0.00024414062, -6.1035156e-05, -0.00042724609, -0.00039672852, + -0.0024414062, -0.0037841797, -0.0043334961, -0.0034790039, + -0.0015563965, 0.0011901855, 0.0047302246, 0.0079345703, + 0.011108398, 0.013885498, 0.017150879, 0.020874023, 0.024139404, + 0.028411865, 0.031860352, 0.036010742, 0.038330078, 0.038574219, + 0.03805542, 0.035980225, 0.033905029, 0.03112793, 0.027496338, + 0.024414062, 0.020690918, 0.017791748, 0.013549805, 0.0098876953, + 0.0071105957, 0.0046081543, 0.0029296875, 0.0013122559, + 0.0002746582, -0.0014343262, -0.0029907227, -0.0065307617, + -0.009979248, -0.014831543, -0.02041626, -0.027008057, -0.036132812, + -0.043670654, -0.049591064, -0.053894043, -0.057312012, + -0.059570312, -0.059051514, -0.057617188, -0.05581665, -0.054962158, + -0.053283691, -0.051300049, -0.049591064, -0.049407959, + -0.049560547, -0.0496521, -0.04788208, -0.044830322, -0.040771484, + -0.03616333, -0.031066895, -0.024902344, -0.019226074, -0.014312744, + -0.010925293, -0.0085754395, -0.0065612793, -0.0048217773, + -0.0020141602, -0.00039672852, 0.0014648438, 0.003326416, + 0.0067749023, 0.009979248, 0.014068604, 0.016052246, 0.017486572, + 0.017700195, 0.018127441, 0.018066406, 0.017608643, 0.016845703, + 0.015838623, 0.014404297, 0.013214111, 0.011901855, 0.010650635, + 0.0085754395, 0.0069885254, 0.0051269531, 0.0030212402, + 0.00015258789, -0.0031738281, -0.0065307617, -0.0090637207, + -0.010498047, -0.011505127, -0.012023926, -0.01260376, -0.012115479, + -0.010406494, -0.0086975098, -0.0063781738, -0.005859375, + -0.0042114258, -0.0034179688, -0.0012207031, 0.00057983398, + 0.0030822754, 0.0048828125, 0.0070800781, 0.010040283, 0.013793945, + 0.01763916, 0.020935059, 0.024047852, 0.026245117, 0.02822876, + 0.028381348, 0.028015137, 0.027618408, 0.027496338, 0.0284729, + 0.029174805, 0.029815674, 0.030670166, 0.033081055, 0.035797119, + 0.037445068, 0.039154053, 0.039825439, 0.040283203, 0.03918457, + 0.036987305, 0.033874512, 0.02935791, 0.025177002, 0.020507812, + 0.016479492, 0.013031006, 0.010070801, 0.0077209473, 0.0056152344, + 0.003326416, 0.00048828125, -0.0017089844, -0.0030517578, + -0.0029602051, -0.003112793, -0.0025024414, -0.0024414062, + -0.0021362305, -0.0023498535, -0.0029907227, -0.0043029785, + -0.0059814453, -0.0078735352, -0.01083374, -0.013397217, + -0.016448975, -0.018890381, -0.020568848, -0.020080566, -0.01852417, + -0.016845703, -0.014007568, -0.0105896, -0.0066833496, + -0.0030517578, 0.0014953613, 0.0065002441, 0.0098571777, + 0.013122559, 0.014404297, 0.015472412, 0.016571045, 0.018035889, + 0.018585205, 0.018371582, 0.016540527, 0.014099121, 0.011413574, + 0.009185791, 0.0065917969, 0.0032653809, 0.00054931641, + -0.0018005371, -0.0024719238, -0.0046081543, -0.0062255859, + -0.0078430176, -0.009979248, -0.011627197, -0.015289307, + -0.017456055, -0.019897461, -0.022918701, -0.025543213, + -0.028747559, -0.031524658, -0.036865234, -0.041534424, + -0.045410156, -0.046875, -0.048126221, -0.049499512, -0.049163818, + -0.048828125, -0.047790527, -0.04574585, -0.043579102, -0.040924072, + -0.040222168, -0.038360596, -0.036895752, -0.034210205, + -0.031616211, -0.028289795, -0.024200439, -0.020294189, + -0.015838623, -0.011993408, -0.007598877, -0.0036010742, + 0.00054931641, 0.004486084, 0.0074157715, 0.0098571777, 0.012054443, + 0.01473999, 0.017700195, 0.019744873, 0.022399902, 0.02432251, + 0.025817871, 0.027130127, 0.027709961, 0.0284729, 0.027893066, + 0.027496338, 0.026580811, 0.025634766, 0.023681641, 0.021972656, + 0.019775391, 0.017730713, 0.016052246, 0.014556885, 0.014434814, + 0.013763428, 0.012268066, 0.0105896, 0.0091247559, 0.0077819824, + 0.0054626465, 0.0030822754, 0.00067138672, -0.0012207031, + -0.0028686523, -0.0048217773, -0.0047912598, -0.004486084, + -0.002746582, -0.00067138672, 0.0012512207, 0.0037231445, + 0.0054321289, 0.0074157715, 0.010192871, 0.013214111, 0.016448975, + 0.018005371, 0.019134521, 0.018463135, 0.017944336, 0.016723633, + 0.016448975, 0.01651001, 0.01651001, 0.017669678, 0.019622803, + 0.022064209, 0.024017334, 0.025909424, 0.026977539, 0.027008057, + 0.026733398, 0.025634766, 0.024261475, 0.022247314, 0.020202637, + 0.017730713, 0.01663208, 0.015319824, 0.014404297, 0.013092041, + 0.0098266602, 0.0065307617, 0.0032653809, 0.00061035156, + -0.0028076172, -0.0061340332, -0.0094909668, -0.012115479, + -0.013244629, -0.014251709, -0.015075684, -0.015808105, + -0.015991211, -0.016418457, -0.016601562, -0.01663208, -0.01675415, + -0.017333984, -0.018615723, -0.019775391, -0.02053833, -0.020721436, + -0.021820068, -0.022918701, -0.023651123, -0.023895264, + -0.023590088, -0.02331543, -0.022338867, -0.020141602, -0.017669678, + -0.014068604, -0.010528564, -0.0055236816, 0, 0.0051574707, + 0.008972168, 0.011291504, 0.012207031, 0.012420654, 0.01159668, + 0.0105896, 0.009185791, 0.0078735352, 0.0067749023, 0.0052490234, + 0.0040588379, 0.0025024414, 0.0013427734, 0.0014038086, + 0.0009765625, 0.00076293945, -0.00079345703, -0.0029907227, + -0.0054626465, -0.0073547363, -0.0095825195, -0.011383057, + -0.012237549, -0.013000488, -0.014373779, -0.016448975, + -0.018341064, -0.020446777, -0.02331543, -0.025909424, -0.02835083, + -0.028869629, -0.028839111, -0.028686523, -0.028106689, + -0.027740479, -0.027435303, -0.027313232, -0.026672363, + -0.025604248, -0.02355957, -0.020263672, -0.016204834, -0.011383057, + -0.0068359375, -0.0024719238, 0.00021362305, 0.0022583008, + 0.0036621094, 0.0053710938, 0.0079040527, 0.010162354, 0.013214111, + 0.016052246, 0.019042969, 0.022064209, 0.024871826, 0.027618408, + 0.029205322, 0.030761719, 0.031921387, 0.032012939, 0.032562256, + 0.032714844, 0.032958984, 0.032318115, 0.031860352, 0.030822754, + 0.03024292, 0.029510498, 0.028167725, 0.027099609, 0.024810791, + 0.022674561, 0.019958496, 0.018218994, 0.016143799, 0.014373779, + 0.012145996, 0.010101318, 0.0079345703, 0.0063476562, 0.0045471191, + 0.003112793, 0.00085449219, -0.00088500977, -0.002532959, + -0.0035095215, -0.0039672852, -0.0041503906, -0.0031433105, + -0.0017700195, -3.0517578e-05, 0.0010681152, 0.0033874512, + 0.0053405762, 0.0074768066, 0.0082397461, 0.0075683594, 0.007019043, + 0.005279541, 0.004486084, 0.0035400391, 0.0035400391, 0.0047607422, + 0.0061645508, 0.0079345703, 0.0090332031, 0.010314941, 0.010681152, + 0.010467529, 0.010467529, 0.009979248, 0.009765625, 0.0090637207, + 0.0083007812, 0.0075683594, 0.0065917969, 0.0066223145, + 0.0054626465, 0.0040893555, 0.0021362305, -3.0517578e-05, + -0.0024719238, -0.0052490234, -0.008026123, -0.010375977, + -0.012573242, -0.01461792, -0.01651001, -0.017822266, -0.018981934, + -0.019622803, -0.019592285, -0.020172119, -0.020751953, + -0.021728516, -0.022186279, -0.02230835, -0.02230835, -0.022155762, + -0.022583008, -0.022338867, -0.023193359, -0.023284912, + -0.023406982, -0.022766113, -0.022216797, -0.022094727, + -0.021484375, -0.021026611, -0.019836426, -0.018005371, + -0.015533447, -0.012512207, -0.0092773438, -0.0061340332, + -0.0029907227, 0.00076293945, 0.00390625, 0.0065002441, + 0.0084228516, 0.010070801, 0.011566162, 0.012054443, 0.012573242, + 0.011779785, 0.011077881, 0.010131836, 0.0088500977, 0.0075073242, + 0.0054321289, 0.0044555664, 0.003692627, 0.0032348633, 0.0028991699, + 0.0022583008, 0.0026245117, 0.0021972656, 0.001953125, + 0.00079345703, -0.001159668, -0.0028381348, -0.0046386719, + -0.0059814453, -0.0075378418, -0.0087890625, -0.010192871, + -0.01083374, -0.011993408, -0.012695312, -0.012756348, -0.012908936, + -0.012695312, -0.013061523, -0.012756348, -0.012145996, + -0.011352539, -0.010253906, -0.0094909668, -0.0081787109, + -0.0067138672, -0.0047912598, -0.0016784668, 0.00085449219, + 0.0041809082, 0.0070495605, 0.0098571777, 0.013061523, 0.016052246, + 0.019012451, 0.020965576, 0.022613525, 0.023590088, 0.024169922, + 0.02432251, 0.024078369, 0.024261475, 0.023681641, 0.024291992, + 0.024475098, 0.025390625, 0.026306152, 0.026641846, 0.027008057, + 0.026672363, 0.026641846, 0.026153564, 0.025482178, 0.024108887, + 0.022155762, 0.020050049, 0.017578125, 0.01461792, 0.011932373, + 0.0090332031, 0.0069580078, 0.0048828125, 0.0032653809, 0.001953125, + 0.0007019043, -0.00036621094, -0.0019226074, -0.0037536621, + -0.0056152344, -0.0076904297, -0.0087280273, -0.0090942383, + -0.0088195801, -0.0081481934, -0.0072937012, -0.006439209, + -0.005279541, -0.0043640137, -0.0034179688, -0.003112793, + -0.0025024414, -0.0022888184, -0.0019226074, -0.0015869141, + -0.0015869141, -0.0015258789, -0.0016784668, -0.0017700195, + -0.0016784668, -0.0013427734, -0.0011291504, -0.00061035156, 0, + 0.00079345703, 0.0012207031, 0.0015869141, 0.0016479492, + 0.0015258789, 0.0012817383, 0.00094604492, 0.00045776367, + -0.0002746582, -0.00088500977, -0.0016479492, -0.0024108887, + -0.0036621094, -0.0050354004, -0.0063476562, -0.0079956055, + -0.0096435547, -0.011535645, -0.013458252, -0.014953613, + -0.016296387, -0.017364502, -0.01776123, -0.018280029, -0.018371582, + -0.018035889, -0.017456055, -0.016479492, -0.015838623, + -0.015167236, -0.015228271, -0.015380859, -0.015625, -0.015716553, + -0.015411377, -0.015197754, -0.015106201, -0.01473999, -0.014221191, + -0.013092041, -0.012054443, -0.010742188, -0.008605957, + -0.006439209, -0.0038757324, -0.0016479492, 0.00079345703, + 0.0026550293, 0.0045471191, 0.0065612793, 0.009185791, 0.011566162, + 0.013427734, 0.014404297, 0.015075684, 0.015411377, 0.015319824, + 0.014801025, 0.013977051, 0.013305664, 0.012634277, 0.011932373, + 0.010864258, 0.0099182129, 0.0098571777, 0.0093994141, 0.0091247559, + 0.0080566406, 0.0068359375, 0.0056762695, 0.0043640137, + 0.0037841797, 0.0027770996, 0.0023803711, 0.0017700195, + 0.0010375977, 0, -0.0011901855, -0.0020446777, -0.0028991699, + -0.0037841797, -0.0050964355, -0.0057983398, -0.0063476562, + -0.0065917969, -0.0063781738, -0.0061950684, -0.0056152344, + -0.0050354004, -0.0045471191, -0.0035705566, -0.0025939941, + -0.00091552734, 0.00082397461, 0.0028076172, 0.0045471191, + 0.0061950684, 0.0078430176, 0.0096435547, 0.010742188, 0.011474609, + 0.012176514, 0.01260376, 0.013153076, 0.013458252, 0.014129639, + 0.014801025, 0.015228271, 0.015991211, 0.016204834, 0.01663208, + 0.016601562, 0.016357422, 0.015808105, 0.014770508, 0.014007568, + 0.012939453, 0.012268066, 0.011444092, 0.01071167, 0.010070801, + 0.0086975098, 0.0075683594, 0.0058288574, 0.0040588379, + 0.0018615723, 6.1035156e-05, -0.0015258789, -0.0029602051, + -0.0040283203, -0.0055236816, -0.0065307617, -0.0078735352, + -0.0090942383, -0.010131836, -0.010925293, -0.011260986, + -0.011322021, -0.011199951, -0.010955811, -0.010925293, -0.0105896, + -0.010375977, -0.0097351074, -0.0092163086, -0.0085754395, + -0.0077819824, -0.007232666, -0.0067443848, -0.0063171387, + -0.0060119629, -0.0053405762, -0.0050048828, -0.0045166016, + -0.0040588379, -0.0035400391, -0.0030517578, -0.0029907227, + -0.0027160645, -0.0028076172, -0.0025024414, -0.0021972656, + -0.001953125, -0.0013122559, -0.00091552734, -0.00033569336, + -0.00012207031, -0.00024414062, -0.00054931641, -0.0010375977, + -0.0018615723, -0.0028686523, -0.0036010742, -0.0042724609, + -0.0046691895, -0.0052490234, -0.0056152344, -0.0061035156, + -0.0066833496, -0.0074768066, -0.0083007812, -0.0089111328, + -0.0093688965, -0.0096435547, -0.0096740723, -0.0093994141, + -0.0086669922, -0.0079040527, -0.0073242188, -0.007019043, + -0.0067749023, -0.0067138672, -0.0064697266, -0.0060424805, + -0.0054931641, -0.0048828125, -0.0044250488, -0.0039367676, + -0.0031738281, -0.0024414062, -0.0014953613, -0.00039672852, + 0.0007019043, 0.001739502, 0.0028991699, 0.0042724609, 0.005645752, + 0.0072021484, 0.0087585449, 0.010192871, 0.011627197, 0.012542725, + 0.013244629, 0.01361084, 0.013671875, 0.013580322, 0.013122559, + 0.012512207, 0.012145996, 0.011993408, 0.011932373, 0.011779785, + 0.011352539, 0.010742188, 0.0099487305, 0.0090942383, 0.0079956055, + 0.0068054199, 0.0057373047, 0.0047912598, 0.004119873, 0.003326416, + 0.0027770996, 0.0021057129, 0.0015869141, 0.0010375977, + 0.00024414062, -0.00030517578, -0.00085449219, -0.0012512207, + -0.0015869141, -0.002166748, -0.0025939941, -0.0032043457, + -0.0038757324, -0.0043640137, -0.0044250488, -0.004486084, + -0.004119873, -0.0036621094, -0.0028381348, -0.0020751953, + -0.0012817383, -0.00064086914, -0.00012207031, 0.00051879883, + 0.0012512207, 0.002166748, 0.0032653809, 0.0042419434, 0.0049743652, + 0.0056152344, 0.0059509277, 0.0061645508, 0.0062866211, + 0.0061035156, 0.0059204102, 0.005645752, 0.005645752, 0.0054016113, + 0.0051879883, 0.0050354004, 0.0049133301, 0.0049133301, 0.004699707, + 0.0045776367, 0.0043640137, 0.0040283203, 0.0033569336, + 0.0025024414, 0.0013122559, 6.1035156e-05, -0.0009765625, + -0.0021972656, -0.0028076172, -0.0036010742, -0.0038452148, + -0.0042419434, -0.004699707, -0.0052185059, -0.0058898926, + -0.0064697266, -0.0073242188, -0.0082397461, -0.0091552734, + -0.0096740723, -0.0099182129, -0.0096435547, -0.0091552734, + -0.0085449219, -0.0079040527, -0.0074768066, -0.0068969727, + -0.0066223145, -0.0062561035, -0.005859375, -0.0055236816, + -0.0049438477, -0.0045471191, -0.0039672852, -0.0035095215, + -0.0030822754, -0.002746582, -0.0026245117, -0.0025939941, + -0.002532959, -0.0024414062, -0.0020141602, -0.0015869141, + -0.001159668, -0.00067138672, -0.0002746582, 0.00021362305, + 0.00033569336, 0.00045776367, 0.00051879883, 0.00064086914, + 0.00079345703, 0.00088500977, 0.00094604492, 0.00082397461, + 0.00064086914, 0.00030517578, 0.00015258789, -0.00024414062, + -0.00061035156, -0.0011901855, -0.0016174316, -0.0020446777, + -0.0022888184, -0.0023803711, -0.0023803711, -0.0023803711, + -0.0023498535, -0.0022888184, -0.0020446777, -0.0018005371, + -0.0014343262, -0.0011901855, -0.00088500977, -0.00064086914, + -0.00045776367, -0.00039672852, -0.00033569336, -0.00015258789, 0, + 0.00030517578, 0.00054931641, 0.0010375977, 0.001373291, + 0.0016784668, 0.001953125, 0.0023193359, 0.0028381348, 0.0035095215, + 0.0043334961, 0.0049133301, 0.0056152344, 0.006072998, 0.0065917969, + 0.0068664551, 0.0072021484, 0.0073547363, 0.0074768066, + 0.0075378418, 0.0073547363, 0.0070800781, 0.0066223145, + 0.0062866211, 0.005859375, 0.0054321289, 0.0050048828, 0.0045776367, + 0.0043334961, 0.0039978027, 0.003692627, 0.0032958984, 0.0029602051, + 0.0024108887, 0.0019226074, 0.0014343262, 0.00088500977, + 0.00054931641, 0.00012207031, -0.00015258789, -0.00045776367, + -0.00067138672, -0.0009765625, -0.0012512207, -0.0015869141, + -0.001953125, -0.0022888184, -3.0517578e-05, -3.0517578e-05, + -3.0517578e-05, -3.0517578e-05, -3.0517578e-05, -3.0517578e-05, + -3.0517578e-05, -3.0517578e-05, -3.0517578e-05, -6.1035156e-05, + -3.0517578e-05, -6.1035156e-05, -3.0517578e-05, -6.1035156e-05, + -6.1035156e-05, -3.0517578e-05, -3.0517578e-05, -3.0517578e-05, + -3.0517578e-05, -3.0517578e-05, -3.0517578e-05, -3.0517578e-05, + -3.0517578e-05, -3.0517578e-05, -3.0517578e-05, -3.0517578e-05, + -3.0517578e-05, -3.0517578e-05, 0, + }; + +static const unsigned defaultClickEmphasisLength = sizeof(defaultClickEmphasis) / sizeof(*defaultClickEmphasis); + diff --git a/attic/muse_qt4_evolution/muse/device.h b/attic/muse_qt4_evolution/muse/device.h new file mode 100644 index 00000000..6ccf13cf --- /dev/null +++ b/attic/muse_qt4_evolution/muse/device.h @@ -0,0 +1,56 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __DEVICE_H__ +#define __DEVICE_H__ + +//--------------------------------------------------------- +// Device +//--------------------------------------------------------- + +class Device { + + public: + enum DeviceType { MidiDevice, WaveDevice }; + + protected: + QString _name; + DeviceType _type; + int _port; + + public: + Device() {} + virtual ~Device() {} + Device(const QString& name, DeviceType t = MidiDevice) + : _name(name), _type(t) {} + + virtual QString open(int) = 0; + virtual void close() = 0; + + const QString& name() const { return _name; } + void setName(const QString& s) { _name = s; } + const DeviceType type() const { return _type; } + void setDeviceType(DeviceType t) { _type = t; } + int port() const { return _port; } + void setPort(int p) { _port = p; } + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/driver.h b/attic/muse_qt4_evolution/muse/driver.h new file mode 100644 index 00000000..c8bbfc7f --- /dev/null +++ b/attic/muse_qt4_evolution/muse/driver.h @@ -0,0 +1,64 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __DRIVER_H__ +#define __DRIVER_H__ + +#include +#include "port.h" + +struct PortName { + Port port; + QString name; + }; + +class MidiEvent; + +//--------------------------------------------------------- +// Driver +// abstract driver base class; used for midi and +// audio +//--------------------------------------------------------- + +class Driver { + + public: + Driver() {} + virtual ~Driver() {} + virtual bool init() = 0; + + virtual QList outputPorts(bool midi) = 0; + virtual QList inputPorts(bool midi) = 0; + + virtual Port registerOutPort(const QString&, bool midi) = 0; + virtual Port registerInPort(const QString&, bool midi) = 0; + virtual void unregisterPort(Port) = 0; + virtual void setPortName(Port p, const QString&) = 0; + virtual QString portName(Port) = 0; + virtual Port findPort(const QString&) = 0; + + virtual bool connect(Port, Port) = 0; + virtual bool disconnect(Port, Port) = 0; + virtual void putEvent(Port, const MidiEvent&) = 0; + virtual void updateConnections() {} + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/dssihost.cpp b/attic/muse_qt4_evolution/muse/dssihost.cpp new file mode 100644 index 00000000..f72d4740 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/dssihost.cpp @@ -0,0 +1,891 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "config.h" + +#ifdef DSSI_SUPPORT + +#include +#include +#include +#include + +#include "dssihost.h" +#include "synth.h" +#include "jackaudio.h" +#include "midi.h" +#include "al/al.h" +#include "al/xml.h" +#include "song.h" +#include "midictrl.h" +#include "ladspaplugin.h" + +static lo_server_thread serverThread; +static char osc_path_tmp[1024]; +static char* url; + +//--------------------------------------------------------- +// oscError +//--------------------------------------------------------- + +static void oscError(int num, const char *msg, const char *path) + { + fprintf(stderr, "MusE: liblo server error %d in path %s: %s\n", + num, path, msg); + } + +//--------------------------------------------------------- +// oscDebugHandler +//--------------------------------------------------------- + +static int oscDebugHandler(const char* path, const char* types, lo_arg** argv, + int argc, void*, void*) + { + printf("MusE: got unhandled OSC message:\n path: <%s>\n", path); + for (int i = 0; i < argc; i++) { + printf(" arg %d '%c' ", i, types[i]); + lo_arg_pp(lo_type(types[i]), argv[i]); + printf("\n"); + } + return 1; + } + +//--------------------------------------------------------- +// oscUpdate +//--------------------------------------------------------- + +int DssiSynthIF::oscUpdate(lo_arg **argv) + { + const char *url = (char *)&argv[0]->s; + + if (uiTarget) + lo_address_free(uiTarget); + char* host = lo_url_get_hostname(url); + char* port = lo_url_get_port(url); + uiTarget = lo_address_new(host, port); + free(host); + free(port); + + if (uiOscPath) + free(uiOscPath); + uiOscPath = lo_url_get_path(url); + int pl = strlen(uiOscPath); + + if (uiOscControlPath) + free(uiOscControlPath); + uiOscControlPath = (char *)malloc(pl + 10); + sprintf(uiOscControlPath, "%s/control", uiOscPath); + + if (uiOscConfigurePath) + free(uiOscConfigurePath); + uiOscConfigurePath = (char *)malloc(pl + 12); + sprintf(uiOscConfigurePath, "%s/configure", uiOscPath); + + if (uiOscProgramPath) + free(uiOscProgramPath); + uiOscProgramPath = (char *)malloc(pl + 10); + sprintf(uiOscProgramPath, "%s/program", uiOscPath); + + if (uiOscShowPath) + free(uiOscShowPath); + uiOscShowPath = (char *)malloc(pl + 10); + sprintf(uiOscShowPath, "%s/show", uiOscPath); + + /* At this point a more substantial host might also call + * configure() on the UI to set any state that it had remembered + * for the plugin instance. But we don't remember state for + * plugin instances (see our own configure() implementation in + * osc_configure_handler), and so we have nothing to send except + * the optional project directory. + */ + + lo_send(uiTarget, uiOscConfigurePath, "ss", + DSSI_PROJECT_DIRECTORY_KEY, song->projectPath().toAscii().data()); + +#if 0 + /* Send current bank/program (-FIX- another race...) */ + if (instance->pendingProgramChange < 0) { + unsigned long bank = instance->currentBank; + unsigned long program = instance->currentProgram; + instance->uiNeedsProgramUpdate = 0; + if (instance->uiTarget) { + lo_send(instance->uiTarget, instance->ui_osc_program_path, "ii", bank, program); + } + } + + /* Send control ports */ + for (i = 0; i < instance->plugin->controlIns; i++) { + int in = i + instance->firstControlIn; + int port = pluginControlInPortNumbers[in]; + lo_send(instance->uiTarget, instance->ui_osc_control_path, "if", port, + pluginControlIns[in]); + /* Avoid overloading the GUI if there are lots and lots of ports */ + if ((i+1) % 50 == 0) + usleep(300000); + } +#endif + return 0; + } + +//--------------------------------------------------------- +// oscMessageHandler +//--------------------------------------------------------- + +int oscMessageHandler(const char* path, const char* types, lo_arg** argv, + int argc, void* data, void* user_data) + { + const char* p = path; + if (strncmp(p, "/dssi/", 6)) + return oscDebugHandler(path, types, argv, argc, data, user_data); + + p += 6; + + SynthIList* sl = song->syntis(); + DssiSynthIF* instance = 0; + SynthI* synti = 0; + + for (iSynthI si = sl->begin(); si != sl->end(); ++si) { + int l = strlen((*si)->name().toAscii().data()); + if (!strncmp(p, (*si)->name().toAscii().data(), l)) { + synti = *si; + instance = (DssiSynthIF*)(synti->sif()); + p += l; + break; + } + } + if (!instance) + return oscDebugHandler(path, types, argv, argc, data, user_data); + + if (*p != '/' || *(p + 1) == 0) + return oscDebugHandler(path, types, argv, argc, data, user_data); + ++p; + + if (!strcmp(p, "configure") && argc == 2 && !strcmp(types, "ss")) + return instance->oscConfigure(argv); + else if (!strcmp(p, "control") && argc == 2 && !strcmp(types, "if")) + return instance->oscControl(argv); + else if (!strcmp(p, "midi") && argc == 1 && !strcmp(types, "m")) + return instance->oscMidi(argv); + else if (!strcmp(p, "program") && argc == 2 && !strcmp(types, "ii")) + return instance->oscProgram(argv); + else if (!strcmp(p, "update") && argc == 1 && !strcmp(types, "s")) + return instance->oscUpdate(argv); + else if (!strcmp(p, "exiting") && argc == 0) + return instance->oscExiting(argv); + return oscDebugHandler(path, types, argv, argc, data, user_data); + } + +//--------------------------------------------------------- +// scanDSSILib +//--------------------------------------------------------- + +static void scanDSSILib(const QFileInfo& fi) + { + void* handle = dlopen(fi.filePath().toAscii().data(), RTLD_NOW); + if (handle == 0) { + fprintf(stderr, "dlopen(%s) failed: %s\n", + fi.filePath().toAscii().data(), dlerror()); + return; + } + DSSI_Descriptor_Function dssi = (DSSI_Descriptor_Function)dlsym(handle, "dssi_descriptor"); + + if (!dssi) { + const char *txt = dlerror(); + if (txt) { + fprintf(stderr, + "Unable to find dssi_descriptor() function in plugin " + "library file \"%s\": %s.\n" + "Are you sure this is a DSSI plugin file?\n", + fi.filePath().toAscii().data(), + txt); + exit(1); + } + } + const DSSI_Descriptor* descr; + for (int i = 0;; ++i) { + descr = dssi(i); + if (descr == 0) + break; + QString label(descr->LADSPA_Plugin->Label); + DssiSynth* s = new DssiSynth(&fi, label); + synthis.push_back(s); + } + dlclose(handle); + } + +//--------------------------------------------------------- +// scanVstDir +//--------------------------------------------------------- + +static void scanDSSIDir(const QString& s) + { + if (debugMsg) + printf("scan DSSI plugin dir <%s>\n", s.toAscii().data()); + +#ifdef __APPLE__ + QDir pluginDir(s, QString("*.dylib"), QDir::Unsorted, QDir::Files); +#else + QDir pluginDir(s, QString("*.so"), QDir::Unsorted, QDir::Files); +#endif + if (!pluginDir.exists()) + return; + + const QFileInfoList list = pluginDir.entryInfoList(); + for (int i = 0; i < list.size(); ++i) { + QFileInfo fi = list.at(i); + scanDSSILib(fi); + } + } + +//--------------------------------------------------------- +// initDSSI +//--------------------------------------------------------- + +void initDSSI() + { + const char* dssiPath = getenv("DSSI_PATH"); + if (dssiPath == 0) + dssiPath = "/usr/lib/dssi:/usr/local/lib/dssi"; + + const char* p = dssiPath; + while (*p != '\0') { + const char* pe = p; + while (*pe != ':' && *pe != '\0') + pe++; + + int n = pe - p; + if (n) { + char* buffer = new char[n + 1]; + strncpy(buffer, p, n); + buffer[n] = '\0'; + scanDSSIDir(QString(buffer)); + delete[] buffer; + } + p = pe; + if (*p == ':') + p++; + } + // Create OSC thread + + serverThread = lo_server_thread_new(0, oscError); + snprintf(osc_path_tmp, 31, "/dssi"); + char* tmp = lo_server_thread_get_url(serverThread); + url = (char *)malloc(strlen(tmp) + strlen(osc_path_tmp)); + sprintf(url, "%s%s", tmp, osc_path_tmp + 1); + free(tmp); + + lo_server_thread_add_method(serverThread, 0, 0, oscMessageHandler, 0); + lo_server_thread_start(serverThread); + } + +//--------------------------------------------------------- +// guiVisible +//--------------------------------------------------------- + +bool DssiSynthIF::guiVisible() const + { + return _guiVisible; + } + +//--------------------------------------------------------- +// showGui +//--------------------------------------------------------- + +void DssiSynthIF::showGui(bool v) + { + if (v == guiVisible()) + return; + for (int i = 0; i < 5; ++i) { + if (uiOscPath) + break; + sleep(1); + } + if (uiOscPath == 0) { + printf("DssiSynthIF::showGui(): no uiOscPath\n"); + return; + } + char uiOscGuiPath[strlen(uiOscPath)+6]; + sprintf(uiOscGuiPath, "%s/%s", uiOscPath, v ? "show" : "hide"); + lo_send(uiTarget, uiOscGuiPath, ""); + _guiVisible = v; + } + +//--------------------------------------------------------- +// receiveEvent +//--------------------------------------------------------- + +MidiEvent DssiSynthIF::receiveEvent() + { + return MidiEvent(); + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +bool DssiSynthIF::init(DssiSynth* s) + { + synth = s; + const DSSI_Descriptor* dssi = synth->dssi; + const LADSPA_Descriptor* ld = dssi->LADSPA_Plugin; + handle = ld->instantiate(ld, AL::sampleRate); + + queryPrograms(); + + int controlPorts = synth->_controller; + controls = new LadspaPort[controlPorts]; + + for (int k = 0; k < controlPorts; ++k) { + int i = synth->pIdx[k]; + controls[k].val = ladspaDefaultValue(ld, i); + ld->connect_port(handle, i, &controls[k].val); + } + + if (ld->activate) + ld->activate(handle); + + if (dssi->configure) { + char *rv = dssi->configure(handle, DSSI_PROJECT_DIRECTORY_KEY, + song->projectPath().toAscii().data()); + if (rv) + fprintf(stderr, "MusE: Warning: plugin doesn't like project directory: \"%s\"\n", rv); + } + return true; + } + +//--------------------------------------------------------- +// DssiSynthIF +//--------------------------------------------------------- + +DssiSynthIF::DssiSynthIF(SynthI* s) + : SynthIF(s) + { + _guiVisible = false; + uiTarget = 0; + uiOscShowPath = 0; + uiOscControlPath = 0; + uiOscConfigurePath = 0; + uiOscProgramPath = 0; + uiOscPath = 0; + guiPid = -1; + } + +//--------------------------------------------------------- +// ~DssiSynthIF +//--------------------------------------------------------- + +DssiSynthIF::~DssiSynthIF() + { + const DSSI_Descriptor* dssi = synth->dssi; + const LADSPA_Descriptor* descr = dssi->LADSPA_Plugin; + + if (descr->cleanup) + descr->cleanup(handle); + if (guiPid != -1) + kill(guiPid, SIGHUP); + } + +//--------------------------------------------------------- +// setParameter +//--------------------------------------------------------- + +void DssiSynthIF::setParameter(int, float) + { + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void DssiSynthIF::write(Xml&) const + { + } + +//--------------------------------------------------------- +// getData +//--------------------------------------------------------- + +void DssiSynthIF::getData(MidiEventList* el, unsigned pos, int ch, unsigned samples, float** data) + { + const DSSI_Descriptor* dssi = synth->dssi; + const LADSPA_Descriptor* descr = dssi->LADSPA_Plugin; + + unsigned long nevents = el->size(); + + while (!synti->putFifo.isEmpty()) { + MidiEvent event = synti->putFifo.get(); + printf("Dssi: FIFO\n"); + } + + snd_seq_event_t events[nevents]; + memset(events, 0, sizeof(events)); + + nevents = 0; + unsigned endPos = pos + samples; + iMidiEvent i = el->begin(); + for (; i != el->end(); ++i, ++nevents) { + if (i->time() >= endPos) + break; + MidiEvent e = *i; + + int chn = e.channel(); + int a = e.dataA(); + int b = e.dataB(); + //for sysex + QByteArray ba = QByteArray((const char*)e.data(), e.len()); + //we must had 0xF0 at the beginning and 0xF7 at the end of e.data() + ba.push_front(0xF0); + ba.push_back(0xF7); + int len = e.len() + 2; + + + snd_seq_event_t* event = &events[nevents]; + event->queue = SND_SEQ_QUEUE_DIRECT; + + switch(e.type()) { + case ME_NOTEON: + if (b) + snd_seq_ev_set_noteon(event, chn, a, b); + else + snd_seq_ev_set_noteoff(event, chn, a, 0); + break; + case ME_NOTEOFF: + snd_seq_ev_set_noteoff(event, chn, a, 0); + break; + case ME_CONTROLLER: + if (a == CTRL_PROGRAM) { + int bank = b >> 8; + int prog = b & 0xff; + if (dssi->select_program) + dssi->select_program(handle, bank, prog); + break; + } + snd_seq_ev_set_controller(event, chn, a, b); + break; + case ME_PITCHBEND: + snd_seq_ev_set_pitchbend(event, chn, a); + break; + case ME_AFTERTOUCH: + snd_seq_ev_set_chanpress(event, chn, a); + break; + case ME_SYSEX: + snd_seq_ev_set_sysex(event, len, + (unsigned char*)ba.data()); + break; + default: + --nevents; + break; + } + } + el->erase(el->begin(), i); + for (int k = 0; k < ch; ++k) + descr->connect_port(handle, synth->oIdx[k], data[k]); + + if (synth->dssi->run_synth) + synth->dssi->run_synth(handle, samples, events, nevents); + else if (synth->dssi->run_multiple_synths) { + snd_seq_event_t* ev = events; + synth->dssi->run_multiple_synths(1, &handle, samples, &ev, &nevents); + } + } + +//--------------------------------------------------------- +// putEvent +//--------------------------------------------------------- + +bool DssiSynthIF::putEvent(const MidiEvent& ev) + { + if (midiOutputTrace) + ev.dump(); + return false; + } + +//--------------------------------------------------------- +// incInstances +//--------------------------------------------------------- + +void DssiSynth::incInstances(int val) + { + _instances += val; + if (_instances == 0) { + if (handle) + dlclose(handle); + dssi = 0; + df = 0; + } + } + +//--------------------------------------------------------- +// createSIF +//--------------------------------------------------------- + +SynthIF* DssiSynth::createSIF(SynthI* synti) + { + if (_instances == 0) { + handle = dlopen(info.filePath().toAscii().data(), RTLD_NOW); + if (handle == 0) { + fprintf(stderr, "dlopen(%s) failed: %s\n", + info.filePath().toAscii().data(), dlerror()); + return 0; + } + df = (DSSI_Descriptor_Function)dlsym(handle, "dssi_descriptor"); + + if (!df) { + const char *txt = dlerror(); + fprintf(stderr, + "Unable to find dssi_descriptor() function in plugin " + "library file \"%s\": %s.\n" + "Are you sure this is a DSSI plugin file?\n", + info.filePath().toAscii().data(), + txt ? txt : "?"); + dlclose(handle); + handle = 0; + return 0; + } + for (int i = 0;; ++i) { + dssi = df(i); + if (dssi == 0) + break; + QString label(dssi->LADSPA_Plugin->Label); + if (label == _name) + break; + } + + _inports = 0; + _outports = 0; + _controller = 0; + const LADSPA_Descriptor* d = dssi->LADSPA_Plugin; + for (unsigned k = 0; k < d->PortCount; ++k) { + LADSPA_PortDescriptor pd = d->PortDescriptors[k]; + if (LADSPA_IS_PORT_AUDIO(pd)) { + if (LADSPA_IS_PORT_INPUT(pd)) { + ++_inports; + iIdx.push_back(k); + } + else if (LADSPA_IS_PORT_OUTPUT(pd)) { + ++_outports; + oIdx.push_back(k); + } + } + else if (LADSPA_IS_PORT_CONTROL(pd)) { + if (LADSPA_IS_PORT_INPUT(pd)) { + ++_controller; + pIdx.push_back(k); + } + else { + // ?? + } + } + } + } + if (dssi == 0) { + fprintf(stderr, "cannot found DSSI synti %s\n", _name.toAscii().data()); + dlclose(handle); + handle = 0; + df = 0; + return 0; + } + DssiSynthIF* sif = new DssiSynthIF(synti); + ++_instances; + sif->init(this); + + // + // start gui + // + static char oscUrl[1024]; + snprintf(oscUrl, 1024, "%s/%s", url, synti->name().toAscii().data()); + + QString guiPath(info.path() + "/" + info.baseName()); + QDir guiDir(guiPath, "*", QDir::Unsorted, QDir::Files); + if (guiDir.exists()) { + const QFileInfoList list = guiDir.entryInfoList(); + for (int i = 0; i < list.size(); ++i) { + QFileInfo fi = list.at(i); + QString gui(fi.filePath()); + if (gui.contains('_') == 0) + continue; + struct stat buf; + if (stat(gui.toAscii().data(), &buf)) { + perror("stat failed"); + continue; + } + + if ((S_ISREG(buf.st_mode) || S_ISLNK(buf.st_mode)) && + (buf.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) { + if ((sif->guiPid = fork()) == 0) { + execlp( + fi.filePath().toAscii().data(), + fi.fileName().toAscii().data(), + oscUrl, + info.filePath().toAscii().data(), + name().toAscii().data(), + "channel 1", (void*)0); + fprintf(stderr, "exec %s %s %s %s failed: %s\n", + fi.filePath().toAscii().data(), + fi.fileName().toAscii().data(), + oscUrl, + name().toAscii().data(), + strerror(errno)); + exit(1); + } + } + } + _hasGui = true; + } + else { + printf("%s: no dir for dssi gui found: %s\n", + name().toAscii().data(), guiPath.toAscii().data()); + _hasGui = false; + } + return sif; + } + +//--------------------------------------------------------- +// oscProgram +//--------------------------------------------------------- + +int DssiSynthIF::oscProgram(lo_arg** argv) + { + int bank = argv[0]->i; + int program = argv[1]->i; + int ch = 0; // TODO: ?? + MidiEvent event(0, ch, ME_CONTROLLER, CTRL_PROGRAM, (bank << 8) + program); + synti->playMidiEvent(&event); + return 0; + } + +//--------------------------------------------------------- +// oscControl +//--------------------------------------------------------- + +int DssiSynthIF::oscControl(lo_arg**) + { +printf("received oscControl\n"); +#if 0 + int port = argv[0]->i; + LADSPA_Data value = argv[1]->f; + + if (port < 0 || port > instance->plugin->descriptor->LADSPA_Plugin->PortCount) { + fprintf(stderr, "MusE: OSC: %s port number (%d) is out of range\n", + instance->friendly_name, port); + return 0; + } + if (instance->pluginPortControlInNumbers[port] == -1) { + fprintf(stderr, "MusE: OSC: %s port %d is not a control in\n", + instance->friendly_name, port); + return 0; + } + pluginControlIns[instance->pluginPortControlInNumbers[port]] = value; + if (verbose) { + printf("MusE: OSC: %s port %d = %f\n", + instance->friendly_name, port, value); + } +#endif + return 0; + } + +//--------------------------------------------------------- +// oscExiting +//--------------------------------------------------------- + +int DssiSynthIF::oscExiting(lo_arg**) + { + printf("not impl.: oscExiting\n"); +#if 0 + int i; + + if (verbose) { + printf("MusE: OSC: got exiting notification for instance %d\n", + instance->number); + } + + if (instance->plugin) { + + /*!!! No, this isn't safe -- plugins deactivated in this way + would still be included in a run_multiple_synths call unless + we re-jigged the instance array at the same time -- leave it + for now + if (instance->plugin->descriptor->LADSPA_Plugin->deactivate) { + instance->plugin->descriptor->LADSPA_Plugin->deactivate + (instanceHandles[instance->number]); + } + */ + /* Leave this flag though, as we need it to determine when to exit */ + instance->inactive = 1; + } + + /* Do we have any plugins left running? */ + + for (i = 0; i < instance_count; ++i) { + if (!instances[i].inactive) + return 0; + } + + if (verbose) { + printf("MusE: That was the last remaining plugin, exiting...\n"); + } + exiting = 1; +#endif + return 0; + } + +//--------------------------------------------------------- +// oscMidi +//--------------------------------------------------------- + +int DssiSynthIF::oscMidi(lo_arg** argv) + { + int a = argv[0]->m[1]; + int b = argv[0]->m[2]; + int c = argv[0]->m[3]; + if (a == ME_NOTEOFF) { + a = ME_NOTEON; + c = 0; + } + int channel = 0; + MidiEvent event(0, channel, a, b, c); + synti->playMidiEvent(&event); + return 0; + } + +//--------------------------------------------------------- +// oscConfigure +//--------------------------------------------------------- + +int DssiSynthIF::oscConfigure(lo_arg** argv) + { + if (!synth->dssi->configure) + return 0; + + const char *key = (const char *)&argv[0]->s; + const char *value = (const char *)&argv[1]->s; + + /* This is pretty much the simplest legal implementation of + * configure in a DSSI host. */ + + /* The host has the option to remember the set of (key,value) + * pairs associated with a particular instance, so that if it + * wants to restore the "same" instance on another occasion it can + * just call configure() on it for each of those pairs and so + * restore state without any input from a GUI. Any real-world GUI + * host will probably want to do that. This host doesn't have any + * concept of restoring an instance from one run to the next, so + * we don't bother remembering these at all. */ + + if (!strncmp(key, DSSI_RESERVED_CONFIGURE_PREFIX, + strlen(DSSI_RESERVED_CONFIGURE_PREFIX))) { + fprintf(stderr, "MusE: OSC: UI for plugin '%s' attempted to use reserved configure key \"%s\", ignoring\n", + synti->name().toAscii().data(), key); + return 0; + } + + char* message = synth->dssi->configure(handle, key, value); + if (message) { + printf("MusE: on configure '%s' '%s', plugin '%s' returned error '%s'\n", + key, value, synti->name().toAscii().data(), message); + free(message); + } + + // also call back on UIs for plugins other than the one + // that requested this: + // if (n != instance->number && instances[n].uiTarget) { + // lo_send(instances[n].uiTarget, + // instances[n].ui_osc_configure_path, "ss", key, value); + // } + + /* configure invalidates bank and program information, so + we should do this again now: */ + queryPrograms(); + return 0; + } + +//--------------------------------------------------------- +// queryPrograms +//--------------------------------------------------------- + +void DssiSynthIF::queryPrograms() + { + for (std::vector::const_iterator i = programs.begin(); + i != programs.end(); ++i) { + free((void*)(i->Name)); + } + programs.clear(); + + if (!(synth->dssi->get_program && synth->dssi->select_program)) + return; + + for (int i = 0;; ++i) { + const DSSI_Program_Descriptor* pd = synth->dssi->get_program(handle, i); + if (pd == 0) + break; + DSSI_Program_Descriptor d; + d.Name = strdup(pd->Name); + d.Program = pd->Program; + d.Bank = pd->Bank; + programs.push_back(d); + } + } + +//--------------------------------------------------------- +// getPatchName +//--------------------------------------------------------- + +QString DssiSynthIF::getPatchName(int, int prog) + { + unsigned program = prog & 0x7f; + int lbank = (prog >> 8) & 0xff; + int hbank = (prog >> 16) & 0xff; + + if (lbank == 0xff) + lbank = 0; + if (hbank == 0xff) + hbank = 0; + unsigned bank = (hbank << 8) + lbank; + + for (std::vector::const_iterator i = programs.begin(); + i != programs.end(); ++i) { + if (i->Bank == bank && i->Program ==program) + return i->Name; + } + return "?"; + } + +//--------------------------------------------------------- +// populatePatchPopup +//--------------------------------------------------------- + +void DssiSynthIF::populatePatchPopup(QMenu* menu, int) + { + menu->clear(); + + for (std::vector::const_iterator i = programs.begin(); + i != programs.end(); ++i) { + int bank = i->Bank; + int prog = i->Program; + int id = (bank << 16) + prog; + QAction* a = menu->addAction(QString(i->Name)); + a->setData(id); + } + } + +#else +void initDSSI() {} +#endif + diff --git a/attic/muse_qt4_evolution/muse/dssihost.h b/attic/muse_qt4_evolution/muse/dssihost.h new file mode 100644 index 00000000..0ec251ac --- /dev/null +++ b/attic/muse_qt4_evolution/muse/dssihost.h @@ -0,0 +1,121 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __DSSIHOST_H__ +#define __DSSIHOST_H__ + +#include +#include "synth.h" +#include "plugin.h" + +struct _DSSI; +class DssiPluginIF; +class LadspaPort; + +//--------------------------------------------------------- +// DssiSynth +//--------------------------------------------------------- + +class DssiSynth : public Synth { + protected: + char* label; + void* handle; + const DSSI_Descriptor* dssi; + DSSI_Descriptor_Function df; + std::vector pIdx; + std::vector iIdx; + std::vector oIdx; + int _inports, _outports, _controller; + bool _hasGui; + + public: + DssiSynth(const QFileInfo* fi, QString l) : Synth(fi, l) { + df = 0; + handle = 0; + dssi = 0; + _hasGui = false; + } + virtual ~DssiSynth() { + delete label; + } + virtual void incInstances(int val); + virtual SynthIF* createSIF(SynthI*); + friend class DssiSynthIF; + float defaultValue(int); + }; + +//--------------------------------------------------------- +// DssiSynthIF +// VSTi synthesizer instance +//--------------------------------------------------------- + +class DssiSynthIF : public SynthIF + { + bool _guiVisible; + DssiSynth* synth; + LADSPA_Handle handle; + LadspaPort* controls; + void* uiTarget; + char* uiOscShowPath; + char* uiOscControlPath; + char* uiOscConfigurePath; + char* uiOscProgramPath; + char* uiOscPath; + + std::vector programs; + void queryPrograms(); + + protected: + int guiPid; + + public: + DssiSynthIF(SynthI* s); + virtual ~DssiSynthIF(); + + virtual bool guiVisible() const; + virtual void showGui(bool v); + virtual bool hasGui() const { return synth->_hasGui; } + virtual void getGeometry(int*, int*, int*, int*) const {} + virtual void setGeometry(int, int, int, int) {} + virtual void getData(MidiEventList*, unsigned pos, int ports, unsigned n, float** buffer) ; + virtual bool putEvent(const MidiEvent& ev); + virtual MidiEvent receiveEvent(); + virtual int eventsPending() const { return 0; } + virtual int channels() const { return synth->_outports; } + virtual void deactivate3() {} + virtual QString getPatchName(int, int); + virtual void populatePatchPopup(QMenu*, int); + virtual void write(Xml& xml) const; + virtual void setParameter(int idx, float value); + virtual int getControllerInfo(int, const char**, int*, int*, int*) { return 0; } + bool init(DssiSynth* s); + + int oscUpdate(lo_arg**); + int oscProgram(lo_arg**); + int oscControl(lo_arg**); + int oscExiting(lo_arg**); + int oscMidi(lo_arg**); + int oscConfigure(lo_arg**); + + friend class DssiSynth; + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/dummyaudio.cpp b/attic/muse_qt4_evolution/muse/dummyaudio.cpp new file mode 100644 index 00000000..b4bc73ff --- /dev/null +++ b/attic/muse_qt4_evolution/muse/dummyaudio.cpp @@ -0,0 +1,294 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "al/al.h" +#include "widgets/utils.h" +#include "audio.h" +#include "audiodev.h" +#include "globals.h" +#include "song.h" + +static const unsigned dummyFrames = 1024; +static double startTime; + +//--------------------------------------------------------- +// DummyAudio +//--------------------------------------------------------- + +class DummyAudio : public AudioDriver { + float* buffer; + pthread_t dummyThread; + std::vector oPorts; + std::vector iPorts; + int realTimePriority; + + public: + int state; + bool seekflag; + unsigned pos; + + DummyAudio() { + state = Audio::STOP; + seekflag = false; + startTime = curTime(); + posix_memalign((void**)&buffer, 16, sizeof(float) * dummyFrames); + } + virtual ~DummyAudio() { + free(buffer); + } + + virtual bool init() { return true; } + virtual void start(int); + virtual void stop (); + virtual unsigned frameTime() const { + return lrint(curTime() * AL::sampleRate); + } + virtual unsigned lastFrameTime() const { + return lrint(startTime * AL::sampleRate); + } + virtual unsigned curFrame() const { return pos; } + + virtual float* getBuffer(Port /*port*/, unsigned long nframes) + { + if (nframes > dummyFrames) { + fprintf(stderr, "error: segment size > %d\n", dummyFrames); + exit(-1); + } + memset(buffer, 0, nframes * sizeof(float)); + return buffer; + } + + virtual QList outputPorts(bool midi = false); + virtual QList inputPorts(bool midi = false); + + virtual void registerClient() {} + + virtual Port registerOutPort(const QString& s, bool) { + iPorts.push_back(QString(s)); + Port port(0, iPorts.size() + 3000); + return port; + } + virtual Port registerInPort(const QString& s, bool) { + oPorts.push_back(QString(s)); + Port port(0, oPorts.size() + 40); + return port; + } + virtual void unregisterPort(Port) { +/* if (long(p) >= 100) + oPorts.erase(oPorts.begin() + (long(p)-40)); + else + iPorts.erase(iPorts.begin() + long(p)-30); +*/ + } + virtual bool connect(Port, Port) { return true; } + virtual bool disconnect(Port, Port) { return true; } + virtual void setPortName(Port, const QString&) {} + virtual Port findPort(const QString& s) { + if (s == "input1") + return Port(0, 10); + if (s == "input2") + return Port(0, 11); + if (s == "output1") + return Port(0, 20); + if (s == "output2") + return Port(0, 21); + int k = 0; + for (std::vector::const_iterator i = iPorts.begin(); i != iPorts.end(); ++i, ++k) { + if (s == *i) + return Port(0, 30+k); + } + k = 0; + for (std::vector::const_iterator i = oPorts.begin(); i != oPorts.end(); ++i, ++k) { + if (s == *i) + return Port(0, 40); + } + return Port(); + } + virtual QString portName(Port port) { + if (port.alsaPort() == 10) + return QString("input1"); + if (port.alsaPort() == 11) + return QString("input2"); + if (port.alsaPort() == 20) + return QString("output1"); + if (port.alsaPort() == 21) + return QString("output2"); + if (port.alsaPort() >= 40) + return QString(oPorts[port.alsaPort() - 40]); + else + return QString(iPorts[port.alsaPort() - 30]); + } + virtual int realtimePriority() const { return 40; } + virtual void startTransport() { + state = Audio::PLAY; + } + virtual void stopTransport() { + state = Audio::STOP; + } + virtual void seekTransport(unsigned n) { + seekflag = true; + pos = n; + } + virtual void setFreewheel(bool) {} + virtual void putEvent(Port, const MidiEvent&) {} + }; + +DummyAudio* dummyAudio; + +//--------------------------------------------------------- +// initDummyAudio +//--------------------------------------------------------- + +bool initDummyAudio() + { + dummyAudio = new DummyAudio(); + audioDriver = dummyAudio; + return false; + } + +//--------------------------------------------------------- +// outputPorts +//--------------------------------------------------------- + +QList DummyAudio::outputPorts(bool midi) + { + QList clientList; + if (!midi) { + PortName p1; + p1.name = QString("output1"); + p1.port = Port(0, 100); + PortName p2; + p2.name = QString("output2"); + p2.port = Port(0, 101); + clientList.append(p1); + clientList.append(p2); + } + return clientList; + } + +//--------------------------------------------------------- +// inputPorts +//--------------------------------------------------------- + +QList DummyAudio::inputPorts(bool midi) + { + QList clientList; + if (!midi) { + PortName p1; + p1.name = QString("input1"); + p1.port = Port(0, 0); + PortName p2; + p2.name = QString("input2"); + p2.port = Port(0, 1); + clientList.append(p1); + clientList.append(p2); + } + return clientList; + } + +//--------------------------------------------------------- +// dummyLoop +//--------------------------------------------------------- + +static void* dummyLoop(void*) + { +#ifndef __APPLE__ + if (realTimePriority) { + // + // check if we really got realtime priviledges + // + int policy; + if ((policy = sched_getscheduler (0)) < 0) { + printf("cannot get current client scheduler for audio dummy thread: %s!\n", strerror(errno)); + } + else + { + if (policy != SCHED_FIFO) + printf("audio dummy thread _NOT_ running SCHED_FIFO\n"); + else if (debugMsg) { + struct sched_param rt_param; + memset(&rt_param, 0, sizeof(sched_param)); + int type; + int rv = pthread_getschedparam(pthread_self(), &type, &rt_param); + if (rv == -1) + perror("get scheduler parameter"); + printf("audio dummy thread running SCHED_FIFO priority %d\n", + rt_param.sched_priority); + } + } + } +#endif + + for (;;) { + if (audioState == AUDIO_RUNNING) + audio->process(segmentSize, dummyAudio->state); + else if (audioState == AUDIO_START1) + audioState = AUDIO_START2; + usleep(dummyFrames*1000000/AL::sampleRate); + if (dummyAudio->seekflag) { + audio->sync(Audio::STOP, dummyAudio->pos); + dummyAudio->seekflag = false; + } + if (dummyAudio->state == Audio::PLAY) { + dummyAudio->pos += dummyFrames; + } + } + pthread_exit(0); + } + +//--------------------------------------------------------- +// start +//--------------------------------------------------------- + +void DummyAudio::start(int priority) + { + realTimePriority = priority; + pthread_attr_t* attributes = 0; + + if (priority) { + attributes = (pthread_attr_t*) malloc(sizeof(pthread_attr_t)); + pthread_attr_init(attributes); + + if (pthread_attr_setschedpolicy(attributes, SCHED_FIFO)) { + printf("cannot set FIFO scheduling class for RT thread\n"); + } + if (pthread_attr_setscope (attributes, PTHREAD_SCOPE_SYSTEM)) { + printf("Cannot set scheduling scope for RT thread\n"); + } + struct sched_param rt_param; + memset(&rt_param, 0, sizeof(rt_param)); + rt_param.sched_priority = priority; + if (pthread_attr_setschedparam (attributes, &rt_param)) { + printf("Cannot set scheduling priority %d for RT thread (%s)\n", + priority, strerror(errno)); + } + } + if (pthread_create(&dummyThread, attributes, ::dummyLoop, this)) + perror("creating thread failed:"); + if (priority) + pthread_attr_destroy(attributes); + } + +void DummyAudio::stop () + { + pthread_cancel(dummyThread); + pthread_join(dummyThread, 0); + } + diff --git a/attic/muse_qt4_evolution/muse/editor.cpp b/attic/muse_qt4_evolution/muse/editor.cpp new file mode 100644 index 00000000..a37e1baa --- /dev/null +++ b/attic/muse_qt4_evolution/muse/editor.cpp @@ -0,0 +1,38 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "editor.h" + +//--------------------------------------------------------- +// Editor +//--------------------------------------------------------- + +Editor::Editor() + { + tcanvas = 0; + } + +//--------------------------------------------------------- +// MidiEditor +//--------------------------------------------------------- + +Editor::~Editor() + { + } diff --git a/attic/muse_qt4_evolution/muse/editor.h b/attic/muse_qt4_evolution/muse/editor.h new file mode 100644 index 00000000..7de2d9e4 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/editor.h @@ -0,0 +1,44 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __EDITOR_H__ +#define __EDITOR_H__ + +#include "cobject.h" + +class TimeCanvas; + +//--------------------------------------------------------- +// Editor +//--------------------------------------------------------- + +class Editor : public TopWin { + Q_OBJECT + + protected: + TimeCanvas* tcanvas; + + public: + Editor(); + virtual ~Editor(); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/esettings.cpp b/attic/muse_qt4_evolution/muse/esettings.cpp new file mode 100644 index 00000000..7d3886f0 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/esettings.cpp @@ -0,0 +1,773 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2004 Mathias Lundgren +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "esettings.h" +#include "al/xml.h" +#include "midieditor.h" //only for debug prints + +//--------------------------------------------------------- +// readStatus +//--------------------------------------------------------- + +void CtrlEditSettings::readStatus(QDomNode node) + { + while (!node.isNull()) { + QDomElement e = node.toElement(); + QString tag = e.tagName(); + QString s = e.text(); + int i = s.toInt(); + if (tag == "controller") + controller = i; + else if (tag == "height") + height = i; + else + printf("MusE:CtrlEditSettings: unknown tag: %s\n", e.tagName().toAscii().data()); + node = node.nextSibling(); + } + } + +//--------------------------------------------------------- +// writeStatus +//--------------------------------------------------------- + +void CtrlEditSettings::writeStatus(Xml& xml) + { + xml.tag("ctrleditsettings"); + xml.intTag("height", height); + xml.intTag("controller", controller); + xml.etag("ctrleditsettings"); + } + +//--------------------------------------------------------- +// readStatus +//--------------------------------------------------------- + +void EditorSettings::readStatus(QDomNode node) + { + while (!node.isNull()) { + QDomElement e = node.toElement(); + QString tag = e.tagName(); + QString s = e.text(); + int i = s.toInt(); + if (tag == "width") + _width = i; + else if (tag == "height") + _height = i; + else if (tag == "x") + _x = i; + else if (tag == "y") + _y = i; + else if (tag == "raster") + _raster = i; + else + printf("MusE:EditorSettings: unknown tag %s\n", e.tagName().toAscii().data()); + node = node.nextSibling(); + } + } + +//--------------------------------------------------------- +// writeStatus +//--------------------------------------------------------- + +void EditorSettings::writeStatus(Xml& xml) const + { + xml.tag("editorsettings"); + xml.intTag("width", _width); + xml.intTag("height", _height); + xml.intTag("x", _x); + xml.intTag("y", _y); + xml.intTag("raster", _raster); + xml.etag("editorsettings"); + } + +//--------------------------------------------------------- +// readStatus +//--------------------------------------------------------- + +void GraphEditorSettings::readStatus(QDomNode node) + { + while (!node.isNull()) { + QDomElement e = node.toElement(); + QString tag = e.tagName(); + QString s = e.text(); + int i = s.toInt(); + if (tag == "editorsettings") { + EditorSettings::readStatus(node.firstChild()); + } + else if (tag == "xmag") + _xmag = s.toDouble(); + else if (tag == "ymag") + _ymag = s.toDouble(); + else if (tag == "xpos") + _pos.setX(i); + else if (tag == "ypos") + _pos.setY(i); + else + printf("MusE:GraphEditorSettings: unknown tag %s\n", e.tagName().toAscii().data()); + node = node.nextSibling(); + } + } + +//--------------------------------------------------------- +// writeStatus +//--------------------------------------------------------- + +void GraphEditorSettings::writeStatus(Xml& xml) const + { + xml.tag("grapheditorsettings"); + EditorSettings::writeStatus(xml); + xml.doubleTag("xmag", _xmag); + xml.doubleTag("ymag", _ymag); + xml.intTag("xpos", _pos.x()); + xml.intTag("ypos", _pos.y()); + xml.etag("grapheditorsettings"); + } + +bool ExtEditorSettings::_steprec = false; +bool ExtEditorSettings::_midiin = false; + + +//--------------------------------------------------------- +// ExtEditorSettings constructor +//--------------------------------------------------------- + +ExtEditorSettings::ExtEditorSettings(int r, int w, int h, int x, int y, double xm, double ym, QPoint pos, int q, int apply) + : GraphEditorSettings(r, w, h, x, y, xm, ym, pos), _quant(q), _applyTo(apply) + { + for (int i=0; ictrlEdits[i]) + delete ctrlEdits[i]; + } + } + +//--------------------------------------------------------- +// setControlEditSettings +//--------------------------------------------------------- + +void ExtEditorSettings::setControlEditSettings(int pos, CtrlEditSettings* c) + { + if (ctrlEdits[pos]) + delete ctrlEdits[pos]; + + ctrlEdits[pos] = c; + } +//--------------------------------------------------------- +// clone +//--------------------------------------------------------- + +EditorSettings* ExtEditorSettings::clone() + { + ExtEditorSettings* newSettings = new ExtEditorSettings(_raster, _width, _height, _x, _y, _xmag, _ymag, _pos, _quant, _applyTo); + CtrlEditSettings* c; + for (int i=0; i<_numOfCtrlEdits; i++) { + c = new CtrlEditSettings(); + *c = *(ctrlEdits[i]); //copy + newSettings->setControlEditSettings(i, c); + } + newSettings->setControlEditSize(_numOfCtrlEdits); + return (EditorSettings*) newSettings; + } + +//--------------------------------------------------------- +// readStatic +//--------------------------------------------------------- + +void ExtEditorSettings::readStatic(QDomNode node) + { + while (!node.isNull()) { + QDomElement e = node.toElement(); + QString tag = e.tagName(); + QString s = e.text(); + int i = s.toInt(); + if (tag == "steprec") + _steprec = i; + else if (tag == "midiin") + _midiin = i; + else + printf("MusE:ExtEditorSettings Static: unknown tag %s\n", e.tagName().toAscii().data()); + node = node.nextSibling(); + } + } + +//--------------------------------------------------------- +// writeStatic +//--------------------------------------------------------- + +void ExtEditorSettings::writeStatic(Xml& xml) + { + xml.tag("exteditorstatic"); + xml.intTag("steprec", _steprec); + xml.intTag("midiin", _midiin); + xml.etag("exteditorstatic"); + } + +//--------------------------------------------------------- +// readStatus +//--------------------------------------------------------- + +void ExtEditorSettings::readStatus(QDomNode node) + { + while (!node.isNull()) { + QDomElement e = node.toElement(); + QString tag = e.tagName(); + QString s = e.text(); + int i = s.toInt(); + if (tag == "grapheditorsettings") + GraphEditorSettings::readStatus(node.firstChild()); + else if (tag == "quant") + _quant = i; + else if (tag == "applyTo") + _applyTo = i; + else if (tag == "steprec") + _steprec = i; + else if (tag == "midiin") + _midiin = i; + else if (tag == "ctrleditsettings") { + ctrlEdits[_numOfCtrlEdits] = new CtrlEditSettings(); + ctrlEdits[_numOfCtrlEdits]->readStatus(node.firstChild()); + _numOfCtrlEdits++; + } + else + printf("MusE:ExtEditorSettings: unknown tag %s\n", e.tagName().toAscii().data()); + node = node.nextSibling(); + } + } + +//--------------------------------------------------------- +// writeStatus +//--------------------------------------------------------- + +void ExtEditorSettings::writeStatus(Xml& xml) const + { + //TODO: The ctrlEdits need to be updated (created) before trying to write status of ctrlEdits... + xml.tag("exteditorsettings"); + GraphEditorSettings::writeStatus(xml); + xml.intTag("quant", _quant); + xml.intTag("applyTo", _applyTo); + xml.intTag("steprec", _steprec); + xml.intTag("midiin", _midiin); + for (int i=0; i<_numOfCtrlEdits; i++) { + ctrlEdits[i]->writeStatus(xml); + } + xml.etag("exteditorsettings"); + } + +// +// DrumEditorSettings static init default values: +// +int DrumEditorSettings::_quantInit = 96; +int DrumEditorSettings::_rasterInit = 96; +int DrumEditorSettings::_widthInit = 600; +int DrumEditorSettings::_heightInit = 400; + +//--------------------------------------------------------- +// DrumEditorSettings +//--------------------------------------------------------- + +DrumEditorSettings::DrumEditorSettings(int r, int w, int h, int x, int y, + double xm, double ym, QPoint pos, int q, int apply, int dl, int dw) + : ExtEditorSettings(r, w, h, x, y, xm, ym, pos, q, apply), + _dlistWidth(dl), _dcanvasWidth(dw) + { + // For uninitialized values, go with static default values instead + if (w == ES_UNINIT) + _width = _widthInit; + if (h == ES_UNINIT) + _height = _heightInit; + if (r == ES_UNINIT) + _raster = _rasterInit; + if (q == ES_UNINIT) + _quant = _quantInit; + } + +//--------------------------------------------------------- +// clone +//--------------------------------------------------------- + +EditorSettings* DrumEditorSettings::clone() + { + DrumEditorSettings* newSettings = new DrumEditorSettings(_raster, _width, _height, _x, _y, _xmag, _ymag, _pos, _quant, _applyTo, _dlistWidth, _dcanvasWidth); + for (int i=0; i<_numOfCtrlEdits; i++) { + CtrlEditSettings* c = new CtrlEditSettings(); + *c = *(ctrlEdits[i]); //copy + newSettings->setControlEditSettings(i, c); + } + newSettings->setControlEditSize(_numOfCtrlEdits); + return (EditorSettings*) newSettings; + } + +//--------------------------------------------------------- +// readStatus +//--------------------------------------------------------- + +void DrumEditorSettings::readStatus(QDomNode node) + { + while (!node.isNull()) { + QDomElement e = node.toElement(); + QString tag = e.tagName(); + QString s = e.text(); + int i = s.toInt(); + if (tag == "exteditorsettings") + ExtEditorSettings::readStatus(node.firstChild()); + else if (tag == "dlistwidth") + _dlistWidth = i; + else if (tag == "dcanvaswidth") + _dcanvasWidth = i; + else + printf("MusE:DrumEditorSettings: unknown tag %s\n", e.tagName().toAscii().data()); + node = node.nextSibling(); + } + } + +//--------------------------------------------------------- +// writeStatus +//--------------------------------------------------------- + +void DrumEditorSettings::writeStatus(Xml& xml) const + { + xml.tag("drumeditorsettings"); + ExtEditorSettings::writeStatus(xml); + xml.intTag("dlistwidth", _dlistWidth); + xml.intTag("dcanvaswidth", _dcanvasWidth); + xml.etag("drumeditorsettings"); + } + +//--------------------------------------------------------- +// setStaticInitValues +//--------------------------------------------------------- +void DrumEditorSettings::setStaticInitValues(int widthinit, int heightinit, int rasterinit, int quantinit) + { + _widthInit = widthinit; + _heightInit = heightinit; + _rasterInit = rasterinit; + _quantInit = quantinit; + } + +//--------------------------------------------------------- +// writeStatic +//! write static configuration values for pianoroll +//--------------------------------------------------------- + +void DrumEditorSettings::writeStatic(Xml& xml) + { + xml.tag("drumeditorstatic"); + xml.intTag("quantDefault", _quantInit); + xml.intTag("rasterDefault", _rasterInit); + xml.intTag("widthDefault", _widthInit); + xml.intTag("heightDefault", _heightInit); + xml.etag("drumeditorstatic"); + } + +//--------------------------------------------------------- +// readStatic +//--------------------------------------------------------- + +void DrumEditorSettings::readStatic(QDomNode node) + { + while (!node.isNull()) { + QDomElement e = node.toElement(); + QString tag = e.tagName(); + QString s = e.text(); + int i = s.toInt(); + if (tag == "quantDefault") + _quantInit = i; + else if (tag == "rasterDefault") + _rasterInit = i; + else if (tag == "widthDefault") + _widthInit = i; + else if (tag == "heightDefault") + _heightInit = i; + else + printf("MusE:DrumEditorSettings Static: unknown tag %s\n", e.tagName().toAscii().data()); + node = node.nextSibling(); + } + } + +//--------------------------------------------------------- +// dump +//--------------------------------------------------------- + +void DrumEditorSettings::dump() + { +// printf("%x: DrumEditorSettings: q=%d r=%d w=%d h=%d dlw=%d dcw=%d xmag: %d pos: %d ypos: %d\n", this, _quant, _raster, _width, _height, _dlistWidth, _dcanvasWidth, _xmag, _pos, _ypos); + } + +// +// PianorollSettings static init default values: +// +int PianorollSettings::_quantInit = 96; +int PianorollSettings::_rasterInit = 96; +int PianorollSettings::_widthInit = 600; +int PianorollSettings::_heightInit = 400; + +PianorollSettings::PianorollSettings(int r, int w, int h, int x, int y, + double xm, double ym, QPoint pos, int q, int apply, + int qs, int qlim, int cmode, bool qlen, int pw) + : ExtEditorSettings(r, w, h, x, y, xm, ym, pos, q, apply), + _quantStrength(qs), _quantLimit(qlim), _colorMode(cmode), + _quantLen(qlen), _pianoWidth(pw) + { + // For uninitialized values, go with static default values instead + if (w == ES_UNINIT) + _width = _widthInit; + if (h == ES_UNINIT) + _height = _heightInit; + if (r == ES_UNINIT) + _raster = _rasterInit; + if (q == ES_UNINIT) + _quant = _quantInit; + } + +//--------------------------------------------------------- +// clone +//--------------------------------------------------------- + +EditorSettings* PianorollSettings::clone() + { + PianorollSettings* newSettings = new PianorollSettings(_raster, _width, + _height, _x, _y, _xmag, _ymag, _pos, _quant, _applyTo, _quantStrength, _quantLimit, _colorMode, _quantLen, _pianoWidth); + CtrlEditSettings* c; + for (int i=0; i<_numOfCtrlEdits; i++) { + c = new CtrlEditSettings(); + *c = *(ctrlEdits[i]); //copy + newSettings->setControlEditSettings(i, c); + } + newSettings->setControlEditSize(_numOfCtrlEdits); + return (EditorSettings*) newSettings; + } + +//--------------------------------------------------------- +// readStatus +//--------------------------------------------------------- + +void PianorollSettings::readStatus(QDomNode node) + { + while (!node.isNull()) { + QDomElement e = node.toElement(); + QString tag = e.tagName(); + QString s = e.text(); + int i = s.toInt(); + if (tag == "exteditorsettings") + ExtEditorSettings::readStatus(node.firstChild()); + else if (tag == "quantstrength") + _quantStrength = i; + else if (tag == "quantlimit") + _quantLimit = i; + else if (tag == "colormode") + _colorMode = i; + else if (tag == "quantLen") + _quantLen = i; + else if (tag == "pianowidth") + _pianoWidth = i; + else + printf("MusE:PianorollSettings: unknown tag %s\n", e.tagName().toAscii().data()); + node = node.nextSibling(); + } + } + +//--------------------------------------------------------- +// writeStatus +//--------------------------------------------------------- + +void PianorollSettings::writeStatus(Xml& xml) const + { + xml.tag("prollsettings"); + ExtEditorSettings::writeStatus(xml); + xml.intTag("quantstrength", _quantStrength); + xml.intTag("quantlimit", _quantLimit); + xml.intTag("colormode", _colorMode); + xml.intTag("quantLen", _quantLen); + xml.intTag("pianowidth", _pianoWidth); + xml.etag("prollsettings"); + } + +//--------------------------------------------------------- +// dump +//--------------------------------------------------------- + +void PianorollSettings::dump() + { +// printf("%x: PianorollSettings: q=%d r=%d w=%d h=%d x:%d y:%d xmag: %d pos:%d ypos:%d qs:%d ql:%d cm:%d at:%d ql:%d pw:%d\n", this, _quant, _raster, _width, _height, _x, _y, _xmag, _pos, _ypos, _quantStrength, _quantLimit, _colorMode, _applyTo, _quantLen, _pianoWidth); + } + + +//--------------------------------------------------------- +// setStaticInitValues +//! set static initialization values +//--------------------------------------------------------- +void PianorollSettings::setStaticInitValues(int widthinit, int heightinit, int rasterinit, int quantinit) + { + _widthInit = widthinit; + _heightInit = heightinit; + _rasterInit = rasterinit; + _quantInit = quantinit; + } + +//--------------------------------------------------------- +// writeStatic +//! write static configuration values for pianoroll +//--------------------------------------------------------- + +void PianorollSettings::writeStatic(Xml& xml) + { + xml.tag("pianorollstatic"); + xml.intTag("quantDefault", _quantInit); + xml.intTag("rasterDefault", _rasterInit); + xml.intTag("widthDefault", _widthInit); + xml.intTag("heightDefault", _heightInit); + xml.etag("pianorollstatic"); + } + +//--------------------------------------------------------- +// readStatic +//--------------------------------------------------------- + +void PianorollSettings::readStatic(QDomNode node) + { + while (!node.isNull()) { + QDomElement e = node.toElement(); + QString tag = e.tagName(); + QString s = e.text(); + int i = s.toInt(); + if (tag == "quantDefault") + _quantInit = i; + else if (tag == "rasterDefault") + _rasterInit = i; + else if (tag == "widthDefault") + _widthInit = i; + else if (tag == "heightDefault") + _heightInit = i; + else + printf("MusE:PianorollSettings Static: unknown tag %s\n", e.tagName().toAscii().data()); + node = node.nextSibling(); + } + } + +//--------------------------------------------------------- +// SettingsList +//--------------------------------------------------------- + +SettingsList::SettingsList() + { + //_default = d; + //dump(); + } + +//--------------------------------------------------------- +// ~SettingsList +//--------------------------------------------------------- + +SettingsList::~SettingsList() + { + for(iSettingsList i = begin(); i!=end(); i++) + delete(i->second); + } + +//--------------------------------------------------------- +// set +//--------------------------------------------------------- + +void SettingsList::set(unsigned id, EditorSettings* e) + { + iSettingsList i = find(id); + if (i == end()) { + //Create a new item + EditorSettings* newItem = e->clone(); + if (DBG_ESETTINGS) + printf("SettingsList::set - storing item with id=%d, " + "object at %p, cloned object at: %p.\n", id, e, newItem); + insert(std::pair(id, newItem)); + } + else { + EditorSettings* newItem = e->clone(); + if (DBG_ESETTINGS) + printf("SettingsList::set - Cloning item with id=%d, object at %p to obj at %p\n", id, e, newItem); + printf("SettingsList::set - deleting settings at: %p\n", i->second); + delete(i->second); //Hmmm, hehhh... Perhaps better to use copy-constructor instead of deletion in different places, but then it's difficult to create object of correct subclass (in a neat way)... (ml) + i->second = newItem; + } + } + +//--------------------------------------------------------- +// get +//--------------------------------------------------------- + +EditorSettings* SettingsList::get(unsigned id) + { + iSettingsList i = find(id); + + if (i == end()) { + if (DBG_ESETTINGS) + printf("SettingsList::get - no match for id=%d\n", id); + return 0; + } + else + return i->second; + } + +//--------------------------------------------------------- +// removeSettings +// remove settings for parts that don't exist anymore +//--------------------------------------------------------- + +void SettingsList::removeSettings(unsigned id) + { + for(iSettingsList i = begin(); i!=end(); i++) { + int bc = i->first; + bc&= ~(0xf0000000); + if (unsigned(bc) == id) { + if (DBG_ESETTINGS) + printf("SettingsList::removeSettings, deleting obj at %p\n", i->second); + delete i->second; + erase(i); + } + } + } + +//--------------------------------------------------------- +// dump +//--------------------------------------------------------- + +void SettingsList::dump() + { +#if 0 + printf("-------SettingsList-DUMP------\n"); + for(iSettingsList i = begin(); i!=end(); i++) { + //printf("i=%x ",i); + printf("PART NO: %x ", i->first); + printf("- i->second at %x\n", i->second); + + i->second->dump(); + } + printf("---END-SettingsList-DUMP------\n"); +#endif + } + +//--------------------------------------------------------- +// writeStatus +//! writes out the settings for all editors and parts +//--------------------------------------------------------- + +void SettingsList::writeStatus(Xml& xml) const + { + xml.tag("settingslist"); + // Write static + ExtEditorSettings::writeStatic(xml); + PianorollSettings::writeStatic(xml); + DrumEditorSettings::writeStatic(xml); + + //Write all nodes + for (ciSettingsList i = begin(); i != end(); i++) { + xml.tag("elem"); + xml.intTag("id", i->first); + i->second->writeStatus(xml); + xml.etag("elem"); + } + xml.etag("settingslist"); + } + +//--------------------------------------------------------- +// readStatus +//! reads the settings for all editors and parts +//--------------------------------------------------------- + +void SettingsList::readStatus(QDomNode node) + { + while (!node.isNull()) { + QDomElement e = node.toElement(); + QString tag = e.tagName(); + if (tag == "elem") + readElem(node.firstChild()); + else if (tag == "exteditorstatic") + ExtEditorSettings::readStatic(node.firstChild()); + else if (tag == "pianorollstatic") + PianorollSettings::readStatic(node.firstChild()); + else if (tag == "drumeditorstatic") + DrumEditorSettings::readStatic(node.firstChild()); + else + printf("MusE:SettingsList: unknown tag %s\n", e.tagName().toAscii().data()); + node = node.nextSibling(); + } + } + +//--------------------------------------------------------- +// readElem +//--------------------------------------------------------- + +void SettingsList::readElem(QDomNode node) + { + int id = 0; + while (!node.isNull()) { + QDomElement e = node.toElement(); + QString tag = e.tagName(); + QString s = e.text(); + int i = s.toInt(); + if (tag == "grapheditorsettings") { + GraphEditorSettings* temp = new GraphEditorSettings(); + temp->readStatus(node.firstChild()); + insert(std::pair(id, temp)); + } + else if (tag == "editorsettings") { + EditorSettings* temp = new EditorSettings(); + temp->readStatus(node.firstChild()); + insert(std::pair(id, temp)); + } + else if (tag == "drumeditorsettings") { + DrumEditorSettings* temp = new DrumEditorSettings(); + temp->readStatus(node.firstChild()); + insert(std::pair(id, temp)); + } + else if (tag == "prollsettings") { + PianorollSettings* temp = new PianorollSettings(); + temp->readStatus(node.firstChild()); + insert(std::pair(id, temp)); + } + else if (tag == "id") + id = i; + else + printf("MusE:SettingsList element: unknown tag %s\n", e.tagName().toAscii().data()); + node = node.nextSibling(); + } + } + + +//--------------------------------------------------------- +/*! + \fn SettingsList::reset() + \brief Remove all previous settings and clean up + */ +//--------------------------------------------------------- +void SettingsList::reset() + { + for (iSettingsList i = begin(); i != end(); i++) { + delete i->second; + } + clear(); + } diff --git a/attic/muse_qt4_evolution/muse/esettings.h b/attic/muse_qt4_evolution/muse/esettings.h new file mode 100644 index 00000000..292c02c7 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/esettings.h @@ -0,0 +1,361 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Description: +// Configuration settings for the midi-editors. +// +// Copyright (C) 2004 Mathias Lundgren +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __ESETTINGS_H__ +#define __ESETTINGS_H__ + +#include +#include + +#define ET_LISTEDIT 0x1000000 +#define ET_MASTEREDIT 0x4000000 +#define ET_PIANO_ROLL 0x10000000 +#define ET_DRUMEDIT 0x20000000 +#define ET_WAVEEDIT 0x40000000 + +#define MAXNOOFCTRLEDITSETTINGS 16 + +#define ES_UNINIT -1 /* Uninitialized parameter */ + +#define ESETTINGS_DEBUG 0 + +#include "debug.h" +#define DBG_ESETTINGS_ON 0 +#define DBG_ESETTINGS debugMsg && DBG_ESETTINGS_ON + +namespace AL { + class Xml; + }; +using AL::Xml; + +class CtrlEdit; + +//----------------------------------------------- +// CtrlEditSettings class +// stores ctrleditsettings +//----------------------------------------------- +class CtrlEditSettings + { + private: + int height; + int controller; + + public: + //const MidiController* controller; + CtrlEditSettings() {} + CtrlEditSettings(int h, int c) { height = h; controller = c; } + CtrlEditSettings(const CtrlEditSettings& c) { height = c.height; controller = c.controller; } + int getHeight() { return height; } + int getController() { return controller; } + void readStatus(QDomNode); + void writeStatus(Xml& xml); + + bool operator==(const CtrlEditSettings& c) const { return (c.height == height && c.controller == controller); } + bool operator!=(const CtrlEditSettings& c) const { return !(c == *this); } + }; + +//----------------------------------------------- +// EditorSettings +// base class for midieditorsettings +//----------------------------------------------- +class EditorSettings + { + protected: + int _raster; + int _width, _height, _x, _y; + + public: + EditorSettings(int r=96, int w=600, int h=400, int x=-1, int y=-1) : _raster(r), _width(w), _height(h), _x(x), _y(y) { } + virtual ~EditorSettings() {} + int raster() const { return _raster; } + void setRaster(int r) { _raster = r; } + int* rasterPtr() { return &_raster; } + int width() const { return _width; } + int height() const { return _height; } + void setWidth(int w) { _width = w; } + void setHeight(int h) { _height = h; } + int x() const { return _x; } + void setX(int x) { _x = x; } + int y() const { return _y; } + void setY(int y) { _y = y; } + + virtual void readStatus(QDomNode); + virtual void writeStatus(Xml&) const; + virtual bool operator==(const EditorSettings& e) const { + return ((e._raster == _raster) && (e._width == _width) && (e._height == _height)/* && (e._x == _x) && (e._y == _y)*/); + } + virtual bool operator!=(const EditorSettings& e) const { return !(e == *this); } + virtual EditorSettings* clone() { return new EditorSettings(_raster, _width, _height, _x, _y); } + virtual void dump() { printf("%p: EditorSettings: r:%d w:%d h:%d x:%d y:%d\n", this, _raster, _width, _height, _x, _y); } + }; + +//--------------------------------------------------------- +// GraphEditorSettings +//--------------------------------------------------------- +class GraphEditorSettings : public EditorSettings + { + protected: + //Values considering scroll + zoom + double _xmag, _ymag; + QPoint _pos; + + public: + GraphEditorSettings(int r=96, int w=600, int h=400, int x=-1, int y=-1, + double xmag=0.05, double ymag=1.0, QPoint pos = QPoint(0, 0)) + : EditorSettings(r, w, h, x, y), _xmag(xmag), _ymag(ymag), _pos(pos) + { + } + virtual ~GraphEditorSettings() {} + + double xmag() const { return _xmag; } + double ymag() const { return _ymag; } + void setXmag(double x) { _xmag = x; } + void setYmag(double y) { _xmag = y; } + QPoint pos() const { return _pos; } + void setPos(const QPoint& p) { _pos = p; } + int ypos() const { return _pos.y(); } + void setYpos(int y) { _pos.setY(y); } + + virtual bool operator==(const EditorSettings& e) const { + const GraphEditorSettings& f = (GraphEditorSettings&) e; + return ((f._raster == _raster) && (f._width == _width) && (f._height == _height)// && (f._x == _x) && (f._y == _y) + && (f._xmag == _xmag) + && (f._ymag == _ymag) + && (f._pos == _pos)); + } + virtual bool operator!=(const EditorSettings& e) const { return !(e == *this); } + virtual EditorSettings* clone() { return new GraphEditorSettings(_raster, _width, _height, _x, _y, _xmag, _ymag, _pos); } + virtual void readStatus(QDomNode); + virtual void writeStatus(Xml&) const; + virtual void dump() { + printf("%p: GraphEditorSettings: r:%d w:%d h:%d x:%d y:%d mag:%f:%f pos:%d ypos:%d\n", + this, _raster, _width, _height, _x, _y, _xmag, _ymag, _pos.x(), _pos.y()); + } + }; + +//--------------------------------------------------------- +// ExtEditorSettings +// Common settings for drumeditor and pianoroll +//--------------------------------------------------------- + +class ExtEditorSettings : public GraphEditorSettings + { + private: + + protected: + int _quant; + int _applyTo; + static bool _steprec; + static bool _midiin; + int _numOfCtrlEdits; + + public: + ExtEditorSettings(int r=96, int w=600, int h=400, int x=-1, int y=-1, double xm=0.05, double ym=1.0, QPoint pos = QPoint(0,0), int q=96, int apply=0); + virtual ~ExtEditorSettings(); + //ExtEditorSettings(const ExtEditorSettings& e) : EditorSettings(e._raster) , _quant(e._quant) { } + static void readStatic(QDomNode); + static void writeStatic(Xml& xml); + CtrlEditSettings* ctrlEdits[MAXNOOFCTRLEDITSETTINGS]; + + virtual bool operator==(const EditorSettings& e) const { //örk... + const ExtEditorSettings& f = (ExtEditorSettings&) e; + bool ctrlEditsEqual = true; + for (int i=0; i::iterator iSettingsList; +typedef std::multimap::const_iterator ciSettingsList; + +class SettingsList : public std::multimap + { + public: + SettingsList(); + ~SettingsList(); + void set(unsigned id, EditorSettings* e); + EditorSettings* get(unsigned); + void removeSettings(unsigned id); + void readElem(QDomNode); + void readStatus(QDomNode); + void writeStatus(Xml&) const; + void dump(); + void reset(); + }; + +#endif diff --git a/attic/muse_qt4_evolution/muse/evdata.h b/attic/muse_qt4_evolution/muse/evdata.h new file mode 100644 index 00000000..629b9e9a --- /dev/null +++ b/attic/muse_qt4_evolution/muse/evdata.h @@ -0,0 +1,85 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __EVDATA_H__ +#define __EVDATA_H__ + +#include + +//--------------------------------------------------------- +// EvData +// variable len event data (sysex, meta etc.) +//--------------------------------------------------------- + +class EvData { + int* refCount; + + public: + unsigned char* data; + int dataLen; + + EvData() { + data = 0; + dataLen = 0; + refCount = new int(1); + } + EvData(const EvData& ed) { + data = ed.data; + dataLen = ed.dataLen; + refCount = ed.refCount; + (*refCount)++; + } + + EvData& operator=(const EvData& ed) { + if (data == ed.data) + return *this; + if (--(*refCount) == 0) { + delete refCount; + delete[] data; + } + data = ed.data; + dataLen = ed.dataLen; + refCount = ed.refCount; + (*refCount)++; + return *this; + } + + bool operator==(const EvData& ed) const { + if(dataLen==ed.dataLen) { + return memcmp(data, ed.data, sizeof(unsigned char) * dataLen)==0; + } + else return false; + } + + ~EvData() { + if (--(*refCount) == 0) { + delete[] data; + delete refCount; + } + } + void setData(const unsigned char* p, int l) { + data = new unsigned char[l]; + memcpy(data, p, l); + dataLen = l; + } + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/event.cpp b/attic/muse_qt4_evolution/muse/event.cpp new file mode 100644 index 00000000..53d68c08 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/event.cpp @@ -0,0 +1,222 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "event.h" +#include "eventbase.h" +#include "waveevent.h" +#include "midieventbase.h" + +using AL::Pos; + +//--------------------------------------------------------- +// Event +//--------------------------------------------------------- + +EventBase::EventBase(EventType t) + { + _type = t; + Pos::setType(_type == Wave ? AL::FRAMES : AL::TICKS); + refCount = 0; + _selected = false; + _recorded = false; + } + +EventBase::EventBase(const EventBase& ev) + : PosLen(ev) + { + refCount = 0; + _selected = ev._selected; + _type = ev._type; + _recorded = ev._recorded; + } + +//--------------------------------------------------------- +// move +//--------------------------------------------------------- + +void EventBase::move(int tickOffset) + { + setTick(tick() + tickOffset); + } + +//--------------------------------------------------------- +// dump +//--------------------------------------------------------- + +void EventBase::dump(int n) const + { + for (int i = 0; i < n; ++i) + putchar(' '); + printf("Event %p refs:%d ", this, refCount); + PosLen::dump(n+2); + } + +//--------------------------------------------------------- +// clone +//--------------------------------------------------------- + +Event Event::clone() const + { + return Event(ev->clone()); + } + +Event::Event(EventType t) + { + if (t == Wave) + ev = new WaveEventBase(t); + else + ev = new MidiEventBase(t); + ++(ev->refCount); + } + +Event::Event(const Event& e) + { + ev = e.ev; + if (ev) + ++(ev->refCount); + } + +Event::Event(EventBase* eb) + { + ev = eb; + ++(ev->refCount); + } + +Event::~Event() + { + if (ev && --(ev->refCount) == 0) + delete ev; + } + +bool Event::empty() const + { + return ev == 0; + } + +EventType Event::type() const + { + return ev ? ev->type() : Note; + } + +void Event::setType(EventType t) + { + if (ev && --(ev->refCount) == 0) + delete ev; + if (t == Wave) + ev = new WaveEventBase(t); + else + ev = new MidiEventBase(t); + ++(ev->refCount); + } + +Event& Event::operator=(const Event& e) + { + if (ev == e.ev) + return *this; + if (ev && --(ev->refCount) == 0) + delete ev; + ev = e.ev; + if (ev) + ++(ev->refCount); + return *this; + } + +bool Event::operator==(const Event& e) const { + return *ev == *e.ev; + } + + +int Event::getRefCount() const { return ev->getRefCount(); } +bool Event::selected() const { return ev->_selected; } +void Event::setSelected(bool val) { ev->_selected = val; } +bool Event::recorded() const { return ev->_recorded; } +void Event::setRecorded(bool val) { ev->_recorded = val; } +void Event::move(int offset) { ev->move(offset); } + +void Event::read(QDomNode node) { ev->read(node); } +void Event::write(Xml& xml, const Pos& o) const { ev->write(xml, o); } +void Event::dump(int n) const { ev->dump(n); } +Event Event::mid(unsigned a, unsigned b) { return Event(ev->mid(a, b)); } + +bool Event::isNote() const { return ev->isNote(); } +bool Event::isNoteOff() const { return ev->isNoteOff(); } +bool Event::isNoteOff(const Event& e) const { return ev->isNoteOff(e); } +int Event::dataA() const { return ev->dataA(); } +int Event::pitch() const { return ev->dataA(); } +void Event::setA(int val) { ev->setA(val); } +void Event::setPitch(int val) { ev->setA(val); } +int Event::dataB() const { return ev->dataB(); } +int Event::velo() const { return ev->dataB(); } +void Event::setB(int val) { ev->setB(val); } +void Event::setVelo(int val) { ev->setB(val); } +int Event::dataC() const { return ev->dataC(); } +int Event::veloOff() const { return ev->dataC(); } +void Event::setC(int val) { ev->setC(val); } +void Event::setVeloOff(int val) { ev->setC(val); } + +const unsigned char* Event::data() const { return ev->data(); } +int Event::dataLen() const { return ev->dataLen(); } +void Event::setData(const unsigned char* data, int len) { ev->setData(data, len); } +const EvData Event::eventData() const { return ev->eventData(); } + +const QString Event::name() const { return ev->name(); } +void Event::setName(const QString& s) { ev->setName(s); } +int Event::spos() const { return ev->spos(); } +void Event::setSpos(int s) { ev->setSpos(s); } +SndFileR Event::sndFile() const { return ev->sndFile(); } +void Event::setSndFile(SndFileR& sf) { ev->setSndFile(sf); } +void Event::read(unsigned offset, float** bpp, int channels, int nn) + { + ev->read(offset, bpp, channels, nn); + } + +void Event::setTick(unsigned val) { ev->setTick(val); } +unsigned Event::tick() const { return ev->tick(); } +Pos Event::pos() const { return *ev; } +unsigned Event::frame() const { return ev->frame(); } +void Event::setFrame(unsigned val) { ev->setFrame(val); } +void Event::setLenTick(unsigned val) { ev->setLenTick(val); } +void Event::setLenFrame(unsigned val) { ev->setLenFrame(val); } +unsigned Event::lenTick() const { return ev->lenTick(); } +unsigned Event::lenFrame() const { return ev->lenFrame(); } +Pos Event::end() const { return ev->end(); } +unsigned Event::endTick() const { return ev->end().tick(); } +unsigned Event::endFrame() const { return ev->end().frame(); } +void Event::setPos(const Pos& p) { ev->setPos(p); } +QString Event::eventTypeName() const { return ev->eventTypeName(); } + + +//--------------------------------------------------------- +// eventTypeName +//--------------------------------------------------------- + +QString EventBase::eventTypeName() const + { + switch(type()) { + case Note: return QString("Note"); + case Controller: return QString("Ctrl"); + case Sysex: return QString("Sysex"); + case PAfter: return QString("PAfter"); + case CAfter: return QString("CAfter"); + case Meta: return QString("Meta"); + default: return QString("??"); + } + } + diff --git a/attic/muse_qt4_evolution/muse/event.h b/attic/muse_qt4_evolution/muse/event.h new file mode 100644 index 00000000..62b79756 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/event.h @@ -0,0 +1,139 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __EVENT_H__ +#define __EVENT_H__ + +#include "wave.h" // wg. SndFile +#include "al/xml.h" +#include "al/pos.h" +#include "evdata.h" + +using AL::Xml; +using AL::Pos; + +enum EventType { Note, Controller, Sysex, PAfter, CAfter, Meta, Wave }; +class EventBase; + +//--------------------------------------------------------- +// Event +//--------------------------------------------------------- + +class Event { + EventBase* ev; + + public: + Event() { ev = 0; } + Event(EventType t); + Event(const Event& e); + Event(EventBase* eb); + virtual ~Event(); + + bool empty() const; + EventType type() const; + QString eventTypeName() const; + + void setType(EventType t); + Event& operator=(const Event& e); + bool operator==(const Event& e) const; + + int getRefCount() const; + bool selected() const; + void setSelected(bool val); + bool recorded() const; + void setRecorded(bool val); + void move(int offset); + + void read(QDomNode); + void write(AL::Xml& xml, const Pos& offset) const; + void dump(int n = 0) const; + Event clone() const; + Event mid(unsigned a, unsigned b); + + bool isNote() const; + bool isNoteOff() const; + bool isNoteOff(const Event& e) const; + int dataA() const; + int pitch() const; + void setA(int val); + void setPitch(int val); + int dataB() const; + int velo() const; + void setB(int val); + void setVelo(int val); + int dataC() const; + int veloOff() const; + void setC(int val); + void setVeloOff(int val); + + const unsigned char* data() const; + int dataLen() const; + void setData(const unsigned char* data, int len); + const EvData eventData() const; + + const QString name() const; + void setName(const QString& s); + int spos() const; + void setSpos(int s); + SndFileR sndFile() const; + virtual void setSndFile(SndFileR& sf); + virtual void read(unsigned offset, float** bpp, int channels, int nn); + + Pos pos() const; + Pos end() const; + + void setTick(unsigned val); + unsigned tick() const; + unsigned frame() const; + void setFrame(unsigned val); + void setLenTick(unsigned val); + void setLenFrame(unsigned val); + unsigned lenTick() const; + unsigned lenFrame() const; + unsigned endTick() const; + unsigned endFrame() const; + void setPos(const Pos& p); + }; + +typedef std::multimap > EL; +typedef EL::iterator iEvent; +typedef EL::reverse_iterator riEvent; +typedef EL::const_iterator ciEvent; +typedef std::pair EventRange; + +//--------------------------------------------------------- +// EventList +// tick sorted list of events +//--------------------------------------------------------- + +class EventList : public EL { + public: + int cloneCount; + EventList() { cloneCount = 0; } + iEvent find(const Event&); + iEvent add(const Event& event); + iEvent add(const Event& event, unsigned tick); + void move(const Event& event, unsigned tick); + void dump() const; + void read(QDomNode, bool midi); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/eventbase.h b/attic/muse_qt4_evolution/muse/eventbase.h new file mode 100644 index 00000000..27d9e323 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/eventbase.h @@ -0,0 +1,100 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __EVENTBASE_H__ +#define __EVENTBASE_H__ + +#include "al/pos.h" + +//--------------------------------------------------------- +// EventBase +//--------------------------------------------------------- + +class EventBase : public AL::PosLen { + EventType _type; + + protected: + int refCount; + bool _selected; + bool _recorded; + + public: + EventBase(EventType t); + EventBase(const EventBase& ev); + QString eventTypeName() const; + + virtual ~EventBase() {} + + int getRefCount() const { return refCount; } + EventType type() const { return _type; } + void setType(EventType t) { _type = t; } + bool selected() const { return _selected; } + void setSelected(bool val) { _selected = val; } + bool recorded() const { return _recorded; } + void setRecorded(bool val) { _recorded = val; } + + void move(int offset); + + virtual void read(QDomNode) = 0; + virtual void write(Xml&, const Pos& offset) const = 0; + virtual void dump(int n = 0) const; + virtual EventBase* mid(unsigned, unsigned) = 0; + friend class Event; + + virtual bool isNote() const { return false; } + virtual bool isNoteOff() const { return false; } + virtual bool isNoteOff(const Event&) const { return false; } + virtual int pitch() const { return 0; } + virtual int program() const { return 0; } + virtual int cntrl() const { return 0; } + virtual int dataA() const { return 0; } + virtual void setA(int) { } + virtual void setPitch(int) { } + + virtual int cntrlVal() const { return 0; } + virtual int dataB() const { return 0; } + virtual int velo() const { return 0; } + virtual void setB(int) { } + virtual void setVelo(int) { } + + virtual int veloOff() const { return 0; } + virtual int dataC() const { return 0; } + virtual void setC(int) { } + virtual void setVeloOff(int) { } + + virtual const unsigned char* data() const { return 0; } + virtual int dataLen() const { return 0; } + virtual void setData(const unsigned char*, int) { } + virtual const EvData eventData() const { return EvData(); } + + virtual const QString name() const { return QString("?"); } + virtual void setName(const QString&) { } + virtual int spos() const { return 0; } + virtual void setSpos(int) { } + virtual SndFileR sndFile() const { return 0; } + virtual void setSndFile(SndFileR&) { } + virtual EventBase* clone() const = 0; + virtual void read(unsigned /*offset*/, float** /*bpp*/, int /*channels*/, int /*nn*/) {} + + virtual bool operator==(const EventBase&) const { return false; } + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/eventlist.cpp b/attic/muse_qt4_evolution/muse/eventlist.cpp new file mode 100644 index 00000000..82d3b389 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/eventlist.cpp @@ -0,0 +1,93 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "event.h" +#include "al/xml.h" + +//--------------------------------------------------------- +// readEventList +//--------------------------------------------------------- + +void EventList::read(QDomNode node, bool midi) + { + for (; !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + QString tag(e.tagName()); + if (tag.isEmpty()) + continue; + if (tag == "event") { + Event e(midi ? Note : Wave); + e.read(node); + add(e); + } + else + printf("EventListData:read(): unknown tag %s\n", tag.toAscii().data()); + } + } + +//--------------------------------------------------------- +// add +//--------------------------------------------------------- + +iEvent EventList::add(const Event& event, unsigned tick) + { + return std::multimap >::insert(std::pair (tick, event)); + } + +iEvent EventList::add(const Event& event) + { + return add(event, event.tick()); + } + +//--------------------------------------------------------- +// move +//--------------------------------------------------------- + +void EventList::move(const Event& event, unsigned tick) + { + iEvent i = find(event); + erase(i); + std::multimap >::insert(std::pair (tick, event)); + } + +//--------------------------------------------------------- +// find +//--------------------------------------------------------- + +iEvent EventList::find(const Event& event) + { + EventRange range = equal_range(event.tick()); + for (iEvent i = range.first; i != range.second; ++i) { + if (i->second == event) + return i; + } + return end(); + } + +//--------------------------------------------------------- +// dump +//--------------------------------------------------------- + +void EventList::dump() const + { + for (ciEvent i = begin(); i != end(); ++i) + i->second.dump(); + } + diff --git a/attic/muse_qt4_evolution/muse/exportmidi.cpp b/attic/muse_qt4_evolution/muse/exportmidi.cpp new file mode 100644 index 00000000..f18794ab --- /dev/null +++ b/attic/muse_qt4_evolution/muse/exportmidi.cpp @@ -0,0 +1,376 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "muse.h" +#include "midifile.h" +#include "midi.h" +#include "midictrl.h" +#include "globals.h" +#include "widgets/filedialog.h" +#include "song.h" +#include "midievent.h" +#include "event.h" +#include "midiedit/drummap.h" +#include "gconfig.h" +#include "al/sig.h" +#include "al/tempo.h" +#include "al/marker.h" +#include "part.h" +#include "exportmidi.h" + +//--------------------------------------------------------- +// addController +//--------------------------------------------------------- + +static void addController(MidiEventList* l, int tick, int channel, int a, int b) + { + if (a < 0x1000) { // 7 Bit Controller + l->insert(MidiEvent(tick, channel, ME_CONTROLLER, a, b)); + } + else if (a < 0x20000) { // 14 Bit Controller + int ctrlH = (a >> 8) & 0x7f; + int ctrlL = a & 0x7f; + int dataH = (b >> 7) & 0x7f; + int dataL = b & 0x7f; + l->insert(MidiEvent(tick, channel, ME_CONTROLLER, ctrlH, dataH)); + l->insert(MidiEvent(tick+1, channel, ME_CONTROLLER, ctrlL, dataL)); + } + else if (a < 0x30000) { // RPN 7-Bit Controller + int ctrlH = (a >> 8) & 0x7f; + int ctrlL = a & 0x7f; + l->insert(MidiEvent(tick, channel, ME_CONTROLLER, CTRL_HRPN, ctrlH)); + l->insert(MidiEvent(tick+1, channel, ME_CONTROLLER, CTRL_LRPN, ctrlL)); + l->insert(MidiEvent(tick+2, channel, ME_CONTROLLER, CTRL_HDATA, b)); + } + else if (a < 0x40000) { // NRPN 7-Bit Controller + int ctrlH = (a >> 8) & 0x7f; + int ctrlL = a & 0x7f; + l->insert(MidiEvent(tick, channel, ME_CONTROLLER, CTRL_HNRPN, ctrlH)); + l->insert(MidiEvent(tick+1, channel, ME_CONTROLLER, CTRL_LNRPN, ctrlL)); + l->insert(MidiEvent(tick+2, channel, ME_CONTROLLER, CTRL_HDATA, b)); + } + else if (a == CTRL_PITCH) { + int a = b + 8192; + int b = a >> 7; + l->insert(MidiEvent(tick, channel, ME_PITCHBEND, a & 0x7f, b & 0x7f)); + } + else if (a == CTRL_PROGRAM) { + int hb = (b >> 16) & 0xff; + int lb = (b >> 8) & 0xff; + int pr = b & 0x7f; + int tickoffset = 0; + if (hb != 0xff) { + l->insert(MidiEvent(tick, channel, ME_CONTROLLER, CTRL_HBANK, hb)); + ++tickoffset; + } + if (lb != 0xff) { + l->insert(MidiEvent(tick+tickoffset, channel, ME_CONTROLLER, CTRL_LBANK, lb)); + ++tickoffset; + } + l->insert(MidiEvent(tick+tickoffset, channel, ME_PROGRAM, pr, 0)); + } + else if (a < 0x60000) { // RPN14 Controller + int ctrlH = (a >> 8) & 0x7f; + int ctrlL = a & 0x7f; + int dataH = (b >> 7) & 0x7f; + int dataL = b & 0x7f; + l->insert(MidiEvent(tick, channel, ME_CONTROLLER, CTRL_HRPN, ctrlH)); + l->insert(MidiEvent(tick+1, channel, ME_CONTROLLER, CTRL_LRPN, ctrlL)); + l->insert(MidiEvent(tick+2, channel, ME_CONTROLLER, CTRL_HDATA, dataH)); + l->insert(MidiEvent(tick+3, channel, ME_CONTROLLER, CTRL_LDATA, dataL)); + } + else if (a < 0x70000) { // NRPN14 Controller + int ctrlH = (a >> 8) & 0x7f; + int ctrlL = a & 0x7f; + int dataH = (b >> 7) & 0x7f; + int dataL = b & 0x7f; + l->insert(MidiEvent(tick, channel, ME_CONTROLLER, CTRL_HNRPN, ctrlH)); + l->insert(MidiEvent(tick+1, channel, ME_CONTROLLER, CTRL_LNRPN, ctrlL)); + l->insert(MidiEvent(tick+2, channel, ME_CONTROLLER, CTRL_HDATA, dataH)); + l->insert(MidiEvent(tick+3, channel, ME_CONTROLLER, CTRL_LDATA, dataL)); + } + } + +//--------------------------------------------------------- +// exportMidi +//--------------------------------------------------------- + +void MusE::exportMidi() + { + if (exportMidiDialog == 0) + exportMidiDialog = new ExportMidiDialog(song->projectPath()); + int rv = exportMidiDialog->exec(); + if (rv == 0) + return; + QString name = exportMidiDialog->filename->text(); + QFile fp(name); + if (fp.exists()) { + QString s(QWidget::tr("File\n") + name + QWidget::tr("\nexists")); + int rv = QMessageBox::warning(this, + QWidget::tr("MusE: export midi file:"), + s, + QWidget::tr("Overwrite"), + QWidget::tr("Quit"), QString::null, 0, 1); + if (rv == 1) + return; + } + + MidiFile mf; + int format = exportMidiDialog->smf0->isChecked() ? 0 : 1; + mf.setFormat(format); + + MidiFileTrackList* mtl = new MidiFileTrackList; + + MidiTrackList* mt = song->midis(); + for (iMidiTrack im = mt->begin(); im != mt->end(); ++im) { + MidiTrack* track = *im; + + MidiFileTrack* mft = new MidiFileTrack; + mtl->push_back(mft); + + MidiEventList* l = &(mft->events); + int channel = 0; + channel = track->channelNo(); + + //----------------------------------- + // track name + //----------------------------------- + + if (!track->name().isEmpty()) { + const char* name = track->name().toAscii().data(); + int len = strlen(name); + MidiEvent ev(0, ME_META, (unsigned char*)name, len+1); + ev.setA(0x3); // Meta Sequence/Track Name + l->insert(ev); + } + + //----------------------------------- + // managed controller + //----------------------------------- + + CtrlList* cll = track->controller(); + for (iCtrl ivl = cll->begin(); ivl != cll->end(); ++ivl) { + Ctrl* c = ivl->second; + int id = c->id(); + for (iCtrlVal iv = c->begin(); iv != c->end(); ++iv) { + int tick = iv.key(); + int val = iv.value().i; + addController(l, tick, channel, id, val); + } + } + + //----------------------------------- + // track comment + //----------------------------------- + + if (!track->comment().isEmpty()) { + const char* comment = track->comment().toAscii().data(); + int len = strlen(comment); + MidiEvent ev(0, ME_META, (unsigned char*)comment, len+1); + ev.setA(0xf); // Meta Text + l->insert(ev); + } + PartList* parts = track->parts(); + for (iPart p = parts->begin(); p != parts->end(); ++p) { + Part* part = p->second; + EventList* evlist = part->events(); + for (iEvent i = evlist->begin(); i != evlist->end(); ++i) { + Event ev = i->second; + int tick = ev.tick() + part->tick(); + + switch (ev.type()) { + case Note: + { + if (ev.velo() == 0) { + printf("Warning: midi note has velocity 0, (ignored)\n"); + continue; + } + int pitch = ev.pitch(); + int velo = ev.velo(); + int len = ev.lenTick(); + + //--------------------------------------- + // apply trackinfo values + //--------------------------------------- + + if (track->transposition() + || track->velocity() + || track->compression() != 100 + || track->len() != 100) { + pitch += track->transposition(); + if (pitch > 127) + pitch = 127; + if (pitch < 0) + pitch = 0; + + velo += track->velocity(); + velo = (velo * track->compression()) / 100; + if (velo > 127) + velo = 127; + if (velo < 1) // no off event + velo = 1; + len = (len * track->len()) / 100; + } + if (len <= 0) + len = 1; + l->insert(MidiEvent(tick, channel, ME_NOTEON, pitch, velo)); + l->insert(MidiEvent(tick+len, channel, ME_NOTEON, pitch, 0)); + } + break; + + case Controller: + addController(l, tick, channel, ev.dataA(), ev.dataB()); + break; + + case Sysex: + l->insert(MidiEvent(tick, ME_SYSEX, ev.eventData())); + break; + + case PAfter: + l->insert(MidiEvent(tick, channel, ME_AFTERTOUCH, ev.dataA(), ev.dataB())); + break; + + case CAfter: + l->insert(MidiEvent(tick, channel, ME_POLYAFTER, ev.dataA(), ev.dataB())); + break; + + case Meta: + { + MidiEvent mpev(tick, ME_META, ev.eventData()); + mpev.setA(ev.dataA()); + l->insert(mpev); + } + break; + case Wave: + break; + } + } + } + } + + MidiFileTrack* mft = mtl->front(); + MidiEventList* l = &(mft->events); + + //--------------------------------------------------- + // Write Track Marker + // + AL::MarkerList* ml = song->marker(); + for (AL::ciMarker m = ml->begin(); m != ml->end(); ++m) { + const char* name = m->second.name().toAscii().data(); + int len = strlen(name); + MidiEvent ev(m->first, ME_META, (unsigned char*)name, len); + ev.setA(0x6); + l->insert(ev); + } + + //--------------------------------------------------- + // Write Copyright + // + const char* copyright = config.copyright.toAscii().data(); + if (copyright && *copyright) { + int len = strlen(copyright); + MidiEvent ev(0, ME_META, (unsigned char*)copyright, len); + ev.setA(0x2); + l->insert(ev); + } + + //--------------------------------------------------- + // Write Tempomap + // + AL::TempoList* tl = &AL::tempomap; + for (AL::ciTEvent e = tl->begin(); e != tl->end(); ++e) { + AL::TEvent* event = e->second; + unsigned char data[3]; + int tempo = event->tempo; + data[2] = tempo & 0xff; + data[1] = (tempo >> 8) & 0xff; + data[0] = (tempo >> 16) & 0xff; + MidiEvent ev(event->tick, ME_META, data, 3); + ev.setA(0x51); + l->insert(ev); + } + + //--------------------------------------------------- + // Write Signatures + // + const AL::SigList* sl = &AL::sigmap; + for (AL::ciSigEvent e = sl->begin(); e != sl->end(); ++e) { + AL::SigEvent* event = e->second; + unsigned char data[2]; + data[0] = event->sig.z; + switch(event->sig.n) { + case 1: data[1] = 0; break; + case 2: data[1] = 1; break; + case 4: data[1] = 2; break; + case 8: data[1] = 3; break; + case 16: data[1] = 4; break; + case 32: data[1] = 5; break; + case 64: data[1] = 6; break; + default: + fprintf(stderr, "falsche Signatur; nenner %d\n", event->sig.n); + break; + } + MidiEvent ev(event->tick, ME_META, data, 2); + ev.setA(0x58); + l->insert(ev); + } + + mf.setDivision(config.midiDivision); + mf.setTrackList(mtl); + fp.open(QIODevice::WriteOnly); + mf.write(&fp); + fp.close(); + } + +//--------------------------------------------------------- +// ExportMidiDialog +//--------------------------------------------------------- + +ExportMidiDialog::ExportMidiDialog(const QString& name, QWidget* parent) + : QDialog(parent) + { + setupUi(this); + + smf0->setChecked(config.smfFormat == 0); + smf1->setChecked(config.smfFormat == 1); + QFileInfo fi(name); + QString s(fi.path() + "/" + fi.baseName() + ".mid"); + label->setText(tr("Save ") + fi.baseName() + tr(" as smf midi file")); + filename->setText(s); + connect(fileButton, SIGNAL(clicked()), SLOT(startFileBrowser())); + } + +//--------------------------------------------------------- +// startFileBrowser +//--------------------------------------------------------- + +void ExportMidiDialog::startFileBrowser() + { + QString s = QFileDialog::getSaveFileName( + (QWidget*)this, + tr("MusE: export midi smf file"), + QFileInfo(filename->text()).path(), + QString("Midi Files (*.mid *.kar *.MID)"), + 0, + QFileDialog::DontConfirmOverwrite); + if (!s.isEmpty()) + filename->setText(s); + } + diff --git a/attic/muse_qt4_evolution/muse/exportmidi.h b/attic/muse_qt4_evolution/muse/exportmidi.h new file mode 100644 index 00000000..0a4fa071 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/exportmidi.h @@ -0,0 +1,41 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __EXPORTMIDI_H__ +#define __EXPORTMIDI_H__ + +#include "ui_exportmididialog.h" + +//--------------------------------------------------------- +// ExportMidiDialog +//--------------------------------------------------------- + +class ExportMidiDialog : public QDialog, public Ui::ExportMidiDialogBase { + Q_OBJECT + + private slots: + void startFileBrowser(); + + public: + ExportMidiDialog(const QString&, QWidget* parent = 0); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/exportmididialog.ui b/attic/muse_qt4_evolution/muse/exportmididialog.ui new file mode 100644 index 00000000..69d35da1 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/exportmididialog.ui @@ -0,0 +1,176 @@ + + + + + ExportMidiDialogBase + + + + 0 + 0 + 425 + 316 + + + + MusE: Export Midi + + + + 9 + + + 6 + + + + + + + + + + + + Qt::Horizontal + + + + + + + SMF Typ 0 (single track) + + + + + + + SMF Typ 1 (multiple tracks) + + + true + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + 0 + + + 6 + + + + + Save As: + + + + + + + + + + ... + + + :/xpm/filenew.png + + + + + + + + + 0 + + + 6 + + + + + Qt::Horizontal + + + + 131 + 31 + + + + + + + + OK + + + + + + + Cancel + + + + + + + + + + + + + + okButton + clicked() + ExportMidiDialogBase + accept() + + + 321 + 274 + + + 96 + 254 + + + + + cancelButton + clicked() + ExportMidiDialogBase + reject() + + + 414 + 274 + + + 179 + 282 + + + + + diff --git a/attic/muse_qt4_evolution/muse/extmidieditor.cpp b/attic/muse_qt4_evolution/muse/extmidieditor.cpp new file mode 100644 index 00000000..38377b94 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/extmidieditor.cpp @@ -0,0 +1,422 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2004 Mathias Lundgren +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __EXTMIDIEDITOR_CPP__ +#define __EXTMIDIEDITOR_CPP__ + +#include "extmidieditor.h" +#include "part.h" +#include "al/xml.h" +#include "al/pos.h" +#include "song.h" +#include "midiedit/ecanvas.h" +#include "waveedit/waveview.h" +#include "esettings.h" +// #include "../ctrl/ctrledit.h" + +//--------------------------------------------------------- +// GraphMidiEditor +//--------------------------------------------------------- + +GraphMidiEditor::GraphMidiEditor(PartList* pl) + : MidiEditor(pl) + { + setIconSize(QSize(ICON_SIZE)); + _followSong = true; + } + +//--------------------------------------------------------- +// ~GraphMidiEditor +//--------------------------------------------------------- + +GraphMidiEditor::~GraphMidiEditor() + { + refreshSettings(); + } + +//--------------------------------------------------------- +// newDefaultSettings +//--------------------------------------------------------- + +EditorSettings* GraphMidiEditor::newDefaultSettings() + { + return new GraphEditorSettings(); + } + +//--------------------------------------------------------- +// initSettings +//--------------------------------------------------------- + +void GraphMidiEditor::initSettings() + { + MidiEditor::initSettings(); +#if 0 //TD + GraphEditorSettings* s = ((GraphEditorSettings*)(settings)); + hscroll->setXmag(s->xmag()); //horizontal zoom + hscroll->setPos(s->pos()); + + if (editorType != ET_WAVEEDIT) + vscroll->setPos(((GraphEditorSettings*)settings)->ypos()); +#endif + } + + +//--------------------------------------------------------- +// refreshSettings +//--------------------------------------------------------- +void GraphMidiEditor::refreshSettings() const + { + MidiEditor::refreshSettings(); +// if (editorType != ET_WAVEEDIT) //hACK! TODO: Separate waveedit class +// ((GraphEditorSettings*)settings)->setYpos(vscroll->pos()); + } + +//--------------------------------------------------------- +// raster +//--------------------------------------------------------- +int GraphMidiEditor::raster() const + { + return settings->raster(); + } + +//--------------------------------------------------------- +// setRaster +//--------------------------------------------------------- +void GraphMidiEditor::setRaster(int val) + { + settings->setRaster(val); +// canvas->setFocus(); // give back focus after kb input + //_raster = val; + } + +//--------------------------------------------------------- +// rasterStep +//--------------------------------------------------------- +int GraphMidiEditor::rasterStep(unsigned tick) const + { + return AL::sigmap.rasterStep(tick, settings->raster()); + } + +//--------------------------------------------------------- +// rasterVal +//--------------------------------------------------------- +unsigned GraphMidiEditor::rasterVal(unsigned v) const + { + return AL::sigmap.raster(v, settings->raster()); + } + +//--------------------------------------------------------- +// rasterVal1 +//--------------------------------------------------------- +unsigned GraphMidiEditor::rasterVal1(unsigned v) const + { + return AL::sigmap.raster1(v, settings->raster()); + } + +//--------------------------------------------------------- +// rasterVal2 +//--------------------------------------------------------- +unsigned GraphMidiEditor::rasterVal2(unsigned v) const + { + return AL::sigmap.raster2(v, settings->raster()); + } + + +//--------------------------------------------------------- +// ExtMidiEditor +//--------------------------------------------------------- + +ExtMidiEditor::ExtMidiEditor(PartList* pl) + : GraphMidiEditor(pl) + { + _curDrumInstrument = -1; + //printf("ExtMidiEditor, defaultSettings: %x\n",&defaultSettings); + } + +//--------------------------------------------------------- +// ~ExtMidiEditor +//--------------------------------------------------------- + +ExtMidiEditor::~ExtMidiEditor() + { + refreshSettings(); + } + +//--------------------------------------------------------- +// updateCtrlEdits +//--------------------------------------------------------- + +void ExtMidiEditor::updateCtrlEdits() const + { +#if 0 //TD + ExtEditorSettings* s = (ExtEditorSettings*) settings; + int j=0; + for (std::list::const_iterator i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i, j++) { + CtrlEdit* ctrlEdit = (*i); + int ctrlid = ctrlEdit->controllerId(); + CtrlEditSettings* ctrl = new CtrlEditSettings(ctrlEdit->getPanelHeight(), ctrlid); + s->setControlEditSettings(j, ctrl); + } +#endif + } + +//--------------------------------------------------------- +// newDefaultSettings +//--------------------------------------------------------- +EditorSettings* ExtMidiEditor::newDefaultSettings() + { + return (EditorSettings*) new ExtEditorSettings(); + } + +//--------------------------------------------------------- +// initSettings +//--------------------------------------------------------- + +void ExtMidiEditor::initSettings() + { + GraphMidiEditor::initSettings(); + + ExtEditorSettings* s = (ExtEditorSettings*) settings; + srec->setChecked(s->steprec()); //set steprec + midiin->setChecked(s->midiin()); //set midiin + int ctrlsize = s->getControlEditSize(); + //Set to 0 again to not get the double amount of ctrledits: + s->setControlEditSize(0); + for (int i=0; i< ctrlsize; i++) { + CtrlEditSettings* settings = s->getControlEditSettings(i); + CtrlEdit* ctrlEdit = addCtrl(); +//TD ctrlEdit->setController(settings->getController()); + } + QList vl; + vl.push_back(400); // dummy: canvas height + for (int i = 0; i < ctrlsize; i++) { + CtrlEditSettings* settings = s->getControlEditSettings(i); + vl.push_back(settings->getHeight()); + } +//TD splitter->setSizes(vl); + } + +//--------------------------------------------------------- +// quantVal +//--------------------------------------------------------- + +int ExtMidiEditor::quantVal(int v) const + { + ExtEditorSettings* s = (ExtEditorSettings*) settings; + //int val = ((v+_quant/2)/_quant)*_quant; + int q = s->quant(); + int val = ((v+q/2)/q)*q; + if (val == 0) + val = q; + return val; + } + +//--------------------------------------------------------- +// readStatus +//--------------------------------------------------------- + +/* +void ExtMidiEditor::readStatus(Xml& xml) + { + if (_pl == 0) + _pl = new PartList; + + for (;;) { + Xml::Token token = xml.parse(); + QString tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "quant") + _quant = xml.parseInt(); + else if (tag == "raster") + _raster = xml.parseInt(); + else if (tag == "topwin") + TopWin::readStatus(xml); + else + xml.unknown("MidiEditor"); + break; + case Xml::TagEnd: + if (tag == "midieditor") + return; + default: + break; + } + } + } +*/ + +//--------------------------------------------------------- +// setCurDrumInstrument +//--------------------------------------------------------- + +void ExtMidiEditor::setCurDrumInstrument(int instr) + { + _curDrumInstrument = instr; + emit curDrumInstrumentChanged(_curDrumInstrument); + } + +//--------------------------------------------------------- +// writeStatus +//--------------------------------------------------------- +/* +void ExtMidiEditor::writeStatus(int level, Xml& xml) const + { + xml.tag(level++, "midieditor"); + TopWin::writeStatus(level, xml); + xml.intTag(level, "quant", _quant); + xml.intTag(level, "raster", _raster); + xml.tag(level, "/midieditor"); + } +*/ + +//--------------------------------------------------------- +// quant +//--------------------------------------------------------- +int ExtMidiEditor::quant() const + { + ExtEditorSettings* s = (ExtEditorSettings*) settings; + return s->quant(); + } + +//--------------------------------------------------------- +// setQuant +//--------------------------------------------------------- + +void ExtMidiEditor::setQuant(int val) + { + ExtEditorSettings* s = (ExtEditorSettings*) settings; + s->setQuant(val); + canvas->setQuant(val); + canvas->setFocus(); + } + + +//--------------------------------------------------------- +// follow +//--------------------------------------------------------- + +void ExtMidiEditor::follow(int pos) + { + int s, e; + canvas->range(&s, &e); + +// if (pos < e && pos >= s) +// hscroll->setOffset(pos); +// if (pos < s) +// hscroll->setOffset(s); + } + +//--------------------------------------------------------- +// removeCtrl +//--------------------------------------------------------- + +void ExtMidiEditor::removeCtrl(CtrlEdit* ctrl) + { + for (std::list::iterator i = ctrlEditList.begin(); + i != ctrlEditList.end(); ++i) { + if (*i == ctrl) { + ctrlEditList.erase(i); + break; + } + } + ExtEditorSettings* s = (ExtEditorSettings*)settings; + int n = s->getControlEditSize(); + n--; + s->setControlEditSize(n); + } + +//--------------------------------------------------------- +// addCtrl +//--------------------------------------------------------- + +CtrlEdit* ExtMidiEditor::addCtrl() + { +#if 0 //TD + bool expanding = editorType == ET_DRUMEDIT ? true : false; + + CtrlEdit* ctrlEdit = new CtrlEdit(splitter, this, EXTMIDIEDITOR_XSCALE, expanding, "extMidiEditorCtrlEdit"); + splitter->setResizeMode(ctrlEdit, QSplitter::KeepSize); + + // Calculate sizes: + QList sizes = splitter->sizes(); + QList newSizes; + QListIterator i = sizes.begin(); + + int editorHeight = *i - EXTMIDIEDITOR_DEFAULT_CTRLHEIGHT; + int ctrlHeight = EXTMIDIEDITOR_DEFAULT_CTRLHEIGHT; + if (editorHeight < 0) { + ctrlHeight = EXTMIDIEDITOR_DEFAULT_CTRLHEIGHT + editorHeight; + editorHeight = *i - ctrlHeight; + } + if (editorHeight < 0) { + editorHeight = 5; + } + + newSizes.append(editorHeight); + for (i++; i != sizes.end(); i++) { + newSizes.append(*i); + } + newSizes.pop_back(); + newSizes.append(ctrlHeight); + splitter->setSizes(newSizes); + + ctrlEdit->blockSignals(true); + connect(tools2, SIGNAL(toolChanged(int)), ctrlEdit, SLOT(setTool(int))); +// connect(hscroll, SIGNAL(scrollChanged(int)), ctrlEdit, SLOT(setXPos(int))); +// connect(hscroll, SIGNAL(scaleChanged(int)), ctrlEdit, SLOT(setXMag(int))); + connect(ctrlEdit, SIGNAL(timeChanged(unsigned)), SLOT(setTime(unsigned))); + connect(ctrlEdit, SIGNAL(destroyedCtrl(CtrlEdit*)), SLOT(removeCtrl(CtrlEdit*))); +// connect(ctrlEdit, SIGNAL(yposChanged(int)), toolbar, SLOT(setInt(int))); + + ctrlEdit->setTool(tools2->curTool()); +// ctrlEdit->setXPos(hscroll->pos()); +// ctrlEdit->setXMag(hscroll->getScaleValue()); + ctrlEdit->setController(CTRL_VELOCITY); + + ctrlEdit->show(); + ctrlEditList.push_back(ctrlEdit); + ctrlEdit->blockSignals(false); + ExtEditorSettings* s = (ExtEditorSettings*)settings; + int n = s->getControlEditSize(); + n++; + s->setControlEditSize(n); + return ctrlEdit; +#endif + return 0; + } + +//--------------------------------------------------------- +// refreshSettings +//--------------------------------------------------------- +void ExtMidiEditor::refreshSettings() const + { + GraphMidiEditor::refreshSettings(); + ExtEditorSettings* s = (ExtEditorSettings*) settings; + s->setSteprec(canvas->steprec()); + s->setMidiin(canvas->midiin()); +// s->setXmag(hscroll->xmag()); +// s->setPos(hscroll->pos()); + updateCtrlEdits(); + } + +#endif diff --git a/attic/muse_qt4_evolution/muse/extmidieditor.h b/attic/muse_qt4_evolution/muse/extmidieditor.h new file mode 100644 index 00000000..b02ac730 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/extmidieditor.h @@ -0,0 +1,120 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2004 Mathias Lundgren +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __EXTMIDIEDITOR_H__ +#define __EXTMIDIEDITOR_H__ + +#include "midiedit/midieditor.h" +#include "esettings.h" + +namespace AL { + class Pos; + }; + +class EditToolBar; +class NoteInfo; +class PartList; +class CtrlEdit; +class Toolbar1; +class Part; + +//--------------------------------------------------------- +// GraphMidiEditor +// +// Base class for graphical editors +// Currently used by WaveEdit and MasterEdit +//--------------------------------------------------------- + +class GraphMidiEditor : public MidiEditor { + Q_OBJECT + + protected: + virtual EditorSettings* newDefaultSettings(); //TODO: = 0 + virtual void initSettings(); + virtual void refreshSettings() const; + QAction* srec; + QAction* midiin; + bool _followSong; + EditToolBar* tools2; + + protected slots: + void setRaster(int val); + + public: + GraphMidiEditor(PartList*); + virtual ~GraphMidiEditor(); + int rasterStep(unsigned tick) const; + unsigned rasterVal(unsigned v) const; + unsigned rasterVal1(unsigned v) const; + unsigned rasterVal2(unsigned v) const; + int raster() const; + bool followSong() const { return _followSong; } + }; + + +//--------------------------------------------------------- +// ExtMidiEditor +// +// Inherited by Drumeditor and Pianoroll +// Not instantiated directly - virtual +//--------------------------------------------------------- + +class ExtMidiEditor : public GraphMidiEditor { + Q_OBJECT + int _curDrumInstrument; // currently selected instrument if drum + // editor + + protected: + std::list ctrlEditList; + virtual EditorSettings* newDefaultSettings(); + virtual void initSettings(); + virtual void refreshSettings() const; + Toolbar1* toolbar; + Part* selPart; + NoteInfo* info; + QToolBar* tools; + EventCanvas* canvas; + WaveView* wview; + + void updateCtrlEdits() const; + + signals: + void curDrumInstrumentChanged(int); //hACK! + + protected slots: + void setQuant(int val); + void follow(int pos); + void removeCtrl(CtrlEdit* ctrl); + virtual CtrlEdit* addCtrl(); + + public slots: + void setCurDrumInstrument(int instr); //hACK! + + public: + ExtMidiEditor(PartList*); + virtual ~ExtMidiEditor(); + int quantVal(int v) const; + int quant() const; + + int curDrumInstrument() const { return _curDrumInstrument; } + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/fastlog.h b/attic/muse_qt4_evolution/muse/fastlog.h new file mode 100644 index 00000000..23710a8b --- /dev/null +++ b/attic/muse_qt4_evolution/muse/fastlog.h @@ -0,0 +1,38 @@ +/* Copyright unknown. Code by Laurent de Soras . + */ + +#ifndef __pbd_fastlog_h__ +#define __pbd_fastlog_h__ + +#include /* for HUGE_VAL */ + +static inline float fast_log2 (float val) + { + /* don't use reinterpret_cast<> because that prevents this + from being used by pure C code (for example, GnomeCanvasItems) + */ + union {float f; int i;} t; + t.f = val; + int* const exp_ptr = &t.i; + int x = *exp_ptr; + const int log_2 = ((x >> 23) & 255) - 128; + x &= ~(255 << 23); + x += 127 << 23; + *exp_ptr = x; + val = ((-1.0f/3) * t.f + 2) * t.f - 2.0f/3; + return (val + log_2); + } + +static inline float fast_log (const float val) + { + return (fast_log2 (val) * 0.69314718f); + } + +static inline float fast_log10 (const float val) + { + return fast_log2(val) / 3.312500f; + } + +static inline float minus_infinity() { return -HUGE_VAL; } + +#endif /* __pbd_fastlog_h__ */ diff --git a/attic/muse_qt4_evolution/muse/fifo.cpp b/attic/muse_qt4_evolution/muse/fifo.cpp new file mode 100644 index 00000000..12c2febf --- /dev/null +++ b/attic/muse_qt4_evolution/muse/fifo.cpp @@ -0,0 +1,183 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "fifo.h" +#include "globals.h" +#include "al/dsp.h" + +//--------------------------------------------------------- +// clear +//--------------------------------------------------------- + +void FifoBase::clear() + { + ridx = 0; + widx = 0; + counter = 0; + } + +//--------------------------------------------------------- +// push +//--------------------------------------------------------- + +void FifoBase::push() + { + widx = (widx + 1) % FIFO_BUFFER; +// q_atomic_increment(&counter); + ++counter; + } + +//--------------------------------------------------------- +// pop +//--------------------------------------------------------- + +void FifoBase::pop() + { + ridx = (ridx + 1) % FIFO_BUFFER; + // q_atomic_decrement(&counter); + --counter; + } + +//--------------------------------------------------------- +// Fifo +//--------------------------------------------------------- + +Fifo::Fifo() + { + nbuffer = FIFO_BUFFER; + buffer = new FifoBuffer*[nbuffer]; + for (int i = 0; i < nbuffer; ++i) + buffer[i] = new FifoBuffer; + clear(); + } + +Fifo::~Fifo() + { + for (int i = 0; i < nbuffer; ++i) + delete buffer[i]; + delete[] buffer; + } + +//--------------------------------------------------------- +// put +// return true if fifo full +//--------------------------------------------------------- + +bool Fifo::put(int segs, unsigned long samples, float** src, unsigned pos) + { + if (counter == nbuffer) { + printf("FIFO %p overrun at 0x%x\n", this, pos); + return true; + } + FifoBuffer* b = buffer[widx]; + int n = segs * samples; + if (b->maxSize < n) { + if (b->buffer) + free(b->buffer); + posix_memalign((void**)&(b->buffer), 16, sizeof(float) * n); + b->maxSize = n; + } + b->size = samples; + b->segs = segs; + b->pos = pos; + for (int i = 0; i < segs; ++i) + AL::dsp->cpy(b->buffer + i * samples, src[i], samples); + push(); + return false; + } + +//--------------------------------------------------------- +// get +// return true if fifo empty +//--------------------------------------------------------- + +bool Fifo::get(int segs, unsigned long samples, float** dst, unsigned pos) + { + FifoBuffer* b; + bool errMsg = true; + for (;;) { + if (counter == 0) { + printf("FIFO %p underrun at 0x%x\n", this, pos); + return true; + } + b = buffer[ridx]; + if (pos == b->pos) + break; + // + // skip all buffer until we get the rigth one or the + // fifo is empty + // +// if (errMsg) + printf("Fifo %p::get(0x%x) n=%d, discard wrong prefetch block(s) 0x%x\n", + this, pos, counter, b->pos); + pop(); + errMsg = false; + } + for (int i = 0; i < segs; ++i) + dst[i] = b->buffer + samples * (i % b->segs); + pop(); + return false; + } + +//--------------------------------------------------------- +// get +// return true if fifo empty +//--------------------------------------------------------- + +bool Fifo::get(int segs, unsigned long samples, float** dst) + { + FifoBuffer* b; + if (counter == 0) { + printf("FIFO %p underrun --cannot happen!\n", this); + return true; + } + b = buffer[ridx]; + for (int i = 0; i < segs; ++i) + dst[i] = b->buffer + samples * (i % b->segs); + pop(); + return false; + } + +//--------------------------------------------------------- +// getWriteBuffer +// return true, if no more buffer available +// (overflow) +//--------------------------------------------------------- + +bool Fifo::getWriteBuffer(int segs, unsigned long samples, float** buf, unsigned pos) + { + if (counter == nbuffer) + return true; + FifoBuffer* b = buffer[widx]; + int n = segs * samples; + if (b->maxSize < n) { + if (b->buffer) + free(b->buffer); + posix_memalign((void**)&(b->buffer), 16, sizeof(float) * n); + b->maxSize = n; + } + for (int i = 0; i < segs; ++i) + buf[i] = b->buffer + i * samples; + b->size = samples; + b->segs = segs; + b->pos = pos; + return false; + } + diff --git a/attic/muse_qt4_evolution/muse/fifo.h b/attic/muse_qt4_evolution/muse/fifo.h new file mode 100644 index 00000000..b4c49288 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/fifo.h @@ -0,0 +1,105 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __FIFO_H__ +#define __FIFO_H__ + +const int FIFO_BUFFER = 256; + +//--------------------------------------------------------- +// Fifo +//--------------------------------------------------------- + +struct FifoBuffer { + float* buffer; + int size; + int maxSize; + unsigned pos; + int segs; + + FifoBuffer() { + buffer = 0; + size = 0; + maxSize = 0; + } + }; + +//--------------------------------------------------------- +// FifoBase +// - works only for one reader/writer +// - reader writes ridx +// - writer writes widx +// - reader decrements counter +// - writer increments counter +// - counter increment/decrement must be atomic +//--------------------------------------------------------- + +class FifoBase { + + protected: + int ridx; // read index + int widx; // write index + volatile int counter; // objects in fifo + + public: + FifoBase() { clear(); } + virtual ~FifoBase() {} + void clear(); + virtual void push(); // put object on fifo + virtual void pop(); // remove object from fifo + int count() const { return counter; } + int readIndex() const { return ridx; } + }; + +//--------------------------------------------------------- +// Fifo +//--------------------------------------------------------- + +class Fifo : public FifoBase { + int nbuffer; // max buffer size (fifo-size) + FifoBuffer** buffer; + + public: + Fifo(); + ~Fifo(); + bool put(int, unsigned long, float** buffer, unsigned pos); + bool getWriteBuffer(int, unsigned long, float** buffer, unsigned pos); + bool get(int, unsigned long, float** buffer, unsigned pos); + bool get(int, unsigned long, float** buffer); + }; + +//--------------------------------------------------------- +// Fifo1 +//--------------------------------------------------------- + +class Fifo1 : public FifoBase { + public: + unsigned positions[FIFO_BUFFER]; + + Fifo1() : FifoBase() {} + int setWritePos(unsigned pos) { + positions[widx] = pos; + return widx; + } + unsigned readPos() const { return positions[ridx]; } + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/gconfig.cpp b/attic/muse_qt4_evolution/muse/gconfig.cpp new file mode 100644 index 00000000..f80542cb --- /dev/null +++ b/attic/muse_qt4_evolution/muse/gconfig.cpp @@ -0,0 +1,121 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "gconfig.h" + +GlobalConfigValues config = { + ":/style.qss", // default style sheet + { + QColor(255, 232, 140), // part colors + QColor(0xff, 0x00, 0x00), + QColor(0x00, 0xff, 0x00), + QColor(0x00, 0x00, 0xff), + QColor(0xff, 0xff, 0x00), + QColor(0x00, 0xff, 0xff), + QColor(0xff, 0x00, 0xff), + QColor(0x9f, 0xc7, 0xef), + QColor(0x00, 0xff, 0x7f), + QColor(0x7f, 0x00, 0x00), + QColor(0x00, 0x7f, 0x00), + QColor(0x00, 0x00, 0x7f), + QColor(0x7f, 0x7f, 0x3f), + QColor(0x00, 0x7f, 0x7f), + QColor(0x7f, 0x00, 0x7f), + QColor(0x00, 0x7f, 0xff), + QColor(0x00, 0x3f, 0x3f) + }, + QColor(100, 100, 100), // selected Part Bg + QColor(0, 0, 255), // transportHandleColor; + QColor(255, 0, 0), // bigTimeForegroundColor; + QColor(0, 0, 0), // bigTimeBackgroundColor; + QColor(200, 200, 200), // waveEditBackgroundColor; + { + QColor(Qt::white), // outputTrackBg; + QColor(Qt::yellow), // groupTrackBg; + QColor(Qt::green), // waveTrackBg; + QColor(Qt::red), // inputTrackBg; + QColor(Qt::blue), // synthTrackBg; + QColor(Qt::gray), // midi; + QColor(Qt::gray), // midiOut; + QColor(Qt::gray), // midiIn; + QColor(Qt::gray), // midiSynti; + }, + + QColor(0, 0, 0), // mixerBg; + + 384, // division; + 1024, // rtcTicks + -60.0, // minMeter (dB) + 10.0, // maxMeter (dB) + -60.0, // double minSlider (dB) + 10.0, // double maxSlider (dB) + 20, // int guiRefresh; + 2000, // peak hold time (ms) + QString(""), // helpBrowser + true, // extendedMidi + 384, // division for smf export + QString(""), // copyright string for smf export + 1, // smf export file format + START_ASK_FOR_PROJECT, // startMode + QString(""), // start song path + 384, // gui division + QRect(0, 0, 200, 100), // GeometryTransport; + QRect(0, 0, 600, 200), // GeometryBigTime; + QRect(100, 100, 600, 400), // GeometryPianoroll; + QRect(0, 0, 600, 400), // GeometryDrumedit; + { + QRect(0, 0, 300, 500), // Mixer1 + false, true, true, true, + true, true, true, true, true, true + }, + { + QRect(200, 200, 300, 500), // Mixer2 + false, true, true, true, + true, true, true, true, true, true + }, + false, // TransportVisible + false, // BigTimeVisible; + false, // mixerVisible1; + false, // mixerVisible2; + + true, // showSplashScreen + + QColor(0x71, 0x8d, 0xbe), // canvasBgColor + QString(""), // canvasBgPixmap; + false, // canvasUseBgPixmap; + 1, // canvasShowPartType 1 - names, 2 events + 5, // canvasShowPartEvent + false, // canvasShowGrid; + + false, // use JACK freewheel mode + QString("sweep"), // externalWavEditor shell command + + QString(""), // defaultMidiInputDevice + QString(""), // defaultMidiOutputDevice + QString(""), // defaultMidiInstrument + true, // connectToAllMidiDevices + true, // connectToAllMidiTracks + true, // createDefaultMidiInput + QString("MusE/projects"), // projectPath + QString("MusE/templates"), // templatePath + QString("MusE/instruments"), // instrumentPath + QString("MusE/"), // midi import path + QString("MusE/"), // wave import path + }; diff --git a/attic/muse_qt4_evolution/muse/gconfig.h b/attic/muse_qt4_evolution/muse/gconfig.h new file mode 100644 index 00000000..b30fdebb --- /dev/null +++ b/attic/muse_qt4_evolution/muse/gconfig.h @@ -0,0 +1,133 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +#define NUM_PARTCOLORS 17 + +#include "track.h" +#include "al/xml.h" +using AL::Xml; + +enum StartMode { + START_ASK_FOR_PROJECT, + START_LAST_PROJECT, + START_START_PROJECT + }; + +//--------------------------------------------------------- +// MixerConfig +//--------------------------------------------------------- + +struct MixerConfig { + QRect geometry; + bool showMidiTracks; + bool showMidiInPorts; + bool showMidiSyntiPorts; + bool showMidiOutPorts; + bool showOutputTracks; + bool showWaveTracks; + bool showGroupTracks; + bool showInputTracks; + bool showAuxTracks; + bool showSyntiTracks; + + void write(Xml&, const char* name); + void read(QDomNode); + }; + +//--------------------------------------------------------- +// GlobalConfigValues +//--------------------------------------------------------- + +struct GlobalConfigValues { + QString styleSheetFile; + QColor partColors[NUM_PARTCOLORS]; + QColor selectPartBg; + QColor transportHandleColor; + QColor bigTimeForegroundColor; + QColor bigTimeBackgroundColor; + QColor waveEditBackgroundColor; + + QColor trackBg[Track::TRACK_TYPES]; + + QColor mixerBg; + + int division; + int rtcTicks; + double minMeter; + double maxMeter; + double minSlider; + double maxSlider; + int guiRefresh; + int peakHoldTime; // peak meter hold time (ms) + QString helpBrowser; + + bool extendedMidi; // extended smf format + int midiDivision; // division for smf export + QString copyright; // copyright string for smf export + int smfFormat; // smf export file type + + enum StartMode startMode; + QString startProject; // path for start project + int guiDivision; // division for tick display + + QRect geometryTransport; + QRect geometryBigTime; + QRect geometryPianoroll; + QRect geometryDrumedit; + MixerConfig mixer1; + MixerConfig mixer2; + bool transportVisible; + bool bigTimeVisible; + bool mixer1Visible; + bool mixer2Visible; + + bool showSplashScreen; + + QColor canvasBgColor; + QString canvasBgPixmap; + bool canvasUseBgPixmap; + + int canvasShowPartType; // 1 - names, 2 events + int canvasShowPartEvent; // + bool canvasShowGrid; + + bool useJackFreewheelMode; + QString externalWavEditor; + + QString defaultMidiInputDevice; + QString defaultMidiOutputDevice; + QString defaultMidiInstrument; + bool connectToAllMidiDevices; + bool connectToAllMidiTracks; + bool createDefaultMidiInput; + QString projectPath; + QString templatePath; + QString instrumentPath; + QString importMidiPath; + QString importWavePath; + }; + +extern GlobalConfigValues config; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/globaldefs.h b/attic/muse_qt4_evolution/muse/globaldefs.h new file mode 100644 index 00000000..4f72bcc3 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/globaldefs.h @@ -0,0 +1,37 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __GLOBALDEFS_H__ +#define __GLOBALDEFS_H__ + +static const int MAX_CHANNELS = 2; // max audio channels +// const int MIDI_PORTS = 16; // max Number of Midi Ports + +#ifndef MIDI_CHANNELS +#define MIDI_CHANNELS 16 // Channels per Port + +enum MidiInstrumentType { + MT_GENERIC, MT_GM, MT_GS, MT_XG + }; + +#endif + +#endif + diff --git a/attic/muse_qt4_evolution/muse/globals.cpp b/attic/muse_qt4_evolution/muse/globals.cpp new file mode 100644 index 00000000..86871a0c --- /dev/null +++ b/attic/muse_qt4_evolution/muse/globals.cpp @@ -0,0 +1,133 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "globals.h" +enum AudioState audioState; + +unsigned segmentSize = 1024U; // segmentSize in frames (set by JACK) +int segmentCount = 2; + +bool overrideAudioOutput = false; +bool overrideAudioInput = false; + +QTimer* heartBeatTimer; + +const signed char sharpTab[14][7] = { + { 0, 3, -1, 2, 5, 1, 4 }, + { 0, 3, -1, 2, 5, 1, 4 }, + { 0, 3, -1, 2, 5, 1, 4 }, + { 0, 3, -1, 2, 5, 1, 4 }, + { 2, 5, 1, 4, 7, 3, 6 }, + { 2, 5, 1, 4, 7, 3, 6 }, + { 2, 5, 1, 4, 7, 3, 6 }, + { 4, 0, 3, -1, 2, 5, 1 }, + { 7, 3, 6, 2, 5, 1, 4 }, + { 5, 8, 4, 7, 3, 6, 2 }, + { 3, 6, 2, 5, 1, 4, 7 }, + { 1, 4, 0, 3, 6, 2, 5 }, + { 6, 2, 5, 1, 4, 0, 3 }, + { 0, 3, -1, 2, 5, 1, 4 }, + }; +const signed char flatTab[14][7] = { + { 4, 1, 5, 2, 6, 3, 7 }, + { 4, 1, 5, 2, 6, 3, 7 }, + { 4, 1, 5, 2, 6, 3, 7 }, + { 4, 1, 5, 2, 6, 3, 7 }, + { 6, 3, 7, 4, 8, 5, 9 }, + { 6, 3, 7, 4, 8, 5, 9 }, + { 6, 3, 7, 4, 8, 5, 9 }, + + { 1, 5, 2, 6, 3, 7, 4 }, + { 4, 1, 5, 2, 6, 3, 7 }, + { 2, 6, 3, 7, 4, 8, 5 }, + { 7, 4, 1, 5, 2, 6, 3 }, + { 5, 2, 6, 3, 7, 4, 8 }, + { 3, 0, 4, 1, 5, 2, 6 }, + { 4, 1, 5, 2, 6, 3, 7 }, + }; + +QString museGlobalLib; +QString museGlobalShare; +QString museUser; +QString configName; + +QString lastWavePath("."); +QString lastMidiPath("."); + +bool debugMode = false; +bool debugMsg = false; +bool midiInputTrace = false; +bool midiOutputTrace = false; +int realTimePriority = 50; +bool loadPlugins = true; +bool loadVST = true; +bool loadDSSI = true; +bool midiOnly = false; + +const char* midi_file_pattern[] = { + "Midi/Kar (*.mid *.MID *.kar *.KAR *.mid.gz *.mid.bz2)", + "Midi (*.mid *.MID *.mid.gz *.mid.bz2)", + "Karaoke (*.kar *.KAR *.kar.gz *.kar.bz2)", + "All Files (*)", + 0 + }; +QString medFilePattern = + "med Files (*.med *.med.gz *.med.bz2);;" + "All Files (*)"; + +const char* med_midi_file_pattern[] = { + "med Files (*.med *.med.gz *.med.bz2)", + "Midi/Kar (*.mid *.kar *.mid.gz *.mid.bz2)", + "Midi (*.mid *.mid.gz *.mid.bz2)", + "Karaoke (*.kar *.kar.gz *.kar.bz2)", + "All Files (*)", + 0 + }; +const char* med_file_pattern[] = { + "med Files (*.med *.med.gz *.med.bz2)", + "All Files (*)", + 0 + }; +const char* image_file_pattern[] = { + "(*.jpg *.gif *.png)", + "(*.jpg)", + "(*.gif)", + "(*.png)", + "All Files (*)", + 0 + }; + +const char* ctrl_file_pattern[] = { + "ctrl Files (*.ctrl *.ctrl.gz *.ctrl.bz2)", + "All Files (*)", + 0 + }; + +QAction* undoAction; +QAction* redoAction; + +QAction* loopAction; +QAction* punchinAction; +QAction* punchoutAction; +QAction* recordAction; +QAction* panicAction; + +bool rcEnable = false; + diff --git a/attic/muse_qt4_evolution/muse/globals.h b/attic/muse_qt4_evolution/muse/globals.h new file mode 100644 index 00000000..eaf121d8 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/globals.h @@ -0,0 +1,86 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef GLOBALS_H +#define GLOBALS_H + +#include +#include "mtc.h" + +enum AudioState { + AUDIO_STOP, + AUDIO_START1, + AUDIO_START2, + AUDIO_RUNNING + }; +extern enum AudioState audioState; + +extern unsigned segmentSize; +extern int segmentCount; + +extern bool overrideAudioOutput; +extern bool overrideAudioInput; + +class QTimer; +extern QTimer* heartBeatTimer; + +extern const signed char sharpTab[14][7]; +extern const signed char flatTab[14][7]; + +extern QString museGlobalLib; +extern QString museGlobalShare; +extern QString museUser; +extern QString configName; + +extern QString lastWavePath; +extern QString lastMidiPath; + +extern bool debugMode; +extern bool midiInputTrace; +extern bool midiOutputTrace; +extern bool debugMsg; +extern bool debugSync; +extern bool loadPlugins; +extern bool loadVST; +extern bool loadDSSI; +extern bool midiOnly; + +extern int realTimePriority; +extern const char* midi_file_pattern[]; +extern QString medFilePattern; +extern const char* med_file_pattern[]; +extern const char* med_midi_file_pattern[]; +extern const char* image_file_pattern[]; +extern const char* ctrl_file_pattern[]; + +enum { CMD_RANGE_ALL, CMD_RANGE_SELECTED, CMD_RANGE_LOOP }; + +extern QAction* undoAction; +extern QAction* redoAction; + +extern QAction* loopAction; +extern QAction* punchinAction; +extern QAction* punchoutAction; +extern QAction* recordAction; +extern QAction* panicAction; + +extern bool rcEnable; +#endif + diff --git a/attic/muse_qt4_evolution/muse/gui.h b/attic/muse_qt4_evolution/muse/gui.h new file mode 100644 index 00000000..784e58e2 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/gui.h @@ -0,0 +1,54 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __GUI_H__ +#define __GUI_H__ + +// +// GUI constants +// central point of tweaking the gui +// + +// size of horizontal and vertical splitter +// +static const int splitWidth = 6; + +// arranger: +static const int trackRowHeight = 24; +static const int minTrackHeight = trackRowHeight + splitWidth + 1; +static const int defaultTrackHeight = minTrackHeight; +static const int infoHeight = 20; +static const int infoWidth = 140; +static const int trackSeparator = 1; +static const int yTrackOffset = -2; // -4; + +// mixer: +static const int STRIP_WIDTH = 60; +static const int LABEL_HEIGHT = 20; +static const int BUTTON_HEIGHT = STRIP_WIDTH / 3; +static const int ENTRY_HEIGHT = 17; + +static const int ICON_WIDTH = 18; +static const QSize ICON_SIZE(ICON_WIDTH, ICON_WIDTH); + +#endif + + + diff --git a/attic/muse_qt4_evolution/muse/help.cpp b/attic/muse_qt4_evolution/muse/help.cpp new file mode 100644 index 00000000..c17581ae --- /dev/null +++ b/attic/muse_qt4_evolution/muse/help.cpp @@ -0,0 +1,101 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "config.h" +#include "muse.h" +#include "globals.h" +#include "gconfig.h" +#include "icons.h" +#include "help.h" + +//--------------------------------------------------------- +// AboutBoxDialog +//--------------------------------------------------------- + +AboutBoxDialog::AboutBoxDialog() + { + extern int revision; + setupUi(this); + versionLabel->setText("Version: " VERSION); + revisionLabel->setText(QString("Revision: %1").arg(revision)); + } + +//--------------------------------------------------------- +// startHelpBrowser +//--------------------------------------------------------- + +void MusE::startHelpBrowser() + { + QString lang(getenv("LANG")); + QFileInfo museHelp(museGlobalShare + QString("/doc/man-") + lang + QString(".pdf")); + if (!museHelp.isReadable()) { + museHelp.setFile(museGlobalShare + QString("/doc/man-en.pdf")); + if (!museHelp.isReadable()) { + QString info(tr("MusE manual not found at: ")); + info += museHelp.filePath(); + QMessageBox::critical(this, tr("MusE: Open Help"), info); + return; + } + } + QString url("file://" + museHelp.filePath()); + QDesktopServices::openUrl(url); + } + +//--------------------------------------------------------- +// startHelpBrowser +//--------------------------------------------------------- + +void MusE::startHomepageBrowser() + { + QString museHome = QString("http://lmuse.sourceforge.net"); + + QDesktopServices::openUrl(museHome); + } + +//--------------------------------------------------------- +// startBugBrowser +//--------------------------------------------------------- + +void MusE::startBugBrowser() + { + QString museBugPage("http://lmuse.sourceforge.net/bugs.html"); + QDesktopServices::openUrl(museBugPage); + } + +//--------------------------------------------------------- +// about +//--------------------------------------------------------- + +void MusE::about() + { + AboutBoxDialog ab; + ab.show(); + ab.exec(); + } + +//--------------------------------------------------------- +// aboutQt +//--------------------------------------------------------- + +void MusE::aboutQt() + { + QMessageBox::aboutQt(this, QString("MusE")); + } + diff --git a/attic/muse_qt4_evolution/muse/help.h b/attic/muse_qt4_evolution/muse/help.h new file mode 100644 index 00000000..c2a54d90 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/help.h @@ -0,0 +1,36 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __HELP_H__ +#define __HELP_H__ + +#include "ui_aboutbox.h" + +//--------------------------------------------------------- +// AboutBoxDialog +//--------------------------------------------------------- + +class AboutBoxDialog : public QDialog, Ui::AboutBox { + public: + AboutBoxDialog(); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/helper.cpp b/attic/muse_qt4_evolution/muse/helper.cpp new file mode 100644 index 00000000..6b534a6d --- /dev/null +++ b/attic/muse_qt4_evolution/muse/helper.cpp @@ -0,0 +1,47 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "helper.h" + +extern bool hIsB; +static const char* vall[] = { + "c","c#","d","d#","e","f","f#","g","g#","a","a#","h" + }; +static const char* valu[] = { + "C","C#","D","D#","E","F","F#","G","G#","A","A#","H" + }; + +//--------------------------------------------------------- +// pitch2string +//--------------------------------------------------------- + +QString pitch2string(int v) + { + if (v < 0 || v > 127) + return QString("----"); + int octave = (v / 12) - 2; + QString o; + o.sprintf("%d", octave); + int i = v % 12; + QString s(octave < 0 ? valu[i] : vall[i]); + return s + o; + } + + diff --git a/attic/muse_qt4_evolution/muse/helper.h b/attic/muse_qt4_evolution/muse/helper.h new file mode 100644 index 00000000..3f255393 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/helper.h @@ -0,0 +1,27 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __HELPER_H__ +#define __HELPER_H__ + +extern QString pitch2string(int v); + +#endif + diff --git a/attic/muse_qt4_evolution/muse/icons.cpp b/attic/muse_qt4_evolution/muse/icons.cpp new file mode 100644 index 00000000..2fa62f9a --- /dev/null +++ b/attic/muse_qt4_evolution/muse/icons.cpp @@ -0,0 +1,341 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "globals.h" +#include "gui.h" + +#include "xpm/audio_bounce_to_file.xpm" +#include "xpm/audio_bounce_to_track.xpm" +#include "xpm/audio_restartaudio.xpm" +#include "xpm/edit_midi.xpm" +#include "xpm/midi_edit_instrument.xpm" +#include "xpm/midi_init_instr.xpm" +#include "xpm/midi_local_off.xpm" +#include "xpm/midi_reset_instr.xpm" +#include "xpm/settings_appearance_settings.xpm" +#include "xpm/settings_configureshortcuts.xpm" +#include "xpm/settings_follow_song.xpm" +#include "xpm/settings_globalsettings.xpm" +#include "xpm/settings_metronome.xpm" +#include "xpm/settings_midifileexport.xpm" +#include "xpm/settings_midisync.xpm" + +#include "xpm/play.xpm" + +#include "xpm/stick.xpm" +#include "xpm/wave.xpm" +#include "xpm/cmark.xpm" +#include "xpm/lmark.xpm" +#include "xpm/rmark.xpm" +#include "xpm/steprec.xpm" +#include "xpm/master.xpm" +#include "xpm/filenewS.xpm" +#include "xpm/home.xpm" +#include "xpm/back.xpm" +#include "xpm/forward.xpm" + +#include "xpm/up.xpm" +#include "xpm/down.xpm" +#include "xpm/bold.xpm" +#include "xpm/italic.xpm" +#include "xpm/underlined.xpm" +#include "xpm/midiin.xpm" +#include "xpm/sysex.xpm" +#include "xpm/ctrl.xpm" +#include "xpm/meta.xpm" +#include "xpm/pitch.xpm" +#include "xpm/cafter.xpm" +#include "xpm/pafter.xpm" +#include "xpm/flag.xpm" +#include "xpm/flagS.xpm" +#include "xpm/lock.xpm" +#include "xpm/toc.xpm" +#include "xpm/editcut.xpm" +#include "xpm/editcopy.xpm" +#include "xpm/editpaste.xpm" + +#include "xpm/speaker.xpm" +#include "xpm/buttondown.xpm" +#include "xpm/configure.xpm" + +#include "xpm/mastertrackS.xpm" +#include "xpm/localoffS.xpm" +#include "xpm/miditransformS.xpm" +#include "xpm/midi_plugS.xpm" +#include "xpm/miditransposeS.xpm" +#include "xpm/mixerS.xpm" +#include "xpm/resetS.xpm" +#include "xpm/track_add.xpm" +#include "xpm/track_delete.xpm" +#include "xpm/listS.xpm" +#include "xpm/inputpluginS.xpm" +#include "xpm/cliplistS.xpm" +#include "xpm/mixeraudioS.xpm" +#include "xpm/initS.xpm" + +#include "xpm/addtrack_addmiditrack.xpm" +#include "xpm/addtrack_audiogroup.xpm" +#include "xpm/addtrack_audioinput.xpm" +#include "xpm/addtrack_audiooutput.xpm" +#include "xpm/addtrack_drumtrack.xpm" +#include "xpm/addtrack_wavetrack.xpm" +#include "xpm/edit_drumms.xpm" +#include "xpm/edit_list.xpm" +#include "xpm/edit_mastertrack.xpm" +#include "xpm/edit_track_add.xpm" +#include "xpm/edit_track_del.xpm" +#include "xpm/mastertrack_graphic.xpm" +#include "xpm/mastertrack_list.xpm" +#include "xpm/midi_transform.xpm" +#include "xpm/midi_transpose.xpm" +#include "xpm/select.xpm" +// #include "xpm/select_all.xpm" +#include "xpm/select_all_parts_on_track.xpm" +// #include "xpm/select_deselect_all.xpm" +// #include "xpm/select_inside_loop.xpm" +// #include "xpm/select_invert_selection.xpm" +// #include "xpm/select_outside_loop.xpm" + +#include "xpm/muse_icon.xpm" +#include "xpm/config.xpm" +#include "xpm/minus.xpm" +#include "xpm/plus.xpm" + +QPixmap* mastertrackSIcon; +QPixmap* localoffSIcon; +QPixmap* miditransformSIcon; +QPixmap* midi_plugSIcon; +QPixmap* miditransposeSIcon; +QPixmap* mixerSIcon; +QPixmap* resetSIcon; +QPixmap* track_addIcon; +QPixmap* track_deleteIcon; +QPixmap* listSIcon; +QPixmap* inputpluginSIcon; +QPixmap* cliplistSIcon; +QPixmap* mixerAudioSIcon; +QPixmap* initSIcon; + +QPixmap* playIcon; + +QPixmap* stopIcon; +QPixmap* fforwardIcon; +QPixmap* frewindIcon; +QPixmap* stickIcon; +QPixmap* waveIcon; +QPixmap* markIcon[3]; +QPixmap* steprecIcon; +QPixmap* openIcon; +QPixmap* saveIcon; +QPixmap* masterIcon; +QPixmap* filenewIcon; +QPixmap* filenewIconS; +QPixmap* homeIcon; +QPixmap* backIcon; +QPixmap* forwardIcon; +QPixmap* muteIcon; +QPixmap* upIcon; +QPixmap* downIcon; +QPixmap* boldIcon; +QPixmap* italicIcon; +QPixmap* underlinedIcon; +QPixmap* midiinIcon; +QPixmap* sysexIcon; +QPixmap* ctrlIcon; +QPixmap* metaIcon; +QPixmap* pitchIcon; +QPixmap* cafterIcon; +QPixmap* pafterIcon; +QPixmap* flagIcon; +QPixmap* flagIconS; +QPixmap* lockIcon; +QPixmap* tocIcon; + +QPixmap* speakerIcon; +QPixmap* buttondownIcon; +QPixmap* configureIcon; + +QIcon* editcutIconSet; +QIcon* editcopyIconSet; +QIcon* editpasteIconSet; +QIcon* recordIcon; +QIcon* onOffIcon; +QPixmap* offIcon; + +QPixmap* addtrack_addmiditrackIcon; +QPixmap* addtrack_audiogroupIcon; +QPixmap* addtrack_audioinputIcon; +QPixmap* addtrack_audiooutputIcon; +QPixmap* addtrack_drumtrackIcon; +QPixmap* addtrack_wavetrackIcon; +QPixmap* edit_drummsIcon; +QPixmap* edit_listIcon; +QPixmap* edit_mastertrackIcon; +QPixmap* edit_track_addIcon; +QPixmap* edit_track_delIcon; +QPixmap* mastertrack_graphicIcon; +QPixmap* mastertrack_listIcon; +QPixmap* midi_transformIcon; +QPixmap* midi_transposeIcon; +QPixmap* selectIcon; +// QPixmap* select_allIcon; +QPixmap* select_all_parts_on_trackIcon; +// QPixmap* select_deselect_allIcon; +// QPixmap* select_inside_loopIcon; +// QPixmap* select_invert_selectionIcon; +// QPixmap* select_outside_loopIcon; + +QPixmap* audio_bounce_to_fileIcon; +QPixmap* audio_bounce_to_trackIcon; +QPixmap* audio_restartaudioIcon; +QPixmap* edit_midiIcon; +QPixmap* midi_edit_instrumentIcon; +QPixmap* midi_init_instrIcon; +QPixmap* midi_local_offIcon; +QPixmap* midi_reset_instrIcon; +QPixmap* settings_appearance_settingsIcon; +QPixmap* settings_configureshortcutsIcon; +QPixmap* settings_follow_songIcon; +QPixmap* settings_globalsettingsIcon; +QPixmap* settings_metronomeIcon; +QPixmap* settings_midifileexportIcon; +QPixmap* settings_midisyncIcon; + +QPixmap* museIcon; +QPixmap* museIcon64; +QPixmap* configIcon; +QPixmap* minusIcon; +QPixmap* plusIcon; + +//--------------------------------------------------------- +// initIcons +//--------------------------------------------------------- + +void initIcons() + { + playIcon = new QPixmap(play_xpm); + + stickIcon = new QPixmap(stick_xpm); + waveIcon = new QPixmap(wave_xpm); + markIcon[0] = new QPixmap(cmark_xpm); + markIcon[1] = new QPixmap(lmark_xpm); + markIcon[2] = new QPixmap(rmark_xpm); + steprecIcon = new QPixmap(steprec_xpm); + saveIcon = new QPixmap(":/xpm/filesave.png"); + openIcon = new QPixmap(":/xpm/fileopen.png"); + masterIcon = new QPixmap(master_xpm); + filenewIcon = new QPixmap(":/xpm/filenew.png"); + filenewIconS = new QPixmap(filenewS_xpm); + homeIcon = new QPixmap(home_xpm); + backIcon = new QPixmap(back_xpm); + forwardIcon = new QPixmap(forward_xpm); + upIcon = new QPixmap(up_xpm); + downIcon = new QPixmap(down_xpm); + boldIcon = new QPixmap(bold_xpm); + italicIcon = new QPixmap(italic_xpm); + underlinedIcon = new QPixmap(underlined_xpm); + midiinIcon = new QPixmap(midiin_xpm); + sysexIcon = new QPixmap(sysex_xpm); + ctrlIcon = new QPixmap(ctrl_xpm); + metaIcon = new QPixmap(meta_xpm); + pitchIcon = new QPixmap(pitch_xpm); + cafterIcon = new QPixmap(cafter_xpm); + pafterIcon = new QPixmap(pafter_xpm); + flagIcon = new QPixmap(flag_xpm); + flagIconS = new QPixmap(flagS_xpm); + lockIcon = new QPixmap(lock_xpm); + tocIcon = new QPixmap(toc_xpm); + + speakerIcon = new QPixmap(speaker_xpm); + buttondownIcon = new QPixmap(buttondown_xpm); + configureIcon = new QPixmap(configure_xpm); + + editcutIconSet = new QIcon(QPixmap(editcut_xpm)); + editcopyIconSet = new QIcon(QPixmap(editcopy_xpm)); + editpasteIconSet = new QIcon(QPixmap(editpaste_xpm)); + + mastertrackSIcon = new QPixmap(mastertrackS_xpm); + localoffSIcon = new QPixmap(localoffS_xpm); + miditransformSIcon = new QPixmap(miditransformS_xpm); + midi_plugSIcon = new QPixmap(midi_plugS_xpm); + miditransposeSIcon = new QPixmap(miditransposeS_xpm); + mixerSIcon = new QPixmap(mixerS_xpm); + resetSIcon = new QPixmap(resetS_xpm); + track_addIcon = new QPixmap(track_add_xpm); + track_deleteIcon = new QPixmap(track_delete_xpm); + listSIcon = new QPixmap(listS_xpm); + inputpluginSIcon = new QPixmap(inputpluginS_xpm); + cliplistSIcon = new QPixmap(cliplistS_xpm); + mixerAudioSIcon = new QPixmap(mixerAudioS_xpm); + initSIcon = new QPixmap(initS_xpm); + + addtrack_addmiditrackIcon = new QPixmap(addtrack_addmiditrack_xpm); + addtrack_audiogroupIcon = new QPixmap(addtrack_audiogroup_xpm); + addtrack_audioinputIcon = new QPixmap(addtrack_audioinput_xpm); + addtrack_audiooutputIcon = new QPixmap(addtrack_audiooutput_xpm); + addtrack_drumtrackIcon = new QPixmap(addtrack_drumtrack_xpm); + addtrack_wavetrackIcon = new QPixmap(addtrack_wavetrack_xpm); + edit_drummsIcon = new QPixmap(edit_drumms_xpm); + edit_listIcon = new QPixmap(edit_list_xpm); + edit_mastertrackIcon = new QPixmap(edit_mastertrack_xpm); + edit_track_addIcon = new QPixmap(edit_track_add_xpm); + edit_track_delIcon = new QPixmap(edit_track_del_xpm); + mastertrack_graphicIcon = new QPixmap(mastertrack_graphic_xpm); + mastertrack_listIcon = new QPixmap(mastertrack_list_xpm); + midi_transformIcon = new QPixmap(midi_transform_xpm); + midi_transposeIcon = new QPixmap(midi_transpose_xpm); + selectIcon = new QPixmap(select_xpm); +// select_allIcon = new QPixmap(select_all_xpm); + select_all_parts_on_trackIcon = new QPixmap(select_all_parts_on_track_xpm); +// select_deselect_allIcon = new QPixmap(select_deselect_all); +// select_inside_loopIcon = new QPixmap(select_inside_loop_xpm); +// select_invert_selectionIcon = new QPixmap(select_invert_selection); +// select_outside_loopIcon = new QPixmap(select_outside_loop_xpm); + + audio_bounce_to_fileIcon = new QPixmap(audio_bounce_to_file_xpm); + audio_bounce_to_trackIcon = new QPixmap(audio_bounce_to_track_xpm); + audio_restartaudioIcon = new QPixmap(audio_restartaudio_xpm); + edit_midiIcon = new QPixmap(edit_midi_xpm); + midi_edit_instrumentIcon = new QPixmap(midi_edit_instrument_xpm); + midi_init_instrIcon = new QPixmap(midi_init_instr_xpm); + midi_local_offIcon = new QPixmap(midi_local_off_xpm); + midi_reset_instrIcon = new QPixmap(midi_reset_instr_xpm); + settings_appearance_settingsIcon = new QPixmap(settings_appearance_settings_xpm); + settings_configureshortcutsIcon = new QPixmap(settings_configureshortcuts_xpm); + settings_follow_songIcon = new QPixmap(settings_follow_song_xpm); + settings_globalsettingsIcon = new QPixmap(settings_globalsettings_xpm); + settings_metronomeIcon = new QPixmap(settings_metronome_xpm); + settings_midifileexportIcon = new QPixmap(settings_midifileexport_xpm); + settings_midisyncIcon = new QPixmap(settings_midisync_xpm); + + museIcon = new QPixmap(muse_icon_xpm); + configIcon = new QPixmap(config_xpm); + minusIcon = new QPixmap(minus_xpm); + plusIcon = new QPixmap(plus_xpm); + + recordIcon = new QIcon; + recordIcon->addFile(":/xpm/recordOn.svg", ICON_SIZE, QIcon::Normal, QIcon::On); + recordIcon->addFile(":/xpm/recordOff.svg", ICON_SIZE, QIcon::Normal, QIcon::Off); + + onOffIcon = new QIcon; + onOffIcon->addFile(":/xpm/on.svg", ICON_SIZE, QIcon::Normal, QIcon::On); + onOffIcon->addFile(":/xpm/off.svg", ICON_SIZE, QIcon::Normal, QIcon::Off); + } + diff --git a/attic/muse_qt4_evolution/muse/icons.h b/attic/muse_qt4_evolution/muse/icons.h new file mode 100644 index 00000000..788f0ad0 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/icons.h @@ -0,0 +1,134 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef ICONS_H +#define ICONS_H + +extern QPixmap* playIcon; +extern QPixmap* stickIcon; +extern QPixmap* waveIcon; +extern QPixmap* markIcon[3]; + +extern QPixmap* cutIcon; +extern QPixmap* steprecIcon; +extern QPixmap* glueIcon; +extern QPixmap* drawIcon; + +extern QPixmap* quantIcon; +extern QPixmap* openIcon; +extern QPixmap* saveIcon; +extern QPixmap* archiveIcon; +extern QPixmap* findIcon; +extern QPixmap* masterIcon; +extern QPixmap* filenewIcon; +extern QPixmap* filenewIconS; +extern QPixmap* homeIcon; +extern QPixmap* backIcon; +extern QPixmap* forwardIcon; +extern QPixmap* upIcon; +extern QPixmap* downIcon; +extern QPixmap* boldIcon; +extern QPixmap* italicIcon; +extern QPixmap* underlinedIcon; +extern QPixmap* midiinIcon; +extern QPixmap* sysexIcon; +extern QPixmap* ctrlIcon; +extern QPixmap* metaIcon; +extern QPixmap* pitchIcon; +extern QPixmap* cafterIcon; +extern QPixmap* pafterIcon; +extern QPixmap* flagIcon; +extern QPixmap* flagIconS; +extern QPixmap* lockIcon; +extern QPixmap* tocIcon; + +extern QPixmap* speakerIcon; +extern QPixmap* buttondownIcon; +extern QPixmap* configureIcon; + +extern QIcon* editcutIconSet; +extern QIcon* editcopyIconSet; +extern QIcon* editpasteIconSet; + +extern QPixmap* offIcon; + +extern QPixmap* mastertrackSIcon; +extern QPixmap* localoffSIcon; +extern QPixmap* miditransformSIcon; +extern QPixmap* midi_plugSIcon; +extern QPixmap* miditransposeSIcon; +extern QPixmap* mixerSIcon; +extern QPixmap* resetSIcon; +extern QPixmap* track_addIcon; +extern QPixmap* track_deleteIcon; +extern QPixmap* listSIcon; +extern QPixmap* inputpluginSIcon; +extern QPixmap* cliplistSIcon; +extern QPixmap* mixerAudioSIcon; +extern QPixmap* initSIcon; + +extern QPixmap* addtrack_addmiditrackIcon; +extern QPixmap* addtrack_audiogroupIcon; +extern QPixmap* addtrack_audioinputIcon; +extern QPixmap* addtrack_audiooutputIcon; +extern QPixmap* addtrack_drumtrackIcon; +extern QPixmap* addtrack_wavetrackIcon; +extern QPixmap* edit_drummsIcon; +extern QPixmap* edit_listIcon; +extern QPixmap* edit_mastertrackIcon; +extern QPixmap* edit_track_addIcon; +extern QPixmap* edit_track_delIcon; +extern QPixmap* mastertrack_graphicIcon; +extern QPixmap* mastertrack_listIcon; +extern QPixmap* midi_transformIcon; +extern QPixmap* midi_transposeIcon; +extern QPixmap* selectIcon; +// extern QPixmap* select_allIcon; +extern QPixmap* select_all_parts_on_trackIcon; +// extern QPixmap* select_deselect_allIcon; +// extern QPixmap* select_inside_loopIcon; +// extern QPixmap* select_invert_selectionIcon; +// extern QPixmap* select_outside_loopIcon; + +extern QPixmap* audio_bounce_to_fileIcon; +extern QPixmap* audio_bounce_to_trackIcon; +extern QPixmap* audio_restartaudioIcon; +extern QPixmap* edit_midiIcon; +extern QPixmap* midi_edit_instrumentIcon; +extern QPixmap* midi_init_instrIcon; +extern QPixmap* midi_local_offIcon; +extern QPixmap* midi_reset_instrIcon; +extern QPixmap* settings_appearance_settingsIcon; +extern QPixmap* settings_configureshortcutsIcon; +extern QPixmap* settings_follow_songIcon; +extern QPixmap* settings_globalsettingsIcon; +extern QPixmap* settings_metronomeIcon; +extern QPixmap* settings_midifileexportIcon; +extern QPixmap* settings_midisyncIcon; + +extern QPixmap* museIcon; +extern QPixmap* configIcon; +extern QPixmap* minusIcon; +extern QPixmap* plusIcon; + +extern QIcon* recordIcon; +extern QIcon* onOffIcon; +#endif + diff --git a/attic/muse_qt4_evolution/muse/importmidi.cpp b/attic/muse_qt4_evolution/muse/importmidi.cpp new file mode 100644 index 00000000..0bd33df8 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/importmidi.cpp @@ -0,0 +1,589 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "globals.h" +#include "muse.h" +#include "song.h" +#include "widgets/filedialog.h" +#include "midi.h" +#include "midifile.h" +#include "transport.h" +#include "midiedit/drummap.h" +#include "al/sig.h" +#include "al/tempo.h" +#include "instruments/minstrument.h" +#include "gconfig.h" +#include "part.h" +#include "importmidi.h" +#include "projectdialog.h" +#include "templatedialog.h" +#include "audio.h" +#include "mixer.h" +#include "arranger.h" +#include "midictrl.h" +#include "midiinport.h" +#include "midioutport.h" + +//--------------------------------------------------------- +// ImportMidiDialog +//--------------------------------------------------------- + +ImportMidiDialog::ImportMidiDialog(QWidget* parent) + : QDialog(parent) + { + setupUi(this); + bg = new QButtonGroup(this); + bg->setExclusive(true); + bg->addButton(addToProject, 0); + bg->addButton(createNewProject, 1); + createNewProject->setChecked(true); + connect(selectTemplate,SIGNAL(clicked()), SLOT(selectTemplateClicked())); + connect(selectProject, SIGNAL(clicked()), SLOT(selectProjectClicked())); + } + +//--------------------------------------------------------- +// selectTemplateClicked +//--------------------------------------------------------- + +void ImportMidiDialog::selectTemplateClicked() + { + TemplateDialog templateDialog; + templateDialog.setTemplatePath(templateName->text()); + int rv = templateDialog.exec(); + if (rv == 0) + return; + templateName->setText(templateDialog.templatePath()); + } + +//--------------------------------------------------------- +// selectProjectClicked +//--------------------------------------------------------- + +void ImportMidiDialog::selectProjectClicked() + { + ProjectDialog projectDialog; + projectDialog.setProjectName(projectName->text()); + int rv = projectDialog.exec(); + if (rv == 0) + return; + projectName->setText(projectDialog.projectName()); + } + +//--------------------------------------------------------- +// setProjectName +//--------------------------------------------------------- + +void ImportMidiDialog::setProjectName(const QString& name) + { + projectName->setText(name); + } + +//--------------------------------------------------------- +// setTemplateName +//--------------------------------------------------------- + +void ImportMidiDialog::setTemplateName(const QString& name) + { + templateName->setText(name); + } + +//--------------------------------------------------------- +// importMidi +//--------------------------------------------------------- + +void MusE::importMidi() + { + importMidi(QString()); + } + +void MusE::importMidi(const QString &file) + { + QString fn; + QStringList pattern; + + const char** s = midi_file_pattern; + while (*s) + pattern << *s++; + + if (file.isEmpty()) { + fn = getOpenFileName(lastMidiPath, pattern, this, + tr("MusE: Import Midi")); + lastMidiPath = fn; + if (fn.isEmpty()) + return; + } + else + fn = file; + + QFileInfo fi(fn); + + ImportMidiDialog mid(this); + mid.setProjectName(fi.baseName()); + mid.setTemplateName(""); + + if (mid.exec() == 0) + return; + + if (mid.doCreateNewProject()) { + QString header = tr("MusE: import midi file"); + QString path(mid.projectName->text()); + QDir pd(QDir::homePath() + "/" + config.projectPath + "/" + path); + + if (leaveProject()) + return; + if (!pd.mkdir(pd.path())) { + QString s(tr("Cannot create project folder <%1>")); + QMessageBox::critical(this, header, s.arg(pd.path())); + return; + } + if (audio->isPlaying()) { + audio->msgPlay(false); + while (audio->isPlaying()) + qApp->processEvents(); + } + addProject(path); // add to history + seqStop(); + if (mixer1) + mixer1->clear(); + if (mixer2) + mixer2->clear(); + //=========================================================== + // + // close all toplevel windows + // + foreach(QWidget* w, QApplication::topLevelWidgets()) { + if (!w->isVisible()) + continue; + if (strcmp("DrumEdit", w->metaObject()->className()) == 0) + w->close(); + else if (strcmp("PianoRoll", w->metaObject()->className()) == 0) + w->close(); + else if (strcmp("MasterEdit", w->metaObject()->className()) == 0) + w->close(); + else if (strcmp("WaveEdit", w->metaObject()->className()) == 0) + w->close(); + else if (strcmp("ListEdit", w->metaObject()->className()) == 0) + w->close(); + } + emit startLoadSong(); + song->setProjectPath(path); + song->clear(false); + song->setCreated(true); + + QString s = mid.templateName->text(); + bool rv = true; + if (!s.isEmpty()) { + QFile f(s); + if (f.open(QIODevice::ReadOnly)) { + rv = song->read(&f); + f.close(); + } + else { + QString msg(tr("Cannot open template file\n%1")); + QMessageBox::critical(this, header, msg.arg(s)); + } + } + if (!rv) { + QString msg(tr("File <%1> read error")); + QMessageBox::critical(this, header, msg.arg(s)); + } + addMidiFile(fn); + + tr_id->setChecked(config.transportVisible); + bt_id->setChecked(config.bigTimeVisible); + + // + // dont emit song->update(): + song->blockSignals(true); + + showBigtime(config.bigTimeVisible); + showMixer1(config.mixer1Visible); + showMixer2(config.mixer2Visible); + if (mixer1 && config.mixer1Visible) + mixer1->setUpdateMixer(); + if (mixer2 && config.mixer2Visible) + mixer2->setUpdateMixer(); + + if (config.transportVisible) + transport->show(); + transport->move(config.geometryTransport.topLeft()); + showTransport(config.transportVisible); + + song->blockSignals(false); + + transport->setMasterFlag(song->masterFlag()); + punchinAction->setChecked(song->punchin()); + punchoutAction->setChecked(song->punchout()); + loopAction->setChecked(song->loop()); + clipboardChanged(); // enable/disable "Paste" + song->setLen(song->len()); // emit song->lenChanged() signal + + // + // add connected channels + // + TrackList* tl = song->tracks(); +#if 0 + MidiChannelList* mcl = song->midiChannel(); + for (iMidiChannel i = mcl->begin(); i != mcl->end(); ++i) { + MidiChannel* mc = (MidiChannel*)*i; + if (mc->noInRoute() || song->trackExists(mc)) + continue; + tl->push_back(mc); + } +#endif + + selectionChanged(); // enable/disable "Copy" & "Paste" + arranger->endLoadSong(); + song->updatePos(); + // + // send "cur" controller values to devices + // + + for (iTrack i = tl->begin(); i != tl->end(); ++i) { + Track* track = *i; + track->blockSignals(true); + CtrlList* cl = track->controller(); + for (iCtrl ic = cl->begin(); ic != cl->end(); ++ic) { + Ctrl* ctrl = ic->second; + if (ctrl->type() & Ctrl::INT) { + CVal val; + val = ctrl->curVal(); + ctrl->setCurVal(CTRL_VAL_UNKNOWN); + song->setControllerVal(track, ctrl, val); + } + } + track->blockSignals(false); + } + setWindowTitle(QString("MusE: Song: ") + path); + seqStart(); + audio->msgSeek(song->cPos()); + } + else { + // add to project + addMidiFile(fn); + song->update(-1); + } + } + +//--------------------------------------------------------- +// addMidiFile +//--------------------------------------------------------- + +void MusE::addMidiFile(const QString name) + { + QFile* fp = fileOpen(this, name, QString(".mid"), QIODevice::ReadOnly); + if (fp == 0) + return; + MidiFile mf; + bool rv = mf.read(fp); + fp->close(); + delete fp; + + if (rv) { + QString s(tr("reading midifile\n ")); + s += name; + s += tr("\nfailed: "); + s += mf.error(); + QMessageBox::critical(this, QString("MusE"), s); + return; + } + MidiFileTrackList* etl = mf.trackList(); + int division = mf.division(); + + MidiOutPort* outPort = 0; + + if (song->midiOutPorts()->empty()) { + outPort = new MidiOutPort(); + outPort->setDefaultName(); + song->insertTrack0(outPort, -1); + + // + // set preferred instrument + // + MidiInstrument* instr = 0; // genericMidiInstrument; + for (iMidiInstrument mi = midiInstruments.begin(); mi != midiInstruments.end(); ++mi) { + if ((*mi)->iname() == config.defaultMidiInstrument) { + instr = *mi; + break; + } + } + + // + // if midi file is GM/GS/XG this overrides the preferred + // instrument setting + + if (mf.midiType() != MT_GENERIC) { + MidiInstrument* instr2 = 0; + for (iMidiInstrument i = midiInstruments.begin(); i != midiInstruments.end(); ++i) { + MidiInstrument* mi = *i; + switch(mf.midiType()) { + case MT_GM: + if (mi->iname() == "GM") + instr2 = mi; + break; + case MT_GS: + if (mi->iname() == "GS") + instr2 = mi; + break; + case MT_XG: + if (mi->iname() == "XG") + instr2 = mi; + break; + case MT_GENERIC: // cannot happen + break; + } + if (instr2) + break; + } + if (instr2) + instr = instr2; + } + if (instr == 0) + instr = genericMidiInstrument; + outPort->setInstrument(instr); + } + else + outPort = song->midiOutPorts()->front(); + + // + // create MidiTrack and copy events to ->events() + // - combine note on/off events + // - calculate tick value for internal resolution + // + + foreach(const MidiFileTrack* t, *etl) { + const MidiEventList& el = t->events; + if (el.empty()) + continue; + // + // if we split the track, SYSEX and META events go into + // the first target track + + bool first = true; + for (int channel = 0; channel < MIDI_CHANNELS; ++channel) { + // + // check if there are any events for channel in track: + // + iMidiEvent i; + for (i = el.begin(); i != el.end(); ++i) { + MidiEvent ev = *i; + if (ev.type() != ME_SYSEX && ev.type() != ME_META && ev.channel() == channel) + break; + } + if (i == el.end()) + continue; + + MidiTrack* track = new MidiTrack(); + if (t->isDrumTrack) + track->setUseDrumMap(true); +//TODOB track->outRoutes()->push_back(Route(outPort->channel(channel), -1, Route::TRACK)); +// if (inPort && config.connectToAllMidiTracks) { +// for (int ch = 0; ch < MIDI_CHANNELS; ++ch) { +// Route src(inPort, ch, Route::TRACK); +// track->inRoutes()->push_back(src); +// } +// } + + EventList* mel = track->events(); + buildMidiEventList(mel, &el, track, channel, division, first); + first = false; + + for (iEvent i = mel->begin(); i != mel->end(); ++i) { + Event event = i->second; + if (event.type() == Controller) { + int ctrl = event.dataA(); + MidiInstrument* instr = outPort->instrument(); + track->addMidiController(instr, ctrl); + CVal val; + val.i = event.dataB(); + track->addControllerVal(ctrl, event.tick(), val); + } + } + processTrack(track); + if (track->name().isEmpty()) + track->setDefaultName(); + song->insertTrack0(track, -1); + } + if (first) { + // + // track does only contain non-channel messages + // (SYSEX or META) + // + MidiTrack* track = new MidiTrack(); + EventList* mel = track->events(); + buildMidiEventList(mel, &el, track, 0, division, true); + processTrack(track); + if (track->name().isEmpty()) + track->setDefaultName(); + song->insertTrack0(track, -1); + } + } + + TrackList* tl = song->tracks(); + if (!tl->empty()) { + Track* track = tl->front(); + track->setSelected(true); + } + unsigned int l = 1; + MidiTrackList* mtl = song->midis(); + for (iMidiTrack t = mtl->begin(); t != mtl->end(); ++t) { + MidiTrack* track = *t; + PartList* parts = track->parts(); + for (iPart p = parts->begin(); p != parts->end(); ++p) { + unsigned last = p->second->tick() + p->second->lenTick(); + if (last > l) + l = last; + } + } + song->setLen(l); + AL::TimeSignature sig = AL::sigmap.timesig(0); + int z = sig.z; + int n = sig.n; + + transport->setTimesig(z, n); +// int tempo = AL::tempomap.tempo(0); +// transport->setTempo(tempo); + + bool masterF = !AL::tempomap.empty(); + song->setMasterFlag(masterF); + transport->setMasterFlag(masterF); + + song->updatePos(); + } + +//--------------------------------------------------------- +// processTrack +// divide events into parts +//--------------------------------------------------------- + +void MusE::processTrack(MidiTrack* track) + { + EventList* tevents = track->events(); + if (tevents->empty()) + return; + + //--------------------------------------------------- + // create parts + // Break midi tracks into parts. + // A new part is created when a gap of at least + // one measure is detected. Part len is aligned + // to one measure. + //--------------------------------------------------- + + PartList* pl = track->parts(); + + int lastTick = 0; + for (iEvent i = tevents->begin(); i != tevents->end(); ++i) { + Event event = i->second; + int epos = event.tick() + event.lenTick(); + if (epos > lastTick) + lastTick = epos; + } + + int len = song->roundUpBar(lastTick+1); + int bar2, beat; + unsigned tick; + AL::sigmap.tickValues(len, &bar2, &beat, &tick); + + QString partname = track->name(); + + int lastOff = 0; + int st = -1; // start tick current part + int x1 = 0; // start tick current measure + int x2 = 0; // end tick current measure + + for (int bar = 0; bar < bar2; ++bar, x1 = x2) { + x2 = AL::sigmap.bar2tick(bar+1, 0, 0); + if (lastOff > x2) { + // this measure is busy! + continue; + } + iEvent i1 = tevents->lower_bound(x1); + iEvent i2 = tevents->lower_bound(x2); + + if (i1 == i2) { // empty? + if (st != -1) { + Part* part = new Part(track); + part->ref(); + part->setType(AL::TICKS); + part->setTick(st); + part->setLenTick(x1-st); + part->setName(partname); + pl->add(part); + st = -1; + } + } + else { + if (st == -1) + st = x1; // begin new part + //HACK: + //lastOff: + for (iEvent i = i1; i != i2; ++i) { + Event event = i->second; + if (event.type() == Note) { + int off = event.tick() + event.lenTick(); + if (off > lastOff) + lastOff = off; + } + } + } + } + if (st != -1) { + Part* part = new Part(track); + part->ref(); + part->setType(AL::TICKS); + part->setTick(st); + part->setLenTick(x2-st); + part->setName(partname); + pl->add(part); + } + + //------------------------------------------------------------- + // assign events to parts + //------------------------------------------------------------- + + for (iPart p = pl->begin(); p != pl->end(); ++p) { + Part* part = p->second; + int stick = part->tick(); + int etick = part->tick() + part->lenTick(); + iEvent r1 = tevents->lower_bound(stick); + iEvent r2 = tevents->lower_bound(etick); + int startTick = part->tick(); + + EventList* el = part->events(); + for (iEvent i = r1; i != r2; ++i) { + Event ev = i->second; + int ntick = ev.tick() - startTick; + ev.setTick(ntick); + el->add(ev, ntick); + } + tevents->erase(r1, r2); + } + + if (tevents->size()) + printf("-----------events left: %zd\n", tevents->size()); + for (iEvent i = tevents->begin(); i != tevents->end(); ++i) { + printf("%d===\n", i->first); + i->second.dump(); + } + // all events should be processed: + assert(tevents->empty()); + } + diff --git a/attic/muse_qt4_evolution/muse/importmidi.h b/attic/muse_qt4_evolution/muse/importmidi.h new file mode 100644 index 00000000..b7aa1571 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/importmidi.h @@ -0,0 +1,46 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __IMPORTMIDI_H__ +#define __IMPORTMIDI_H__ + +#include "ui_importmidi.h" + +//--------------------------------------------------------- +// ImportMidiDialog +//--------------------------------------------------------- + +class ImportMidiDialog : public QDialog, public Ui::ImportMidiDialogBase { + Q_OBJECT + QButtonGroup* bg; + + private slots: + void selectProjectClicked(); + void selectTemplateClicked(); + + public: + ImportMidiDialog(QWidget*); + void setProjectName(const QString&); + void setTemplateName(const QString&); + bool doCreateNewProject() const { return bg->checkedId() == 1; } + }; + + +#endif diff --git a/attic/muse_qt4_evolution/muse/importmidi.ui b/attic/muse_qt4_evolution/muse/importmidi.ui new file mode 100644 index 00000000..ccf22220 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/importmidi.ui @@ -0,0 +1,200 @@ + + ImportMidiDialogBase + + + + 0 + 0 + 312 + 185 + + + + Import Midi File + + + + 9 + + + 6 + + + + + add to current project + + + + + + + create new project: + + + true + + + + + + + 0 + + + 6 + + + + + select project name + + + ... + + + :/xpm/filenew.png + + + + + + + Project Name: + + + + + + + select template + + + ... + + + :/xpm/filenew.png + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 30 + 20 + + + + + + + + Template: + + + + + + + + + + + + Qt::Vertical + + + + 20 + 31 + + + + + + + + 0 + + + 6 + + + + + Qt::Horizontal + + + + 131 + 31 + + + + + + + + OK + + + + + + + Cancel + + + + + + + + + + + + + okButton + clicked() + ImportMidiDialogBase + accept() + + + 278 + 253 + + + 96 + 254 + + + + + cancelButton + clicked() + ImportMidiDialogBase + reject() + + + 369 + 253 + + + 179 + 282 + + + + + diff --git a/attic/muse_qt4_evolution/muse/instruments/CMakeLists.txt b/attic/muse_qt4_evolution/muse/instruments/CMakeLists.txt new file mode 100644 index 00000000..b86764d4 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/instruments/CMakeLists.txt @@ -0,0 +1,41 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +QT4_WRAP_CPP ( instruments_mocs + minstrument.h editinstrument.h + ) + +QT4_WRAP_UI ( instruments_ui_headers + editinstrument.ui + ) + +add_library ( instruments STATIC + minstrument.cpp + editinstrument.cpp + minstrument.h + editinstrument.h + ${instruments_mocs} + ${instruments_ui_headers} + ) + +set_target_properties( instruments + PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h" + ) + diff --git a/attic/muse_qt4_evolution/muse/instruments/editinstrument.cpp b/attic/muse_qt4_evolution/muse/instruments/editinstrument.cpp new file mode 100644 index 00000000..823a20e3 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/instruments/editinstrument.cpp @@ -0,0 +1,844 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "editinstrument.h" +#include "minstrument.h" +#include "ctrl.h" +#include "midictrl.h" +#include "al/xml.h" +#include "gconfig.h" + +extern int string2sysex(const QString& s, unsigned char** data); +extern QString sysex2string(int len, unsigned char* data); + +//--------------------------------------------------------- +// EditInstrument +//--------------------------------------------------------- + +EditInstrument::EditInstrument(QWidget* parent) + : QMainWindow(parent) + { + setupUi(this); + // populate instrument list + for (iMidiInstrument i = midiInstruments.begin(); i != midiInstruments.end(); ++i) { + QListWidgetItem* item = new QListWidgetItem((*i)->iname()); + QVariant v = qVariantFromValue((void*)(*i)); + item->setData(Qt::UserRole, v); + instrumentList->addItem(item); + } + instrumentList->setItemSelected(instrumentList->item(0), true); + connect(instrumentList, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), + SLOT(instrumentChanged(QListWidgetItem*,QListWidgetItem*))); + connect(patchView, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), + SLOT(patchChanged(QTreeWidgetItem*, QTreeWidgetItem*))); + instrumentChanged(instrumentList->item(0), instrumentList->item(0)); + connect(listController, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), + SLOT(controllerChanged(QListWidgetItem*, QListWidgetItem*))); + connect(sysexList, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), + SLOT(sysexChanged(QListWidgetItem*, QListWidgetItem*))); + connect(instrumentName, SIGNAL(textChanged(const QString&)), SLOT(instrumentNameChanged(const QString&))); + connect(fileSaveAsAction, SIGNAL(triggered()), SLOT(fileSaveAs())); + connect(fileSaveAction, SIGNAL(triggered()), SLOT(fileSave())); + connect(fileNewAction, SIGNAL(triggered()), SLOT(fileNew())); + connect(fileExitAction, SIGNAL(triggered()), SLOT(close())); + + connect(deletePatch, SIGNAL(clicked()), SLOT(deletePatchClicked())); + connect(newPatch, SIGNAL(clicked()), SLOT(newPatchClicked())); + connect(newGroup, SIGNAL(clicked()), SLOT(newGroupClicked())); + connect(newCategory, SIGNAL(clicked()), SLOT(newCategoryClicked())); + connect(deleteController, SIGNAL(clicked()), SLOT(deleteControllerClicked())); + connect(newController, SIGNAL(clicked()), SLOT(newControllerClicked())); + connect(deleteSysex, SIGNAL(clicked()), SLOT(deleteSysexClicked())); + connect(newSysex, SIGNAL(clicked()), SLOT(newSysexClicked())); + + connect(ctrlType,SIGNAL(activated(int)), SLOT(ctrlTypeChanged(int))); + } + +//--------------------------------------------------------- +// fileNew +//--------------------------------------------------------- + +void EditInstrument::fileNew() + { + for (int i = 1;; ++i) { + QString s = QString("Instrument-%1").arg(i); + bool found = false; + for (iMidiInstrument i = midiInstruments.begin(); i != midiInstruments.end(); ++i) { + if (s == (*i)->iname()) { + found = true; + break; + } + } + if (!found) { + MidiInstrument* ni = new MidiInstrument(s); + midiInstruments.append(ni); + QListWidgetItem* item = new QListWidgetItem(ni->iname()); + QVariant v = qVariantFromValue((void*)(ni)); + item->setData(Qt::UserRole, v); + instrumentList->addItem(item); + instrumentList->setCurrentItem(item); + break; + } + } + } + +//--------------------------------------------------------- +// fileSave +//--------------------------------------------------------- + +void EditInstrument::fileSave() + { + QListWidgetItem* item = instrumentList->currentItem(); + if (item == 0) + return; + MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value(); + if (instrument->filePath().isEmpty()) + fileSaveAs(); + else { + QFile f(instrument->filePath()); + if (!f.open(QIODevice::WriteOnly)) { + fileSaveAs(); + } + else { + f.close(); + if (fileSave(instrument, instrument->filePath())) + instrument->setDirty(false); + } + } + } + +//--------------------------------------------------------- +// fileSave +//--------------------------------------------------------- + +bool EditInstrument::fileSave(MidiInstrument* instrument, const QString& name) + { + QFile f(name); + if (!f.open(QIODevice::WriteOnly)) { + QString s("Creating file failed: "); + s += strerror(errno); + QMessageBox::critical(this, + tr("MusE: Create file failed"), s); + return false; + } + Xml xml(&f); + updateInstrument(instrument); + instrument->write(xml); + f.close(); + if (f.error()) { + QString s = QString("Write File\n") + f.fileName() + QString("\nfailed: ") + + f.errorString(); + QMessageBox::critical(this, tr("MusE: Write File failed"), s); + return false; + } + return true; + } + +//--------------------------------------------------------- +// fileSaveAs +//--------------------------------------------------------- + +void EditInstrument::fileSaveAs() + { + QListWidgetItem* item = instrumentList->currentItem(); + if (item == 0) + return; + MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value(); + QString path = QDir::homePath() + "/" + config.instrumentPath; + if (instrument->filePath().isEmpty()) + path += QString("/%1.idf").arg(instrument->iname()); + else { + QFileInfo fi(instrument->filePath()); + path += QString("/%1.idf").arg(fi.baseName()); + } + QString s = QFileDialog::getSaveFileName(this, + tr("MusE: Save Instrument Definition"), + path, + tr("Instrument Definition (*.idf)")); + if (s.isEmpty()) + return; + instrument->setFilePath(s); + if (fileSave(instrument, s)) + instrument->setDirty(false); + } + +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void EditInstrument::closeEvent(QCloseEvent* ev) + { + QListWidgetItem* item = instrumentList->currentItem(); + if (item) { + MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value(); + if (checkDirty(instrument)) { + ev->ignore(); + return; + } + } + QMainWindow::closeEvent(ev); + } + +//--------------------------------------------------------- +// instrumentNameChanged +//--------------------------------------------------------- + +void EditInstrument::instrumentNameChanged(const QString& s) + { + QListWidgetItem* item = instrumentList->currentItem(); + if (item == 0) + return; + if (s != item->text()) { + item->setText(s); + MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value(); + instrument->setDirty(true); + } + } + +//--------------------------------------------------------- +// deletePatchClicked +//--------------------------------------------------------- + +void EditInstrument::deletePatchClicked() + { + QListWidgetItem* item = instrumentList->currentItem(); + if (item == 0) + return; + MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value(); + QTreeWidgetItem* pi = patchView->currentItem(); + if (pi == 0) + return; + void* p = pi->data(0, Qt::UserRole).value(); + if (p == 0) + return; + Patch* patch = (Patch*)p; + std::vector* pg = instrument->groups(); + for (std::vector::iterator g = pg->begin(); g != pg->end(); ++g) { + for (iPatch p = g->patches.begin(); p != g->patches.end(); ++p) { + if (patch == *p) { + g->patches.erase(p); + delete pi; + instrument->setDirty(true); + return; + } + } + } + printf("fatal: patch not found\n"); + } + +//--------------------------------------------------------- +// newPatchClicked +//--------------------------------------------------------- + +void EditInstrument::newPatchClicked() + { + QListWidgetItem* item = instrumentList->currentItem(); + if (item == 0) + return; + MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value(); + std::vector* pg = instrument->groups(); + QString patchName; + for (int i = 1;; ++i) { + patchName = QString("Patch-%1").arg(i); + bool found = false; + + for (std::vector::iterator g = pg->begin(); g != pg->end(); ++g) { + for (iPatch p = g->patches.begin(); p != g->patches.end(); ++p) { + if ((*p)->name == patchName) { + found = true; + break; + } + } + if (found) + break; + } + if (!found) + break; + } + + // + // search current patch group + // + PatchGroup* pGroup = 0; + QTreeWidgetItem* pi = patchView->currentItem(); + if (pi == 0) + return; + if (pi->data(0, Qt::UserRole).value()) + pi = pi->parent(); + for (std::vector::iterator g = pg->begin(); g != pg->end(); ++g) { + if (g->name == pi->text(0)) { + pGroup = &*g; + break; + } + } + if (pGroup == 0) { + printf("group not found\n"); + return; + } + Patch* patch = new Patch; + patch->name = patchName; + pGroup->patches.push_back(patch); + QTreeWidgetItem* sitem = new QTreeWidgetItem; + sitem->setText(0, patch->name); + QVariant v = QVariant::fromValue((void*)(patch)); + sitem->setData(0, Qt::UserRole, v); + + pi->addChild(sitem); + patchView->setCurrentItem(sitem); + instrument->setDirty(true); + } + +//--------------------------------------------------------- +// newGroupClicked +//--------------------------------------------------------- + +void EditInstrument::newGroupClicked() + { + QListWidgetItem* item = instrumentList->currentItem(); + if (item == 0) + return; + MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value(); + std::vector* pg = instrument->groups(); + QString groupName; + for (int i = 1;; ++i) { + groupName = QString("Group-%1").arg(i); + bool found = false; + + for (std::vector::iterator g = pg->begin(); g != pg->end(); ++g) { + if (g->name == groupName) { + found = true; + break; + } + } + if (!found) + break; + } + + PatchGroup pGroup; + pGroup.name = groupName; + pg->push_back(pGroup); + + QTreeWidgetItem* sitem = new QTreeWidgetItem; + sitem->setText(0, groupName); + QVariant v = QVariant::fromValue((void*)0); + sitem->setData(0, Qt::UserRole, v); + patchView->addTopLevelItem(sitem); + patchView->setCurrentItem(sitem); + instrument->setDirty(true); + } + +//--------------------------------------------------------- +// newCategoryClicked +//--------------------------------------------------------- + +void EditInstrument::newCategoryClicked() + { + QListWidgetItem* item = instrumentList->currentItem(); + if (item == 0) + return; + MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value(); + bool ok; + QString cat = QInputDialog::getText(this, + tr("MusE: Enter new Category"), + tr("Enter new Category:"), + QLineEdit::Normal, "", &ok + ); + if (ok && !cat.isEmpty()) { + category->addItem(cat); + instrument->addCategory(cat); + instrument->setDirty(true); + } + } + +//--------------------------------------------------------- +// deleteControllerClicked +//--------------------------------------------------------- + +void EditInstrument::deleteControllerClicked() + { + QListWidgetItem* item = instrumentList->currentItem(); + QListWidgetItem* item2 = listController->currentItem(); + if (item == 0 || item2 == 0) + return; + MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value(); + MidiController* ctrl = (MidiController*)item2->data(Qt::UserRole).value(); + MidiControllerList* cl = instrument->controller(); + cl->removeAll(ctrl); + delete item2; + instrument->setDirty(true); + } + +//--------------------------------------------------------- +// newControllerClicked +//--------------------------------------------------------- + +void EditInstrument::newControllerClicked() + { + QListWidgetItem* item = instrumentList->currentItem(); + if (item == 0) + return; + MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value(); + + QString ctrlName; + MidiControllerList* cl = instrument->controller(); + for (int i = 1;; ++i) { + ctrlName = QString("Controller-%d").arg(i); + + bool found = false; + for (iMidiController ic = cl->begin(); ic != cl->end(); ++ic) { + MidiController* c = *ic; + if (c->name() == ctrlName) { + found = true; + break; + } + } + if (!found) + break; + } + + MidiController* ctrl = new MidiController(); + ctrl->setName(ctrlName); + item = new QListWidgetItem(ctrlName); + QVariant v = qVariantFromValue((void*)(ctrl)); + item->setData(Qt::UserRole, v); + listController->addItem(item); + listController->setCurrentItem(item); + instrument->setDirty(true); + } + +//--------------------------------------------------------- +// deleteSysexClicked +//--------------------------------------------------------- + +void EditInstrument::deleteSysexClicked() + { + QListWidgetItem* item = instrumentList->currentItem(); + QListWidgetItem* item2 = sysexList->currentItem(); + if (item == 0 || item2 == 0) + return; + MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value(); + SysEx* sysex = (SysEx*)item2->data(Qt::UserRole).value(); + QList sl = instrument->sysex(); + instrument->removeSysex(sysex); + delete item2; + instrument->setDirty(true); + } + +//--------------------------------------------------------- +// newSysexClicked +//--------------------------------------------------------- + +void EditInstrument::newSysexClicked() + { + QListWidgetItem* item = instrumentList->currentItem(); + if (item == 0) + return; + MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value(); + + QString sysexName; + for (int i = 1;; ++i) { + sysexName = QString("Sysex-%1").arg(i); + + bool found = false; + foreach(const SysEx* s, instrument->sysex()) { + if (s->name == sysexName) { + found = true; + break; + } + } + if (!found) + break; + } + SysEx* nsysex = new SysEx; + nsysex->name = sysexName; + instrument->addSysex(nsysex); + + item = new QListWidgetItem(sysexName); + QVariant v = QVariant::fromValue((void*)nsysex); + item->setData(Qt::UserRole, v); + sysexList->addItem(item); + sysexList->setCurrentItem(item); + instrument->setDirty(true); + } + +//--------------------------------------------------------- +// instrumentChanged +//--------------------------------------------------------- + +void EditInstrument::instrumentChanged(QListWidgetItem* sel, QListWidgetItem* old) + { + if (sel == 0) + return; + if (old) { + MidiInstrument* oi = (MidiInstrument*)old->data(Qt::UserRole).value(); + checkDirty(oi); + oi->setDirty(false); + } + + patchView->clear(); + listController->clear(); + category->clear(); + sysexList->clear(); + + // populate patch list + + MidiInstrument* instrument = (MidiInstrument*)sel->data(Qt::UserRole).value(); + instrument->setDirty(false); + + instrumentName->setText(instrument->iname()); + std::vector* pg = instrument->groups(); + for (std::vector::iterator g = pg->begin(); g != pg->end(); ++g) { + QTreeWidgetItem* item = new QTreeWidgetItem; + item->setText(0, g->name); + QVariant v = QVariant::fromValue((void*)0); + item->setData(0, Qt::UserRole, v); + patchView->addTopLevelItem(item); + for (iPatch p = g->patches.begin(); p != g->patches.end(); ++p) { + Patch* patch = *p; + QTreeWidgetItem* sitem = new QTreeWidgetItem; + sitem->setText(0, patch->name); + QVariant v = QVariant::fromValue((void*)patch); + sitem->setData(0, Qt::UserRole, v); + item->addChild(sitem); + } + } + MidiControllerList* cl = instrument->controller(); + for (iMidiController ic = cl->begin(); ic != cl->end(); ++ic) { + MidiController* c = *ic; + QListWidgetItem* item = new QListWidgetItem(c->name()); + QVariant v = QVariant::fromValue((void*)c); + item->setData(Qt::UserRole, v); + listController->addItem(item); + } + listController->setItemSelected(listController->item(0), true); + controllerChanged(listController->item(0), 0); + + category->addItems(instrument->categories()); + + foreach(const SysEx* s, instrument->sysex()) { + QListWidgetItem* item = new QListWidgetItem(s->name); + QVariant v = QVariant::fromValue((void*)s); + item->setData(Qt::UserRole, v); + sysexList->addItem(item); + } + + sysexList->setItemSelected(sysexList->item(0), true); + sysexChanged(sysexList->item(0), 0); + + if (!cl->empty()) { + listController->setItemSelected(listController->item(0), true); + controllerChanged(listController->item(0), 0); + } + } + +//--------------------------------------------------------- +// updatePatch +//--------------------------------------------------------- + +void EditInstrument::updatePatch(MidiInstrument* instrument, Patch* p) + { + if (p->name != patchNameEdit->text()) { + p->name = patchNameEdit->text(); + instrument->setDirty(true); + } + if (p->hbank != spinBoxHBank->value()) { + p->hbank = spinBoxHBank->value(); + instrument->setDirty(true); + } + if (p->lbank != spinBoxLBank->value()) { + p->hbank = spinBoxHBank->value(); + instrument->setDirty(true); + } + if (p->prog != spinBoxProgram->value()) { + p->prog = spinBoxProgram->value(); + instrument->setDirty(true); + } + // there is no logical xor in c++ + bool a = p->typ & 1; + bool b = p->typ & 2; + bool c = p->typ & 4; + bool aa = checkBoxGM->isChecked(); + bool bb = checkBoxGS->isChecked(); + bool cc = checkBoxXG->isChecked(); + if ((a ^ aa) || (b ^ bb) || (c ^ cc)) { + int value = 0; + if (checkBoxGM->isChecked()) + value |= 1; + if (checkBoxGS->isChecked()) + value |= 2; + if (checkBoxXG->isChecked()) + value |= 4; + p->typ = value; + instrument->setDirty(true); + } + if (p->categorie != category->currentIndex()) { + p->categorie = category->currentIndex(); + instrument->setDirty(true); + } + } + +//--------------------------------------------------------- +// patchChanged +//--------------------------------------------------------- + +void EditInstrument::patchChanged(QTreeWidgetItem* sel, QTreeWidgetItem* old) + { + if (old && old->data(0, Qt::UserRole).value()) { + QListWidgetItem* item = instrumentList->currentItem(); + if (item == 0) + return; + MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value(); + Patch* p = (Patch*)old->data(0, Qt::UserRole).value(); + updatePatch(instrument, p); + } + if (sel == 0 || sel->data(0, Qt::UserRole).value() == 0) { + patchNameEdit->setText(""); + return; + } + Patch* p = (Patch*)sel->data(0, Qt::UserRole).value(); + patchNameEdit->setText(p->name); + spinBoxHBank->setValue(p->hbank); + spinBoxLBank->setValue(p->lbank); + spinBoxProgram->setValue(p->prog); + checkBoxDrum->setChecked(p->drumMap); + checkBoxGM->setChecked(p->typ & 1); + checkBoxGS->setChecked(p->typ & 2); + checkBoxXG->setChecked(p->typ & 4); + category->setCurrentIndex(p->categorie); + } + +//--------------------------------------------------------- +// updateController +//--------------------------------------------------------- + +void EditInstrument::updateController(MidiInstrument* instrument, MidiController* oc) + { + int ctrlH = spinBoxHCtrlNo->value(); + int ctrlL = spinBoxLCtrlNo->value(); + MidiController::ControllerType type = (MidiController::ControllerType)ctrlType->currentIndex(); + int num = MidiController::genNum(type, ctrlH, ctrlL); + + if (num != oc->num()) { + oc->setNum(num); + instrument->setDirty(true); + } + if (spinBoxMin->value() != oc->minVal()) { + oc->setMinVal(spinBoxMin->value()); + instrument->setDirty(true); + } + if (spinBoxMax->value() != oc->maxVal()) { + oc->setMaxVal(spinBoxMax->value()); + instrument->setDirty(true); + } + if (spinBoxDefault->value() != oc->initVal()) { + oc->setInitVal(spinBoxDefault->value()); + instrument->setDirty(true); + } + if (moveWithPart->isChecked() ^ oc->moveWithPart()) { + oc->setMoveWithPart(moveWithPart->isChecked()); + instrument->setDirty(true); + } + if (ctrlName->text() != oc->name()) { + oc->setName(ctrlName->text()); + instrument->setDirty(true); + } + if (ctrlComment->toPlainText() != oc->comment()) { + oc->setComment(ctrlComment->toPlainText()); + instrument->setDirty(true); + } + } + +//--------------------------------------------------------- +// controllerChanged +//--------------------------------------------------------- + +void EditInstrument::controllerChanged(QListWidgetItem* sel, QListWidgetItem* old) + { + if (old) { + QListWidgetItem* item = instrumentList->currentItem(); + if (item == 0) + return; + MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value(); + MidiController* oc = (MidiController*)old->data(Qt::UserRole).value(); + updateController(instrument, oc); + } + if (sel == 0 || sel->data(Qt::UserRole).value() == 0) { + ctrlName->setText(""); + ctrlComment->setText(""); + return; + } + MidiController* c = (MidiController*)sel->data(Qt::UserRole).value(); + ctrlName->setText(c->name()); + ctrlComment->setText(c->comment()); + int ctrlH = (c->num() >> 8) & 0x7f; + int ctrlL = c->num() & 0x7f; + int type = int(c->type()); + ctrlType->setCurrentIndex(type); + ctrlTypeChanged(type); + spinBoxHCtrlNo->setValue(ctrlH); + spinBoxLCtrlNo->setValue(ctrlL); + spinBoxMin->setValue(c->minVal()); + spinBoxMax->setValue(c->maxVal()); + spinBoxDefault->setRange(c->minVal()-1, c->maxVal()); + spinBoxDefault->setValue(c->initVal()); + moveWithPart->setChecked(c->moveWithPart()); + } + +//--------------------------------------------------------- +// updateSysex +//--------------------------------------------------------- + +void EditInstrument::updateSysex(MidiInstrument* instrument, SysEx* so) + { + if (sysexName->text() != so->name) { + so->name = sysexName->text(); + instrument->setDirty(true); + } + if (sysexComment->toPlainText() != so->comment) { + so->comment = sysexComment->toPlainText(); + instrument->setDirty(true); + } + unsigned char* data; + int len = string2sysex(sysexData->toPlainText(), &data); + if (so->dataLen != len || !memcmp(data, so->data, len)) { + delete so->data; + so->data = data; + so->dataLen = len; + } + } + +//--------------------------------------------------------- +// sysexChanged +//--------------------------------------------------------- + +void EditInstrument::sysexChanged(QListWidgetItem* sel, QListWidgetItem* old) + { + if (old) { + QListWidgetItem* item = instrumentList->currentItem(); + if (item == 0) + return; + MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value(); + SysEx* so = (SysEx*)item->data(Qt::UserRole).value(); + updateSysex(instrument, so); + } + if (sel == 0) { + sysexName->setText(""); + sysexComment->setText(""); + sysexData->setText(""); + sysexName->setEnabled(false); + sysexComment->setEnabled(false); + sysexData->setEnabled(false); + return; + } + sysexName->setEnabled(true); + sysexComment->setEnabled(true); + sysexData->setEnabled(true); + + SysEx* sx = (SysEx*)sel->data(Qt::UserRole).value(); + sysexName->setText(sx->name); + sysexComment->setText(sx->comment); + sysexData->setText(sysex2string(sx->dataLen, sx->data)); + } + +//--------------------------------------------------------- +// checkDirty +// return true on Abort +//--------------------------------------------------------- + +bool EditInstrument::checkDirty(MidiInstrument* i) + { + updateInstrument(i); + if (!i->dirty()) + return false; + int n = QMessageBox::warning(this, tr("MusE"), + tr("The current Instrument contains unsaved data\n" + "Save Current Instrument?"), + tr("&Save"), tr("&Nosave"), tr("&Abort"), 0, 2); + if (n == 0) { + if (i->filePath().isEmpty()) + fileSaveAs(); + else { + QFile f(i->filePath()); + if (!f.open(QIODevice::WriteOnly)) + fileSaveAs(); + else { + f.close(); + if (fileSave(i, i->filePath())) + i->setDirty(false); + } + } + return false; + } + return n == 2; + } + +//--------------------------------------------------------- +// ctrlTypeChanged +//--------------------------------------------------------- + +void EditInstrument::ctrlTypeChanged(int idx) + { + MidiController::ControllerType t = (MidiController::ControllerType)idx; + switch (t) { + case MidiController::RPN: + case MidiController::NRPN: + case MidiController::Controller7: + spinBoxHCtrlNo->setEnabled(false); + spinBoxLCtrlNo->setEnabled(true); + break; + case MidiController::Controller14: + case MidiController::RPN14: + case MidiController::NRPN14: + spinBoxHCtrlNo->setEnabled(true); + spinBoxLCtrlNo->setEnabled(true); + break; + case MidiController::Pitch: + case MidiController::Program: + spinBoxHCtrlNo->setEnabled(false); + spinBoxLCtrlNo->setEnabled(false); + break; + default: + break; + } + } + +//--------------------------------------------------------- +// updateInstrument +//--------------------------------------------------------- + +void EditInstrument::updateInstrument(MidiInstrument* instrument) + { + QListWidgetItem* sysexItem = sysexList->currentItem(); + if (sysexItem) { + SysEx* so = (SysEx*)sysexItem->data(Qt::UserRole).value(); + updateSysex(instrument, so); + } + QListWidgetItem* ctrlItem = listController->currentItem(); + if (ctrlItem) { + MidiController* ctrl = (MidiController*)ctrlItem->data(Qt::UserRole).value(); + updateController(instrument, ctrl); + } + QTreeWidgetItem* patchItem = patchView->currentItem(); + if (patchItem) { + Patch* p = (Patch*)patchItem->data(0, Qt::UserRole).value(); + updatePatch(instrument, p); + } + } + diff --git a/attic/muse_qt4_evolution/muse/instruments/editinstrument.h b/attic/muse_qt4_evolution/muse/instruments/editinstrument.h new file mode 100644 index 00000000..cefafe74 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/instruments/editinstrument.h @@ -0,0 +1,70 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __EDITINSTRUMENT_H__ +#define __EDITINSTRUMENT_H__ + +#include "ui_editinstrument.h" + +class MidiInstrument; +class SysEx; +class MidiController; +struct Patch; + +//--------------------------------------------------------- +// EditInstrument +//--------------------------------------------------------- + +class EditInstrument : public QMainWindow, public Ui::EditInstrumentBase { + Q_OBJECT + + bool fileSave(MidiInstrument*, const QString& name); + void closeEvent(QCloseEvent*); + bool checkDirty(MidiInstrument*); + void updateInstrument(MidiInstrument*); + void updateSysex(MidiInstrument*, SysEx*); + void updateController(MidiInstrument*, MidiController*); + void updatePatch(MidiInstrument* instrument, Patch* p); + + private slots: + virtual void fileNew(); + virtual void fileSave(); + virtual void fileSaveAs(); + void instrumentChanged(QListWidgetItem*, QListWidgetItem*); + void patchChanged(QTreeWidgetItem*, QTreeWidgetItem*); + void controllerChanged(QListWidgetItem*, QListWidgetItem*); + void sysexChanged(QListWidgetItem*, QListWidgetItem*); + void instrumentNameChanged(const QString&); + void deletePatchClicked(); + void newPatchClicked(); + void newGroupClicked(); + void newCategoryClicked(); + void deleteControllerClicked(); + void newControllerClicked(); + void deleteSysexClicked(); + void newSysexClicked(); + void ctrlTypeChanged(int); + + public: + EditInstrument(QWidget* parent = 0); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/instruments/editinstrument.ui b/attic/muse_qt4_evolution/muse/instruments/editinstrument.ui new file mode 100644 index 00000000..f58d9d28 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/instruments/editinstrument.ui @@ -0,0 +1,998 @@ + + EditInstrumentBase + + + + 0 + 0 + 821 + 551 + + + + MusE: Instrument Editor + + + + + 9 + + + 6 + + + + + Qt::Horizontal + + + + + 5 + 7 + 0 + 0 + + + + QListView::Adjust + + + QListView::Batched + + + + + + 0 + + + 6 + + + + + 0 + + + 6 + + + + + Instrument Name: + + + + + + + + + + + + 0 + + + + Patches + + + + 9 + + + 6 + + + + + Qt::Horizontal + + + + + 5 + 7 + 0 + 0 + + + + true + + + + Patch/Group + + + + + + + 0 + + + 6 + + + + + + + + Patch Name: + + + + + + + Program: + + + + + + + 0 + + + 6 + + + + + + 5 + 0 + 0 + 0 + + + + &Delete + + + Alt+D + + + + + + + + 5 + 1 + 0 + 0 + + + + &New Patch + + + Alt+N + + + + + + + New Group + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 240 + 20 + + + + + + + + New Category + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 280 + 20 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 280 + 20 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 280 + 20 + + + + + + + + d.c. + + + 127 + + + -1 + + + -1 + + + + + + + High Bank: + + + + + + + Low Bank: + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 90 + + + + + + + + d.c. + + + 127 + + + -1 + + + -1 + + + + + + + + + + 0 + + + 6 + + + + + Drum + + + + + + + GM + + + + + + + GS + + + + + + + XG + + + + + + + + + true + + + + + + + Category: + + + + + + + + + + + + Controller + + + + 9 + + + 6 + + + + + Qt::Horizontal + + + + + 0 + + + 6 + + + + + + 5 + 0 + 0 + 0 + + + + Controller List: + + + + + + + This is a list of commonly used midi controllers. +Note that in MusE pitch and program changes are +handled like normal controllers. + + + + + + + + + 0 + + + 6 + + + + + + 1 + 5 + 0 + 0 + + + + Properties + + + + 9 + + + 6 + + + + + Name + + + + + + + + + + Comment + + + + + + + + + + Type + + + + + + + 2 + + + 6 + + + + + + Controller-7Bit + + + + + Controller-14Bit + + + + + RPN-7Bit + + + + + NRPN-7Bit + + + + + RPN-14Bit + + + + + NRPN-14Bit + + + + + Pitch + + + + + Program + + + + + + + + H-Ctrl + + + 10 + + + + + + + Midi Controller Number High Byte + + + 127 + + + 0 + + + 1 + + + + + + + L-Ctrl + + + 10 + + + + + + + Midi Controller Number Low Byte + + + 127 + + + 0 + + + 1 + + + + + + + + + Range + + + + + + + 0 + + + 6 + + + + + Min + + + 10 + + + + + + + 16384 + + + -16385 + + + + + + + Max + + + 10 + + + + + + + 8388607 + + + -16385 + + + 127 + + + + + + + Default + + + + + + + ?? + + + -1 + + + + + + + + + Move Controller Values with Part + + + + + + + + + + 0 + + + 6 + + + + + Delete + + + + + + + New Controller + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + SysEx + + + + 9 + + + 6 + + + + + Qt::Horizontal + + + + + 0 + + + 6 + + + + + SYSEX-List: + + + + + + + + 7 + 7 + 0 + 0 + + + + QListView::Adjust + + + true + + + + + + + + + 0 + + + 6 + + + + + Properties + + + + 9 + + + 6 + + + + + Name: + + + + + + + + + + Comment: + + + + + + + + + + Data: + + + + + + + + + + + + + 0 + + + 6 + + + + + Delete + + + + + + + New Sysex + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + 821 + 32 + + + + false + + + + + 434 + 167 + 146 + 168 + + + + &File + + + + + + + + + + + + Qt::Horizontal + + + 4 + + + + + + + + :/xpm/filenew.png + + + &New + + + New + + + Ctrl+N + + + + + :/xpm/fileopen.png + + + &Open... + + + Open + + + Ctrl+O + + + + + :/xpm/filesave.png + + + &Save + + + Save + + + Ctrl+S + + + + + :/xpm/fileopen.png + + + Save &As... + + + Save As + + + + + + + + :/xpm/off.svg + + + E&xit + + + Exit + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/muse/instruments/midictrledit.cpp b/attic/muse_qt4_evolution/muse/instruments/midictrledit.cpp new file mode 100644 index 00000000..b2f33e30 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/instruments/midictrledit.cpp @@ -0,0 +1,418 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "app.h" +#include "driver/mididev.h" +#include "midictrl.h" +#include "midictrledit.h" +#include "xml.h" +#include "filedialog.h" +#include "globals.h" + +MidiControllerEditDialog* midiControllerEditDialog; + +static MidiController predefinedMidiController[] = { + MidiController("Pitch", 0x40000, -10000, +10000), + MidiController("Program", 0x40001, 0, 127), + MidiController("BankSel", 0x10000, 0, 16383) + }; + +enum { + COL_NAME = 0, COL_TYPE, + COL_HNUM, COL_LNUM, COL_MIN, COL_MAX + }; + +//--------------------------------------------------------- +// addControllerToView +//--------------------------------------------------------- + +void MidiControllerEditDialog::addControllerToView(MidiController* mctrl) + { + QString hnum; + hnum.setNum(mctrl->num()); + QString lnum("---"); + QString min; + min.setNum(mctrl->minVal()); + QString max; + max.setNum(mctrl->maxVal()); + new Q3ListViewItem(viewController, + mctrl->name(), + int2ctrlType(mctrl->type()), + hnum, lnum, min, max + ); + } + +//--------------------------------------------------------- +// MidiControllerEditDialog +//--------------------------------------------------------- + +MidiControllerEditDialog::MidiControllerEditDialog(QWidget* parent, const char* name, bool modal, Qt::WFlags fl) + : MidiControllerEditDialogBase(parent, name, modal, fl) + { + viewController->setColumnAlignment(COL_HNUM, AlignCenter); + viewController->setColumnAlignment(COL_LNUM, AlignCenter); + viewController->setColumnAlignment(COL_MIN, AlignCenter); + viewController->setColumnAlignment(COL_MAX, AlignCenter); + viewController->setColumnWidthMode(COL_NAME, Q3ListView::Maximum); + + // populate list of predefined controller + int size = sizeof(predefinedMidiController) / sizeof(*predefinedMidiController); + for (int i = 0; i < size; ++i) + listController->insertItem(predefinedMidiController[i].name()); + listController->setSelected(0, true); + + // populate ports pulldown + for (int i = 0; i < MIDI_PORTS; ++i) { + MidiPort* port = &midiPorts[i]; + MidiDevice* dev = port->device(); + QString name; + name.sprintf("%d(%s)", port->portno()+1, + dev ? dev->name().latin1() : "none"); + midiPortsList->insertItem(name, i); + } + + reject(); // populate list + viewController->setCurrentItem(viewController->firstChild()); + + connect(buttonNew, SIGNAL(clicked()), SLOT(ctrlAdd())); + connect(buttonDelete, SIGNAL(clicked()), SLOT(ctrlDelete())); + connect(entryName, SIGNAL(textChanged(const QString&)), SLOT(nameChanged(const QString&))); + connect(comboType, SIGNAL(activated(const QString&)), SLOT(typeChanged(const QString&))); + connect(spinboxHCtrlNo, SIGNAL(valueChanged(int)), SLOT(valueHChanged(int))); + connect(spinboxLCtrlNo, SIGNAL(valueChanged(int)), SLOT(valueLChanged(int))); + connect(spinboxMin, SIGNAL(valueChanged(int)), SLOT(minChanged(int))); + connect(spinboxMax, SIGNAL(valueChanged(int)), SLOT(maxChanged(int))); + connect(viewController, SIGNAL(selectionChanged()), SLOT(controllerChanged())); + + controllerChanged(viewController->currentItem()); + } + +//--------------------------------------------------------- +// reject +//--------------------------------------------------------- + +void MidiControllerEditDialog::reject() + { + viewController->clear(); + for (iMidiController i = midiControllerList.begin(); + i != midiControllerList.end(); ++i) { + addControllerToView(&*i); + } + MidiControllerEditDialogBase::reject(); + } + +//--------------------------------------------------------- +// ctrlAdd +//--------------------------------------------------------- + +void MidiControllerEditDialog::ctrlAdd() + { + Q3ListBoxItem* item = listController->selectedItem(); + if (item == 0) + return; + QString name = item->text(); + int size = sizeof(predefinedMidiController) / sizeof(*predefinedMidiController); + for (int i = 0; i < size; ++i) { + MidiController* c = &predefinedMidiController[i]; + if (c->name() != name) + continue; + MidiController::ControllerType t = c->type(); + QString type = int2ctrlType(t); + QString min, max; + min.setNum(c->minVal()); + max.setNum(c->maxVal()); + + QString hno, lno; + int h = (c->num() >> 14) & 0x7f; + int l = c->num() & 0x7f; + + switch(t) { + case MidiController::Controller7: + hno = "---"; + lno.setNum(l); + break; + case MidiController::RPN: + case MidiController::NRPN: + case MidiController::Controller14: + hno.setNum(h); + lno.setNum(l); + break; + case MidiController::Pitch: + case MidiController::Program: + hno = "---"; + lno = "---"; + default: + break; + } + + Q3ListViewItem* item = new Q3ListViewItem(viewController, + name, type, hno, lno, min, max); + + viewController->setCurrentItem(item); + controllerChanged(item); + break; + } + } + +//--------------------------------------------------------- +// ctrlDelete +//--------------------------------------------------------- + +void MidiControllerEditDialog::ctrlDelete() + { + Q3ListViewItem* item = viewController->currentItem(); + if (item == 0) + return; + delete item; + } + +//--------------------------------------------------------- +// accept +//--------------------------------------------------------- + +void MidiControllerEditDialog::accept() + { + midiControllerList.clear(); + + Q3ListViewItem* item = viewController->firstChild(); + int hval = item->text(COL_HNUM).toInt(); + int lval = item->text(COL_LNUM).toInt(); + + while (item) { + MidiController c; + c.setName(item->text(COL_NAME)); + MidiController::ControllerType type = ctrlType2Int(item->text(COL_TYPE)); + + switch(type) { + case MidiController::Controller7: + c.setNum(hval); + break; + case MidiController::Controller14: + c.setNum((hval << 8 | lval) | 0x10000); + break; + case MidiController::RPN: + c.setNum((hval << 8 | lval) | 0x20000); + break; + case MidiController::NRPN: + c.setNum((hval << 8 | lval) | 0x30000); + break; + case MidiController::Pitch: + c.setNum(CTRL_PITCH); + break; + default: + break; + } + c.setMinVal(item->text(COL_MIN).toInt()); + c.setMaxVal(item->text(COL_MAX).toInt()); + midiControllerList.push_back(c); + item = item->nextSibling(); + } + MidiControllerEditDialogBase::accept(); + } + +//--------------------------------------------------------- +// nameChanged +//--------------------------------------------------------- + +void MidiControllerEditDialog::nameChanged(const QString& s) + { + Q3ListViewItem* item = viewController->currentItem(); + if (item == 0) + return; + item->setText(COL_NAME, s); + } + +//--------------------------------------------------------- +// typeChanged +//--------------------------------------------------------- + +void MidiControllerEditDialog::typeChanged(const QString& s) + { + Q3ListViewItem* item = viewController->currentItem(); + if (item == 0) + return; + item->setText(COL_TYPE, s); + item->setText(COL_MIN, QString("0")); + switch(ctrlType2Int(s)) { + case 2: // RPN + case 3: // NRPN + case MidiController::Controller14: + item->setText(COL_MAX, QString("16383")); + break; + case MidiController::Controller7: + case MidiController::Program: + item->setText(COL_MAX, QString("127")); + break; + case MidiController::Pitch: + item->setText(COL_MIN, QString("-5000")); + item->setText(COL_MAX, QString("+5000")); + break; + default: + break; + } + controllerChanged(item); + } + +//--------------------------------------------------------- +// valueHChanged +//--------------------------------------------------------- + +void MidiControllerEditDialog::valueHChanged(int val) + { + Q3ListViewItem* item = viewController->currentItem(); + if (item == 0) + return; + QString s; + s.setNum(val); + item->setText(COL_HNUM, s); + } + +//--------------------------------------------------------- +// valueLChanged +//--------------------------------------------------------- + +void MidiControllerEditDialog::valueLChanged(int val) + { + Q3ListViewItem* item = viewController->currentItem(); + if (item == 0) + return; + QString s; + s.setNum(val); + item->setText(COL_LNUM, s); + } + +//--------------------------------------------------------- +// controllerChanged +//--------------------------------------------------------- + +void MidiControllerEditDialog::controllerChanged() + { + Q3ListViewItem* item = viewController->selectedItem(); + controllerChanged(item); + } + +void MidiControllerEditDialog::controllerChanged(Q3ListViewItem* item) + { + if (item == 0) { + entryName->setEnabled(false); + comboType->setEnabled(false); + spinboxHCtrlNo->setEnabled(false); + spinboxLCtrlNo->setEnabled(false); + spinboxMin->setEnabled(false); + spinboxMax->setEnabled(false); + return; + } + + entryName->blockSignals(true); + comboType->blockSignals(true); + spinboxHCtrlNo->blockSignals(true); + spinboxLCtrlNo->blockSignals(true); + spinboxMin->blockSignals(true); + spinboxMax->blockSignals(true); + + entryName->setEnabled(true); + entryName->setText(item->text(COL_NAME)); + comboType->setCurrentItem(int(ctrlType2Int(item->text(COL_TYPE)))); + switch (ctrlType2Int(item->text(COL_TYPE))) { + case MidiController::Controller7: + comboType->setEnabled(true); + spinboxHCtrlNo->setEnabled(false); + spinboxLCtrlNo->setEnabled(true); + spinboxMin->setEnabled(true); + spinboxMax->setEnabled(true); + + spinboxHCtrlNo->setValue(item->text(COL_HNUM).toInt()); + spinboxMin->setValue(item->text(COL_MIN).toInt()); + spinboxMax->setValue(item->text(COL_MAX).toInt()); + item->setText(COL_LNUM, QString("---")); + break; + + case MidiController::Controller14: + case MidiController::RPN: + case MidiController::NRPN: + comboType->setEnabled(true); + spinboxHCtrlNo->setEnabled(true); + spinboxLCtrlNo->setEnabled(true); + spinboxMin->setEnabled(true); + spinboxMax->setEnabled(true); + + spinboxHCtrlNo->setValue(item->text(COL_HNUM).toInt()); + spinboxLCtrlNo->setValue(item->text(COL_LNUM).toInt()); + spinboxMin->setValue(item->text(COL_MIN).toInt()); + spinboxMax->setValue(item->text(COL_MAX).toInt()); + break; + + case MidiController::Pitch: + case MidiController::Program: + comboType->setEnabled(true); + spinboxHCtrlNo->setEnabled(false); + spinboxLCtrlNo->setEnabled(false); + spinboxMin->setEnabled(true); + spinboxMax->setEnabled(true); + break; + default: + break; + } + entryName->blockSignals(false); + comboType->blockSignals(false); + spinboxHCtrlNo->blockSignals(false); + spinboxLCtrlNo->blockSignals(false); + spinboxMin->blockSignals(false); + spinboxMax->blockSignals(false); + } + +//--------------------------------------------------------- +// minChanged +//--------------------------------------------------------- + +void MidiControllerEditDialog::minChanged(int val) + { + Q3ListViewItem* item = viewController->currentItem(); + if (item == 0) + return; + QString s; + s.setNum(val); + item->setText(COL_MIN, s); + } + +//--------------------------------------------------------- +// maxChanged +//--------------------------------------------------------- + +void MidiControllerEditDialog::maxChanged(int val) + { + Q3ListViewItem* item = viewController->currentItem(); + if (item == 0) + return; + QString s; + s.setNum(val); + item->setText(COL_MAX, s); + } + +//--------------------------------------------------------- +// configMidiController +//--------------------------------------------------------- + +void configMidiController() + { + if (midiControllerEditDialog == 0) + midiControllerEditDialog = new MidiControllerEditDialog(); + midiControllerEditDialog->show(); + } diff --git a/attic/muse_qt4_evolution/muse/instruments/midictrledit.h b/attic/muse_qt4_evolution/muse/instruments/midictrledit.h new file mode 100644 index 00000000..321f14b7 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/instruments/midictrledit.h @@ -0,0 +1,58 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MIDICTRLEDIT_H__ +#define __MIDICTRLEDIT_H__ + +#include "ccontrolbase.h" +#include "midictrl.h" + +//--------------------------------------------------------- +// MidiControllerEditDialog +//--------------------------------------------------------- + +class MidiControllerEditDialog : public MidiControllerEditDialogBase { + Q_OBJECT + + void addControllerToView(MidiController* mctrl); + void mergeReplace(bool replace); + + private slots: + void ctrlAdd(); + void ctrlDelete(); + virtual void accept(); + virtual void reject(); + void nameChanged(const QString&); + void typeChanged(const QString&); + void valueHChanged(int); + void valueLChanged(int); + void controllerChanged(Q3ListViewItem*); + void controllerChanged(); + void minChanged(int); + void maxChanged(int); + + public: + MidiControllerEditDialog(QWidget* parent = 0, const char* name = 0, bool modal = false, Qt::WFlags fl = 0); + }; + +extern MidiControllerEditDialog* midiControllerEditDialog; +extern void configMidiController(); +#endif + diff --git a/attic/muse_qt4_evolution/muse/instruments/minstrument.cpp b/attic/muse_qt4_evolution/muse/instruments/minstrument.cpp new file mode 100644 index 00000000..a189c63d --- /dev/null +++ b/attic/muse_qt4_evolution/muse/instruments/minstrument.cpp @@ -0,0 +1,631 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "minstrument.h" +#include "midioutport.h" +#include "globals.h" +#include "event.h" +#include "midievent.h" +#include "midictrl.h" +#include "gconfig.h" +#include "midiedit/drummap.h" + +MidiInstrumentList midiInstruments; +MidiInstrument* genericMidiInstrument; + +//--------------------------------------------------------- +// string2sysex +//--------------------------------------------------------- + +int string2sysex(const QString& s, unsigned char** data) + { + const char* src = s.toLatin1().data(); + char buffer[2048]; + char* dst = buffer; + + if(src) { + while (*src) { + while (*src == ' ' || *src == '\n') { + ++src; + } + char* ep; + long val = strtol(src, &ep, 16); + if (ep == src) { + QMessageBox::information(0, + QString("MusE"), + QWidget::tr("Cannot convert sysex string")); + return 0; + } + src = ep; + *dst++ = val; + if (dst - buffer >= 2048) { + QMessageBox::information(0, + QString("MusE"), + QWidget::tr("Hex String too long (2048 bytes limit)")); + return 0; + } + } + } + int len = dst - buffer; + unsigned char* b = new unsigned char[len+1]; + memcpy(b, buffer, len); + b[len] = 0; + *data = b; + return len; + } + +//--------------------------------------------------------- +// sysex2string +//--------------------------------------------------------- + +QString sysex2string(int len, unsigned char* data) + { + QString d; + QString s; + for (int i = 0; i < len; ++i) { + if ((i > 0) && ((i % 8)==0)) { + d += "\n"; + } + else if (i) + d += " "; + d += s.sprintf("%02x", data[i]); + } + return d; + } + +//--------------------------------------------------------- +// Patch +//--------------------------------------------------------- + +Patch::Patch() + { + drumMap = 0; + categorie = -1; + } + +Patch::~Patch() + { + if (drumMap) + delete drumMap; + } + +//--------------------------------------------------------- +// loadIDF +//--------------------------------------------------------- + +static void loadIDF(QFileInfo* fi) + { + QFile qf(fi->filePath()); + if (!qf.open(QIODevice::ReadOnly)) { + printf("cannot open file %s\n", fi->fileName().toLatin1().data()); + return; + } + if (debugMsg) + printf(" load instrument definition <%s>\n", fi->filePath().toLocal8Bit().data()); + QDomDocument doc; + int line, column; + QString err; + if (!doc.setContent(&qf, false, &err, &line, &column)) { + QString col, ln, error; + col.setNum(column); + ln.setNum(line); + error = err + " at line: " + ln + " col: " + col; + printf("error reading file <%s>:\n %s\n", + fi->filePath().toLatin1().data(), error.toLatin1().data()); + return; + } + QDomNode node = doc.documentElement(); + while (!node.isNull()) { + QDomElement e = node.toElement(); + if (e.isNull()) + continue; + if (e.tagName() == "muse") { + QString version = e.attribute(QString("version")); + for (QDomNode n = node.firstChild(); !n.isNull(); n = n.nextSibling()) { + QDomElement e = n.toElement(); + if (e.tagName() == "MidiInstrument") { + MidiInstrument* i = new MidiInstrument(); + i->read(n); + i->setFilePath(fi->filePath()); + bool replaced = false; + for (int idx = 0; idx < midiInstruments.size(); ++idx) { + if (midiInstruments[idx]->iname() == i->iname()) { + midiInstruments.replace(idx, i); + replaced = true; + if (debugMsg) + printf("Midi Instrument Definition <%s> overwritten\n", + i->iname().toLocal8Bit().data()); + break; + } + } + if (!replaced) + midiInstruments += i; + } + } + } + else + printf("MusE:laodIDF: %s not supported\n", e.tagName().toLatin1().data()); + node = node.nextSibling(); + } + qf.close(); + } + +//--------------------------------------------------------- +// initMidiInstruments +//--------------------------------------------------------- + +void initMidiInstruments() + { + genericMidiInstrument = new MidiInstrument(QWidget::tr("generic midi")); + + midiInstruments.push_back(genericMidiInstrument); + QString museGlobalInstruments(museGlobalShare + + QString("/instruments")); + if (debugMsg) + printf("load instrument definitions from <%s>\n", museGlobalInstruments.toLatin1().data()); + QDir instrumentsDir(museGlobalInstruments, QString("*.idf"), + QDir::SortFlags(QDir::Name | QDir::IgnoreCase), QDir::Files); + if (instrumentsDir.exists()) { + QFileInfoList list = instrumentsDir.entryInfoList(); + int n = list.size(); + for (int i = 0; i < n; ++i) { + QFileInfo fi = list.at(i); + loadIDF(&fi); + } + } + QString path2 = QDir::homePath() + "/" + config.instrumentPath; + if (debugMsg) + printf("load instrument definitions from <%s>\n", path2.toLatin1().data()); + QDir instrumentsDir2(path2, QString("*.idf"), + QDir::SortFlags(QDir::Name | QDir::IgnoreCase), QDir::Files); + if (instrumentsDir2.exists()) { + QFileInfoList list = instrumentsDir2.entryInfoList(); + int n = list.size(); + for (int i = 0; i < n; ++i) { + QFileInfo fi = list.at(i); + loadIDF(&fi); + } + } + } + +//--------------------------------------------------------- +// registerMidiInstrument +//--------------------------------------------------------- + +MidiInstrument* registerMidiInstrument(const QString& name) + { + for (iMidiInstrument i = midiInstruments.begin(); + i != midiInstruments.end(); ++i) { + if ((*i)->iname() == name) + return *i; + } + return genericMidiInstrument; + } + +//--------------------------------------------------------- +// removeMidiInstrument +//--------------------------------------------------------- + +void removeMidiInstrument(const QString& name) + { + for (iMidiInstrument i = midiInstruments.begin(); + i != midiInstruments.end(); ++i) { + if ((*i)->iname() == name) { + midiInstruments.erase(i); + return; + } + } + } + +void removeMidiInstrument(const MidiInstrument* instr) + { + for (iMidiInstrument i = midiInstruments.begin(); + i != midiInstruments.end(); ++i) { + if (*i == instr) { + midiInstruments.erase(i); + return; + } + } + } + +//--------------------------------------------------------- +// MidiInstrument +//--------------------------------------------------------- + +void MidiInstrument::init() + { + _initScript = 0; + _midiInit = new EventList(); + _midiReset = new EventList(); + _midiState = new EventList(); + _controller = new MidiControllerList; + + // add some default controller to controller list + // this controllers are always available for all instruments + // + MidiController* prog = new MidiController("Program", CTRL_PROGRAM, 0, 0x7fffff, 0); + _controller->push_back(prog); + _dirty = false; + _readonly = false; + } + +MidiInstrument::MidiInstrument() + { + init(); + } + +//--------------------------------------------------------- +// MidiInstrument +//--------------------------------------------------------- + +MidiInstrument::MidiInstrument(const QString& txt) + { + _name = txt; + init(); + } + +//--------------------------------------------------------- +// MidiInstrument +//--------------------------------------------------------- + +MidiInstrument::~MidiInstrument() + { + delete _midiInit; + delete _midiReset; + delete _midiState; + delete _controller; + if (_initScript) + delete _initScript; + } + +//--------------------------------------------------------- +// readPatchGroup +//--------------------------------------------------------- + +void PatchGroup::read(QDomNode node, MidiInstrument* instrument) + { + for (; !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + QString tag(e.tagName()); + + if (tag == "Patch") { + Patch* patch = new Patch; + patch->read(node, false, instrument); + patches.push_back(patch); + } + else if (tag == "drummap") { + Patch* patch = new Patch; + patch->read(node, true, instrument); + patches.push_back(patch); + } + else if (!tag.isEmpty()) + printf("MusE:PatchGroup(): unknown tag %s in group %s\n", + e.tagName().toLatin1().data(), name.toLatin1().data()); + } + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void Patch::read(QDomNode node, bool dr, MidiInstrument* instrument) + { + QDomElement e = node.toElement(); + name = e.attribute("name"); + typ = e.attribute("mode", "-1").toInt(); + hbank = e.attribute("hbank", "-1").toInt(); + lbank = e.attribute("lbank", "-1").toInt(); + prog = e.attribute("prog", "0").toInt(); + QString cat = e.attribute("cat"); + categorie = instrument->categories().indexOf(cat); + drumMap = 0; + if (!dr) + return; + drumMap = new DrumMap(name); + int idx = 0; + for (node = node.firstChild(); !node.isNull(); node = node.nextSibling()) { + e = node.toElement(); + QString tag(e.tagName()); + if (tag == "entry") { + DrumMapEntry* de = drumMap->entry(idx); + de->read(node); + ++idx; + } + else if (!tag.isEmpty()) { + printf("Patch: read drummap: unknown tag %s\n", tag.toLatin1().data()); + } + } + drumMap->init(); + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void Patch::write(Xml& xml) + { + if (drumMap == 0) { + QString s = QString("Patch name=\"%1\"").arg(Xml::xmlString(name)); + if (typ != -1) + s += QString(" mode=\"%d\"").arg(typ); + s += QString(" hbank=\"%1\" lbank=\"%2\" prog=\"%3\"").arg(hbank).arg(lbank).arg(prog); + xml.tagE(s); + return; + } + QString s = QString("drummap name=\"%1\"").arg(Xml::xmlString(name)); + s += QString(" hbank=\"%1\" lbank=\"%2\" prog=\"%3\"").arg(hbank).arg(lbank).arg(prog); + xml.stag(s); + for (int i = 0; i < DRUM_MAPSIZE; ++i) { + DrumMapEntry* dm = drumMap->entry(i); + dm->write(xml); + } + xml.etag("drummap"); + } + +//--------------------------------------------------------- +// readMidiState +//--------------------------------------------------------- + +void MidiInstrument::readMidiState(QDomNode node) + { + _midiState->read(node, true); + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void MidiInstrument::read(QDomNode node) + { + QDomElement e = node.toElement(); + _name = e.attribute("name"); + + for (node = node.firstChild(); !node.isNull(); node = node.nextSibling()) { + e = node.toElement(); + QString tag(e.tagName()); + if (tag == "Patch") { + Patch* patch = new Patch; + patch->read(node, false, this); + if (pg.empty()) { + PatchGroup p; + p.patches.push_back(patch); + pg.push_back(p); + } + else + pg[0].patches.push_back(patch); + } + else if (tag == "Category") { + QString name = e.attribute(QString("name")); + _categories.append(name); + } + else if (tag == "drummap") { + Patch* patch = new Patch; + patch->read(node, true, this); + if (pg.empty()) { + PatchGroup p; + p.patches.push_back(patch); + pg.push_back(p); + } + else + pg[0].patches.push_back(patch); + } + else if (tag == "PatchGroup") { + PatchGroup p; + p.name = e.attribute("name"); + p.read(node.firstChild(), this); + pg.push_back(p); + } + else if (tag == "Controller") { + MidiController* mc = new MidiController(); + mc->read(node); + // + // HACK: make predefined "Program" controller overloadable + // + if (mc->name() == "Program") { + for (iMidiController i = _controller->begin(); i != _controller->end(); ++i) { + if ((*i)->name() == mc->name()) { + _controller->erase(i); + break; + } + } + } + _controller->push_back(mc); + } + else if (tag == "Init") + _midiInit->read(node.firstChild(), true); + else if (tag == "SysEx") { + SysEx* se = new SysEx; + se->name = e.attribute("name"); + for (QDomNode nnode = node.firstChild(); !nnode.isNull(); nnode = nnode.nextSibling()) { + e = nnode.toElement(); + QString tag(e.tagName()); + if (tag == "comment") + se->comment = e.text(); + else if (tag == "data") { + se->dataLen = string2sysex(e.text(), &(se->data)); + } + else + printf("MidiInstrument::read():SysEx: unknown tag %s\n", tag.toLatin1().data()); + } + _sysex.append(se); + } + else if (!tag.isEmpty()) { + printf("MidiInstrument::read(): unknown tag %s\n", tag.toLatin1().data()); + } + } + } + +//--------------------------------------------------------- +// getPatchName +//--------------------------------------------------------- + +QString MidiInstrument::getPatchName(int /*channel*/, int prog) + { + int hbank = (prog >> 16) & 0xff; + int lbank = (prog >> 8) & 0xff; + prog &= 0xff; + if (prog == 0xff) + return "---"; + + int tmask = 1; + bool hb = hbank == 0xff; + bool lb = lbank == 0xff; + + for (std::vector::iterator i = pg.begin(); i != pg.end(); ++i) { + PatchList& pl = i->patches; + for (PatchList::const_iterator ipl = pl.begin(); ipl != pl.end(); ++ipl) { + const Patch* mp = *ipl; + if ((mp->typ & tmask) + && (prog == mp->prog) + && (hbank == mp->hbank || hb || mp->hbank == -1) + && (lbank == mp->lbank || lb || mp->lbank == -1)) + return mp->name; + } + } + return QString("---"); + } + +//--------------------------------------------------------- +// getDrumMap +//--------------------------------------------------------- + +DrumMap* MidiInstrument::getDrumMap(int prog) + { + int hbank = (prog >> 16) & 0xff; + int lbank = (prog >> 8) & 0xff; + prog &= 0xff; + if (prog == 0xff) + return 0; + + int tmask = 1; + bool hb = hbank == 0xff; + bool lb = lbank == 0xff; + + for (std::vector::iterator i = pg.begin(); i != pg.end(); ++i) { + PatchList& pl = i->patches; + for (PatchList::const_iterator ipl = pl.begin(); ipl != pl.end(); ++ipl) { + const Patch* mp = *ipl; + if ((mp->typ & tmask) + && (prog == mp->prog) + && (hbank == mp->hbank || hb || mp->hbank == -1) + && (lbank == mp->lbank || lb || mp->lbank == -1)) { + return mp->drumMap; + } + } + } + return 0; + } + +//--------------------------------------------------------- +// populatePatchPopup +//--------------------------------------------------------- + +void MidiInstrument::populatePatchPopup(QMenu* menu, int) + { + menu->clear(); + int mask = 7; + + if (pg.size() > 1) { + for (std::vector::iterator i = pg.begin(); i != pg.end(); ++i) { + QMenu* pm = menu->addMenu(i->name); +// pm->setFont(config.fonts[0]); + PatchList& pl = i->patches; + for (PatchList::const_iterator ipl = pl.begin(); ipl != pl.end(); ++ipl) { + const Patch* mp = *ipl; + if (mp->typ & mask) { + int id = ((mp->hbank & 0xff) << 16) + + ((mp->lbank & 0xff) << 8) + (mp->prog & 0xff); + QAction* a = pm->addAction(mp->name); + a->setData(id); + } + } + } + } + else if (pg.size() == 1 ){ + // no groups + PatchList& pl = pg.front().patches; + for (PatchList::const_iterator ipl = pl.begin(); ipl != pl.end(); ++ipl) { + const Patch* mp = *ipl; + if (mp->typ & mask) { + int id = ((mp->hbank & 0xff) << 16) + + ((mp->lbank & 0xff) << 8) + (mp->prog & 0xff); + QAction* a = menu->addAction(mp->name); + a->setData(id); + } + } + } + } + +//--------------------------------------------------------- +// getMidiController +//--------------------------------------------------------- + +MidiController* MidiInstrument::midiController(int num) const + { + for (iMidiController i = _controller->begin(); i != _controller->end(); ++i) { + int cn = (*i)->num(); + if (cn == num) + return *i; + // wildcard? + if (((cn & 0xff) == 0xff) && ((cn & ~0xff) == (num & ~0xff))) + return *i; + } + for (iMidiController i = defaultMidiController.begin(); i != defaultMidiController.end(); ++i) { + int cn = (*i)->num(); + if (cn == num) + return *i; + // wildcard? + if (((cn & 0xff) == 0xff) && ((cn & ~0xff) == (num & ~0xff))) + return *i; + } + QString name = midiCtrlName(num); + int min = 0; + int max = 127; + MidiController* c = new MidiController(name, num, min, max, 0); + defaultMidiController.push_back(c); + return c; + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void MidiInstrument::write(Xml& xml) + { + xml.header(); + xml.stag("muse version=\"2.1\""); + xml.stag(QString("MidiInstrument name=\"%1\"").arg(Xml::xmlString(iname()))); + + foreach(const QString& s, _categories) + xml.tagE(QString("Category name=\"%1\"").arg(Xml::xmlString(s))); + + std::vector* pg = groups(); + for (std::vector::iterator g = pg->begin(); g != pg->end(); ++g) { + xml.stag(QString("PatchGroup name=\"%1\"").arg(Xml::xmlString(g->name))); + for (iPatch p = g->patches.begin(); p != g->patches.end(); ++p) + (*p)->write(xml); + xml.etag("PatchGroup"); + } + for (iMidiController ic = _controller->begin(); ic != _controller->end(); ++ic) + (*ic)->write(xml); + xml.etag("MidiInstrument"); + xml.etag("muse"); + } + diff --git a/attic/muse_qt4_evolution/muse/instruments/minstrument.h b/attic/muse_qt4_evolution/muse/instruments/minstrument.h new file mode 100644 index 00000000..5bcf2616 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/instruments/minstrument.h @@ -0,0 +1,160 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MINSTRUMENT_H__ +#define __MINSTRUMENT_H__ + +#include "globaldefs.h" + +namespace AL { + class Xml; + }; +using AL::Xml; + +class MidiOutPort; +class EventList; +class MidiControllerList; +class MidiController; +class MidiEvent; +class DrumMap; +class MidiInstrument; + +//--------------------------------------------------------- +// Patch +//--------------------------------------------------------- + +struct Patch { + signed char typ; // 1 - GM 2 - GS 4 - XG + signed char hbank, lbank, prog; + QString name; + int categorie; + DrumMap* drumMap; + + void read(QDomNode, bool, MidiInstrument*); + void write(Xml& xml); + + Patch(); + ~Patch(); + }; + +typedef std::list PatchList; +typedef PatchList::iterator iPatch; +typedef PatchList::const_iterator ciPatch; + +//--------------------------------------------------------- +// PatchGroup +//--------------------------------------------------------- + +struct PatchGroup { + QString name; + PatchList patches; + void read(QDomNode, MidiInstrument*); + }; + +struct SysEx { + QString name; + QString comment; + int dataLen; + unsigned char* data; + }; + +//--------------------------------------------------------- +// MidiInstrument +//--------------------------------------------------------- + +class MidiInstrument { + std::vector pg; + MidiControllerList* _controller; + QList _sysex; + bool _dirty; + bool _readonly; + + void init(); + + protected: + QList _categories; + EventList* _midiInit; + EventList* _midiReset; + EventList* _midiState; + char* _initScript; + QString _name; + QString _filePath; + + public: + MidiInstrument(); + virtual ~MidiInstrument(); + MidiInstrument(const QString& txt); + const QString& iname() const { return _name; } + void setIName(const QString& txt) { _name = txt; } + QString filePath() const { return _filePath; } + void setFilePath(const QString& s) { _filePath = s; } + bool dirty() const { return _dirty; } + void setDirty(bool v) { _dirty = v; } + bool readonly() const { return _readonly; } + void setReadonly(bool v) { _readonly = v; } + + EventList* midiInit() const { return _midiInit; } + EventList* midiReset() const { return _midiReset; } + EventList* midiState() const { return _midiState; } + const char* initScript() const { return _initScript; } + MidiControllerList* controller() const { return _controller; } + + void readMidiState(QDomNode); + virtual bool guiVisible() const { return false; } + virtual void showGui(bool) {} + virtual bool hasGui() const { return false; } + virtual void writeToGui(const MidiEvent&) {} + + virtual QString getPatchName(int,int); + virtual DrumMap* getDrumMap(int); + + virtual void populatePatchPopup(QMenu*, int); + void read(QDomNode); + void write(Xml& xml); + const QList& sysex() const { return _sysex; } + void removeSysex(SysEx* sysex) { _sysex.removeAll(sysex); } + void addSysex(SysEx* sysex) { _sysex.append(sysex); } + + MidiController* midiController(int num) const; + + std::vector* groups() { return &pg; } + const QList& categories() const { return _categories; } + void addCategory(const QString& s) { _categories.append(s); } + }; + +//--------------------------------------------------------- +// MidiInstrumentList +//--------------------------------------------------------- + +class MidiInstrumentList : public QList { + }; + +typedef MidiInstrumentList::iterator iMidiInstrument; + +extern MidiInstrumentList midiInstruments; + +extern MidiInstrument* genericMidiInstrument; +extern void initMidiInstruments(); +extern MidiInstrument* registerMidiInstrument(const QString&); +extern void removeMidiInstrument(const QString& name); +extern void removeMidiInstrument(const MidiInstrument* instr); + +#endif + diff --git a/attic/muse_qt4_evolution/muse/jack.cpp b/attic/muse_qt4_evolution/muse/jack.cpp new file mode 100644 index 00000000..bc372357 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/jack.cpp @@ -0,0 +1,886 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "config.h" +#include "al/al.h" +#include "al/tempo.h" +#include "audio.h" +#include "globals.h" +#include "song.h" +#include "jackaudio.h" +#include "track.h" +#include "midiinport.h" + +#ifdef VST_SUPPORT +#include +#endif + +JackAudio* jackAudio; + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +bool JackAudio::init() + { + return true; + } + +//--------------------------------------------------------- +// jack_thread_init +//--------------------------------------------------------- + +static void jack_thread_init (void* /*data*/) + { +#ifdef VST_SUPPORT + if (loadVST) + fst_adopt_thread(); +#endif + } + +//--------------------------------------------------------- +// timebase_callback +//--------------------------------------------------------- + +static void timebase_callback(jack_transport_state_t /* state */, + jack_nframes_t /* nframes */, + jack_position_t* pos, + int /* new_pos */, + void*) + { + AL::Pos p(pos->frame, AL::FRAMES); + pos->valid = JackPositionBBT; + p.mbt(&pos->bar, &pos->beat, &pos->tick); + pos->bar++; + pos->beat++; + pos->bar_start_tick = Pos(pos->bar, 0, 0).tick(); + // + // dummy: + // + pos->beats_per_bar = 4; + pos->beat_type = 4; + pos->ticks_per_beat = 384; + int tempo = AL::tempomap.tempo(p.tick()); + pos->beats_per_minute = (60000000.0 / tempo) * AL::tempomap.globalTempo()/100.0; + } + +//--------------------------------------------------------- +// processAudio +// JACK callback +//--------------------------------------------------------- + +int JackAudio::processAudio(jack_nframes_t frames, void*) + { + jackAudio->_frameCounter += frames; + + int jackState = jackAudio->getTransportState(); + segmentSize = frames; + if (audioState == AUDIO_RUNNING) + audio->process((unsigned long)frames, jackState); + else if (audioState == AUDIO_STOP) { + if (debugMsg) + puts("jack calling when audio is stopped!\n"); + } + else if (audioState == AUDIO_START1) + audioState = AUDIO_START2; + return 0; + } + +//--------------------------------------------------------- +// getTransportState +//--------------------------------------------------------- + +int JackAudio::getTransportState() + { + int jackState; + transportState = jack_transport_query(_client, &pos); + switch (jackAudio->transportState) { + case JackTransportStopped: + jackState = Audio::STOP; + break; + case JackTransportLooping: + case JackTransportRolling: + jackState = Audio::PLAY; + break; + case JackTransportStarting: + jackState = Audio::START_PLAY; + break; + default: + jackState = Audio::STOP; + break; + } + return jackState; + } + +//--------------------------------------------------------- +// processSync +// return TRUE (non-zero) when ready to roll. +//--------------------------------------------------------- + +static int processSync(jack_transport_state_t state, jack_position_t* pos, void*) + { + int audioState = Audio::STOP; + switch (state) { + case JackTransportStopped: + audioState = Audio::STOP; + break; + case JackTransportLooping: + case JackTransportRolling: + audioState = Audio::PLAY; + break; + case JackTransportStarting: + audioState = Audio::START_PLAY; + break; + } + unsigned frame = pos->frame; + return audio->sync(audioState, frame); + } + +//--------------------------------------------------------- +// processShutdown +//--------------------------------------------------------- + +static void processShutdown(void*) + { + audio->shutdown(); + + for (int i = 0; i < 10; ++i) { + if (audioState == AUDIO_STOP) + break; + sleep(1); + } + if (audioState == AUDIO_RUNNING) + fprintf(stderr, "MusE: sequencer still running, something is very wrong.\n"); + jackAudio->zeroClientPtr(); // jack disconnect client no longer valid + } + +//--------------------------------------------------------- +// jackError +//--------------------------------------------------------- + +static void jackError(const char* s) + { + fprintf(stderr, "JACK ERROR: %s\n", s); + } + +//--------------------------------------------------------- +// noJackError +//--------------------------------------------------------- + +static void noJackError(const char* /* s */) + { + } + +//--------------------------------------------------------- +// JackAudio +//--------------------------------------------------------- + +JackAudio::JackAudio(jack_client_t* cl, char* name) + : AudioDriver() + { + strcpy(jackRegisteredName, name); + _client = cl; + _frameCounter = 0; + } + +//--------------------------------------------------------- +// ~JackAudio +//--------------------------------------------------------- + +JackAudio::~JackAudio() + { + if (_client) { + if (jack_client_close(_client)) { + fprintf(stderr, "jack_client_close() failed: %s\n", + strerror(errno)); + } + } + _client = 0; + } + +//--------------------------------------------------------- +// getJackName() +//--------------------------------------------------------- + +char* JackAudio::getJackName() + { + return jackRegisteredName; + } + +//--------------------------------------------------------- +// restart +//--------------------------------------------------------- + +bool JackAudio::restart() + { + printf("JackAudio::restart\n"); + _client = jack_client_new(jackRegisteredName); + if (!_client) + return true; + registerClient(); + return false; + } + +//--------------------------------------------------------- +// bufsize_callback +//--------------------------------------------------------- + +static int bufsize_callback(jack_nframes_t n, void*) + { + printf("JACK: buffersize changed %d\n", n); + return 0; + } + +//--------------------------------------------------------- +// freewheel_callback +//--------------------------------------------------------- + +static void freewheel_callback(int starting, void*) + { + audio->setFreewheel(starting); + } + +//--------------------------------------------------------- +// srate_callback +//--------------------------------------------------------- + +static int srate_callback(jack_nframes_t n, void*) + { + if (debugMsg) + printf("JACK: sample rate changed: %d\n", n); + return 0; + } + +//--------------------------------------------------------- +// registration_callback +//--------------------------------------------------------- + +static void registration_callback(jack_port_id_t, int, void*) + { + if (debugMsg) + printf("JACK: registration changed\n"); + } + +//--------------------------------------------------------- +// graph_callback +// this is called from jack when the connections +// changed +//--------------------------------------------------------- + +static int graph_callback(void*) + { + // we cannot call JackAudio::graphChanged() from this + // context, so we send a message to the gui thread which in turn + // calls graphChanged() + + audio->sendMsgToGui(MSG_GRAPH_CHANGED); + if (debugMsg) + printf("JACK: graph changed!\n"); + return 0; + } + +//--------------------------------------------------------- +// JackAudio::graphChanged +// this is called from song in gui context triggered +// by graph_callback() +//--------------------------------------------------------- + +void JackAudio::graphChanged() + { + RouteList rr, ra; + + InputList* il = song->inputs(); + for (iAudioInput ii = il->begin(); ii != il->end(); ++ii) { + AudioInput* it = *ii; + int channels = it->channels(); + RouteList* irl = it->inRoutes(); + + for (int channel = 0; channel < channels; ++channel) { + jack_port_t* port = it->jackPort(channel).jackPort(); + if (port == 0) + continue; + const char** ports = jack_port_get_all_connections(_client, port); + + //--------------------------------------- + // check for disconnects + //--------------------------------------- + + foreach (const Route& r, *irl) { + if (r.dst.channel != channel) + continue; + const char* name = jack_port_name(r.src.port.jackPort()); + bool found = false; + for (const char** pn = ports; pn && *pn; ++pn) { + if (strcmp(*pn, name) == 0) { + found = true; + break; + } + } + if (!found) + rr.append(r); + } + + //--------------------------------------- + // check for connects + //--------------------------------------- + + if (ports) { + for (const char** pn = ports; *pn; ++pn) { + bool found = false; + foreach(const Route& r, *irl) { + if (r.dst.channel != channel) + continue; + const char* name = jack_port_name(r.src.port.jackPort()); + if (strcmp(*pn, name) == 0) { + found = true; + break; + } + } + if (!found) { + Route a; + Port port(jack_port_by_name(_client, *pn)); + a.src = RouteNode(port, -1, RouteNode::AUDIOPORT); + a.dst = RouteNode(it, channel); + ra.append(a); + } + } + free(ports); + } + } + } + +// printf(" input: remove %d add %d routes\n", rr.size(), ra.size()); + foreach(Route r, rr) + audio->msgRemoveRoute1(r); + foreach(Route r, ra) + audio->msgAddRoute1(r); + rr.clear(); + ra.clear(); + + OutputList* ol = song->outputs(); + for (iAudioOutput ii = ol->begin(); ii != ol->end(); ++ii) { + AudioOutput* it = *ii; + int channels = it->channels(); + for (int channel = 0; channel < channels; ++channel) { + jack_port_t* port = it->jackPort(channel).jackPort(); + if (port == 0) + continue; + const char** ports = jack_port_get_all_connections(_client, port); + RouteList* rl = it->outRoutes(); + + //--------------------------------------- + // check for disconnects + //--------------------------------------- + + foreach(const Route& r, *rl) { + if (r.src.channel != channel) + continue; + const char* name = jack_port_name(r.dst.port.jackPort()); + bool found = false; + const char** pn = ports; + while (pn && *pn) { + if (strcmp(*pn, name) == 0) { + found = true; + break; + } + ++pn; + } + if (!found) + rr.append(r); + } + + //--------------------------------------- + // check for connects + //--------------------------------------- + + if (ports) { + const char** pn = ports; + while (*pn) { + bool found = false; + foreach (const Route& r, *rl) { + if (r.src.channel != channel) + continue; + const char* name = jack_port_name(r.dst.port.jackPort()); + if (strcmp(*pn, name) == 0) { + found = true; + break; + } + } + if (!found) { + Route a; + Port port(jack_port_by_name(_client, *pn)); + a.src = RouteNode(it, channel, RouteNode::TRACK); + a.dst = RouteNode(port, -1, RouteNode::AUDIOPORT); + ra.append(a); + } + ++pn; + } + free(ports); + } + } + } +// printf(" output: remove %d add %d routes\n", rr.size(), ra.size()); + foreach(Route r, rr) + audio->msgRemoveRoute1(r); + foreach(Route r, ra) + audio->msgAddRoute1(r); + } + +//--------------------------------------------------------- +// register +//--------------------------------------------------------- + +void JackAudio::registerClient() + { + jack_set_process_callback(_client, processAudio, 0); + jack_set_sync_callback(_client, processSync, 0); + jack_on_shutdown(_client, processShutdown, 0); + jack_set_buffer_size_callback(_client, bufsize_callback, 0); + jack_set_sample_rate_callback(_client, srate_callback, 0); + jack_set_port_registration_callback(_client, registration_callback, 0); + jack_set_graph_order_callback(_client, graph_callback, 0); + jack_set_freewheel_callback (_client, freewheel_callback, 0); + jack_set_thread_init_callback(_client, (JackThreadInitCallback) jack_thread_init, 0); + jack_set_timebase_callback(_client, 0, timebase_callback, 0); + } + +//--------------------------------------------------------- +// registerInPort +//--------------------------------------------------------- + +Port JackAudio::registerInPort(const QString& name, bool midi) + { + const char* type = midi ? JACK_DEFAULT_MIDI_TYPE : JACK_DEFAULT_AUDIO_TYPE; + Port p(jack_port_register(_client, name.toLatin1().data(), type, JackPortIsInput, 0)); +// printf("JACK: registerInPort<%s>: <%s> %p\n", type, name.toLatin1().data(), p.jackPort()); + if (!p.jackPort()) + p.setZero(); + return p; + } + +//--------------------------------------------------------- +// registerOutPort +//--------------------------------------------------------- + +Port JackAudio::registerOutPort(const QString& name, bool midi) + { + const char* type = midi ? JACK_DEFAULT_MIDI_TYPE : JACK_DEFAULT_AUDIO_TYPE; + Port p(jack_port_register(_client, name.toLatin1().data(), type, JackPortIsOutput, 0)); +// printf("JACK: registerOutPort<%s>: <%s> %p\n", type, name.toLatin1().data(), p.jackPort()); + if (!p.jackPort()) + p.setZero(); + return p; + } + +//--------------------------------------------------------- +// exitJackAudio +//--------------------------------------------------------- + +void exitJackAudio() + { + if (jackAudio) + delete jackAudio; + } + +//--------------------------------------------------------- +// connect +// return false on error +//--------------------------------------------------------- + +bool JackAudio::connect(Port src, Port dst) + { + if (src.isZero() || dst.isZero()) { + fprintf(stderr, "JackAudio::connect(1): unknown jack ports (%d-%d)\n", + src.isZero(), dst.isZero()); + return false; + } + const char* sn = jack_port_name(src.jackPort()); + const char* dn = jack_port_name(dst.jackPort()); + + if (debugMsg) + printf("jack connect <%s>%p - <%s>%p\n", sn, src.jackPort(), dn, dst.jackPort()); + + if (sn == 0 || dn == 0) { + fprintf(stderr, "JackAudio::connect(2): unknown jack ports\n"); + return false; + } + int rv = jack_connect(_client, sn, dn); + if (rv) { + fprintf(stderr, "%d: jack connect <%s> - <%s> failed\n", + rv, sn, dn); + if (rv == EEXIST) + fprintf(stderr, " connection already made\n"); + else { + int pf = jack_port_flags(src.jackPort()); + if (!(pf & JackPortIsOutput)) + fprintf(stderr, " src is not an output port\n"); + pf = jack_port_flags(dst.jackPort()); + if (!(pf & JackPortIsInput)) + fprintf(stderr, " dst is not an input port\n"); + } + return false; + } + return true; + } + +//--------------------------------------------------------- +// disconnect +//--------------------------------------------------------- + +bool JackAudio::disconnect(Port src, Port dst) + { + const char* sn = jack_port_name(src.jackPort()); + const char* dn = jack_port_name(dst.jackPort()); + + if (debugMsg) + printf("jack disconnect <%s>%p - <%s>%p\n", sn, src.jackPort(), dn, dst.jackPort()); + + if (sn == 0 || dn == 0) { + fprintf(stderr, "JackAudio::disconnect: unknown jack ports\n"); + return false; + } + if (jack_disconnect(_client, sn, dn)) { + fprintf(stderr, "jack disconnect <%s> - <%s> failed\n", + sn, dn); + return false; + } + return true; + } + +//--------------------------------------------------------- +// start +//--------------------------------------------------------- + +void JackAudio::start(int) + { + if (jack_activate(_client)) { + fprintf (stderr, "JACK: cannot activate client\n"); + exit(-1); + } + } + +//--------------------------------------------------------- +// stop +//--------------------------------------------------------- + +void JackAudio::stop() + { + if (_client == 0) + return; + if (jack_deactivate(_client)) + fprintf (stderr, "JACK: cannot deactivate client\n"); + } + +//--------------------------------------------------------- +// outputPorts +//--------------------------------------------------------- + +QList JackAudio::outputPorts(bool midi) + { + const char* type = midi ? JACK_DEFAULT_MIDI_TYPE : JACK_DEFAULT_AUDIO_TYPE; + const char** ports = jack_get_ports(_client, 0, type, JackPortIsOutput); + QList clientList; + for (const char** p = ports; p && *p; ++p) { + jack_port_t* port = jack_port_by_name(_client, *p); + char buffer[128]; + strncpy(buffer, *p, 128); + if (strncmp(buffer, "MusE", 4) == 0) + continue; + PortName pn; + pn.name = QString(buffer); + pn.port = Port(port); + clientList.append(pn); + } + return clientList; + } + +//--------------------------------------------------------- +// inputPorts +//--------------------------------------------------------- + +QList JackAudio::inputPorts(bool midi) + { + const char* type = midi ? JACK_DEFAULT_MIDI_TYPE : JACK_DEFAULT_AUDIO_TYPE; + const char** ports = jack_get_ports(_client, 0, type, JackPortIsInput); + QList clientList; + for (const char** p = ports; p && *p; ++p) { + jack_port_t* port = jack_port_by_name(_client, *p); + char buffer[128]; + strncpy(buffer, *p, 128); + if (strncmp(buffer, "MusE", 4) == 0) + continue; + PortName pn; + pn.name = QString(buffer); + pn.port = Port(port); + clientList.append(pn); + } + return clientList; + } + +//--------------------------------------------------------- +// portName +//--------------------------------------------------------- + +QString JackAudio::portName(Port port) + { + const char* nameStrPtr = jack_port_name(port.jackPort()); + QString s(nameStrPtr); + return s; + } + +//--------------------------------------------------------- +// unregisterPort +//--------------------------------------------------------- + +void JackAudio::unregisterPort(Port p) + { + if (_client) { +// printf("JACK: unregister Port %p\n", p); + if (jack_port_unregister(_client, p.jackPort())) + fprintf(stderr, "jack unregister port %p failed\n", p.jackPort()); + } + } + +//--------------------------------------------------------- +// setFreewheel +//--------------------------------------------------------- + +void JackAudio::setFreewheel(bool f) + { +// printf("JACK: setFreewheel %d\n", f); + jack_set_freewheel(_client, f); + } + +//--------------------------------------------------------- +// startTransport +//--------------------------------------------------------- + +void JackAudio::startTransport() + { + jack_transport_start(_client); + } + +//--------------------------------------------------------- +// stopTransport +//--------------------------------------------------------- + +void JackAudio::stopTransport() + { + if (_client) + jack_transport_stop(_client); + } + +//--------------------------------------------------------- +// seekTransport +//--------------------------------------------------------- + +void JackAudio::seekTransport(unsigned frame) + { + jack_transport_locate(_client, frame); + } + +//--------------------------------------------------------- +// findPort +//--------------------------------------------------------- + +Port JackAudio::findPort(const QString& name) + { + if (_client == 0) { + printf("JackAudio(%p)::findPort(%s): _client==0\n", this, qPrintable(name)); + return Port(); + } + jack_port_t* port = jack_port_by_name(_client, name.toLatin1().data()); + return (port == 0) ? Port() : Port(port); + } + +//--------------------------------------------------------- +// realtimePriority +// return zero if not running realtime +// can only be called if JACK client thread is already +// running +//--------------------------------------------------------- + +int JackAudio::realtimePriority() const + { + pthread_t t = jack_client_thread_id(_client); + int policy; + struct sched_param param; + memset(¶m, 0, sizeof(param)); + int rv = pthread_getschedparam(t, &policy, ¶m); + if (rv) { + perror("MusE: get jack schedule parameter"); + return 0; + } + if (policy != SCHED_FIFO) { + printf("JACK is not running realtime\n"); + return 0; + } + return param.sched_priority; + } + +//--------------------------------------------------------- +// initJackAudio +// return true if JACK not found +//--------------------------------------------------------- + +bool initJackAudio() + { + if (debugMsg) { + fprintf(stderr, "init Jack Audio\n"); + jack_set_error_function(jackError); + } + else + jack_set_error_function(noJackError); + + jack_client_t* client = 0; + jack_status_t status; + jack_options_t options = JackNullOption; + client = jack_client_open("MusE", options, &status); + if (!client) { + if (status & JackServerStarted) + printf("jack server started...\n"); + if (status & JackServerFailed) + printf("cannot connect to jack server\n"); + if (status & JackServerError) + printf("communication with jack server failed\n"); + if (status & JackShmFailure) + printf("jack cannot access shared memory\n"); + if (status & JackVersionError) + printf("jack server has wrong version\n"); + printf("cannot create jack client\n"); + return true; + } + + if (debugMsg) + fprintf(stderr, "init Jack Audio: register device\n"); + + jack_set_error_function(jackError); + if (debugMsg) + fprintf(stderr, "init Jack Audio: register device\n"); + + jackAudio = new JackAudio(client, jack_get_client_name(client)); + if (debugMsg) + fprintf(stderr, "init Jack Audio: register client\n"); + jackAudio->registerClient(); + AL::sampleRate = jack_get_sample_rate(client); + segmentSize = jack_get_buffer_size(client); + audioDriver = jackAudio; + return false; + } + +//--------------------------------------------------------- +// putEvent +//--------------------------------------------------------- + +void JackAudio::putEvent(Port port, const MidiEvent& e) + { + if (midiOutputTrace) { + printf("MidiOut<%s>: jackMidi: ", portName(port).toLatin1().data()); + e.dump(); + } + void* pb = jack_port_get_buffer(port.jackPort(), segmentSize); + int ft = e.time() - _frameCounter; + if (ft < 0) + ft = 0; + if (ft >= (int)segmentSize) { + printf("JackAudio::putEvent: time out of range %d(seg=%d)\n", ft, segmentSize); + if (ft > (int)segmentSize) + ft = segmentSize - 1; + } + switch(e.type()) { + case ME_NOTEON: + case ME_NOTEOFF: + case ME_POLYAFTER: + case ME_CONTROLLER: + case ME_PITCHBEND: + { + unsigned char* p = jack_midi_event_reserve(pb, ft, 3); + if (p == 0) { + fprintf(stderr, "JackMidi: buffer overflow, event lost\n"); + return; + } + p[0] = e.type() | e.channel(); + p[1] = e.dataA(); + p[2] = e.dataB(); + } + break; + + case ME_PROGRAM: + case ME_AFTERTOUCH: + { + unsigned char* p = jack_midi_event_reserve(pb, ft, 2); + if (p == 0) { + fprintf(stderr, "JackMidi: buffer overflow, event lost\n"); + return; + } + p[0] = e.type() | e.channel(); + p[1] = e.dataA(); + } + break; + case ME_SYSEX: + { + const unsigned char* data = e.data(); + int len = e.len(); + unsigned char* p = jack_midi_event_reserve(pb, ft, len+2); + if (p == 0) { + fprintf(stderr, "JackMidi: buffer overflow, event lost\n"); + return; + } + p[0] = 0xf0; + p[len+1] = 0xf7; + memcpy(p+1, data, len); + } + break; + case ME_SONGPOS: + case ME_CLOCK: + case ME_START: + case ME_CONTINUE: + case ME_STOP: + printf("JackMidi: event type %x not supported\n", e.type()); + break; + } + } + +//--------------------------------------------------------- +// startMidiCycle +//--------------------------------------------------------- + +void JackAudio::startMidiCycle(Port port) + { + void* port_buf = jack_port_get_buffer(port.jackPort(), segmentSize); + jack_midi_clear_buffer(port_buf); + } + +//--------------------------------------------------------- +// collectMidiEvents +//--------------------------------------------------------- + +void JackAudio::collectMidiEvents(MidiInPort* track, Port port) + { + void* port_buf = jack_port_get_buffer(port.jackPort(), segmentSize); + jack_midi_event_t event; + jack_nframes_t eventCount = jack_midi_get_event_count(port_buf); + for (jack_nframes_t i = 0; i < eventCount; ++i) { + jack_midi_event_get(&event, port_buf, i); + track->eventReceived(&event); + } + } + + diff --git a/attic/muse_qt4_evolution/muse/jackaudio.h b/attic/muse_qt4_evolution/muse/jackaudio.h new file mode 100644 index 00000000..1839d27e --- /dev/null +++ b/attic/muse_qt4_evolution/muse/jackaudio.h @@ -0,0 +1,90 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __JACKAUDIO_H__ +#define __JACKAUDIO_H__ + +#include "audiodev.h" +class MidiInPort; + +//--------------------------------------------------------- +// JackAudio +//--------------------------------------------------------- + +class JackAudio : public AudioDriver { + jack_client_t* _client; + jack_position_t pos; + char jackRegisteredName[8]; + jack_transport_state_t transportState; + jack_nframes_t _frameCounter; + + static int processAudio(jack_nframes_t frames, void*); + + public: + JackAudio(jack_client_t* cl, char * jack_id_string); + virtual ~JackAudio(); + + int getTransportState(); + virtual bool init(); + virtual void start(int); + virtual bool restart(); + virtual void stop (); + virtual void zeroClientPtr() { _client = 0; } + virtual float* getBuffer(Port port, unsigned long nframes) { + return (float*)jack_port_get_buffer(port.jackPort(), nframes); + } + + virtual QList outputPorts(bool midi); + virtual QList inputPorts(bool midi); + + virtual void registerClient(); + + virtual Port registerOutPort(const QString& name, bool midi); + virtual Port registerInPort(const QString& name, bool midi); + + virtual char* getJackName(); + + virtual void unregisterPort(Port); + virtual bool connect(Port, Port); + virtual bool disconnect(Port, Port); + virtual void setPortName(Port p, const QString& n) { + jack_port_set_name(p.jackPort(), n.toLatin1().data()); + } + virtual Port findPort(const QString& name); + virtual QString portName(Port); + virtual int realtimePriority() const; + virtual void startTransport(); + virtual void stopTransport(); + virtual void seekTransport(unsigned frame); + virtual void setFreewheel(bool f); + + jack_transport_state_t transportQuery(jack_position_t* pos) { + return jack_transport_query(_client, pos); + } + void graphChanged(); + virtual void putEvent(Port, const MidiEvent&); + virtual void startMidiCycle(Port); + + virtual unsigned frameTime() const { return _frameCounter; } + virtual void collectMidiEvents(MidiInPort*, Port); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/ladspa.h b/attic/muse_qt4_evolution/muse/ladspa.h new file mode 100644 index 00000000..7bbc338f --- /dev/null +++ b/attic/muse_qt4_evolution/muse/ladspa.h @@ -0,0 +1,599 @@ +/* ladspa.h + + Linux Audio Developer's Simple Plugin API Version 1.1[provisional, + LGPL]. Copyright (C) 2000-2002 Richard W.E. Furse, Paul + Barton-Davis, Stefan Westerfeld. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + as published by the Free Software Foundation; either version 2.1 of + the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA. */ + +#ifndef LADSPA_INCLUDED +#define LADSPA_INCLUDED + +#ifdef __cplusplus +extern "C" { +#endif + +/*****************************************************************************/ + +/* Overview: + + There is a large number of synthesis packages in use or development + on the Linux platform at this time. This API (`The Linux Audio + Developer's Simple Plugin API') attempts to give programmers the + ability to write simple `plugin' audio processors in C/C++ and link + them dynamically (`plug') into a range of these packages (`hosts'). + It should be possible for any host and any plugin to communicate + completely through this interface. + + This API is deliberately short and simple. To achieve compatibility + with a range of promising Linux sound synthesis packages it + attempts to find the `greatest common divisor' in their logical + behaviour. Having said this, certain limiting decisions are + implicit, notably the use of a fixed type (LADSPA_Data) for all + data transfer and absence of a parameterised `initialisation' + phase. See below for the LADSPA_Data typedef. + + Plugins are expected to distinguish between control and audio + data. Plugins have `ports' that are inputs or outputs for audio or + control data and each plugin is `run' for a `block' corresponding + to a short time interval measured in samples. Audio data is + communicated using arrays of LADSPA_Data, allowing a block of audio + to be processed by the plugin in a single pass. Control data is + communicated using single LADSPA_Data values. Control data has a + single value at the start of a call to the `run()' or `run_adding()' + function, and may be considered to remain this value for its + duration. The plugin may assume that all its input and output ports + have been connected to the relevant data location (see the + `connect_port()' function below) before it is asked to run. + + Plugins will reside in shared object files suitable for dynamic + linking by dlopen() and family. The file will provide a number of + `plugin types' that can be used to instantiate actual plugins + (sometimes known as `plugin instances') that can be connected + together to perform tasks. + + This API contains very limited error-handling. */ + +/*****************************************************************************/ + +/* Fundamental data type passed in and out of plugin. This data type + is used to communicate audio samples and control values. It is + assumed that the plugin will work sensibly given any numeric input + value although it may have a preferred range (see hints below). + + For audio it is generally assumed that 1.0f is the `0dB' reference + amplitude and is a `normal' signal level. */ + +typedef float LADSPA_Data; + +/*****************************************************************************/ + +/* Special Plugin Properties: + + Optional features of the plugin type are encapsulated in the + LADSPA_Properties type. This is assembled by ORing individual + properties together. */ + +typedef int LADSPA_Properties; + +/* Property LADSPA_PROPERTY_REALTIME indicates that the plugin has a + real-time dependency (e.g. listens to a MIDI device) and so its + output must not be cached or subject to significant latency. */ +#define LADSPA_PROPERTY_REALTIME 0x1 + +/* Property LADSPA_PROPERTY_INPLACE_BROKEN indicates that the plugin + may cease to work correctly if the host elects to use the same data + location for both input and output (see connect_port()). This + should be avoided as enabling this flag makes it impossible for + hosts to use the plugin to process audio `in-place.' */ +#define LADSPA_PROPERTY_INPLACE_BROKEN 0x2 + +/* Property LADSPA_PROPERTY_HARD_RT_CAPABLE indicates that the plugin + is capable of running not only in a conventional host but also in a + `hard real-time' environment. To qualify for this the plugin must + satisfy all of the following: + + (1) The plugin must not use malloc(), free() or other heap memory + management within its run() or run_adding() functions. All new + memory used in run() must be managed via the stack. These + restrictions only apply to the run() function. + + (2) The plugin will not attempt to make use of any library + functions with the exceptions of functions in the ANSI standard C + and C maths libraries, which the host is expected to provide. + + (3) The plugin will not access files, devices, pipes, sockets, IPC + or any other mechanism that might result in process or thread + blocking. + + (4) The plugin will take an amount of time to execute a run() or + run_adding() call approximately of form (A+B*SampleCount) where A + and B depend on the machine and host in use. This amount of time + may not depend on input signals or plugin state. The host is left + the responsibility to perform timings to estimate upper bounds for + A and B. */ +#define LADSPA_PROPERTY_HARD_RT_CAPABLE 0x4 + +#define LADSPA_IS_REALTIME(x) ((x) & LADSPA_PROPERTY_REALTIME) +#define LADSPA_IS_INPLACE_BROKEN(x) ((x) & LADSPA_PROPERTY_INPLACE_BROKEN) +#define LADSPA_IS_HARD_RT_CAPABLE(x) ((x) & LADSPA_PROPERTY_HARD_RT_CAPABLE) + +/*****************************************************************************/ + +/* Plugin Ports: + + Plugins have `ports' that are inputs or outputs for audio or + data. Ports can communicate arrays of LADSPA_Data (for audio + inputs/outputs) or single LADSPA_Data values (for control + input/outputs). This information is encapsulated in the + LADSPA_PortDescriptor type which is assembled by ORing individual + properties together. + + Note that a port must be an input or an output port but not both + and that a port must be a control or audio port but not both. */ + +typedef int LADSPA_PortDescriptor; + +/* Property LADSPA_PORT_INPUT indicates that the port is an input. */ +#define LADSPA_PORT_INPUT 0x1 + +/* Property LADSPA_PORT_OUTPUT indicates that the port is an output. */ +#define LADSPA_PORT_OUTPUT 0x2 + +/* Property LADSPA_PORT_CONTROL indicates that the port is a control + port. */ +#define LADSPA_PORT_CONTROL 0x4 + +/* Property LADSPA_PORT_AUDIO indicates that the port is a audio + port. */ +#define LADSPA_PORT_AUDIO 0x8 + +#define LADSPA_IS_PORT_INPUT(x) ((x) & LADSPA_PORT_INPUT) +#define LADSPA_IS_PORT_OUTPUT(x) ((x) & LADSPA_PORT_OUTPUT) +#define LADSPA_IS_PORT_CONTROL(x) ((x) & LADSPA_PORT_CONTROL) +#define LADSPA_IS_PORT_AUDIO(x) ((x) & LADSPA_PORT_AUDIO) + +/*****************************************************************************/ + +/* Plugin Port Range Hints: + + The host may wish to provide a representation of data entering or + leaving a plugin (e.g. to generate a GUI automatically). To make + this more meaningful, the plugin should provide `hints' to the host + describing the usual values taken by the data. + + Note that these are only hints. The host may ignore them and the + plugin must not assume that data supplied to it is meaningful. If + the plugin receives invalid input data it is expected to continue + to run without failure and, where possible, produce a sensible + output (e.g. a high-pass filter given a negative cutoff frequency + might switch to an all-pass mode). + + Hints are meaningful for all input and output ports but hints for + input control ports are expected to be particularly useful. + + More hint information is encapsulated in the + LADSPA_PortRangeHintDescriptor type which is assembled by ORing + individual hint types together. Hints may require further + LowerBound and UpperBound information. + + All the hint information for a particular port is aggregated in the + LADSPA_PortRangeHint structure. */ + +typedef int LADSPA_PortRangeHintDescriptor; + +/* Hint LADSPA_HINT_BOUNDED_BELOW indicates that the LowerBound field + of the LADSPA_PortRangeHint should be considered meaningful. The + value in this field should be considered the (inclusive) lower + bound of the valid range. If LADSPA_HINT_SAMPLE_RATE is also + specified then the value of LowerBound should be multiplied by the + sample rate. */ +#define LADSPA_HINT_BOUNDED_BELOW 0x1 + +/* Hint LADSPA_HINT_BOUNDED_ABOVE indicates that the UpperBound field + of the LADSPA_PortRangeHint should be considered meaningful. The + value in this field should be considered the (inclusive) upper + bound of the valid range. If LADSPA_HINT_SAMPLE_RATE is also + specified then the value of UpperBound should be multiplied by the + sample rate. */ +#define LADSPA_HINT_BOUNDED_ABOVE 0x2 + +/* Hint LADSPA_HINT_TOGGLED indicates that the data item should be + considered a Boolean toggle. Data less than or equal to zero should + be considered `off' or `false,' and data above zero should be + considered `on' or `true.' LADSPA_HINT_TOGGLED may not be used in + conjunction with any other hint except LADSPA_HINT_DEFAULT_0 or + LADSPA_HINT_DEFAULT_1. */ +#define LADSPA_HINT_TOGGLED 0x4 + +/* Hint LADSPA_HINT_SAMPLE_RATE indicates that any bounds specified + should be interpreted as multiples of the sample rate. For + instance, a frequency range from 0Hz to the Nyquist frequency (half + the sample rate) could be requested by this hint in conjunction + with LowerBound = 0 and UpperBound = 0.5. Hosts that support bounds + at all must support this hint to retain meaning. */ +#define LADSPA_HINT_SAMPLE_RATE 0x8 + +/* Hint LADSPA_HINT_LOGARITHMIC indicates that it is likely that the + user will find it more intuitive to view values using a logarithmic + scale. This is particularly useful for frequencies and gains. */ +#define LADSPA_HINT_LOGARITHMIC 0x10 + +/* Hint LADSPA_HINT_INTEGER indicates that a user interface would + probably wish to provide a stepped control taking only integer + values. Any bounds set should be slightly wider than the actual + integer range required to avoid floating point rounding errors. For + instance, the integer set {0,1,2,3} might be described as [-0.1, + 3.1]. */ +#define LADSPA_HINT_INTEGER 0x20 + +/* The various LADSPA_HINT_HAS_DEFAULT_* hints indicate a `normal' + value for the port that is sensible as a default. For instance, + this value is suitable for use as an initial value in a user + interface or as a value the host might assign to a control port + when the user has not provided one. Defaults are encoded using a + mask so only one default may be specified for a port. Some of the + hints make use of lower and upper bounds, in which case the + relevant bound or bounds must be available and + LADSPA_HINT_SAMPLE_RATE must be applied as usual. The resulting + default must be rounded if LADSPA_HINT_INTEGER is present. Default + values were introduced in LADSPA v1.1. */ +#define LADSPA_HINT_DEFAULT_MASK 0x3C0 + +/* This default values indicates that no default is provided. */ +#define LADSPA_HINT_DEFAULT_NONE 0x0 + +/* This default hint indicates that the suggested lower bound for the + port should be used. */ +#define LADSPA_HINT_DEFAULT_MINIMUM 0x40 + +/* This default hint indicates that a low value between the suggested + lower and upper bounds should be chosen. For ports with + LADSPA_HINT_LOGARITHMIC, this should be exp(log(lower) * 0.75 + + log(upper) * 0.25). Otherwise, this should be (lower * 0.75 + upper + * 0.25). */ +#define LADSPA_HINT_DEFAULT_LOW 0x80 + +/* This default hint indicates that a middle value between the + suggested lower and upper bounds should be chosen. For ports with + LADSPA_HINT_LOGARITHMIC, this should be exp(log(lower) * 0.5 + + log(upper) * 0.5). Otherwise, this should be (lower * 0.5 + upper * + 0.5). */ +#define LADSPA_HINT_DEFAULT_MIDDLE 0xC0 + +/* This default hint indicates that a high value between the suggested + lower and upper bounds should be chosen. For ports with + LADSPA_HINT_LOGARITHMIC, this should be exp(log(lower) * 0.25 + + log(upper) * 0.75). Otherwise, this should be (lower * 0.25 + upper + * 0.75). */ +#define LADSPA_HINT_DEFAULT_HIGH 0x100 + +/* This default hint indicates that the suggested upper bound for the + port should be used. */ +#define LADSPA_HINT_DEFAULT_MAXIMUM 0x140 + +/* This default hint indicates that the number 0 should be used. Note + that this default may be used in conjunction with + LADSPA_HINT_TOGGLED. */ +#define LADSPA_HINT_DEFAULT_0 0x200 + +/* This default hint indicates that the number 1 should be used. Note + that this default may be used in conjunction with + LADSPA_HINT_TOGGLED. */ +#define LADSPA_HINT_DEFAULT_1 0x240 + +/* This default hint indicates that the number 100 should be used. */ +#define LADSPA_HINT_DEFAULT_100 0x280 + +/* This default hint indicates that the Hz frequency of `concert A' + should be used. This will be 440 unless the host uses an unusual + tuning convention, in which case it may be within a few Hz. */ +#define LADSPA_HINT_DEFAULT_440 0x2C0 + +#define LADSPA_IS_HINT_BOUNDED_BELOW(x) ((x) & LADSPA_HINT_BOUNDED_BELOW) +#define LADSPA_IS_HINT_BOUNDED_ABOVE(x) ((x) & LADSPA_HINT_BOUNDED_ABOVE) +#define LADSPA_IS_HINT_TOGGLED(x) ((x) & LADSPA_HINT_TOGGLED) +#define LADSPA_IS_HINT_SAMPLE_RATE(x) ((x) & LADSPA_HINT_SAMPLE_RATE) +#define LADSPA_IS_HINT_LOGARITHMIC(x) ((x) & LADSPA_HINT_LOGARITHMIC) +#define LADSPA_IS_HINT_INTEGER(x) ((x) & LADSPA_HINT_INTEGER) + +#define LADSPA_IS_HINT_HAS_DEFAULT(x) ((x) & LADSPA_HINT_DEFAULT_MASK) +#define LADSPA_IS_HINT_DEFAULT_MINIMUM(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ + == LADSPA_HINT_DEFAULT_MINIMUM) +#define LADSPA_IS_HINT_DEFAULT_LOW(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ + == LADSPA_HINT_DEFAULT_LOW) +#define LADSPA_IS_HINT_DEFAULT_MIDDLE(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ + == LADSPA_HINT_DEFAULT_MIDDLE) +#define LADSPA_IS_HINT_DEFAULT_HIGH(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ + == LADSPA_HINT_DEFAULT_HIGH) +#define LADSPA_IS_HINT_DEFAULT_MAXIMUM(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ + == LADSPA_HINT_DEFAULT_MAXIMUM) +#define LADSPA_IS_HINT_DEFAULT_0(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ + == LADSPA_HINT_DEFAULT_0) +#define LADSPA_IS_HINT_DEFAULT_1(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ + == LADSPA_HINT_DEFAULT_1) +#define LADSPA_IS_HINT_DEFAULT_100(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ + == LADSPA_HINT_DEFAULT_100) +#define LADSPA_IS_HINT_DEFAULT_440(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ + == LADSPA_HINT_DEFAULT_440) + +typedef struct _LADSPA_PortRangeHint { + + /* Hints about the port. */ + LADSPA_PortRangeHintDescriptor HintDescriptor; + + /* Meaningful when hint LADSPA_HINT_BOUNDED_BELOW is active. When + LADSPA_HINT_SAMPLE_RATE is also active then this value should be + multiplied by the relevant sample rate. */ + LADSPA_Data LowerBound; + + /* Meaningful when hint LADSPA_HINT_BOUNDED_ABOVE is active. When + LADSPA_HINT_SAMPLE_RATE is also active then this value should be + multiplied by the relevant sample rate. */ + LADSPA_Data UpperBound; + +} LADSPA_PortRangeHint; + +/*****************************************************************************/ + +/* Plugin Handles: + + This plugin handle indicates a particular instance of the plugin + concerned. It is valid to compare this to NULL (0 for C++) but + otherwise the host should not attempt to interpret it. The plugin + may use it to reference internal instance data. */ + +typedef void * LADSPA_Handle; + +/*****************************************************************************/ + +/* Descriptor for a Type of Plugin: + + This structure is used to describe a plugin type. It provides a + number of functions to examine the type, instantiate it, link it to + buffers and workspaces and to run it. */ + +typedef struct _LADSPA_Descriptor { + + /* This numeric identifier indicates the plugin type + uniquely. Plugin programmers may reserve ranges of IDs from a + central body to avoid clashes. Hosts may assume that IDs are + below 0x1000000. */ + unsigned long UniqueID; + + /* This identifier can be used as a unique, case-sensitive + identifier for the plugin type within the plugin file. Plugin + types should be identified by file and label rather than by index + or plugin name, which may be changed in new plugin + versions. Labels must not contain white-space characters. */ + const char * Label; + + /* This indicates a number of properties of the plugin. */ + LADSPA_Properties Properties; + + /* This member points to the null-terminated name of the plugin + (e.g. "Sine Oscillator"). */ + const char * Name; + + /* This member points to the null-terminated string indicating the + maker of the plugin. This can be an empty string but not NULL. */ + const char * Maker; + + /* This member points to the null-terminated string indicating any + copyright applying to the plugin. If no Copyright applies the + string "None" should be used. */ + const char * Copyright; + + /* This indicates the number of ports (input AND output) present on + the plugin. */ + unsigned long PortCount; + + /* This member indicates an array of port descriptors. Valid indices + vary from 0 to PortCount-1. */ + const LADSPA_PortDescriptor * PortDescriptors; + + /* This member indicates an array of null-terminated strings + describing ports (e.g. "Frequency (Hz)"). Valid indices vary from + 0 to PortCount-1. */ + const char * const * PortNames; + + /* This member indicates an array of range hints for each port (see + above). Valid indices vary from 0 to PortCount-1. */ + const LADSPA_PortRangeHint * PortRangeHints; + + /* This may be used by the plugin developer to pass any custom + implementation data into an instantiate call. It must not be used + or interpreted by the host. It is expected that most plugin + writers will not use this facility as LADSPA_Handle should be + used to hold instance data. */ + void * ImplementationData; + + /* This member is a function pointer that instantiates a plugin. A + handle is returned indicating the new plugin instance. The + instantiation function accepts a sample rate as a parameter. The + plugin descriptor from which this instantiate function was found + must also be passed. This function must return NULL if + instantiation fails. + + Note that instance initialisation should generally occur in + activate() rather than here. */ + LADSPA_Handle (*instantiate)(const struct _LADSPA_Descriptor * Descriptor, + unsigned long SampleRate); + + /* This member is a function pointer that connects a port on an + instantiated plugin to a memory location at which a block of data + for the port will be read/written. The data location is expected + to be an array of LADSPA_Data for audio ports or a single + LADSPA_Data value for control ports. Memory issues will be + managed by the host. The plugin must read/write the data at these + locations every time run() or run_adding() is called and the data + present at the time of this connection call should not be + considered meaningful. + + connect_port() may be called more than once for a plugin instance + to allow the host to change the buffers that the plugin is + reading or writing. These calls may be made before or after + activate() or deactivate() calls. + + connect_port() must be called at least once for each port before + run() or run_adding() is called. When working with blocks of + LADSPA_Data the plugin should pay careful attention to the block + size passed to the run function as the block allocated may only + just be large enough to contain the block of samples. + + Plugin writers should be aware that the host may elect to use the + same buffer for more than one port and even use the same buffer + for both input and output (see LADSPA_PROPERTY_INPLACE_BROKEN). + However, overlapped buffers or use of a single buffer for both + audio and control data may result in unexpected behaviour. */ + void (*connect_port)(LADSPA_Handle Instance, + unsigned long Port, + LADSPA_Data * DataLocation); + + /* This member is a function pointer that initialises a plugin + instance and activates it for use. This is separated from + instantiate() to aid real-time support and so that hosts can + reinitialise a plugin instance by calling deactivate() and then + activate(). In this case the plugin instance must reset all state + information dependent on the history of the plugin instance + except for any data locations provided by connect_port() and any + gain set by set_run_adding_gain(). If there is nothing for + activate() to do then the plugin writer may provide a NULL rather + than an empty function. + + When present, hosts must call this function once before run() (or + run_adding()) is called for the first time. This call should be + made as close to the run() call as possible and indicates to + real-time plugins that they are now live. Plugins should not rely + on a prompt call to run() after activate(). activate() may not be + called again unless deactivate() is called first. Note that + connect_port() may be called before or after a call to + activate(). */ + void (*activate)(LADSPA_Handle Instance); + + /* This method is a function pointer that runs an instance of a + plugin for a block. Two parameters are required: the first is a + handle to the particular instance to be run and the second + indicates the block size (in samples) for which the plugin + instance may run. + + Note that if an activate() function exists then it must be called + before run() or run_adding(). If deactivate() is called for a + plugin instance then the plugin instance may not be reused until + activate() has been called again. + + If the plugin has the property LADSPA_PROPERTY_HARD_RT_CAPABLE + then there are various things that the plugin should not do + within the run() or run_adding() functions (see above). */ + void (*run)(LADSPA_Handle Instance, + unsigned long SampleCount); + + /* This method is a function pointer that runs an instance of a + plugin for a block. This has identical behaviour to run() except + in the way data is output from the plugin. When run() is used, + values are written directly to the memory areas associated with + the output ports. However when run_adding() is called, values + must be added to the values already present in the memory + areas. Furthermore, output values written must be scaled by the + current gain set by set_run_adding_gain() (see below) before + addition. + + run_adding() is optional. When it is not provided by a plugin, + this function pointer must be set to NULL. When it is provided, + the function set_run_adding_gain() must be provided also. */ + void (*run_adding)(LADSPA_Handle Instance, + unsigned long SampleCount); + + /* This method is a function pointer that sets the output gain for + use when run_adding() is called (see above). If this function is + never called the gain is assumed to default to 1. Gain + information should be retained when activate() or deactivate() + are called. + + This function should be provided by the plugin if and only if the + run_adding() function is provided. When it is absent this + function pointer must be set to NULL. */ + void (*set_run_adding_gain)(LADSPA_Handle Instance, + LADSPA_Data Gain); + + /* This is the counterpart to activate() (see above). If there is + nothing for deactivate() to do then the plugin writer may provide + a NULL rather than an empty function. + + Hosts must deactivate all activated units after they have been + run() (or run_adding()) for the last time. This call should be + made as close to the last run() call as possible and indicates to + real-time plugins that they are no longer live. Plugins should + not rely on prompt deactivation. Note that connect_port() may be + called before or after a call to deactivate(). + + Deactivation is not similar to pausing as the plugin instance + will be reinitialised when activate() is called to reuse it. */ + void (*deactivate)(LADSPA_Handle Instance); + + /* Once an instance of a plugin has been finished with it can be + deleted using the following function. The instance handle passed + ceases to be valid after this call. + + If activate() was called for a plugin instance then a + corresponding call to deactivate() must be made before cleanup() + is called. */ + void (*cleanup)(LADSPA_Handle Instance); + +} LADSPA_Descriptor; + +/**********************************************************************/ + +/* Accessing a Plugin: */ + +/* The exact mechanism by which plugins are loaded is host-dependent, + however all most hosts will need to know is the name of shared + object file containing the plugin types. To allow multiple hosts to + share plugin types, hosts may wish to check for environment + variable LADSPA_PATH. If present, this should contain a + colon-separated path indicating directories that should be searched + (in order) when loading plugin types. + + A plugin programmer must include a function called + "ladspa_descriptor" with the following function prototype within + the shared object file. This function will have C-style linkage (if + you are using C++ this is taken care of by the `extern "C"' clause + at the top of the file). + + A host will find the plugin shared object file by one means or + another, find the ladspa_descriptor() function, call it, and + proceed from there. + + Plugin types are accessed by index (not ID) using values from 0 + upwards. Out of range indexes must result in this function + returning NULL, so the plugin count can be determined by checking + for the least index that results in NULL being returned. */ + +const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index); + +/* Datatype corresponding to the ladspa_descriptor() function. */ +typedef const LADSPA_Descriptor * +(*LADSPA_Descriptor_Function)(unsigned long Index); + +/**********************************************************************/ + +#ifdef __cplusplus +} +#endif + +#endif /* LADSPA_INCLUDED */ + +/* EOF */ diff --git a/attic/muse_qt4_evolution/muse/ladspaplugin.cpp b/attic/muse_qt4_evolution/muse/ladspaplugin.cpp new file mode 100644 index 00000000..85398d74 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/ladspaplugin.cpp @@ -0,0 +1,235 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "al/al.h" +#include "ladspaplugin.h" +#include "fastlog.h" +#include "ctrl.h" + +//--------------------------------------------------------- +// defaultValue +//--------------------------------------------------------- + +float ladspaDefaultValue(const LADSPA_Descriptor* plugin, int k) + { + LADSPA_PortRangeHint range = plugin->PortRangeHints[k]; + LADSPA_PortRangeHintDescriptor rh = range.HintDescriptor; +// bool isLog = LADSPA_IS_HINT_LOGARITHMIC(rh); + double val = 1.0; + float m = (rh & LADSPA_HINT_SAMPLE_RATE) ? float(AL::sampleRate) : 1.0f; + if (LADSPA_IS_HINT_DEFAULT_MINIMUM(rh)) { + val = range.LowerBound * m; + } + else if (LADSPA_IS_HINT_DEFAULT_LOW(rh)) { + if (LADSPA_IS_HINT_LOGARITHMIC(rh)) + val = exp(fast_log10(range.LowerBound * m) * .75 + + log(range.UpperBound * m) * .25); + else + val = range.LowerBound*.75*m + range.UpperBound*.25*m; + } + else if (LADSPA_IS_HINT_DEFAULT_MIDDLE(rh)) { + if (LADSPA_IS_HINT_LOGARITHMIC(rh)) + val = exp(log(range.LowerBound * m) * .5 + + log10(range.UpperBound * m) * .5); + else + val = range.LowerBound*.5*m + range.UpperBound*.5*m; + } + else if (LADSPA_IS_HINT_DEFAULT_HIGH(rh)) { + if (LADSPA_IS_HINT_LOGARITHMIC(rh)) + val = exp(log(range.LowerBound * m) * .25 + + log(range.UpperBound * m) * .75); + else + val = range.LowerBound*.25*m + range.UpperBound*.75*m; + } + else if (LADSPA_IS_HINT_DEFAULT_MAXIMUM(rh)) { + val = range.UpperBound*m; + } + else if (LADSPA_IS_HINT_DEFAULT_0(rh)) + val = 0.0; + else if (LADSPA_IS_HINT_DEFAULT_1(rh)) + val = 1.0; + else if (LADSPA_IS_HINT_DEFAULT_100(rh)) + val = 100.0; + else if (LADSPA_IS_HINT_DEFAULT_440(rh)) + val = 440.0; + return val; + } + +//--------------------------------------------------------- +// LadpsaPlugin +//--------------------------------------------------------- + +LadspaPlugin::LadspaPlugin(const QFileInfo* f, + const LADSPA_Descriptor_Function ldf, + const LADSPA_Descriptor* d) + : Plugin(f), ladspa(ldf), plugin(d) + { + _inports = 0; + _outports = 0; + _parameter = 0; + for (unsigned k = 0; k < plugin->PortCount; ++k) { + LADSPA_PortDescriptor pd = d->PortDescriptors[k]; + static const int CI = LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT; + if ((pd & CI) == CI) { + ++_parameter; + pIdx.push_back(k); + } + else if (pd & LADSPA_PORT_INPUT) { + ++_inports; + iIdx.push_back(k); + } + else if (pd & LADSPA_PORT_OUTPUT) { + ++_outports; + oIdx.push_back(k); + } + } + LADSPA_Properties properties = plugin->Properties; + _inPlaceCapable = !LADSPA_IS_INPLACE_BROKEN(properties); + if (_inports != _outports) + _inPlaceCapable = false; + } + +//--------------------------------------------------------- +// instantiate +//--------------------------------------------------------- + +void* LadspaPlugin::instantiate() + { + return plugin->instantiate(plugin, AL::sampleRate); + } + +//--------------------------------------------------------- +// range +//--------------------------------------------------------- + +void LadspaPlugin::range(int i, double* min, double* max) const + { + i = pIdx[i]; + LADSPA_PortRangeHint range = plugin->PortRangeHints[i]; + LADSPA_PortRangeHintDescriptor desc = range.HintDescriptor; + if (desc & LADSPA_HINT_TOGGLED) { + *min = -1.0; + *max = 1.0; + return; + } + double m = (desc & LADSPA_HINT_SAMPLE_RATE) ? float(AL::sampleRate) : 1.0f; + + if (desc & LADSPA_HINT_BOUNDED_BELOW) + *min = range.LowerBound * m; + else + *min = 0.0; + if (desc & LADSPA_HINT_BOUNDED_ABOVE) + *max = range.UpperBound * m; + else + *max = 1.0; + } + +//--------------------------------------------------------- +// createPIF +//--------------------------------------------------------- + +PluginIF* LadspaPlugin::createPIF(PluginI* pi) + { + LadspaPluginIF* pif = new LadspaPluginIF(pi); + pif->init(pi->plugin()); + return pif; + } + +//--------------------------------------------------------- +// LadspaPluginIF +//--------------------------------------------------------- + +LadspaPluginIF::LadspaPluginIF(PluginI* pi) + : PluginIF(pi) + { + descr = 0; + plugin = (LadspaPlugin*)(pi->plugin()); + } + +//--------------------------------------------------------- +// init +// return true on error +//--------------------------------------------------------- + +bool LadspaPluginIF::init(Plugin* pl) + { + handle = (LADSPA_Descriptor*) ((LadspaPlugin*)pl)->instantiate(); + plugin = (LadspaPlugin*)pl; + descr = plugin->ladspaDescriptor(); + + int controlPorts = plugin->parameter(); + controls = new LadspaPort[controlPorts]; + + for (int k = 0; k < controlPorts; ++k) { + controls[k].val = plugin->defaultValue(k); + descr->connect_port(handle, plugin->pIdx[k], &controls[k].val); + } + return handle == 0; + } + +//--------------------------------------------------------- +// apply +//--------------------------------------------------------- + +void LadspaPluginIF::apply(unsigned nframes, float** src, float** dst) + { + int iports = plugin->inports(); + int oports = plugin->outports(); + int cports = plugin->parameter(); + + // + // update parameter + // + for (int i = 0; i < cports; ++i) + controls[i].val = pluginI->controllerList[i]->curVal().f; + // + // set connections + // + for (int k = 0; k < iports; ++k) + descr->connect_port(handle, plugin->iIdx[k], src[k]); + for (int k = 0; k < oports; ++k) + descr->connect_port(handle, plugin->oIdx[k], dst[k]); + + descr->run(handle, nframes); + } + +//--------------------------------------------------------- +// defaultValue +//--------------------------------------------------------- + +double LadspaPlugin::defaultValue(int k) const + { + k = pIdx[k]; + return ladspaDefaultValue(plugin, k); + } + +//--------------------------------------------------------- +// activate +//--------------------------------------------------------- + +void LadspaPluginIF::activate() + { + // + // TODO: init values? + // + if (descr->activate) + descr->activate(handle); + } + diff --git a/attic/muse_qt4_evolution/muse/ladspaplugin.h b/attic/muse_qt4_evolution/muse/ladspaplugin.h new file mode 100644 index 00000000..4c492813 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/ladspaplugin.h @@ -0,0 +1,127 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __LADSPAPLUGIN_H__ +#define __LADSPAPLUGIN_H__ + +#include "ladspa.h" +#include "plugin.h" + +//--------------------------------------------------------- +// LadspaPlugin +//--------------------------------------------------------- + +class LadspaPlugin : public Plugin { + LADSPA_Descriptor_Function ladspa; + const LADSPA_Descriptor* plugin; + + protected: + int _parameter; + std::vector pIdx; + + int _inports; + std::vector iIdx; + + int _outports; + std::vector oIdx; + + bool _inPlaceCapable; + friend class LadspaPluginIF; + + public: + LadspaPlugin(const QFileInfo* f, + const LADSPA_Descriptor_Function, + const LADSPA_Descriptor* d); + + virtual QString label() const { return QString(plugin->Label); } + virtual QString name() const { return QString(plugin->Name); } + virtual unsigned long id() const { return plugin->UniqueID; } + virtual QString maker() const { return QString(plugin->Maker); } + virtual QString copyright() const { return QString(plugin->Copyright); } + + void* instantiate(); + virtual void range(int i, double*, double*) const; + virtual int parameter() const { return _parameter; } + virtual int inports() const { return _inports; } + virtual int outports() const { return _outports; } + + virtual bool inPlaceCapable() const { return _inPlaceCapable; } + virtual PluginIF* createPIF(PluginI*); + const LADSPA_Descriptor* ladspaDescriptor() const { return plugin; } + + virtual bool isLog(int k) const { + LADSPA_PortRangeHint r = plugin->PortRangeHints[pIdx[k]]; + return LADSPA_IS_HINT_LOGARITHMIC(r.HintDescriptor); + } + virtual bool isBool(int k) const { + return LADSPA_IS_HINT_TOGGLED(plugin->PortRangeHints[pIdx[k]].HintDescriptor); + } + virtual bool isInt(int k) const { + LADSPA_PortRangeHint r = plugin->PortRangeHints[pIdx[k]]; + return LADSPA_IS_HINT_INTEGER(r.HintDescriptor); + } + virtual double defaultValue(int) const; + }; + +//--------------------------------------------------------- +// LadspaPort +//--------------------------------------------------------- + +struct LadspaPort { + float val; + }; + +//--------------------------------------------------------- +// LadspaPluginIF +//--------------------------------------------------------- + +class LadspaPluginIF : public PluginIF { + const LADSPA_Descriptor* descr; + LADSPA_Handle handle; // per instance + LadspaPlugin* plugin; + + LadspaPort* controls; + + public: + LadspaPluginIF(PluginI* pi); + + virtual void apply(unsigned nframes, float** src, float** dst); + virtual void activate(); + virtual void deactivate() { + if (descr->deactivate) + descr->deactivate(handle); + } + virtual void cleanup() { + if (descr->cleanup) + descr->cleanup(handle); + } + virtual const char* getParameterName(int i) const { + return plugin->plugin->PortNames[plugin->pIdx[i]]; + } + virtual void setParam(int i, double val) { controls[i].val = val; } + virtual float param(int i) const { return controls[i].val; } + bool init(Plugin*); + }; + +extern float ladspaDefaultValue(const LADSPA_Descriptor* plugin, int k); + +#endif + + diff --git a/attic/muse_qt4_evolution/muse/liste/CMakeLists.txt b/attic/muse_qt4_evolution/muse/liste/CMakeLists.txt new file mode 100644 index 00000000..988efaf8 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/liste/CMakeLists.txt @@ -0,0 +1,48 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +QT4_WRAP_CPP ( liste_mocs + listedit.h + ctrllistedit.h + tracklistedit.h + partlistedit.h + ieventdialog.h + ) + +QT4_WRAP_UI ( liste_ui_headers + ctrllistedit.ui + partlistedit.ui + tracklistedit.ui + ) + +add_library ( liste STATIC + listedit.cpp listedit.h + ctrllistedit.cpp ctrllistedit.h + partlistedit.cpp partlistedit.h + tracklistedit.cpp tracklistedit.h + ieventdialog.cpp ieventdialog.h + ${liste_mocs} + ${liste_ui_headers} + ) +set_target_properties( liste + PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h" + ) + + diff --git a/attic/muse_qt4_evolution/muse/liste/ctrllistedit.cpp b/attic/muse_qt4_evolution/muse/liste/ctrllistedit.cpp new file mode 100644 index 00000000..ab9e66e3 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/liste/ctrllistedit.cpp @@ -0,0 +1,569 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "ctrllistedit.h" +#include "ctrl.h" +#include "track.h" +#include "song.h" +#include "al/pos.h" +#include "awl/posedit.h" + +//--------------------------------------------------------- +// CtrlListEditor +//--------------------------------------------------------- + +CtrlListEditor::CtrlListEditor(ListEdit* e, QWidget* parent) + : ListWidget(parent) + { + listEdit = e; + updateListDisabled = false; + QWidget* cew = new QWidget; + le.setupUi(cew); + QVBoxLayout* layout = new QVBoxLayout; + layout->addWidget(cew); + setLayout(layout); + le.minValue->setRange(-10000000.0, 100000000.0); + le.maxValue->setRange(-10000000.0, 100000000.0); + le.defaultValue->setRange(-10000000.0, 100000000.0); + le.minValue->setSingleStep(1.0); + le.maxValue->setSingleStep(1.0); + le.defaultValue->setSingleStep(1.0); + + QFontMetrics fm(le.ctrlList->font()); + int zW = fm.width("0"); + le.ctrlList->setColumnWidth(TICK_COL, zW * 8); + le.ctrlList->setColumnWidth(TIME_COL, zW * 14); + CtrlDelegate* ctrlDelegate = new CtrlDelegate(this); + le.ctrlList->setItemDelegate(ctrlDelegate); + + track = 0; + connect(le.ctrlList, SIGNAL(itemActivated(QTreeWidgetItem*, int)), + SLOT(itemActivated(QTreeWidgetItem*,int))); + connect(le.ctrlList, SIGNAL(itemChanged(QTreeWidgetItem*, int)), + SLOT(itemChanged(QTreeWidgetItem*, int))); + connect(le.ctrlList, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), + SLOT(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*))); + connect(le.insertButton, SIGNAL(clicked()), SLOT(insertClicked())); + connect(le.deleteButton, SIGNAL(clicked()), SLOT(deleteClicked())); + connect(le.controllerName, SIGNAL(textEdited(const QString&)), + SLOT(nameEdited(const QString&))); + connect(le.minValue, SIGNAL(valueChanged(double)), SLOT(minValChanged(double))); + connect(le.maxValue, SIGNAL(valueChanged(double)), SLOT(maxValChanged(double))); + connect(le.defaultValue, SIGNAL(valueChanged(double)), SLOT(defaultValChanged(double))); + EscapeFilter* ef = new EscapeFilter(this); + installEventFilter(ef); + } + +//--------------------------------------------------------- +// eventFilter +//--------------------------------------------------------- + +bool EscapeFilter::eventFilter(QObject* obj, QEvent* event) + { + if (event->type() == QEvent::KeyPress) { + if (((QKeyEvent*)event)->key() == Qt::Key_Escape) { + ((CtrlListEditor*)parent())->sendEscape(); + return true; + } + } + return QObject::eventFilter(obj, event); + } + +//--------------------------------------------------------- +// setup +//--------------------------------------------------------- + +void CtrlListEditor::setup(const ListType& lt) + { + if (track) + disconnect(track, SIGNAL(controllerChanged(int)), this, SLOT(controllerChanged(int))); + track = lt.track; + connect(track, SIGNAL(controllerChanged(int)), SLOT(controllerChanged(int))); + + c = lt.ctrl; + le.controllerName->setText(c->name()); + le.discreteCheckBox->setChecked(c->type() & Ctrl::DISCRETE); + le.logarithmicCheckBox->setChecked(c->type() & Ctrl::LOG); + le.floatCheckBox->setChecked(!(c->type() & Ctrl::INT)); + le.ctrlId->setValue(c->id()); + if (c->type() & Ctrl::INT) { + le.minValue->setDecimals(0); + le.minValue->setValue(c->minVal().i); + le.maxValue->setDecimals(0); + le.maxValue->setValue(c->maxVal().i); + le.defaultValue->setDecimals(0); + le.defaultValue->setValue(c->getDefault().i); + } + else { + if (c->type() & Ctrl::LOG) { + le.minValue->setDecimals(0); + le.minValue->setValue(c->minVal().f * 20.0); + le.minValue->setSuffix(tr("dB")); + le.maxValue->setDecimals(0); + le.maxValue->setValue(c->maxVal().f * 20.0); + le.maxValue->setSuffix(tr("dB")); + le.defaultValue->setDecimals(0); + le.defaultValue->setValue(c->getDefault().f * 20.0); + le.defaultValue->setSuffix(tr("dB")); + } + else { + le.minValue->setDecimals(1); + le.minValue->setValue(c->minVal().f); + le.maxValue->setDecimals(1); + le.maxValue->setValue(c->maxVal().f); + le.defaultValue->setDecimals(1); + le.defaultValue->setValue(c->getDefault().f); + } + } + updateList(); + } + +//--------------------------------------------------------- +// updateList +//--------------------------------------------------------- + +void CtrlListEditor::updateList() + { + if (updateListDisabled) + return; + le.ctrlList->clear(); + int idx = 0; + bool curItemSet = false; + for (iCtrlVal i = c->begin(); i != c->end(); ++i, ++idx) { + CVal v = i.value(); + QTreeWidgetItem* item = new QTreeWidgetItem; + item->setData(TICK_COL, Qt::TextAlignmentRole, int(Qt::AlignRight | Qt::AlignVCenter)); + item->setData(TIME_COL, Qt::TextAlignmentRole, int(Qt::AlignRight | Qt::AlignVCenter)); + item->setData(VAL_COL, Qt::TextAlignmentRole, int(Qt::AlignHCenter | Qt::AlignVCenter)); + + item->setData(TICK_COL, Qt::DisplayRole, i.key()); + item->setData(TIME_COL, Qt::DisplayRole, i.key()); + if (c->type() & Ctrl::INT) + item->setData(VAL_COL, Qt::DisplayRole, v.i); + else + item->setData(VAL_COL, Qt::DisplayRole, v.f); + le.ctrlList->insertTopLevelItem(idx, item); + if (!curItemSet && (i.key() >= listEdit->pos().tick())) { + le.ctrlList->setCurrentItem(item); + curItemSet = true; + } + } + } + +//--------------------------------------------------------- +// controllerChanged +//--------------------------------------------------------- + +void CtrlListEditor::controllerChanged(int id) + { + if (id != c->id()) + return; + updateList(); + } + +//--------------------------------------------------------- +// itemActivated +//--------------------------------------------------------- + +void CtrlListEditor::itemActivated(QTreeWidgetItem* item, int column) + { + le.ctrlList->openPersistentEditor(item, column); + } + +//--------------------------------------------------------- +// itemChanged +//--------------------------------------------------------- + +void CtrlListEditor::itemChanged(QTreeWidgetItem* item, int column) + { + CVal val; + if (c->type() & Ctrl::INT) { + val.i = item->data(VAL_COL, Qt::DisplayRole).toInt(); + bool updateData = false; + if (val.i < c->minVal().i) { + val.i = c->minVal().i; + updateData = true; + } + else if (val.i > c->maxVal().i) { + val.i = c->maxVal().i; + updateData = true; + } + if (updateData) + item->setData(VAL_COL, Qt::DisplayRole, val.i); + } + else { + val.f = item->data(VAL_COL, Qt::DisplayRole).toDouble(); + bool updateData = false; + if (val.f < c->minVal().f) { + val.f = c->minVal().f; + updateData = true; + } + else if (val.f > c->maxVal().f) { + val.f = c->maxVal().f; + updateData = true; + } + if (updateData) + item->setData(VAL_COL, Qt::DisplayRole, val.f); + } + le.ctrlList->closePersistentEditor(item, TICK_COL); + le.ctrlList->closePersistentEditor(item, TIME_COL); + le.ctrlList->closePersistentEditor(item, VAL_COL); + updateListDisabled = true; + switch(column) { + case TICK_COL: + { + int otick = item->data(TIME_COL, Qt::DisplayRole).toInt(); + int tick = item->data(TICK_COL, Qt::DisplayRole).toInt(); + item->setData(TIME_COL, Qt::DisplayRole, tick); + song->cmdRemoveControllerVal(track, c->id(), otick); + song->cmdAddControllerVal(track, c, tick, val); + } + break; + case TIME_COL: + { + int otick = item->data(TICK_COL, Qt::DisplayRole).toInt(); + int tick = item->data(TIME_COL, Qt::DisplayRole).toInt(); + item->setData(TICK_COL, Qt::DisplayRole, tick); + song->cmdRemoveControllerVal(track, c->id(), otick); + song->cmdAddControllerVal(track, c, tick, val); + } + break; + case VAL_COL: + song->cmdAddControllerVal(track, c, listEdit->pos(), val); + break; + } + updateListDisabled = false; + } + +//--------------------------------------------------------- +// sendEscape +//--------------------------------------------------------- + +void CtrlListEditor::sendEscape() + { + QTreeWidgetItem* cur = le.ctrlList->currentItem(); + if (cur == 0) + return; + le.ctrlList->closePersistentEditor(cur, TICK_COL); + le.ctrlList->closePersistentEditor(cur, TIME_COL); + le.ctrlList->closePersistentEditor(cur, VAL_COL); + } + +//--------------------------------------------------------- +// currentItemChanged +//--------------------------------------------------------- + +void CtrlListEditor::currentItemChanged(QTreeWidgetItem* cur, QTreeWidgetItem* prev) + { + if (prev) { + le.ctrlList->closePersistentEditor(prev, TICK_COL); + le.ctrlList->closePersistentEditor(prev, TIME_COL); + le.ctrlList->closePersistentEditor(prev, VAL_COL); + } + if (cur) { + Pos pos(cur->data(TICK_COL, Qt::DisplayRole).toInt(), track->timeType()); + listEdit->pos() = pos; + } + le.deleteButton->setEnabled(cur); + } + +//--------------------------------------------------------- +// insertClicked +// insert one tick before current value +//--------------------------------------------------------- + +void CtrlListEditor::insertClicked() + { + CVal val = c->minVal(); + QTreeWidgetItem* cur = le.ctrlList->currentItem(); + if (cur) { + int tick = cur->data(TICK_COL, Qt::DisplayRole).toInt(); + if (tick == 0) // cannot insert value at position < 0 + return; + listEdit->pos().setTick(tick - 1); + if (c->type() & Ctrl::INT) + val.i = cur->data(VAL_COL, Qt::DisplayRole).toInt(); + else + val.f = cur->data(VAL_COL, Qt::DisplayRole).toDouble(); + } + song->cmdAddControllerVal(track, c, listEdit->pos(), val); + } + +//--------------------------------------------------------- +// deleteClicked +//--------------------------------------------------------- + +void CtrlListEditor::deleteClicked() + { + QTreeWidgetItem* cur = le.ctrlList->currentItem(); + if (cur == 0) + return; + int tick = cur->data(TICK_COL, Qt::DisplayRole).toInt(); + song->cmdRemoveControllerVal(track, c->id(), tick); + } + +//--------------------------------------------------------- +// nameEdited +//--------------------------------------------------------- + +void CtrlListEditor::nameEdited(const QString& s) + { + track->changeCtrlName(c, s); + } + +//--------------------------------------------------------- +// minValChanged +//--------------------------------------------------------- + +void CtrlListEditor::minValChanged(double v) + { + CVal val; + if (c->type() & Ctrl::INT) + val.i = int(v); + else { + if (c->type() & Ctrl::LOG) + v /= 20.0; + val.f = v; + } + c->setRange(val, c->maxVal()); + } + +//--------------------------------------------------------- +// maxValChanged +//--------------------------------------------------------- + +void CtrlListEditor::maxValChanged(double v) + { + CVal val; + if (c->type() & Ctrl::INT) + val.i = int(v); + else { + if (c->type() & Ctrl::LOG) + v /= 20.0; + val.f = v; + } + c->setRange(c->minVal(), val); + } + +//--------------------------------------------------------- +// defaultValChanged +//--------------------------------------------------------- + +void CtrlListEditor::defaultValChanged(double v) + { + CVal val; + if (c->type() & Ctrl::INT) + val.i = int(v); + else + val.f = v; + c->setDefault(val); + } + +//--------------------------------------------------------- +// CtrlDelegate +//--------------------------------------------------------- + +CtrlDelegate::CtrlDelegate(QObject* parent) + : QItemDelegate(parent) + { + } + +//--------------------------------------------------------- +// createEditor +//--------------------------------------------------------- + +QWidget* CtrlDelegate::createEditor(QWidget* pw, + const QStyleOptionViewItem& option, const QModelIndex& index) const + { + switch(index.column()) { + case CtrlListEditor::TICK_COL: + break; + case CtrlListEditor::TIME_COL: + return new Awl::PosEdit(pw); + case CtrlListEditor::VAL_COL: + { + CtrlListEditor* ce = static_cast(parent()); + Ctrl* c = ce->ctrl(); + if (c->type() & Ctrl::INT) { + QSpinBox* w = new QSpinBox(pw); + w->setRange(c->minVal().i, c->maxVal().i); + w->installEventFilter(const_cast(this)); + return w; + } + QDoubleSpinBox* w = new QDoubleSpinBox(pw); + if (c->type() & Ctrl::LOG) + w->setSuffix(tr("dB")); +// w->setRange(c->minVal().f, c->maxVal().f); + w->installEventFilter(const_cast(this)); + return w; + } + } + return QItemDelegate::createEditor(pw, option, index); + } + +//--------------------------------------------------------- +// setEditorData +//--------------------------------------------------------- + +void CtrlDelegate::setEditorData(QWidget* editor, + const QModelIndex& index) const + { + switch(index.column()) { + case CtrlListEditor::TICK_COL: + break; + case CtrlListEditor::TIME_COL: + { + Awl::PosEdit* pe = static_cast(editor); + pe->setValue(AL::Pos(index.data().toInt())); + } + return; + case CtrlListEditor::VAL_COL: + { + CtrlListEditor* ce = static_cast(parent()); + Ctrl* c = ce->ctrl(); + if (c->type() & Ctrl::INT) { + QSpinBox* w = static_cast(editor); + w->setValue(index.data().toInt()); + } + else { + QDoubleSpinBox* w = static_cast(editor); + double v = index.data().toDouble(); +printf("type %x\n", c->type()); + if (c->type() & Ctrl::LOG) + v *= 20.0; + w->setValue(v); + } + } + return; + } + QItemDelegate::setEditorData(editor, index); + } + +//--------------------------------------------------------- +// setModelData +//--------------------------------------------------------- + +void CtrlDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, + const QModelIndex& index) const + { + switch(index.column()) { + case CtrlListEditor::TICK_COL: + break; + case CtrlListEditor::TIME_COL: + { + Awl::PosEdit* pe = static_cast(editor); + model->setData(index, pe->pos().tick(), Qt::DisplayRole); + } + return; + case CtrlListEditor::VAL_COL: + { + CtrlListEditor* ce = static_cast(parent()); + Ctrl* c = ce->ctrl(); + if (c->type() & Ctrl::INT) { + QSpinBox* w = static_cast(editor); + model->setData(index, w->value(), Qt::DisplayRole); + } + else { + QDoubleSpinBox* w = static_cast(editor); + double v = w->value(); + if (c->type() & Ctrl::LOG) + v /= 20.0; + model->setData(index, v, Qt::DisplayRole); + } + } + break; + } + QItemDelegate::setModelData(editor, model, index); + } + +//--------------------------------------------------------- +// paint +//--------------------------------------------------------- + +void CtrlDelegate::paint(QPainter* painter, + const QStyleOptionViewItem& option, const QModelIndex& index) const + { + QString text; + CtrlListEditor* ce = static_cast(parent()); + + switch(index.column()) { + case CtrlListEditor::TICK_COL: + { + Track* track = ce->getTrack(); + AL::Pos pos(index.data().toInt(), track->timeType()); + text = QString("%1").arg(pos.tick()); + } + break; + case CtrlListEditor::TIME_COL: + { + Track* track = ce->getTrack(); + AL::Pos pos(index.data().toInt(), track->timeType()); + int measure, beat, tick; + pos.mbt(&measure, &beat, &tick); + text.sprintf("%04d.%02d.%03u", measure+1, beat+1, tick); + } + break; + case CtrlListEditor::VAL_COL: + { + Ctrl* c = ce->ctrl(); + if (c->type() & Ctrl::INT) { + text = QString("%1").arg(index.data().toInt()); + } + else { + if (c->type() & Ctrl::LOG) { + double f = index.data().toDouble(); + if (f <= -1000.0f) + text = tr("off"); + else + text = QString("%1 dB").arg(f * 20.0); + } + else { + text = QString("%1").arg(index.data().toDouble()); + } + } + } + break; + } + + QStyleOptionViewItemV2 opt = setOptions(index, option); + const QStyleOptionViewItemV2 *v2 = qstyleoption_cast(&option); + opt.features = v2 ? v2->features : QStyleOptionViewItemV2::ViewItemFeatures(QStyleOptionViewItemV2::None); + + painter->save(); + QVariant value; + QRect displayRect; + displayRect = option.rect; // textRectangle(painter, d->textLayoutBounds(opt), opt.font, text); + + QRect checkRect; + Qt::CheckState checkState = Qt::Unchecked; + value = index.data(Qt::CheckStateRole); + if (value.isValid()) { + checkState = static_cast(value.toInt()); + checkRect = check(opt, opt.rect, value); + } + + drawBackground(painter, opt, index); + drawCheck(painter, opt, checkRect, checkState); + drawDisplay(painter, opt, displayRect, text); + drawFocus(painter, opt, text.isEmpty() ? QRect() : displayRect); + painter->restore(); + } + + diff --git a/attic/muse_qt4_evolution/muse/liste/ctrllistedit.h b/attic/muse_qt4_evolution/muse/liste/ctrllistedit.h new file mode 100644 index 00000000..75ed6008 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/liste/ctrllistedit.h @@ -0,0 +1,96 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __CTRLLISTEDIT_H__ +#define __CTRLLISTEDIT_H__ + +#include "al/pos.h" +#include "listedit.h" +#include "ui_ctrllistedit.h" + +//--------------------------------------------------------- +// CtrlDelegate +//--------------------------------------------------------- + +class CtrlDelegate : public QItemDelegate { + Q_OBJECT + + virtual QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem&, + const QModelIndex& index) const; + virtual void setEditorData(QWidget* editor, const QModelIndex&) const; + virtual void setModelData(QWidget* editor, QAbstractItemModel*, + const QModelIndex&) const; + void paint(QPainter*, const QStyleOptionViewItem&, + const QModelIndex&) const; + + public: + CtrlDelegate(QObject* parent = 0); + }; + +//--------------------------------------------------------- +// EscapeFilter +//--------------------------------------------------------- + +class EscapeFilter : public QObject { + Q_OBJECT + protected: + bool eventFilter(QObject*, QEvent*); + public: + EscapeFilter(QObject* parent = 0): QObject(parent) {} + }; + +//--------------------------------------------------------- +// CtrlListEditor +//--------------------------------------------------------- + +class CtrlListEditor : public ListWidget { + Q_OBJECT + + Ui::CtrlListEdit le; + Track* track; + Ctrl* c; + bool updateListDisabled; + ListEdit* listEdit; + + void updateList(); + + private slots: + void controllerChanged(int id); + void itemActivated(QTreeWidgetItem*,int); + void itemChanged(QTreeWidgetItem*,int); + void currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*); + void insertClicked(); + void deleteClicked(); + void nameEdited(const QString&); + void minValChanged(double); + void maxValChanged(double); + void defaultValChanged(double); + + public: + CtrlListEditor(ListEdit*, QWidget* parent = 0); + virtual void setup(const ListType&); + void sendEscape(); + Ctrl* ctrl() const { return c; } + Track* getTrack() const { return track; } + enum { TICK_COL, TIME_COL, VAL_COL }; + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/liste/ctrllistedit.ui b/attic/muse_qt4_evolution/muse/liste/ctrllistedit.ui new file mode 100644 index 00000000..27389b7c --- /dev/null +++ b/attic/muse_qt4_evolution/muse/liste/ctrllistedit.ui @@ -0,0 +1,334 @@ + + CtrlListEdit + + + + 0 + 0 + 400 + 341 + + + + Form + + + + 9 + + + 6 + + + + + 0 + + + 6 + + + + + + 5 + 0 + 0 + 0 + + + + + 75 + true + + + + Controller: + + + + + + + + + + + + 0 + + + 6 + + + + + + 0 + 0 + 0 + 0 + + + + Id: + + + + + + + true + + + + + + + move with part + + + + + + + + + 0 + + + 6 + + + + + false + + + + 5 + 0 + 0 + 0 + + + + discrete + + + + + + + false + + + + 5 + 0 + 0 + 0 + + + + logarithmic + + + + + + + false + + + + 5 + 0 + 0 + 0 + + + + float + + + + + + + + + 0 + + + 6 + + + + + + 5 + 0 + 0 + 0 + + + + min: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 5 + 0 + 0 + 0 + + + + + + + + + 5 + 0 + 0 + 0 + + + + max: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 5 + 0 + 0 + 0 + + + + + + + + + 5 + 0 + 0 + 0 + + + + default: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 5 + 0 + 0 + 0 + + + + + + + + + + true + + + 0 + + + false + + + true + + + false + + + + Tick + + + + + Time + + + + + Value + + + + + + + + 0 + + + 6 + + + + + Delete + + + + + + + Insert + + + + + + + Qt::Horizontal + + + + 231 + 29 + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/muse/liste/ieventdialog.cpp b/attic/muse_qt4_evolution/muse/liste/ieventdialog.cpp new file mode 100644 index 00000000..a2914ffc --- /dev/null +++ b/attic/muse_qt4_evolution/muse/liste/ieventdialog.cpp @@ -0,0 +1,428 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2007 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include +#include +#include "ieventdialog.h" + +InsertEventDialog::InsertEventDialog(const Pos& time, Part* part, Event* ev, + QWidget* parent, Qt::WindowFlags f) + : QDialog(parent, f) { + setWindowTitle("Insert Event Dialog"); + + _selectedType = -1; + + + _part = part; + + _lastDir = QDir::currentPath(); + + _mainLayout = new QGridLayout(parent); + //event type + QLabel* eventTypeLabel = new QLabel("Event Type", parent); + _mainLayout->addWidget(eventTypeLabel, 0, 0); + _eventTypeComboBox = new QComboBox(parent); + for(unsigned i = 0; i < IED_TypeCount; i++) { + _typeWidget.push_back(new QWidget(parent)); + QGridLayout* tLayout = new QGridLayout(_typeWidget[i]); + if(i == IED_Note) { + _eventTypeComboBox->addItem(NoteSTR); + //pitch + QLabel* pitchLabel = new QLabel("Pitch", _typeWidget[i]); + tLayout->addWidget(pitchLabel, 0, 0); + /*_noteLabel = new QLabel("C4", _typeWidget[i]); + _noteLabel->setFrameShape(QFrame::Panel); + _noteLabel->setFrameShadow(QFrame::Sunken); + tLayout->addWidget(_noteLabel, 0, 1);*/ + _pitchSpinBox = new QSpinBox(_typeWidget[i]); + _pitchSpinBox->setMaximum(127); + _pitchSpinBox->setMinimum(0); + _pitchSpinBox->setValue(ev && ev->type()==Note?ev->pitch():72/*C4*/); + tLayout->addWidget(_pitchSpinBox, 0, 1); + //Velocity + QLabel* velocityLabel = new QLabel("Velocity", _typeWidget[i]); + tLayout->addWidget(velocityLabel, 1, 0); + _velocitySpinBox = new QSpinBox(_typeWidget[i]); + _velocitySpinBox->setMaximum(127); + _velocitySpinBox->setMinimum(0); + _velocitySpinBox->setValue(ev && ev->type()==Note?ev->velo():70); + tLayout->addWidget(_velocitySpinBox, 1, 1); + //Velocity Off + /*QLabel* veloOffLabel = new QLabel("Velocity Off", _typeWidget[i]); + tLayout->addWidget(veloOffLabel, 2, 0); + _veloOffSpinBox = new QSpinBox(_typeWidget[i]); + _veloOffSpinBox->setMaximum(127); + _veloOffSpinBox->setMinimum(0); + _veloOffSpinBox->setValue(0); + tLayout->addWidget(_veloOffSpinBox, 2, 1);*/ + //Length + QLabel* lengthLabel = new QLabel("Length", _typeWidget[i]); + tLayout->addWidget(lengthLabel, 2, 0); + _lengthSpinBox = new QSpinBox(_typeWidget[i]); + _lengthSpinBox->setMaximum(32768); + _lengthSpinBox->setMinimum(1); + _lengthSpinBox->setValue(ev && ev->type()==Note?ev->lenTick():384); + tLayout->addWidget(_lengthSpinBox, 2, 1); + } + else if(i == IED_ProgramChange) { + _eventTypeComboBox->addItem(ProgramChangeSTR); + //TODO + QLabel* programChangeEventTODO = + new QLabel("TODO : Program change event", _typeWidget[i]); + tLayout->addWidget(programChangeEventTODO, 0, 0, 1, 2); + } + else if(i == IED_ControlChange) { + _eventTypeComboBox->addItem(ControlChangeSTR); + //TODO + QLabel* controlChangeEventTODO = + new QLabel("TODO : Control change event", _typeWidget[i]); + tLayout->addWidget(controlChangeEventTODO, 0, 0, 1, 2); + } + else if(i == IED_Sysex) { + _eventTypeComboBox->addItem(SysexSTR); + //number of sysex + QLabel* numOfSysexLabel = new QLabel("Number of Sysex", _typeWidget[i]); + tLayout->addWidget(numOfSysexLabel, 0, 0); + _sysexCountSpinBox = new QSpinBox(_typeWidget[i]); + _sysexCountSpinBox->setMaximum(1024); + _sysexCountSpinBox->setMinimum(1); + _sysexCountSpinBox->setValue(1); + tLayout->addWidget(_sysexCountSpinBox, 0, 1); + //current sysex + QLabel* curSysexLabel = new QLabel("Current Sysex", _typeWidget[i]); + tLayout->addWidget(curSysexLabel, 1, 0); + _curSysexSpinBox = new QSpinBox(_typeWidget[i]); + _curSysexSpinBox->setMaximum(0); + _curSysexSpinBox->setMinimum(0); + _curSysexSpinBox->setValue(0); + tLayout->addWidget(_curSysexSpinBox, 1, 1); + //select from the instrument + QPushButton* selectButton = new QPushButton("Select from instrument", + _typeWidget[i]); + tLayout->addWidget(selectButton, 2, 0, 1, 2); + //load + _loadButton = new QPushButton("Load...", _typeWidget[i]); + tLayout->addWidget(_loadButton, 3, 0); + //save + _saveButton = new QPushButton("Save...", _typeWidget[i]); + tLayout->addWidget(_saveButton, 3, 1); + //length + QLabel* lengthLabel = new QLabel("Length", _typeWidget[i]); + tLayout->addWidget(lengthLabel, 4, 0); + _lengthIntLabel = new QLabel(ev && ev->type()==Sysex? + QString::number(ev->dataLen()):"0", + _typeWidget[i]); + tLayout->addWidget(_lengthIntLabel, 4, 1); + //text edit + _sysexTextEdit = new QTextEdit(_typeWidget[i]); + _sysexCursorPos = 0; + _dataSysex.push_back(ev && ev->type()==Sysex? + QByteArray((const char*)ev->data(), ev->dataLen()) + :QByteArray()); + _lengthIntLabel->setText(QString::number(sysexLength())); + _dataSysexStr.push_back(ev && ev->type()==Sysex? + charArray2Str((const char*)ev->data(), + ev->dataLen()): + "F0 F7"); + tLayout->addWidget(_sysexTextEdit, 5, 0, 3, 2); + setSysexTextEdit(); + QString HEX = "(?!F7)([A-F]|\\d){1,2}"; + QString SRE = QString("^F0(\\s+)(") + HEX + QString("(\\s+))*F7$"); + _hexRegExp = new QRegExp(SRE, Qt::CaseInsensitive); + } + tLayout->setMargin(0); + _typeWidget[i]->setLayout(tLayout); + _mainLayout->addWidget(_typeWidget[i], 2, 0, 1, 2); + } + _mainLayout->addWidget(_eventTypeComboBox, 0, 1); + //time + QLabel* timeLabel = new QLabel("Time", parent); + _mainLayout->addWidget(timeLabel, 1, 0); + _timePosEdit = new PosEdit(parent); + _timePosEdit->setValue(time); + _mainLayout->addWidget(_timePosEdit, 1, 1); + //Ok, cancel + QDialogButtonBox* OkCancelBox = + new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, + Qt::Horizontal, parent); + _mainLayout->addWidget(OkCancelBox, 3, 0, 1, 2); + + if(ev) + if(ev->type()==Note) _eventTypeComboBox->setCurrentIndex(IED_Note); + else if(ev->type()==Sysex) _eventTypeComboBox->setCurrentIndex(IED_Sysex); + else _eventTypeComboBox->setCurrentIndex(IED_Note); + else _eventTypeComboBox->setCurrentIndex(IED_Note); + + updateType(_eventTypeComboBox->currentIndex()); + + setLayout(_mainLayout); + + //connection + connect(_sysexTextEdit, SIGNAL(textChanged()), this, + SLOT(updateSysexTextEdit())); + connect(_sysexTextEdit, SIGNAL(cursorPositionChanged()), this, + SLOT(updateSysexCursor())); + connect(_eventTypeComboBox, SIGNAL(currentIndexChanged(int)), this, + SLOT(updateType(int))); + connect(_sysexCountSpinBox, SIGNAL(valueChanged(int)), this, + SLOT(updateSysexCount(int))); + connect(_curSysexSpinBox, SIGNAL(valueChanged(int)), this, + SLOT(updateCurSysexSpinBox(int))); + connect(_loadButton, SIGNAL(clicked()), this, SLOT(updateSysexLoad())); + connect(_saveButton, SIGNAL(clicked()), this, SLOT(updateSysexSave())); + connect(OkCancelBox, SIGNAL(accepted()), this, SLOT(accept())); + connect(OkCancelBox, SIGNAL(rejected()), this, SLOT(reject())); +} + +InsertEventDialog::~InsertEventDialog() { +} + +EventList* InsertEventDialog::elResult() { + unsigned evTick; + evTick = (unsigned)IED_MAX(0, (int)_timePosEdit->pos().tick() + - (int)_part->tick()); + Pos evPos(evTick); + EventList* res = new EventList; + + int curType = _eventTypeComboBox->currentIndex(); + + if(curType == IED_Note) { + Event evNote(Note); + evNote.setPos(evPos); + evNote.setPitch(_pitchSpinBox->value()); + evNote.setVelo(_velocitySpinBox->value()); + //evNote.setVeloOff(_veloOffSpinBox->value()); + evNote.setLenTick(_lengthSpinBox->value()); + res->add(evNote); + return res; + } + else if(curType == IED_ProgramChange) { + //TODO + return NULL; + } + else if(curType == IED_ControlChange) { + //TODO + return NULL; + } + else if(curType == IED_Sysex) { + for(unsigned i = 0; (int)i < _sysexCountSpinBox->value(); i++) { + Event evSysex(Sysex); + evSysex.setPos(evPos); + evSysex.setData((const unsigned char*) _dataSysex[i].data(), + _dataSysex[i].size()); + res->add(evSysex); + } + return res; + } + else return NULL; +} + +int InsertEventDialog::sysexLength() { + return _dataSysex[_curSysexSpinBox->value()].size(); +} +QString InsertEventDialog::charArray2Str(const char* s, int length) { + return ByteArray2Str(QByteArray(s, length)); +} +QString InsertEventDialog::ByteArray2Str(const QByteArray& ba) { + QString res = "F0 "; + for(int i = 0; i < ba.size(); i++) { + res += QString::number((unsigned char)ba.at(i), 16); + res += " "; + } + res += "F7"; + return res.toUpper(); +} +QByteArray InsertEventDialog::Str2ByteArray(const QString& s) { + QByteArray ba; + QString simpli = s.simplified(); + QStringList sl = simpli.split(" "); + bool ok; + for(int i = 1; i < sl.size() - 1; i++) {//i=1 and until size-1 to skip F0, F7 + ba.push_back(sl[i].toInt(&ok, 16)); + } + return ba; +} +char* InsertEventDialog::Str2CharArray(const QString& s) { + return Str2ByteArray(s).data(); +} + +void InsertEventDialog::setSysexTextEdit() { + QString s = _dataSysexStr[_curSysexSpinBox->value()].toUpper(); + _sysexTextEdit->blockSignals(true); + //print in gray F0 + _sysexTextEdit->setTextColor(Qt::darkGray); + _sysexTextEdit->setPlainText(s.left(2)); + //move cursor at the end + QTextCursor tc1(_sysexTextEdit->document()); + tc1.movePosition(QTextCursor::End); + _sysexTextEdit->setTextCursor(tc1); + //print in black the core + _sysexTextEdit->setTextColor(Qt::black); + _sysexTextEdit->insertPlainText(s.mid(2, s.size()-4)); + //move cursor at the end + QTextCursor tc2(_sysexTextEdit->document()); + tc2.movePosition(QTextCursor::End); + _sysexTextEdit->setTextCursor(tc2); + //print in gray F7 + _sysexTextEdit->setTextColor(Qt::darkGray); + _sysexTextEdit->insertPlainText(s.right(2)); + //relocate cursor + QTextCursor tc(_sysexTextEdit->document()); + tc.setPosition(_sysexCursorPos); + _sysexTextEdit->setTextCursor(tc); + //update length label + _lengthIntLabel->setText(QString::number(sysexLength())); + + _sysexTextEdit->blockSignals(false); +} + +//SLOTS +void InsertEventDialog::updateSysexTextEdit() { + int cur = _curSysexSpinBox->value(); + int curCursor = _sysexTextEdit->textCursor().position(); + QString data = _sysexTextEdit->toPlainText(); + bool correctInput = _hexRegExp->exactMatch(data); + + if(correctInput) { + _dataSysexStr[cur] = data; + _sysexCursorPos = curCursor; + } + + //display text, relocate cursor and update length + setSysexTextEdit(); + //update _dataSysex + _dataSysex[cur] = Str2ByteArray(_dataSysexStr[cur]); +} +void InsertEventDialog::updateSysexCursor() { + if(_dataSysexStr[_curSysexSpinBox->value()] + == _sysexTextEdit->toPlainText()) //only if the text hasn't changed + _sysexCursorPos = _sysexTextEdit->textCursor().position(); +} +void InsertEventDialog::updateSysexCount(int c) { + while((int)_dataSysexStr.size() < c) { + _dataSysexStr.push_back(QString("F0 F7")); + QByteArray ba; + _dataSysex.push_back(ba); + } + if(c <= _curSysexSpinBox->value()) _curSysexSpinBox->setValue(c-1); + _curSysexSpinBox->setMaximum(c-1); +} +void InsertEventDialog::updateCurSysexSpinBox(int /*c*/) { + setSysexTextEdit(); +} +void InsertEventDialog::updateSysexLoad() { + QByteArray ba; + QString fileName = + QFileDialog::getOpenFileName(this, + tr("Load Sysex dialog"), + _lastDir, + QString("*.syx;; *")); + if(!fileName.isEmpty()) { + QFileInfo fi(fileName); + _lastDir = fi.path(); + + QFile f(fileName); + if(f.open(QIODevice::ReadOnly)) { + ba = f.readAll(); + bool sysexStart = false; + int sysexCount = 0; + for(int i = 0; i < ba.size(); i++) { + if((unsigned char)ba.at(i) == 0xF0) { + sysexStart = true; + sysexCount++; + while((int)_dataSysex.size() < sysexCount) { + QByteArray tempba; + _dataSysex.push_back(tempba); + _dataSysexStr.push_back(QString("")); + } + _dataSysex[sysexCount-1].clear(); + } + else if((unsigned char)ba.at(i) == 0xF7) { + QByteArray endba(_dataSysex[sysexCount-1]); + sysexStart = false; + _dataSysexStr[sysexCount-1] = ByteArray2Str(endba); + } + else if(sysexStart) _dataSysex[sysexCount-1].push_back(ba.at(i)); + } + _sysexCountSpinBox->setValue(sysexCount); + _curSysexSpinBox->setValue(0); + updateCurSysexSpinBox(0); + //Message dialog + if(sysexCount > 0) { + QMessageBox::information(this, tr("Sysex loaded"), + tr("MusE has successfully detected" + " and loaded ") + + QString::number(sysexCount) + + tr(" sysex messages.")); + } + else { + QMessageBox::information(this, tr("No sysex"), + tr("No sysex in this file")); + } + } + else { + QMessageBox::critical(0, + tr("Critical Error"), + tr("Cannot open file %1").arg(fileName)); + } + } +} +void InsertEventDialog::updateSysexSave() { + QString filename = + QFileDialog::getSaveFileName( + this, + tr("Save Sysex Dialog"), + _lastDir, + QString("*")); + if(!filename.isEmpty()) { + QFileInfo fi(filename); + _lastDir = fi.path(); + QFile f(filename); + if(f.open(QIODevice::WriteOnly)) { + for(unsigned i = 0; i < _dataSysex.size(); i++) { + qint64 wok; + wok = f.write(QByteArray(1, 0xF0)); + wok = f.write(_dataSysex[i]); + wok = f.write(QByteArray(1, 0xF7)); + if(wok == -1) { + QMessageBox::critical(0, + tr("Critical Error"), + tr("Cannot write the sysex number %1") + .arg(i)); + } + } + } + else { + QMessageBox::critical(0, + tr("Critical Error"), + tr("Cannot save file %1").arg(filename)); + } + } +} +void InsertEventDialog::updateType(int type) { + if(_selectedType != type) { + for(unsigned i = 0; i < IED_TypeCount; i++) { + if(type == (int)i) _typeWidget[i]->show(); + else _typeWidget[i]->hide(); + } + _selectedType = type; + resize(1, 1); + } +} diff --git a/attic/muse_qt4_evolution/muse/liste/ieventdialog.h b/attic/muse_qt4_evolution/muse/liste/ieventdialog.h new file mode 100644 index 00000000..7906f6c9 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/liste/ieventdialog.h @@ -0,0 +1,117 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2007 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __IEVENTDIALOG_H__ +#define __IEVENTDIALOG_H__ + +#include +#include +#include +#include +#include +#include +#include +#include "awl/posedit.h" +#include "midievent.h" +#include "al/pos.h" +#include "muse/event.h" +#include "muse/part.h" + +class QDialog; +using Awl::PosEdit; +using AL::Pos; + +#define NoteSTR "Note" +#define ProgramChangeSTR "Program change" +#define ControlChangeSTR "Control change" +#define SysexSTR "Sysex" + +#define IED_MAX(x, y) (x > y? x : y) + +class InsertEventDialog : public QDialog { + Q_OBJECT + + QGridLayout* _mainLayout; + std::vector _typeWidget; + int _selectedType; + + QString _lastDir; + + Part* _part; + + + //event type + QComboBox* _eventTypeComboBox; + + //time + PosEdit* _timePosEdit; + + //Note + QSpinBox* _pitchSpinBox; + QSpinBox* _velocitySpinBox; + QSpinBox* _veloOffSpinBox; + QSpinBox* _lengthSpinBox; + //QLabel* _noteLabel; + + //Sysex + QSpinBox* _sysexCountSpinBox; + QSpinBox* _curSysexSpinBox; + QLabel* _lengthIntLabel; + QTextEdit* _sysexTextEdit; + QRegExp* _hexRegExp; + int _sysexCursorPos; + QPushButton* _loadButton; + QPushButton* _saveButton; + std::vector _dataSysex; + std::vector _dataSysexStr; + + enum { + IED_Note, + IED_ProgramChange, + IED_ControlChange, + IED_Sysex, + IED_TypeCount }; + + int sysexLength(); //return the length of the current sysex + void setSysexTextEdit(); //set the display of sysexTextEdit + + public: + InsertEventDialog(const Pos& time, Part* part, Event* ev = NULL, + QWidget* parent = 0, Qt::WindowFlags f = 0); + ~InsertEventDialog(); + + EventList* elResult(); + + static QString charArray2Str(const char* s, int length); //add F0 and F7 + static QString ByteArray2Str(const QByteArray& ba); //add F0 and F7 + static QByteArray Str2ByteArray(const QString& s); //skip F0 and F7 + static char* Str2CharArray(const QString& s); + + private slots: + void updateSysexTextEdit(); + void updateSysexCursor(); + void updateSysexCount(int c); + void updateCurSysexSpinBox(int c); + void updateSysexLoad(); + void updateSysexSave(); + void updateType(int type); +}; + +#endif diff --git a/attic/muse_qt4_evolution/muse/liste/listedit.cpp b/attic/muse_qt4_evolution/muse/liste/listedit.cpp new file mode 100644 index 00000000..1f6138a8 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/liste/listedit.cpp @@ -0,0 +1,298 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "listedit.h" +#include "ctrllistedit.h" +#include "partlistedit.h" +#include "tracklistedit.h" +#include "song.h" +#include "part.h" +#include "ctrl.h" + +//--------------------------------------------------------- +// operator== +//--------------------------------------------------------- + +bool ListType::operator==(const ListType& t) const + { + return id == t.id && track == t.track + && part == t.part && (ctrl ? ctrl->id() == t.ctrl->id() : true); + } + +//--------------------------------------------------------- +// ListEdit +//--------------------------------------------------------- + +ListEdit::ListEdit(QWidget*) + : TopWin() + { + setWindowTitle(tr("MusE: List Edit")); + + QSplitter* split = new QSplitter; + split->setOpaqueResize(true); + setCentralWidget(split); + + list = new QTreeWidget; + list->setColumnCount(1); + list->setSelectionMode(QAbstractItemView::SingleSelection); + list->setRootIsDecorated(true); + list->setColumnCount(1); + list->setHeaderLabels(QStringList("Element")); + list->setSortingEnabled(false); + list->setUniformRowHeights(true); + split->addWidget(list); + + stack = new QStackedWidget; + split->addWidget(stack); + + ctrlPanel = new CtrlListEditor(this); + stack->addWidget(ctrlPanel); + partPanel = new PartListEditor(this); + stack->addWidget(partPanel); + trackPanel = new TrackListEditor(this); + stack->addWidget(trackPanel); + + connect(list, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), + SLOT(itemChanged(QTreeWidgetItem*,QTreeWidgetItem*))); + connect(list, SIGNAL(itemExpanded(QTreeWidgetItem*)), SLOT(itemExpanded(QTreeWidgetItem*))); + connect(list, SIGNAL(itemCollapsed(QTreeWidgetItem*)), SLOT(itemExpanded(QTreeWidgetItem*))); + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + list->resizeColumnToContents(0); + resize(900, 400); + } + +//--------------------------------------------------------- +// itemExpanded +//--------------------------------------------------------- + +void ListEdit::itemExpanded(QTreeWidgetItem*) + { + list->resizeColumnToContents(0); + } + +//--------------------------------------------------------- +// itemChanged +//--------------------------------------------------------- + +void ListEdit::itemChanged(QTreeWidgetItem* i, QTreeWidgetItem*) + { + if (i == 0) + return; + ListWidget* ew = ctrlPanel; + lt = i->data(0, Qt::UserRole).value(); + switch(lt.id) { + case LIST_TRACK: + ew = trackPanel; + break; + case LIST_PART: + ew = partPanel; + break; + case LIST_CTRL: + ew = ctrlPanel; + break; + default: + return; + } + ew->setup(lt); + stack->setCurrentWidget(ew); + } + +//--------------------------------------------------------- +// buildList +//--------------------------------------------------------- + +void ListEdit::buildList() + { + list->clear(); + TrackList* tl = song->tracks(); + int idx = 0; + ListType lt; + + for (iTrack i = tl->begin(); i != tl->end(); ++i,++idx) { + QTreeWidgetItem* item = new QTreeWidgetItem; + Track* t = *i; + item->setText(0, t->name()); + lt.id = LIST_TRACK; + lt.track = t; + item->setData(0, Qt::UserRole, QVariant::fromValue(lt)); + list->insertTopLevelItem(idx, item); + + PartList* pl = t->parts(); + if (!pl->empty()) { + QTreeWidgetItem* pitem = new QTreeWidgetItem(item); + pitem->setFlags(pitem->flags() & ~Qt::ItemIsSelectable); + pitem->setText(0, tr("Parts")); + lt.id = LIST_NONE; + pitem->setData(0, Qt::UserRole, QVariant::fromValue(lt)); + for (iPart pi = pl->begin(); pi != pl->end(); ++pi) { + lt.id = LIST_PART; + lt.part = pi->second; + QTreeWidgetItem* ppitem = new QTreeWidgetItem(pitem); + ppitem->setData(0, Qt::UserRole, QVariant::fromValue(lt)); + ppitem->setText(0, pi->second->name()); + } + } + + CtrlList* cl = t->controller(); + lt.part = 0; + if (!cl->empty()) { + QTreeWidgetItem* citem = new QTreeWidgetItem(item); + citem->setText(0, tr("Controller")); + citem->setFlags(citem->flags() & ~Qt::ItemIsSelectable); + lt.id = LIST_NONE; + citem->setData(0, Qt::UserRole, QVariant::fromValue(lt)); + for (iCtrl ci = cl->begin(); ci != cl->end(); ++ci) { + QTreeWidgetItem* ccitem = new QTreeWidgetItem(citem); + ccitem->setText(0, ci->second->name()); + lt.id = LIST_CTRL; + lt.ctrl = ci->second; + ccitem->setData(0, Qt::UserRole, QVariant::fromValue(lt)); + } + } + } + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void ListEdit::songChanged(int flags) + { + if (flags & (SC_TRACK_INSERTED | SC_TRACK_REMOVED | SC_PART_INSERTED + | SC_PART_REMOVED)) { + buildList(); + selectItem(); + } + } + +//--------------------------------------------------------- +// findItem +//--------------------------------------------------------- + +QTreeWidgetItem* ListEdit::findItem(const ListType& lt, QTreeWidgetItem* item) + { + if (item->flags() & Qt::ItemIsSelectable) { + if (lt == item->data(0, Qt::UserRole).value()) + return item; + } + for (int n = 0; n < item->childCount(); ++n) { + QTreeWidgetItem* i = findItem(lt, item->child(n)); + if (i) + return i; + } + return 0; + } + +//--------------------------------------------------------- +// selectItem +//--------------------------------------------------------- + +void ListEdit::selectItem(const AL::Pos& p, Track* track, Part* part, Ctrl* ctrl) + { + _pos = p; + stack->setCurrentWidget(ctrlPanel); + if (ctrl) + lt.id = LIST_CTRL; + else if (part) + lt.id = LIST_PART; + else if (track) + lt.id = LIST_TRACK; + else + return; + lt.track = track; + lt.part = part; + lt.ctrl = ctrl; + selectItem(); + } + +void ListEdit::selectItem() + { + stack->setCurrentWidget(ctrlPanel); + buildList(); + for (int i = 0;; ++i) { + QTreeWidgetItem* item = list->topLevelItem(i); + if (item == 0) { + printf("MusE::ListEdit: Element not found\n"); + break; + } + item = findItem(lt, item); + if (item) { + list->setItemExpanded(item, true); + list->setCurrentItem(item); + list->scrollToItem(item); + break; + } + } + } + +//--------------------------------------------------------- +// readStatus +//--------------------------------------------------------- + +void ListEdit::read(QDomNode node) + { + QString trackName; + Track* track = 0; + Part* part = 0; + Ctrl* ctrl = 0; + + for (node = node.firstChild(); !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + QString tag(e.tagName()); + if (tag == "Track") { + track = song->findTrack(e.text()); + if (track == 0) { + printf("MusE::ListEdit::read: track not found\n"); + } + } + else if (tag == "Pos") + _pos.read(node); + else if (tag == "Ctrl") { + int ctrlId = e.text().toInt(); + ctrl = track->getController(ctrlId); + if (ctrl == 0) { + printf("MusE::ListEdit::read: controller not found: track %p\n", track); + printf("MusE::ListEdit::read: controller %d not found\n", ctrlId); + return; + } + } + else + AL::readProperties(this, node); + } + selectItem(_pos, track, part, ctrl); + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void ListEdit::write(Xml& xml) const + { + xml.stag(metaObject()->className()); + xml.writeProperties(this); + + xml.tag("Track", lt.track->name()); + if (lt.ctrl) { + xml.tag("Ctrl", lt.ctrl->id()); + _pos.write(xml, "Pos"); + } + xml.etag(metaObject()->className()); + } + diff --git a/attic/muse_qt4_evolution/muse/liste/listedit.h b/attic/muse_qt4_evolution/muse/liste/listedit.h new file mode 100644 index 00000000..b49e61c3 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/liste/listedit.h @@ -0,0 +1,98 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __LISTEDIT_H__ +#define __LISTEDIT_H__ + +#include "al/pos.h" +#include "cobject.h" + +class Track; +class Part; +class Ctrl; +class CtrlListEditor; +class PartListEditor; +class TrackListEditor; + +//--------------------------------------------------------- +// ListType +//--------------------------------------------------------- + +enum { LIST_NONE, LIST_TRACK, LIST_PART, LIST_CTRL }; + +struct ListType { + int id; + Track* track; + Part* part; + Ctrl* ctrl; + + bool operator==(const ListType& t) const; + }; + +Q_DECLARE_METATYPE(struct ListType); + +//--------------------------------------------------------- +// ListWidget +// interface class +//--------------------------------------------------------- + +class ListWidget : public QWidget { + Q_OBJECT; + + public: + ListWidget(QWidget* = 0) {} + virtual void setup(const ListType&) = 0; + }; + +//--------------------------------------------------------- +// ListEdit +//--------------------------------------------------------- + +class ListEdit : public TopWin { + Q_OBJECT; + + ListType lt; + AL::Pos _pos; + + QStackedWidget* stack; + QTreeWidget* list; + CtrlListEditor* ctrlPanel; + PartListEditor* partPanel; + TrackListEditor* trackPanel; + + void buildList(); + QTreeWidgetItem* findItem(const ListType& lt, QTreeWidgetItem* item); + void selectItem(); + + private slots: + void itemChanged(QTreeWidgetItem*, QTreeWidgetItem*); + void itemExpanded(QTreeWidgetItem*); + void songChanged(int); + + public: + ListEdit(QWidget* parent = 0); + void selectItem(const AL::Pos&, Track*, Part*, Ctrl*); + virtual void read(QDomNode); + virtual void write(Xml& xml) const; + AL::Pos& pos() { return _pos; } + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/liste/partlistedit.cpp b/attic/muse_qt4_evolution/muse/liste/partlistedit.cpp new file mode 100644 index 00000000..d3db4de2 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/liste/partlistedit.cpp @@ -0,0 +1,434 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "partlistedit.h" +#include "track.h" +#include "song.h" +#include "al/pos.h" +#include "awl/posedit.h" +#include "part.h" + +//--------------------------------------------------------- +// PartListEditor +//--------------------------------------------------------- + +PartListEditor::PartListEditor(ListEdit* e, QWidget* parent) + : ListWidget(parent) + { + listEdit = e; + updateListDisabled = false; + curEvent = NULL; + QWidget* cew = new QWidget; + le.setupUi(cew); + QVBoxLayout* layout = new QVBoxLayout; + layout->addWidget(cew); + setLayout(layout); + + QFontMetrics fm(le.eventList->font()); + int zW = fm.width("0"); + le.eventList->setColumnWidth(TICK_COL, zW * 8); + le.eventList->setColumnWidth(TIME_COL, zW * 14); + EventDelegate* eventDelegate = new EventDelegate(this); + le.eventList->setItemDelegate(eventDelegate); + + part = 0; + + connect(le.eventList, SIGNAL(itemActivated(QTreeWidgetItem*, int)), + SLOT(itemActivated(QTreeWidgetItem*,int))); + connect(le.eventList, SIGNAL(itemChanged(QTreeWidgetItem*, int)), + SLOT(itemChanged(QTreeWidgetItem*, int))); + connect(le.eventList, + SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), + SLOT(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*))); + connect(le.insertButton, SIGNAL(clicked()), SLOT(insertClicked())); + connect(le.deleteButton, SIGNAL(clicked()), SLOT(deleteClicked())); + } + +//--------------------------------------------------------- +// getTrack +//--------------------------------------------------------- + +Track* PartListEditor::getTrack() const + { + return part->track(); + } + +//--------------------------------------------------------- +// setup +//--------------------------------------------------------- + +void PartListEditor::setup(const ListType& lt) + { + part = lt.part; + le.partName->setText(part->name()); + updateList(); + } + +//--------------------------------------------------------- +// updateList +//--------------------------------------------------------- + +void PartListEditor::updateList() { + if(updateListDisabled) { + updateListDisabled = false; + return; + } + EventList* el = part->events(); + int idx = 0; + le.eventList->clear(); + for (iEvent i = el->begin(); i != el->end(); ++i, ++idx) { + Event e = i->second; + QTreeWidgetItem* item = new QTreeWidgetItem; + item->setData(TICK_COL, Qt::TextAlignmentRole, + int(Qt::AlignRight | Qt::AlignVCenter)); + item->setData(TIME_COL, Qt::TextAlignmentRole, + int(Qt::AlignRight | Qt::AlignVCenter)); + item->setData(TICK_COL, Qt::DisplayRole, e.tick() + part->tick()); + item->setData(TIME_COL, Qt::DisplayRole, e.tick() + part->tick()); + item->setData(TYPE_COL, Qt::TextAlignmentRole, + int(Qt::AlignRight | Qt::AlignVCenter)); + item->setData(TYPE_COL, Qt::DisplayRole, e.eventTypeName()); + item->setData(A_COL, Qt::TextAlignmentRole, + int(Qt::AlignHCenter | Qt::AlignVCenter)); + if(e.type()!=Sysex) item->setData(A_COL, Qt::DisplayRole, e.dataA()); + item->setData(B_COL, Qt::TextAlignmentRole, + int(Qt::AlignHCenter | Qt::AlignVCenter)); + if(e.type()!=Sysex) item->setData(B_COL, Qt::DisplayRole, e.dataB()); + item->setData(C_COL, Qt::TextAlignmentRole, + int(Qt::AlignHCenter | Qt::AlignVCenter)); + if(e.type()!=Sysex) item->setData(C_COL, Qt::DisplayRole, e.dataC()); + item->setData(LEN_COL, Qt::TextAlignmentRole, + int(Qt::AlignHCenter | Qt::AlignVCenter)); + item->setData(LEN_COL, Qt::DisplayRole, + (e.type()==Sysex?e.dataLen():e.lenTick())); + QString dataStr; + if(e.type()==Sysex) + dataStr = InsertEventDialog::charArray2Str((const char*)e.data(), + e.dataLen()); + else dataStr = QString(""); + item->setText(DATA_COL, dataStr); + le.eventList->insertTopLevelItem(idx, item); + } +} + +//--------------------------------------------------------- +// item2Event +//--------------------------------------------------------- + +Event* PartListEditor::item2Event(QTreeWidgetItem* item, int time_col) { + if(item) { + int tick; + if(time_col == TICK_COL) + tick = item->data(TICK_COL, Qt::DisplayRole).toInt(); + else tick = item->data(TIME_COL, Qt::DisplayRole).toInt(); + int evTick = (unsigned)IED_MAX(0, (int)tick - (int)part->tick()); + QString type = item->text(TYPE_COL); + if(type == "Note") { + Event* ev = new Event(Note); + int pitch = item->data(A_COL, Qt::DisplayRole).toInt(); + int velo = item->data(B_COL, Qt::DisplayRole).toInt(); + int len = item->data(LEN_COL, Qt::DisplayRole).toInt(); + ev->setTick(evTick); + ev->setPitch(pitch); + ev->setVelo(velo); + ev->setLenTick(len); + return ev; + } + else if(type == "Sysex") { + Event* ev = new Event(Sysex); + QString dataStr = item->text(DATA_COL); + char* data = InsertEventDialog::Str2CharArray(dataStr); + int len = item->data(LEN_COL, Qt::DisplayRole).toInt(); + ev->setTick(evTick); + ev->setData((const unsigned char*)data, len); + return ev; + } + else return NULL; + } + else return NULL; +} + +//--------------------------------------------------------- +// itemActivated +//--------------------------------------------------------- + +void PartListEditor::itemActivated(QTreeWidgetItem* item, int column) { + AL::Pos time; + int tick = item->data(TIME_COL, Qt::DisplayRole).toInt(); + time.setTick(tick); + Event* ev = item2Event(item); + EventList* el; + + if(column == TYPE_COL) { + InsertEventDialog dialog(time, part, ev, this); + if(dialog.exec() == QDialog::Accepted) { + el = dialog.elResult(); + if(el) { + if(ev) song->deleteEvent(*ev, part); + for(iEvent ie = el->begin(); ie != el->end(); ie++) { + Event e = ie->second; + song->addEvent(e, part); + } + } + } + } + else if((column==A_COL || column==B_COL || column==C_COL || column==LEN_COL) + && ev && ev->type()==Sysex) { + //DO NOTHING + } + else if(column == DATA_COL) { + if(ev && ev->type()==Sysex) { + InsertEventDialog dialog(time, part, ev, this); + if(dialog.exec() == QDialog::Accepted) { + el = dialog.elResult(); + if(el) { + if(ev) song->deleteEvent(*ev, part); + for(iEvent ie = el->begin(); ie != el->end(); ie++) { + Event e = ie->second; + song->addEvent(e, part); + } + } + } + } + } + else le.eventList->openPersistentEditor(item, column); +} + +//--------------------------------------------------------- +// itemChanged +//--------------------------------------------------------- + +void PartListEditor::itemChanged(QTreeWidgetItem* item, int column) { + updateListDisabled = (column != TICK_COL && column != TIME_COL); + if(item) { + Event* newEvent = item2Event(item, column); + song->changeEvent(*curEvent, *newEvent, part); + } +} + +//--------------------------------------------------------- +// currentItemChanged +//--------------------------------------------------------- + +void PartListEditor::currentItemChanged(QTreeWidgetItem* cur, + QTreeWidgetItem* pre) { + if(pre) { + le.eventList->closePersistentEditor(pre, TICK_COL); + le.eventList->closePersistentEditor(pre, TIME_COL); + le.eventList->closePersistentEditor(pre, A_COL); + le.eventList->closePersistentEditor(pre, B_COL); + le.eventList->closePersistentEditor(pre, C_COL); + le.eventList->closePersistentEditor(pre, LEN_COL); + } + if(cur) { + curEvent = item2Event(cur); + } +} + +//--------------------------------------------------------- +// insertClicked +// insert one tick before current value +//--------------------------------------------------------- + +void PartListEditor::insertClicked() + { + QTreeWidgetItem* cur = le.eventList->currentItem(); + AL::Pos time; + if(cur) { + int tick = cur->data(TIME_COL, Qt::DisplayRole).toInt(); + time.setTick(tick); + } + + EventList* el; + + InsertEventDialog dialog(time, part, NULL, this); + if(dialog.exec() == QDialog::Accepted) { + el = dialog.elResult(); + if(el) { + for(iEvent ie = el->begin(); ie != el->end(); ie++) { + Event e = ie->second; + song->addEvent(e, part); + } + } + } + } + +//--------------------------------------------------------- +// deleteClicked +//--------------------------------------------------------- + +void PartListEditor::deleteClicked() + { + QTreeWidgetItem* cur = le.eventList->currentItem(); + if (cur == 0) + return; + Event* ev = item2Event(cur); + song->deleteEvent(*ev, part); + } + +//--------------------------------------------------------- +// EventDelegate +//--------------------------------------------------------- + +EventDelegate::EventDelegate(QObject* parent) + : QItemDelegate(parent) + { + } + +//--------------------------------------------------------- +// createEditor +//--------------------------------------------------------- + +QWidget* EventDelegate::createEditor(QWidget* pw, + const QStyleOptionViewItem& option, const QModelIndex& index) const + { + switch(index.column()) { + case PartListEditor::TICK_COL: + break; + case PartListEditor::TIME_COL: + return new Awl::PosEdit(pw); + case PartListEditor::TYPE_COL: + case PartListEditor::A_COL: + case PartListEditor::B_COL: + case PartListEditor::C_COL: + case PartListEditor::LEN_COL: + case PartListEditor::DATA_COL: + break; + } + return QItemDelegate::createEditor(pw, option, index); + } + +//--------------------------------------------------------- +// setEditorData +//--------------------------------------------------------- + +void EventDelegate::setEditorData(QWidget* editor, + const QModelIndex& index) const + { + switch(index.column()) { + case PartListEditor::TICK_COL: + break; + case PartListEditor::TIME_COL: + { + Awl::PosEdit* pe = static_cast(editor); + pe->setValue(AL::Pos(index.data().toInt())); + } + return; + case PartListEditor::TYPE_COL: + case PartListEditor::A_COL: + case PartListEditor::B_COL: + case PartListEditor::C_COL: + case PartListEditor::LEN_COL: + case PartListEditor::DATA_COL: + break; + } + QItemDelegate::setEditorData(editor, index); + } + +//--------------------------------------------------------- +// setModelData +//--------------------------------------------------------- + +void EventDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, + const QModelIndex& index) const + { + switch(index.column()) { + case PartListEditor::TICK_COL: + break; + case PartListEditor::TIME_COL: + { + Awl::PosEdit* pe = static_cast(editor); + model->setData(index, pe->pos().tick(), Qt::DisplayRole); + } + return; + case PartListEditor::TYPE_COL: + case PartListEditor::A_COL: + case PartListEditor::B_COL: + case PartListEditor::C_COL: + case PartListEditor::LEN_COL: + case PartListEditor::DATA_COL: + break; + } + QItemDelegate::setModelData(editor, model, index); + } + +//--------------------------------------------------------- +// paint +//--------------------------------------------------------- + +void EventDelegate::paint(QPainter* painter, + const QStyleOptionViewItem& option, const QModelIndex& index) const + { + QString text; + PartListEditor* ce = static_cast(parent()); + + switch(index.column()) { + case PartListEditor::TICK_COL: + { + Track* track = ce->getTrack(); + AL::Pos pos(index.data().toInt(), track->timeType()); + text = QString("%1").arg(pos.tick()); + } + break; + case PartListEditor::TIME_COL: + { + Track* track = ce->getTrack(); + AL::Pos pos(index.data().toInt(), track->timeType()); + int measure, beat, tick; + pos.mbt(&measure, &beat, &tick); + text.sprintf("%04d.%02d.%03u", measure+1, beat+1, tick); + } + break; + case PartListEditor::TYPE_COL: + case PartListEditor::A_COL: + case PartListEditor::B_COL: + case PartListEditor::C_COL: + case PartListEditor::LEN_COL: + case PartListEditor::DATA_COL: + QItemDelegate::paint(painter, option, index); + return; + } + + QStyleOptionViewItemV2 opt = setOptions(index, option); + const QStyleOptionViewItemV2 *v2 = qstyleoption_cast(&option); + opt.features = v2 ? v2->features : QStyleOptionViewItemV2::ViewItemFeatures(QStyleOptionViewItemV2::None); + + painter->save(); + QVariant value; + QRect displayRect; + displayRect = option.rect; // textRectangle(painter, d->textLayoutBounds(opt), opt.font, text); + + QRect checkRect; + Qt::CheckState checkState = Qt::Unchecked; + value = index.data(Qt::CheckStateRole); + if (value.isValid()) { + checkState = static_cast(value.toInt()); + checkRect = check(opt, opt.rect, value); + } + + drawBackground(painter, opt, index); + drawCheck(painter, opt, checkRect, checkState); + drawDisplay(painter, opt, displayRect, text); + drawFocus(painter, opt, text.isEmpty() ? QRect() : displayRect); + painter->restore(); + } + + + diff --git a/attic/muse_qt4_evolution/muse/liste/partlistedit.h b/attic/muse_qt4_evolution/muse/liste/partlistedit.h new file mode 100644 index 00000000..10eda46a --- /dev/null +++ b/attic/muse_qt4_evolution/muse/liste/partlistedit.h @@ -0,0 +1,79 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __PARTLISTEDIT_H__ +#define __PARTLISTEDIT_H__ + +#include "al/pos.h" +#include "ieventdialog.h" +#include "listedit.h" +#include "ui_partlistedit.h" + +//--------------------------------------------------------- +// EventDelegate +//--------------------------------------------------------- + +class EventDelegate : public QItemDelegate { + Q_OBJECT + + virtual QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem&, + const QModelIndex& index) const; + virtual void setEditorData(QWidget* editor, const QModelIndex&) const; + virtual void setModelData(QWidget* editor, QAbstractItemModel*, + const QModelIndex&) const; + void paint(QPainter*, const QStyleOptionViewItem&, + const QModelIndex&) const; + + public: + EventDelegate(QObject* parent = 0); + }; + +//--------------------------------------------------------- +// PartListEditor +//--------------------------------------------------------- + +class PartListEditor : public ListWidget { + Q_OBJECT + + ListEdit* listEdit; + Ui::PartListEdit le; + Part* part; + Event* curEvent; + bool updateListDisabled; + + void updateList(); + Event* item2Event(QTreeWidgetItem* item, int time_col = TICK_COL); + + private slots: + void itemActivated(QTreeWidgetItem* item, int column); + void itemChanged(QTreeWidgetItem* item, int column); + void currentItemChanged(QTreeWidgetItem* cur, QTreeWidgetItem* pre); + void insertClicked(); + void deleteClicked(); + + public: + PartListEditor(ListEdit*, QWidget* parent = 0); + virtual void setup(const ListType&); + Track* getTrack() const; + enum { TICK_COL, TIME_COL, TYPE_COL, A_COL, B_COL, C_COL, LEN_COL, DATA_COL}; + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/liste/partlistedit.ui b/attic/muse_qt4_evolution/muse/liste/partlistedit.ui new file mode 100644 index 00000000..c575ef03 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/liste/partlistedit.ui @@ -0,0 +1,166 @@ + + PartListEdit + + + + 0 + 0 + 400 + 341 + + + + Form + + + + 9 + + + 6 + + + + + 0 + + + 6 + + + + + + 5 + 0 + 0 + 0 + + + + + 75 + true + + + + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:600; font-style:normal; text-decoration:none;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:400;">Part:</span></p></body></html> + + + + + + + + + + + + Eventlist: + + + + + + + true + + + 0 + + + false + + + true + + + false + + + + Tick + + + + + Time + + + + + Type + + + + + Val A + + + + + Val B + + + + + Val C + + + + + Length + + + + + Data + + + + + + + + 0 + + + 6 + + + + + Delete + + + + + + + Insert + + + + + + + Qt::Horizontal + + + + 231 + 29 + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/muse/liste/tracklistedit.cpp b/attic/muse_qt4_evolution/muse/liste/tracklistedit.cpp new file mode 100644 index 00000000..24fc4722 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/liste/tracklistedit.cpp @@ -0,0 +1,65 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "tracklistedit.h" +#include "track.h" +#include "song.h" +#include "al/pos.h" +#include "awl/posedit.h" + +//--------------------------------------------------------- +// TrackListEditor +//--------------------------------------------------------- + +TrackListEditor::TrackListEditor(ListEdit* e, QWidget* parent) + : ListWidget(parent) + { + listEdit = e; + QWidget* cew = new QWidget; + le.setupUi(cew); + QVBoxLayout* layout = new QVBoxLayout; + layout->addWidget(cew); + setLayout(layout); + + QFontMetrics fm(le.partList->font()); + int zW = fm.width("0"); + le.partList->setColumnWidth(TICK_COL, zW * 8); + le.partList->setColumnWidth(TIME_COL, zW * 14); + track = 0; + } + +//--------------------------------------------------------- +// setup +//--------------------------------------------------------- + +void TrackListEditor::setup(const ListType& lt) + { + track = lt.track; + le.trackName->setText(track->name()); + updateList(); + } + +//--------------------------------------------------------- +// updateList +//--------------------------------------------------------- + +void TrackListEditor::updateList() + { + } diff --git a/attic/muse_qt4_evolution/muse/liste/tracklistedit.h b/attic/muse_qt4_evolution/muse/liste/tracklistedit.h new file mode 100644 index 00000000..7d4b57f7 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/liste/tracklistedit.h @@ -0,0 +1,50 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __TRACKLISTEDIT_H__ +#define __TRACKLISTEDIT_H__ + +#include "al/pos.h" +#include "listedit.h" +#include "ui_tracklistedit.h" + +//--------------------------------------------------------- +// TrackListEditor +//--------------------------------------------------------- + +class TrackListEditor : public ListWidget { + Q_OBJECT + + ListEdit* listEdit; + Ui::TrackListEdit le; + Track* track; + + void updateList(); + + private slots: + + public: + TrackListEditor(ListEdit*, QWidget* parent = 0); + virtual void setup(const ListType&); + enum { TICK_COL, TIME_COL }; + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/liste/tracklistedit.ui b/attic/muse_qt4_evolution/muse/liste/tracklistedit.ui new file mode 100644 index 00000000..dfddf1c7 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/liste/tracklistedit.ui @@ -0,0 +1,146 @@ + + TrackListEdit + + + + 0 + 0 + 400 + 341 + + + + Form + + + + 9 + + + 6 + + + + + 0 + + + 6 + + + + + + 5 + 0 + 0 + 0 + + + + + 75 + true + + + + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:600; font-style:normal; text-decoration:none;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:400;">Track:</span></p></body></html> + + + + + + + + + + + + Partlist: + + + + + + + true + + + 0 + + + false + + + true + + + false + + + + Tick + + + + + Time + + + + + Len + + + + + Name + + + + + + + + 0 + + + 6 + + + + + Delete + + + + + + + Insert + + + + + + + Qt::Horizontal + + + + 231 + 29 + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/muse/marker/CMakeLists.txt b/attic/muse_qt4_evolution/muse/marker/CMakeLists.txt new file mode 100644 index 00000000..d031533c --- /dev/null +++ b/attic/muse_qt4_evolution/muse/marker/CMakeLists.txt @@ -0,0 +1,45 @@ +# +# +# +# + +MACRO(WRAP_CPP outfiles ) + FOREACH(it ${ARGN}) + SET(${outfiles} ${${outfiles}} ${it}.cpp) + ENDFOREACH(it) + ENDMACRO(WRAP_CPP) + +MACRO(WRAP_H outfiles ) + FOREACH(it ${ARGN}) + SET(${outfiles} ${${outfiles}} ${it}.h) + ENDFOREACH(it) + ENDMACRO(WRAP_H) + +MACRO(WRAP_UI outfiles ) + FOREACH(it ${ARGN}) + SET(${outfiles} ${${outfiles}} ${it}.ui) + ENDFOREACH(it) + ENDMACRO(WRAP_UI) + +set(mocs + markerview + ) + +WRAP_H(mocH ${mocs}) +WRAP_CPP(mocCPP ${mocs}) + +QT4_WRAP_CPP (moc_headers ${mocH}) + +set (uics + ) + +WRAP_UI(uiUI ${uics}) +QT4_WRAP_UI (ui_headers ${uiUI}) + +set ( marker_src ${mocCPP} ${moc_headers}) + +add_library ( marker STATIC ${marker_src}) +set_target_properties( marker + PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h" + ) + diff --git a/attic/muse_qt4_evolution/muse/marker/markerview.cpp b/attic/muse_qt4_evolution/muse/marker/markerview.cpp new file mode 100644 index 00000000..7cab2d02 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/marker/markerview.cpp @@ -0,0 +1,413 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "markerview.h" +#include "globals.h" +#include "sync.h" +#include "icons.h" +#include "song.h" +#include "awl/posedit.h" +#include "al/al.h" +#include "al/xml.h" +#include "al/sig.h" +#include "al/tempo.h" +#include "al/marker.h" +#include "shortcuts.h" + +enum { COL_TICK = 0, COL_SMPTE, COL_LOCK, COL_NAME }; + +//--------------------------------------------------------- +// tick +//--------------------------------------------------------- + +unsigned MarkerItem::tick() const + { + return _marker->tick(); + } + +//--------------------------------------------------------- +// name +//--------------------------------------------------------- + +const QString MarkerItem::name() const + { + return _marker->name(); + } + +//--------------------------------------------------------- +// lock +//--------------------------------------------------------- + +bool MarkerItem::lock() const + { + return _marker->type() == AL::FRAMES; + } + +//--------------------------------------------------------- +// MarkerItem +//--------------------------------------------------------- + +MarkerItem::MarkerItem(QTreeWidget* parent, AL::Marker* m) + : QTreeWidgetItem(parent) + { + _marker = m; + setText(COL_NAME, m->name()); + setTick(m->tick()); + setIcon(COL_LOCK, m->type() == AL::FRAMES ? *lockIcon : QIcon()); + } + +//--------------------------------------------------------- +// setName +//--------------------------------------------------------- + +void MarkerItem::setName(const QString& s) + { + setText(COL_NAME, s); + _marker = song->setMarkerName(_marker, s); + } + +//--------------------------------------------------------- +// setLock +//--------------------------------------------------------- + +void MarkerItem::setLock(bool lck) + { + setIcon(COL_LOCK, lck ? *lockIcon : QIcon()); + _marker = song->setMarkerLock(_marker, lck); + } + +//--------------------------------------------------------- +// setTick +//--------------------------------------------------------- + +void MarkerItem::setTick(unsigned v) + { + if (_marker->tick() != v) + _marker = song->setMarkerTick(_marker, v); + QString s; + int bar, beat; + int tick; + _marker->mbt(&bar, &beat, &tick); + s.sprintf("%04d.%02d.%03d", bar+1, beat+1, tick); + setText(COL_TICK, s); + + int min, sec, frame, subframe; + _marker->msf(&min, &sec, &frame, &subframe); + + s.sprintf("%03d:%02d:%02d:%02d", min, sec, frame, subframe); + setText(COL_SMPTE, s); + } + +//--------------------------------------------------------- +// MarkerView +//--------------------------------------------------------- + +MarkerView::MarkerView() + : TopWin() + { + lockChange = false; + setWindowTitle(tr("MusE: Marker")); + + //---------Actions---------------------------- + QAction* markerAdd = new QAction(QIcon(*flagIcon), tr("add marker"), this); + markerAdd->setToolTip(tr("Add Marker")); + connect(markerAdd, SIGNAL(triggered()), SLOT(addMarker())); + + QAction* markerDelete = getAction("delete", this); + connect(markerDelete, SIGNAL(triggered()), SLOT(deleteMarker())); + + //---------Pulldown Menu---------------------------- + QMenuBar* mb = menuBar(); + + QMenu* editMenu = mb->addMenu(tr("&Edit")); + editMenu->addAction(markerAdd); + editMenu->addAction(markerDelete); + + //---------ToolBar---------------------------------- + QToolBar* tools = addToolBar(tr("marker-tools")); + tools->addAction(undoAction); + tools->addAction(redoAction); + + QToolBar* edit = addToolBar(tr("edit tools")); + edit->addAction(markerAdd); + edit->addAction(markerDelete); + + //--------------------------------------------------- + // master + //--------------------------------------------------- + + QWidget* w = new QWidget; + setCentralWidget(w); + QVBoxLayout* vbox = new QVBoxLayout; + w->setLayout(vbox); + + table = new QTreeWidget; + table->setUniformRowHeights(true); + table->setAlternatingRowColors(true); + table->setSelectionBehavior(QAbstractItemView::SelectRows); + table->setSelectionMode(QTreeWidget::SingleSelection); + table->setSortingEnabled(false); + table->setIndentation(0); + QStringList labels; + labels << tr("Bar:Beat:Tick") + << tr("Min:Sc:Fr:Sf") + << tr("Lock") + << tr("Text"); + table->setHeaderLabels(labels); + + table->header()->resizeSection(0, 120); + table->header()->resizeSection(1, 120); + table->header()->resizeSection(2, 50); + table->header()->resizeSection(3, 200); +// table->header()->resizeSection(mnWidthMode(3, QTreeWidget::Maximum); + connect(table, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), SLOT(currentChanged(QTreeWidgetItem*))); + connect(table, SIGNAL(itemSelectionChanged()), SLOT(selectionChanged())); + connect(table, SIGNAL(itemClicked(QTreeWidgetItem*,int)), SLOT(clicked(QTreeWidgetItem*))); + + QGroupBox* props = new QGroupBox(tr("Marker Properties")); + QHBoxLayout* propsLayout = new QHBoxLayout; + props->setLayout(propsLayout); + + editTick = new Awl::PosEdit; + propsLayout->addWidget(editTick); + editTick->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, + QSizePolicy::Fixed)); + + editSMPTE = new Awl::PosEdit; + propsLayout->addWidget(editSMPTE); + editSMPTE->setSmpte(true); + editSMPTE->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, + QSizePolicy::Fixed)); + + lock = new QToolButton; + propsLayout->addWidget(lock); + lock->setIcon(*lockIcon); + lock->setCheckable(true); + + editName = new QLineEdit; + propsLayout->addWidget(editName); + editName->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, + QSizePolicy::Preferred)); + connect(editName, SIGNAL(textChanged(const QString&)), + SLOT(nameChanged(const QString&))); + connect(editTick, SIGNAL(valueChanged(const Pos&)), + SLOT(tickChanged(const Pos&))); + connect(editSMPTE, SIGNAL(valueChanged(const Pos&)), + SLOT(tickChanged(const Pos&))); + connect(editSMPTE, SIGNAL(valueChanged(const Pos&)), + editTick, SLOT(setValue(const Pos&))); + connect(editTick, SIGNAL(valueChanged(const Pos&)), + editSMPTE, SLOT(setValue(const Pos&))); + connect(lock, SIGNAL(toggled(bool)), + SLOT(lockChanged(bool))); + connect(song, SIGNAL(markerChanged(int)), SLOT(markerChanged(int))); + + vbox->addWidget(table); + vbox->addWidget(props); + + //--------------------------------------------------- + // Rest + //--------------------------------------------------- + +// connect(song, SIGNAL(songChanged(int)), SLOT(updateList())); + updateList(); + markerChanged(Song::MARKER_CUR); // select current marker + } + +//--------------------------------------------------------- +// addMarker +//--------------------------------------------------------- + +void MarkerView::addMarker() + { + addMarker(song->cPos()); + } + +void MarkerView::addMarker(const AL::Pos& pos) + { +// new MarkerItem(table, m); + song->addMarker(QString(""), pos); + table->sortItems(0, Qt::AscendingOrder); + } + +//--------------------------------------------------------- +// deleteMarker +//--------------------------------------------------------- + +void MarkerView::deleteMarker() + { + MarkerItem* item = (MarkerItem*)table->currentItem(); + if (item) { + AL::Marker* marker = item->marker(); + delete item; + song->removeMarker(marker); + } + } + +//--------------------------------------------------------- +// updateList +//--------------------------------------------------------- + +void MarkerView::updateList() + { + table->clear(); + AL::MarkerList* marker = song->marker(); + for (AL::iMarker i = marker->begin(); i != marker->end(); ++i) { + AL::Marker* m = &i->second; + new MarkerItem(table, m); + } + } + +//--------------------------------------------------------- +// currentChanged +//--------------------------------------------------------- + +void MarkerView::currentChanged(QTreeWidgetItem* i) + { + MarkerItem* item = (MarkerItem*)i; + if (item == 0) { // never triggered + editTick->setValue(0); + editSMPTE->setValue(0); + editName->setText(QString("")); + lock->setChecked(false); + editSMPTE->setEnabled(false); + editTick->setEnabled(false); + lock->setEnabled(false); + editName->setEnabled(false); + } + else { + editTick->setValue(item->tick()); + editSMPTE->setValue(item->tick()); + editName->setText(item->name()); + editName->setEnabled(true); + lock->setChecked(item->lock()); + lock->setEnabled(true); + editSMPTE->setEnabled(item->lock()); + editTick->setEnabled(!item->lock()); + } + } + +//--------------------------------------------------------- +// selectionChanged +//--------------------------------------------------------- + +void MarkerView::selectionChanged() + { +#if 0 + QList sel = table->selectedItems(); + if (!sel.empty()) { + MarkerItem* item = (MarkerItem*)(sel[0]); + } +#endif + } + +//--------------------------------------------------------- +// clicked +//--------------------------------------------------------- + +void MarkerView::clicked(QTreeWidgetItem* i) + { + MarkerItem* item = (MarkerItem*)i; + if (item == 0) { + table->clearSelection(); + return; + } + Pos p(item->tick(), AL::TICKS); + song->setPos(0, p, true, true, false); + } + +//--------------------------------------------------------- +// nameChanged +//--------------------------------------------------------- + +void MarkerView::nameChanged(const QString& s) + { + MarkerItem* item = (MarkerItem*)table->currentItem(); + if (item) + item->setName(s); + } + +//--------------------------------------------------------- +// tickChanged +//--------------------------------------------------------- + +void MarkerView::tickChanged(const Pos& pos) + { + MarkerItem* item = (MarkerItem*)table->currentItem(); + if (item) { + lockChange = true; + item->setTick(pos.tick()); + Pos p(pos.tick(), AL::TICKS); + song->setPos(0, p, true, true, false); + lockChange = false; + } + } + +//--------------------------------------------------------- +// lockChanged +//--------------------------------------------------------- + +void MarkerView::lockChanged(bool lck) + { + MarkerItem* item = (MarkerItem*)table->currentItem(); + if (item) { + item->setLock(lck); + editSMPTE->setEnabled(item->lock()); + editTick->setEnabled(!item->lock()); + } + } + +//--------------------------------------------------------- +// markerChanged +//--------------------------------------------------------- + +void MarkerView::markerChanged(int val) + { + if (lockChange) + return; + switch (val) { + case Song::MARKER_ADD: + case Song::MARKER_REMOVE: + updateList(); + // fall through + case Song::MARKER_CUR: + { + AL::MarkerList* marker = song->marker(); + for (AL::iMarker i = marker->begin(); i != marker->end(); ++i) { + if (i->second.current()) { + int n = table->topLevelItemCount(); + for (int k = 0; k < n; ++k) { + MarkerItem* item = (MarkerItem*)(table->topLevelItem(k)); + if (item->marker() == &i->second) { + table->setCurrentItem(item); + return; + } + } + } + } + } + break; + case Song::MARKER_NAME: + case Song::MARKER_TICK: + case Song::MARKER_LOCK: + break; + } + } + diff --git a/attic/muse_qt4_evolution/muse/marker/markerview.h b/attic/muse_qt4_evolution/muse/marker/markerview.h new file mode 100644 index 00000000..53205e3d --- /dev/null +++ b/attic/muse_qt4_evolution/muse/marker/markerview.h @@ -0,0 +1,98 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MARKERVIEW_H__ +#define __MARKERVIEW_H__ + +#include "cobject.h" + +namespace Awl { + class PosEdit; + }; + +namespace AL { + class Pos; + class Xml; + class Marker; + }; +using AL::Pos; +using AL::Xml; + + +//--------------------------------------------------------- +// MarkerItem +//--------------------------------------------------------- + +class MarkerItem : public QTreeWidgetItem { + AL::Marker* _marker; + + public: + MarkerItem(QTreeWidget* parent, AL::Marker* m); + AL::Marker* marker() const { return _marker; } + unsigned tick() const; + const QString name() const; + bool lock() const; + void setName(const QString& s); + void setTick(unsigned t); + void setLock(bool lck); + }; + +//--------------------------------------------------------- +// MarkerView +//--------------------------------------------------------- + +class MarkerView : public TopWin { + Q_OBJECT + + bool lockChange; + + QTreeWidget* table; + QLineEdit* editName; + Awl::PosEdit* editSMPTE; + Awl::PosEdit* editTick; + QToolButton* lock; + + void closeEvent(QCloseEvent* e) { + emit closed(); + QMainWindow::closeEvent(e); + } + + signals: + void closed(); + + private slots: + void addMarker(); + void addMarker(const AL::Pos&); + void deleteMarker(); + void currentChanged(QTreeWidgetItem*); + void selectionChanged(); + void nameChanged(const QString&); + void tickChanged(const Pos&); + void lockChanged(bool); + void markerChanged(int); + void clicked(QTreeWidgetItem*); + void updateList(); + + public: + MarkerView(); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/master/CMakeLists.txt b/attic/muse_qt4_evolution/muse/master/CMakeLists.txt new file mode 100644 index 00000000..a20d3be1 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/master/CMakeLists.txt @@ -0,0 +1,37 @@ +# +# +# +# + +MACRO(WRAP_CPP outfiles ) + FOREACH(it ${ARGN}) + SET(${outfiles} ${${outfiles}} ${it}.cpp) + ENDFOREACH(it) + ENDMACRO(WRAP_CPP) + +MACRO(WRAP_H outfiles ) + FOREACH(it ${ARGN}) + SET(${outfiles} ${${outfiles}} ${it}.h) + ENDFOREACH(it) + ENDMACRO(WRAP_H) + +MACRO(WRAP_UI outfiles ) + FOREACH(it ${ARGN}) + SET(${outfiles} ${${outfiles}} ${it}.ui) + ENDFOREACH(it) + ENDMACRO(WRAP_UI) + +set( mocs master masteredit ) + +WRAP_H(mocH ${mocs}) +WRAP_CPP(mocCPP ${mocs}) + +QT4_WRAP_CPP (moc_headers ${mocH}) + +set ( master_src ${mocCPP} ${moc_headers}) + +add_library ( master STATIC ${master_src}) +set_target_properties( master + PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h" + ) + diff --git a/attic/muse_qt4_evolution/muse/master/master.cpp b/attic/muse_qt4_evolution/muse/master/master.cpp new file mode 100644 index 00000000..d033753c --- /dev/null +++ b/attic/muse_qt4_evolution/muse/master/master.cpp @@ -0,0 +1,233 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "master.h" +#include "icons.h" +#include "audio.h" +#include "al/tempo.h" +#include "song.h" + +static const int minTempo = 50; +static const int maxTempo = 250; + +//--------------------------------------------------------- +// pix2tempo +//--------------------------------------------------------- + +int MasterCanvas::pix2tempo(int val) const + { + return maxTempo*1000 - mapyDev(val); + } + +//--------------------------------------------------------- +// tempo2pix +//--------------------------------------------------------- + +int MasterCanvas::tempo2pix(int val) const + { + return mapy(maxTempo*1000 - lrint(60000000000.0/val)); + } + +//--------------------------------------------------------- +// MasterCanvas +//--------------------------------------------------------- + +MasterCanvas::MasterCanvas() + : TimeCanvas(TIME_CANVAS) + { + setMarkerList(song->marker()); + setMag(xmag(), 400.0 / (maxTempo * 1000.0)); + setYMagRange(40.0 / (maxTempo*1000), 4000.0 / (maxTempo*1000)); + setVSize((maxTempo - minTempo) * 1000); + setYFit(true); + verticalScrollBar()->setSingleStep(1000); + verticalScrollBar()->setMinimum(minTempo * 1000); + verticalScrollBar()->setMaximum(maxTempo * 1000); + drag = DRAG_OFF; + } + +//--------------------------------------------------------- +// paint +//--------------------------------------------------------- + +void MasterCanvas::paint(QPainter& p, QRect rect) + { + int y = rect.y(); + + //--------------------------------------------------- + // draw Canvas Items + //--------------------------------------------------- + + int y2 = lrint(maxTempo * 1000 * _ymag); + const AL::TempoList* tl = &AL::tempomap; + for (AL::ciTEvent i = tl->begin(); i != tl->end(); ++i) { + AL::TEvent* e = i->second; + int x1 = pos2pix(AL::Pos(i->first)); + int x2 = pos2pix(AL::Pos(i->second->tick)); + int y1 = lrint(_ymag * (maxTempo*1000 - lrint(60000000000.0/e->tempo))); + if (y1 < y) + y1 = y; + p.fillRect(x1, y1, x2 - x1, y2 - y1, Qt::blue); + } + } + +//--------------------------------------------------------- +// viewMousePressEvent +//--------------------------------------------------------- + +void MasterCanvas::mousePress(QMouseEvent* event) + { + start = event->pos(); + int x = start.x() - rCanvasA.x(); + int y = start.y() - rCanvasA.y(); + + switch (tool()) { + case PointerTool: + drag = DRAG_LASSO_START; + break; + + case PencilTool: + drag = DRAG_NEW; + song->startUndo(); + newVal(x, x, y); + break; + + case RubberTool: + drag = DRAG_DELETE; + song->startUndo(); + deleteVal(x, x); + break; + + default: + break; + } + } + +//--------------------------------------------------------- +// viewMouseMoveEvent +//--------------------------------------------------------- + +void MasterCanvas::mouseMove(QPoint pos) + { + int y = pos.y() - rCanvasA.y(); + int x = pos.x() - rCanvasA.x(); + + QPoint dist = pos - start; + // bool moving = dist.y() >= 3 || dist.y() <= 3 || dist.x() >= 3 || dist.x() <= 3; + + int sx = start.x() - rCanvasA.x(); + switch (drag) { + case DRAG_NEW: + newVal(sx, x, y); + start = pos; + break; + + case DRAG_DELETE: + deleteVal(sx, x); + start = pos; + break; + + default: + break; + } + emit tempoChanged(pix2tempo(y)); +// emit timeChanged(editor->rasterVal(x)); + } + +//--------------------------------------------------------- +// mouseRelease +//--------------------------------------------------------- + +void MasterCanvas::mouseRelease(QMouseEvent*) + { + switch (drag) { + case DRAG_RESIZE: + case DRAG_NEW: + case DRAG_DELETE: + song->endUndo(SC_TEMPO); + break; + default: + break; + } + drag = DRAG_OFF; + } + +//--------------------------------------------------------- +// deleteVal +//--------------------------------------------------------- + +bool MasterCanvas::deleteVal1(const AL::Pos& p1, const AL::Pos& p2) + { + bool songChanged = false; + + AL::TempoList* tl = &AL::tempomap; + for (AL::iTEvent i = tl->begin(); i != tl->end(); ++i) { + if (i->first < p1.tick()) + continue; + if (i->first >= p2.tick()) + break; + AL::iTEvent ii = i; + ++ii; + if (ii != tl->end()) { + int tempo = ii->second->tempo; + audio->msgDeleteTempo(i->first, tempo, false); + songChanged = true; + } + } + return songChanged; + } + +//--------------------------------------------------------- +// deleteVal +//--------------------------------------------------------- + +void MasterCanvas::deleteVal(int x1, int x2) + { + AL::Pos p1(pix2pos(x1)); + AL::Pos p2(pix2pos(x2)); + p1.downSnap(raster()); + p2.upSnap(raster()); + if (deleteVal1(p1, p2)) + widget()->update(); + } + +//--------------------------------------------------------- +// newVal +//--------------------------------------------------------- + +void MasterCanvas::newVal(int x1, int x2, int y) + { + int tempo = lrint(60000000000.0 / pix2tempo(y)); + AL::Pos p1 = pix2pos(x1); + p1.downSnap(raster()); + AL::Pos p2 = pix2pos(x2); + p2.upSnap(raster()); + + if (p1 > p2) { + AL::Pos tmp = p2; + p2 = p1; + p1 = tmp; + } + deleteVal1(p1, p2); + audio->msgAddTempo(p1.tick(), tempo, false); + widget()->update(); + } + + diff --git a/attic/muse_qt4_evolution/muse/master/master.h b/attic/muse_qt4_evolution/muse/master/master.h new file mode 100644 index 00000000..54899663 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/master/master.h @@ -0,0 +1,63 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MASTER_H__ +#define __MASTER_H__ + +#include "awl/tcanvas.h" + +class GraphMidiEditor; + +//--------------------------------------------------------- +// MasterCanvas +//--------------------------------------------------------- + +class MasterCanvas : public TimeCanvas { + QPoint start; + + enum { + DRAG_OFF, DRAG_LASSO_START, DRAG_RESIZE, DRAG_NEW, + DRAG_DELETE + } drag; + + Q_OBJECT + virtual void mouseMove(QPoint); + virtual void mousePress(QMouseEvent* event); + virtual void mouseRelease(QMouseEvent*); + + virtual void paint(QPainter&, QRect); + + void newVal(int x1, int x2, int y); + bool deleteVal1(const AL::Pos&, const AL::Pos&); + void deleteVal(int x1, int x2); + + int pix2tempo(int) const; + int tempo2pix(int) const; + + signals: + void tempoChanged(int); + + public: + MasterCanvas(); + virtual ~MasterCanvas() {} + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/master/masteredit.cpp b/attic/muse_qt4_evolution/muse/master/masteredit.cpp new file mode 100644 index 00000000..e3271ea6 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/master/masteredit.cpp @@ -0,0 +1,302 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "song.h" +#include "masteredit.h" +#include "awl/poslabel.h" +#include "awl/tempoedit.h" +#include "awl/tempolabel.h" +#include "awl/sigedit.h" +#include "master.h" +#include "al/tempo.h" +#include "widgets/tools.h" + +static int rasterTable[] = { 1, 0, 768, 384, 192, 96 }; +static const char* rastval[] = { + QT_TR_NOOP("Off"), "Bar", "1/2", "1/4", "1/8", "1/16" + }; + +int MasterEdit::initRaster = MasterEdit::INIT_RASTER; +int MasterEdit::initWidth = MasterEdit::INIT_WIDTH; +int MasterEdit::initHeight = MasterEdit::INIT_HEIGHT; +double MasterEdit::initXmag = 0.04; +double MasterEdit::initYmag = 1.0; + +//--------------------------------------------------------- +// MasterEdit +//--------------------------------------------------------- + +MasterEdit::MasterEdit() + : Editor() + { + setWindowTitle(tr("MusE: Mastertrack")); + + //---------ToolBar---------------------------------- + tools = addToolBar(tr("edit tools")); + tools->addAction(undoAction); + tools->addAction(redoAction); + tools->addSeparator(); + + tools2 = new EditToolBar(this, + PointerTool | PencilTool | RubberTool); + addToolBar(tools2); + + QToolBar* enableMaster = addToolBar(tr("EnableTempomap")); + enableMasterAction = enableMaster->addAction(tr("Tempomap")); + enableMasterAction->setCheckable(true); + enableMasterAction->setToolTip(tr("Enable use of tempo map")); + enableMasterAction->setChecked(song->masterFlag()); + connect(enableMasterAction, SIGNAL(triggered(bool)), song, SLOT(setMasterFlag(bool))); + + addToolBarBreak(); + QToolBar* info = new QToolBar(tr("Info"), this); + addToolBar(info); + + QLabel* label = new QLabel(tr("Cursor")); + info->addWidget(label); + + cursorPos = new PosLabel; + info->addWidget(cursorPos); + tempo = new TempoLabel(info); + info->addWidget(tempo); + + info->addWidget(new QLabel(tr("Snap"))); + rasterLabel = new QComboBox; + info->addWidget(rasterLabel); + for (int i = 0; i < 6; i++) + rasterLabel->addItem(tr(rastval[i]), i); + connect(rasterLabel, SIGNAL(activated(int)), SLOT(_setRaster(int))); + + cursorPos->setToolTip(tr("time at cursor position")); + tempo->setToolTip(tr("tempo at cursor position")); + + //---------values for current position--------------- + info->addWidget(new QLabel(tr("CurPos "))); + curTempo = new TempoEdit(info); + info->addWidget(curTempo); + curSig = new SigEdit(info); + info->addWidget(curSig); + curSig->setValue(AL::TimeSignature(4, 4)); + curTempo->setToolTip(tr("tempo at current position")); + curSig->setToolTip(tr("time signature at current position")); + connect(curSig, SIGNAL(valueChanged(const AL::TimeSignature&)), song, SLOT(setSig(const AL::TimeSignature&))); + connect(curTempo, SIGNAL(tempoChanged(int)), song, SLOT(setTempo(int))); + + //--------------------------------------------------- + // master + //--------------------------------------------------- + + tcanvas = new MasterCanvas; + setCentralWidget(tcanvas); + tcanvas->setEndPos(AL::Pos(song->len())); + setRaster(INIT_RASTER); + tcanvas->setMag(initXmag, initYmag); + + connect(song, SIGNAL(posChanged(int,const AL::Pos&,bool)), tcanvas, SLOT(setLocatorPos(int,const AL::Pos&,bool))); + connect(song, SIGNAL(posChanged(int,const AL::Pos&,bool)), SLOT(posChanged(int,const AL::Pos&,bool))); + connect(song, SIGNAL(lenChanged(const AL::Pos&)), tcanvas, SLOT(setEndPos(const AL::Pos&))); + connect(song, SIGNAL(tempoChanged()), tcanvas, SLOT(tempoChanged())); + + connect(tcanvas, SIGNAL(posChanged(int,const AL::Pos&)), song, SLOT(setPos(int,const AL::Pos&))); + connect(tcanvas, SIGNAL(cursorPos(const AL::Pos&,bool)), cursorPos, SLOT(setValue(const AL::Pos&,bool))); + + connect(tcanvas, SIGNAL(tempoChanged(int)), SLOT(setTempo(int))); + connect(tools2, SIGNAL(toolChanged(int)), tcanvas, SLOT(setTool(int))); + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + + resize(initWidth, initHeight); + } + +//--------------------------------------------------------- +// ~MasterEdit +//--------------------------------------------------------- + +MasterEdit::~MasterEdit() + { + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void MasterEdit::songChanged(int type) + { + if (type & SC_TEMPO) { + int tempo = AL::tempomap.tempo(song->cpos()); + curTempo->setTempo(tempo); + } + if (type & SC_MASTER) + enableMasterAction->setChecked(song->masterFlag()); + } + +//--------------------------------------------------------- +// _setRaster +//--------------------------------------------------------- + +void MasterEdit::_setRaster(int index) + { + setRaster(rasterTable[index]); + } + +//--------------------------------------------------------- +// setRaster +//--------------------------------------------------------- + +void MasterEdit::setRaster(int val) + { + _raster = val; + tcanvas->setRaster(val); + for (unsigned i = 0; i < sizeof(rasterTable)/sizeof(*rasterTable); ++i) { + if (rasterTable[i] == val) { + rasterLabel->setCurrentIndex(i); + return; + } + } + rasterLabel->setCurrentIndex(1); + } + +//--------------------------------------------------------- +// posChanged +//--------------------------------------------------------- + +void MasterEdit::posChanged(int idx, const AL::Pos& pos, bool) + { + if (idx == 0) { + unsigned val = pos.tick(); + int tempo = AL::tempomap.tempo(val); + AL::TimeSignature sig = AL::sigmap.timesig(val); + curSig->blockSignals(true); + + curTempo->setTempo(tempo); + curSig->setValue(sig); + + curSig->blockSignals(false); + } + } + +//--------------------------------------------------------- +// setTempo +//--------------------------------------------------------- + +void MasterEdit::setTempo(int val) + { + if (val == -1) + tempo->setEnabled(false); + else { + tempo->setEnabled(true); + tempo->setValue(val); + } + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void MasterEdit::read(QDomNode node) + { + for (node = node.firstChild(); !node.isNull(); node = node.nextSibling()) + AL::readProperties(this, node); + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void MasterEdit::write(Xml& xml) const + { + xml.stag(metaObject()->className()); + xml.writeProperties(this); + xml.etag(metaObject()->className()); + } + +//--------------------------------------------------------- +// tool +//--------------------------------------------------------- + +int MasterEdit::tool() const + { + return tcanvas->tool(); + } + +//--------------------------------------------------------- +// setTool +//--------------------------------------------------------- + +void MasterEdit::setTool(int n) + { + tcanvas->setTool(n); + tools2->set(n); + } + +//--------------------------------------------------------- +// canvasPos +//--------------------------------------------------------- + +QPoint MasterEdit::canvasPos() const + { + return tcanvas->getWPos(); + } + +//--------------------------------------------------------- +// setCanvasPos +//--------------------------------------------------------- + +void MasterEdit::setCanvasPos(const QPoint& p) + { + tcanvas->setWPos(p); + } + +//--------------------------------------------------------- +// xmag +//--------------------------------------------------------- + +double MasterEdit::xmag() const + { + return tcanvas->xmag(); + } + +//--------------------------------------------------------- +// setXmag +//--------------------------------------------------------- + +void MasterEdit::setXmag(double val) + { + tcanvas->setMag(val, tcanvas->ymag()); + } + +//--------------------------------------------------------- +// ymag +//--------------------------------------------------------- + +double MasterEdit::ymag() const + { + return tcanvas->ymag(); + } + +//--------------------------------------------------------- +// setYmag +//--------------------------------------------------------- + +void MasterEdit::setYmag(double val) + { + tcanvas->setMag(tcanvas->xmag(), val); + } + + diff --git a/attic/muse_qt4_evolution/muse/master/masteredit.h b/attic/muse_qt4_evolution/muse/master/masteredit.h new file mode 100644 index 00000000..e60f3a67 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/master/masteredit.h @@ -0,0 +1,107 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MASTER_EDIT_H__ +#define __MASTER_EDIT_H__ + +#include "editor.h" +#include "widgets/noteinfo.h" +#include "cobject.h" + +class MasterCanvas; +class EditToolBar; + +namespace AL { + class Xml; + }; +using AL::Xml; + +namespace Awl { + class TempoEdit; + class SigEdit; + class PosLabel; + class TempoLabel; + }; +using Awl::TempoEdit; +using Awl::SigEdit; +using Awl::PosLabel; +using Awl::TempoLabel; + +//--------------------------------------------------------- +// MasterEdit +//--------------------------------------------------------- + +class MasterEdit : public Editor { + Q_OBJECT + Q_PROPERTY(int raster READ raster WRITE setRaster) + Q_PROPERTY(QPoint canvasPos READ canvasPos WRITE setCanvasPos) + Q_PROPERTY(int tool READ tool WRITE setTool) + Q_PROPERTY(double xmag READ xmag WRITE setXmag) + Q_PROPERTY(double ymag READ ymag WRITE setYmag) + + EditToolBar* tools2; + QAction* enableMasterAction; + TempoEdit* curTempo; + SigEdit* curSig; + QComboBox* rasterLabel; + QToolBar* tools; + PosLabel* cursorPos; + TempoLabel* tempo; + + int _raster; + + MasterCanvas* canvas() { return (MasterCanvas*)tcanvas; } + + private slots: + void _setRaster(int); + void posChanged(int idx, const AL::Pos& pos, bool); + void setTempo(int); + void songChanged(int); + + signals: + void deleted(void*); + + public: + MasterEdit(); + ~MasterEdit(); + void read(QDomNode); + void write(Xml&) const; + + int raster() const { return _raster; } + void setRaster(int val); + QPoint canvasPos() const; + void setCanvasPos(const QPoint&); + double xmag() const; + void setXmag(double val); + double ymag() const; + void setYmag(double val); + int tool() const; + void setTool(int); + + static int initRaster, initWidth, initHeight; + static double initXmag, initYmag; + + static const int INIT_RASTER = 384; + static const int INIT_WIDTH = 650; + static const int INIT_HEIGHT = 450; + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/midi.cpp b/attic/muse_qt4_evolution/muse/midi.cpp new file mode 100644 index 00000000..a182fe4a --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midi.cpp @@ -0,0 +1,633 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "song.h" +#include "midi.h" +#include "midiedit/drummap.h" +#include "event.h" +#include "globals.h" +#include "midictrl.h" +#include "midictrl.h" +#include "audio.h" +#include "audiodev.h" +#include "wave.h" +#include "synth.h" +#include "sync.h" +#include "gconfig.h" +#include "ticksynth.h" +#include "al/tempo.h" +#include "al/sig.h" +#include "part.h" +#include "midiplugin.h" +#include "midiinport.h" +#include "midioutport.h" +#include "instruments/minstrument.h" + +extern void dump(const unsigned char* p, int n); + +unsigned const char gmOnMsg[] = { + 0x7e, // Non-Real Time header + 0x7f, // ID of target device (7f = all devices) + 0x09, + 0x01 + }; +unsigned const char gsOnMsg[] = { + 0x41, // roland id + 0x10, // Id of target device (default = 10h for roland) + 0x42, // model id (42h = gs devices) + 0x12, // command id (12h = data set) + 0x40, // address & value + 0x00, + 0x7f, + 0x00, + 0x41 // checksum? + }; +unsigned const char xgOnMsg[] = { + 0x43, // yamaha id + 0x10, // device number (0) + 0x4c, // model id + 0x00, // address (high, mid, low) + 0x00, + 0x7e, + 0x00 // data + }; +unsigned const int gmOnMsgLen = sizeof(gmOnMsg); +unsigned const int gsOnMsgLen = sizeof(gsOnMsg); +unsigned const int xgOnMsgLen = sizeof(xgOnMsg); + +/*--------------------------------------------------------- + * midi_meta_name + *---------------------------------------------------------*/ + +QString midiMetaName(int meta) + { + const char* s = ""; + switch (meta) { + case 0: s = "Sequence Number"; break; + case 1: s = "Text Event"; break; + case 2: s = "Copyright"; break; + case 3: s = "Sequence/Track Name"; break; + case 4: s = "Instrument Name"; break; + case 5: s = "Lyric"; break; + case 6: s = "Marker"; break; + case 7: s = "Cue Point"; break; + case 8: + case 9: + case 0x0a: + case 0x0b: + case 0x0c: + case 0x0d: + case 0x0e: + case 0x0f: s = "Text"; break; + case 0x20: s = "Channel Prefix"; break; + case 0x21: s = "Port Change"; break; + case 0x2f: s = "End of Track"; break; + case 0x51: s = "Set Tempo"; break; + case 0x54: s = "SMPTE Offset"; break; + case 0x58: s = "Time Signature"; break; + case 0x59: s = "Key Signature"; break; + case 0x74: s = "Sequencer-Specific1"; break; + case 0x7f: s = "Sequencer-Specific2"; break; + default: + break; + } + return QString(s); + } + +//--------------------------------------------------------- +// QString nameSysex +//--------------------------------------------------------- + +QString nameSysex(unsigned int len, const unsigned char* buf) + { + QString s; + switch(buf[0]) { + case 0x00: + if (buf[1] == 0 && buf[2] == 0x41) + s = "Microsoft"; + break; + case 0x01: s = "Sequential Circuits: "; break; + case 0x02: s = "Big Briar: "; break; + case 0x03: s = "Octave / Plateau: "; break; + case 0x04: s = "Moog: "; break; + case 0x05: s = "Passport Designs: "; break; + case 0x06: s = "Lexicon: "; break; + case 0x07: s = "Kurzweil"; break; + case 0x08: s = "Fender"; break; + case 0x09: s = "Gulbransen"; break; + case 0x0a: s = "Delta Labas"; break; + case 0x0b: s = "Sound Comp."; break; + case 0x0c: s = "General Electro"; break; + case 0x0d: s = "Techmar"; break; + case 0x0e: s = "Matthews Research"; break; + case 0x10: s = "Oberheim"; break; + case 0x11: s = "PAIA: "; break; + case 0x12: s = "Simmons: "; break; + case 0x13: s = "DigiDesign"; break; + case 0x14: s = "Fairlight: "; break; + case 0x15: s = "JL Cooper"; break; + case 0x16: s = "Lowery"; break; + case 0x17: s = "Lin"; break; + case 0x18: s = "Emu"; break; + case 0x1b: s = "Peavy"; break; + case 0x20: s = "Bon Tempi: "; break; + case 0x21: s = "S.I.E.L: "; break; + case 0x23: s = "SyntheAxe: "; break; + case 0x24: s = "Hohner"; break; + case 0x25: s = "Crumar"; break; + case 0x26: s = "Solton"; break; + case 0x27: s = "Jellinghaus Ms"; break; + case 0x28: s = "CTS"; break; + case 0x29: s = "PPG"; break; + case 0x2f: s = "Elka"; break; + case 0x36: s = "Cheetah"; break; + case 0x3e: s = "Waldorf"; break; + case 0x40: s = "Kawai: "; break; + case 0x41: s = "Roland: "; break; + case 0x42: s = "Korg: "; break; + case 0x43: s = "Yamaha: "; break; + case 0x44: s = "Casio"; break; + case 0x45: s = "Akai"; break; + case 0x7c: s = "MusE Soft Synth"; break; + case 0x7d: s = "Educational Use"; break; + case 0x7e: s = "Universal: Non Real Time"; break; + case 0x7f: s = "Universal: Real Time"; break; + default: s = "??: "; break; + } + // + // following messages should not show up in event list + // they are filtered while importing midi files + // + if ((len == gmOnMsgLen) && memcmp(buf, gmOnMsg, gmOnMsgLen) == 0) + s += "GM-ON"; + else if ((len == gsOnMsgLen) && memcmp(buf, gsOnMsg, gsOnMsgLen) == 0) + s += "GS-ON"; + else if ((len == xgOnMsgLen) && memcmp(buf, xgOnMsg, xgOnMsgLen) == 0) + s += "XG-ON"; + return s; + } + +//--------------------------------------------------------- +// buildMidiEventList +// TODO: +// parse data increment/decrement controller +// NRPN/RPN fine/course data 7/14 Bit +// must we set datah/datal to zero after change +// of NRPN/RPN register? +// generally: how to handle incomplete messages? +//--------------------------------------------------------- + +void buildMidiEventList(EventList* del, const MidiEventList* el, MidiTrack* track, int channel, + int div, bool addSysexMeta) + { + QString tname; + int hbank = 0xff; + int lbank = 0xff; + int rpnh = -1; + int rpnl = -1; + int datah = 0; + int datal = 0; + int dataType = 0; // 0 : disabled, 0x20000 : rpn, 0x30000 : nrpn + + EventList mel; + int metaChannel = -1; + for (iMidiEvent i = el->begin(); i != el->end(); ++i) { + MidiEvent ev = *i; + if (ev.type() == ME_META) { + if (ev.dataA() == 0x20) { + metaChannel = ((char*)(ev.data()))[0]; + } + if (metaChannel == channel) { + if (ev.dataA() == 0x4) { + tname = (char*)(ev.data()); + } + } + } + if (!addSysexMeta && (ev.type() == ME_SYSEX || ev.type() == ME_META)) + continue; + if (!(ev.type() == ME_SYSEX || ev.type() == ME_META || (ev.channel() == channel))) + continue; + int tick = ev.time(); + Event e; + switch(ev.type()) { + case ME_NOTEON: + e.setType(Note); + + if (track->useDrumMap()) { + int instr = track->drumMap()->inmap(ev.dataA()); + e.setPitch(instr); + } + else + e.setPitch(ev.dataA()); + + e.setVelo(ev.dataB()); + e.setLenTick(0); + break; + case ME_NOTEOFF: + e.setType(Note); + if (track->useDrumMap()) { + int instr = track->drumMap()->inmap(ev.dataA()); + e.setPitch(instr); + } + else + e.setPitch(ev.dataA()); + e.setVelo(0); + e.setVeloOff(ev.dataB()); + e.setLenTick(0); + break; + case ME_POLYAFTER: + e.setType(PAfter); + e.setA(ev.dataA()); + e.setB(ev.dataB()); + break; + case ME_CONTROLLER: + { + int val = ev.dataB(); + switch(ev.dataA()) { + case CTRL_HBANK: + hbank = val; + break; + + case CTRL_LBANK: + lbank = val; + break; + + case CTRL_HDATA: + datah = val; + // check if a CTRL_LDATA follows + // e.g. wie have a 14 bit controller: + { + iMidiEvent ii = i; + ++ii; + bool found = false; + for (; ii != el->end(); ++ii) { + MidiEvent ev = *ii; + if (ev.type() == ME_CONTROLLER) { + if (ev.dataA() == CTRL_LDATA) { + // handle later + found = true; + } + break; + } + } + if (!found) { + if (rpnh == -1 || rpnl == -1) { + printf("parameter number not defined, data 0x%x\n", datah); + } + else { + int ctrl = dataType | (rpnh << 8) | rpnl; + e.setType(Controller); + e.setA(ctrl); + e.setB(datah); + } + } + } + break; + + case CTRL_LDATA: + datal = val; + + if (rpnh == -1 || rpnl == -1) { + printf("parameter number not defined, data 0x%x 0x%x, tick %d, channel %d\n", + datah, datal, tick, channel); + break; + } + // assume that the sequence is always + // CTRL_HDATA - CTRL_LDATA + // eg. that LDATA is always send last + + e.setType(Controller); + // 14 Bit RPN/NRPN + e.setA((dataType+0x30000) | (rpnh << 8) | rpnl); + e.setB((datah << 7) | datal); + break; + + case CTRL_HNRPN: + rpnh = val; + dataType = 0x30000; + break; + + case CTRL_LNRPN: + rpnl = val; + dataType = 0x30000; + break; + + case CTRL_HRPN: + rpnh = val; + dataType = 0x20000; + break; + + case CTRL_LRPN: + rpnl = val; + dataType = 0x20000; + break; + + default: + e.setType(Controller); + e.setA(ev.dataA()); + e.setB(val); + break; + } + } + break; + + case ME_PROGRAM: + e.setType(Controller); + e.setA(CTRL_PROGRAM); + e.setB((hbank << 16) | (lbank << 8) | ev.dataA()); + break; + + case ME_AFTERTOUCH: + e.setType(CAfter); + e.setA(ev.dataA()); + break; + + case ME_PITCHBEND: + e.setType(Controller); + e.setA(CTRL_PITCH); + e.setB(ev.dataA()); + break; + + case ME_SYSEX: + e.setType(Sysex); + e.setData(ev.data(), ev.len()); + break; + + case ME_META: + { + const unsigned char* data = ev.data(); + switch (ev.dataA()) { + case 0x01: // Text + if (track->comment().isEmpty()) + track->setComment(QString((const char*)data)); + else + track->setComment(track->comment() + "\n" + QString((const char*)data)); + break; + case 0x02: // Copyright + config.copyright = (char*)data; + break; + case 0x03: // Sequence-/TrackName + tname = (char*)data; + break; + case 0x6: // Marker + { + Pos pos((tick * config.division + div/2) / div, AL::TICKS); + song->addMarker(QString((const char*)(data)), pos); + } + break; + case 0x4: // Instrument Name + case 0x5: // Lyrics + case 0x8: // text + case 0x9: + case 0xa: + case 0x20: // channel prefix + case 0x21: // port change + break; + + case 0x0f: // Track Comment + track->setComment(QString((char*)data)); + break; + + case 0x51: // Tempo + { + int tempo = data[2] + (data[1] << 8) + (data[0] <<16); + int ltick = (tick * config.division + div/2) / div; + AL::tempomap.addTempo(ltick, tempo); + } + break; + + case 0x58: // Time Signature + { + int timesig_z = data[0]; + int n = data[1]; + int timesig_n = 1; + for (int i = 0; i < n; i++) + timesig_n *= 2; + int ltick = (tick * config.division + div/2) / div; + AL::sigmap.add(ltick, AL::TimeSignature(timesig_z, timesig_n)); + } + break; + + case 0x59: // Key Signature + printf("Meta: Key Signature %d %d\n", data[0], data[1]); + // track->scale.set(data[0]); + // track->scale.setMajorMinor(data[1]); + break; + + case 0x7f: // Sequencer Specific + printf("Meta: Seq specific:len %d\n", ev.len()); + break; + + default: + printf("unknown Meta 0x%x %d\n", ev.dataA(), ev.dataA()); + } + } + break; + } // switch(ev.type() + if (!e.empty()) { + e.setTick(tick); + mel.add(e); + } + } // i != el->end() + + //--------------------------------------------------- + // resolve NoteOff events + //--------------------------------------------------- + + for (iEvent i = mel.begin(); i != mel.end(); ++i) { + Event ev = i->second; + if (!ev.isNote()) + continue; + if (ev.lenTick()) + continue; +// printf("%d note %d %d\n", ev.tick(), ev.pitch(), ev.velo()); + if (ev.isNoteOff()) { + bool found = false; + iEvent k = i; +// printf(" start with note off\n"); + for (++k; k != mel.end(); ++k) { + Event event = k->second; + if (event.tick() > ev.tick()) + break; + if (event.isNote() && event.velo() && event.pitch() == ev.pitch()) { + ev.setLenTick(1); + ev.setVelo(event.velo()); + ev.setVeloOff(0); + found = true; +// printf(" found on: %d\n", event.tick()); + break; + } + } + if (!found) { + // maybe found note with velocity zero is really a + // note-on ! + k = i; + found = true; + for (++k; k != mel.end(); ++k) { + Event event = k->second; + if (!event.isNote()) + continue; + if (event.pitch() == ev.pitch()) { + if (event.velo() == 0) { + found = true; + int t = event.tick() - ev.tick(); + ev.setLenTick(t); + ev.setVelo(1); + ev.setVeloOff(0); + mel.erase(k); + i = mel.begin(); + } + break; + } + } + if (!found) { + printf("NOTE OFF without Note ON tick %d type %d %d %d\n", + ev.tick(), ev.type(), ev.pitch(), ev.velo()); + } + else + continue; + } + else { + mel.erase(k); + i = mel.begin(); // DEBUG + continue; + } + } + iEvent k; + // ev is noteOn + for (k = mel.lower_bound(ev.tick()); k != mel.end(); ++k) { + Event event = k->second; +// printf(" - %d(%d,%d)\n", event.tick(), event.pitch(), event.velo()); + if (ev.isNoteOff(event)) { + int t = k->first - i->first; + if (t <= 0) { + if (debugMsg) { + printf("Note len is (%d-%d)=%d, set to 1\n", + k->first, i->first, k->first - i->first); + ev.dump(); + event.dump(); + } + t = 1; + } + ev.setLenTick(t); + ev.setVeloOff(event.veloOff()); + break; + } + } + if (k == mel.end()) { + printf(" -no note-off! %d pitch %d velo %d\n", + ev.tick(), ev.pitch(), ev.velo()); + // + // switch off at end of measure + // + int endTick = song->roundUpBar(ev.tick()+1); + ev.setLenTick(endTick-ev.tick()); + } + else { + mel.erase(k); + i = mel.begin(); + } + } + + for (iEvent i = mel.begin(); i != mel.end(); ++i) { + Event ev = i->second; + if (ev.isNoteOff()) { + printf("+extra note-off! %d pitch %d velo %d\n", + i->first, ev.pitch(), ev.velo()); +// ev.dump(); + continue; + } + int tick = (ev.tick() * config.division + div/2) / div; + if (ev.isNote()) { + int lenTick = (ev.lenTick() * config.division + div/2) / div; + ev.setLenTick(lenTick); + } + ev.setTick(tick); + if (ev.type() == Controller) { + int id = ev.dataA(); + CVal val; + val.i = ev.dataB(); + +// bool found = false; + Ctrl* c = track->getController(id); + if (c) + c->add(tick, val); + else + // if no managed controller, store as event + del->add(ev); + } + else + del->add(ev); + } + if (!tname.isEmpty()) + track->setName(tname); + } + +//--------------------------------------------------------- +// initMidiDevices +//--------------------------------------------------------- + +void Audio::initMidiDevices() + { + // + // test for explicit instrument initialization + // + MidiOutPortList* mpl = song->midiOutPorts(); + for (iMidiOutPort i = mpl->begin(); i != mpl->end(); ++i) { + MidiOutPort* mp = *i; + MidiInstrument* instr = mp->instrument(); + if (!instr) + continue; // TODO: use default instrument? + EventList* events = instr->midiInit(); + for (iEvent ie = events->begin(); ie != events->end(); ++ie) { + MidiEvent ev(0, 0, ie->second); + mp->playMidiEvent(&ev); + } + } + } + +//--------------------------------------------------------- +// resetMidiDevices +//--------------------------------------------------------- + +void Audio::resetMidiDevices() + { + MidiTrackList* mcl = song->midis(); + for (iMidiTrack i = mcl->begin(); i != mcl->end(); ++i) { + MidiTrack* mc = *i; + if (!mc->mute() && mc->autoRead()) { + CtrlList* cl = mc->controller(); + for (iCtrl ic = cl->begin(); ic != cl->end(); ++ic) { + ic->second->setCurVal(CTRL_VAL_UNKNOWN); + } + } + } + MidiOutPortList* mpl = song->midiOutPorts(); + for (iMidiOutPort i = mpl->begin(); i != mpl->end(); ++i) { + MidiOutPort* mp = *i; + if (!mp->mute() && mp->autoRead()) { + CtrlList* cl = mp->controller(); + for (iCtrl ic = cl->begin(); ic != cl->end(); ++ic) { + ic->second->setCurVal(CTRL_VAL_UNKNOWN); + } + } + } + } + diff --git a/attic/muse_qt4_evolution/muse/midi.h b/attic/muse_qt4_evolution/muse/midi.h new file mode 100644 index 00000000..d6713c5a --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midi.h @@ -0,0 +1,68 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MIDI_H__ +#define __MIDI_H__ + +enum { + ME_NOTEOFF = 0x80, + ME_NOTEON = 0x90, + ME_POLYAFTER = 0xa0, + ME_CONTROLLER = 0xb0, + ME_PROGRAM = 0xc0, + ME_AFTERTOUCH = 0xd0, + ME_PITCHBEND = 0xe0, + ME_SYSEX = 0xf0, + ME_META = 0xff, + ME_MTC_QUARTER = 0xf1, + ME_SONGPOS = 0xf2, + ME_SONGSEL = 0xf3, + ME_TUNE_REQ = 0xf6, + ME_SYSEX_END = 0xf7, + ME_CLOCK = 0xf8, + ME_TICK = 0xf9, + ME_START = 0xfa, + ME_CONTINUE = 0xfb, + ME_STOP = 0xfc, + ME_SENSE = 0xfe, + }; + +#define ME_TIMESIG 0x58 + +extern unsigned const char gmOnMsg[]; +extern unsigned const char gsOnMsg[]; +extern unsigned const char xgOnMsg[]; + +extern unsigned const int gmOnMsgLen; +extern unsigned const int gsOnMsgLen; +extern unsigned const int xgOnMsgLen; + +QString nameSysex(unsigned int len, const unsigned char* buf); +QString midiMetaName(int); + +class EventList; +class MidiTrack; +class MidiEventList; + +extern void buildMidiEventList(EventList* mel, const MidiEventList* el, MidiTrack* track, + int channel, int division, bool); + +#endif + diff --git a/attic/muse_qt4_evolution/muse/midictrl.cpp b/attic/muse_qt4_evolution/muse/midictrl.cpp new file mode 100644 index 00000000..89e40ec1 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midictrl.cpp @@ -0,0 +1,372 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "midictrl.h" +#include "al/xml.h" + +static const char* ctrlName[] = { + "BankSelMSB", "Modulation", "BreathCtrl", "Control 3", "Foot Ctrl", + "Porta Time", "DataEntMSB", "MainVolume", "Balance", "Control 9", +/*10*/ "Pan", "Expression", "Control 12", "Control 13", "Control 14", + "Control 15", "Gen.Purp.1", "Gen.Purp.2", "Gen.Purp.3", "Gen.Purp.4", +/*20*/ "Control 20", "Control 21", "Control 22", "Control 23", "Control 24", + "Control 25", "Control 26", "Control 27", "Control 28", "Control 29", +/*30*/ "Control 30", "Control 31", "BankSelLSB", "Modul. LSB", "BrthCt.LSB", + "Control 35", "FootCt.LSB", "Port.T LSB", "DataEntLSB", "MainVolLSB", + "BalanceLSB", "Control 41", "Pan LSB", "Expr. LSB", "Control 44", + "Control 45", "Control 46", "Control 47", "Gen.P.1LSB", "Gen.P.2LSB", +/*50*/ "Gen.P.3LSB", "Gen.P.4LSB", "Control 52", "Control 53", "Control 54", + "Control 55", "Control 56", "Control 57", "Control 58", "Control 59", + "Control 60", "Control 61", "Control 62", "Control 63", "Sustain", + "Porta Ped", "Sostenuto", "Soft Pedal", "Control 68", "Hold 2", + "Control 70", "HarmonicCo", "ReleaseTime", "Attack Time", "Brightness", + "Control 75", "Control 76", "Control 77", "Control 78", "Control 79", + "Gen.Purp.5", "Gen.Purp.6", "Gen.Purp.7", "Gen.Purp.8", "Porta Ctrl", + "Control 85", "Control 86", "Control 87", "Control 88", "Control 89", + "Control 90", "Effect1Dep", "Effect2Dep", "Effect3Dep", "Effect4Dep", + "Phaser Dep", "Data Incr", "Data Decr", "NRPN LSB", "NRPN MSB", +/*100*/ "RPN LSB", "RPN MSB", "Control102", "Control103", "Control104", + "Control105", "Control106", "Control107", "Control108", "Control109", + "Control110", "Control111", "Control112", "Control113", "Control114", + "Control115", "Control116", "Control117", "Control118", "Control119", + "AllSndOff", "Reset Ctrl", "Local Ctrl", "AllNoteOff", "OmniModOff", + "OmniModeOn", "MonoModeOn", "PolyModeOn" + }; + +#if 0 +static const char* ctrl14Name[] = { + "BankSel", "Modulation", "BreathCtrl", + "Control 3", "Foot Ctrl", "Porta Time", "DataEntry", + "MainVolume", "Balance", "Control 9", "Pan", + "Expression", "Control 12", "Control 13", "Control 14", + "Control 15", "Gen.Purp.1", "Gen.Purp.2", "Gen.Purp.3", + "Gen.Purp.4", "Control 20", "Control 21", "Control 22", + "Control 23", "Control 24", "Control 25", "Control 26", + "Control 27", "Control 28", "Control 29", "Control 30", + "Control 31", + }; +#endif + +enum { + COL_NAME = 0, COL_TYPE, + COL_HNUM, COL_LNUM, COL_MIN, COL_MAX + }; + +MidiControllerList defaultMidiController; +// +// some global controller which are always available: +// +MidiController veloCtrl("Velocity", CTRL_VELOCITY, 0, 127, 0); +static MidiController pitchCtrl("PitchBend", CTRL_PITCH, -8192, +8191, 0); +static MidiController programCtrl("Program", CTRL_PROGRAM, 0, 0xffffff, 0); +static MidiController mastervolCtrl("MasterVolume", CTRL_MASTER_VOLUME, 0, 0x3fff, 0x3000); +static MidiController volumeCtrl("MainVolume", CTRL_VOLUME, 0, 127, 100); +static MidiController panCtrl("Pan", CTRL_PANPOT, 0, 127, 64); +static MidiController reverbCtrl("ReverbSend", CTRL_REVERB_SEND, 0, 127, 0); +static MidiController chorusCtrl("ChorusSend", CTRL_CHORUS_SEND, 0, 127, 0); +static MidiController variationCtrl("VariationSend",CTRL_VARIATION_SEND,0, 127, 0); + +//--------------------------------------------------------- +// ctrlType2Int +// int2ctrlType +//--------------------------------------------------------- + +static struct { + MidiController::ControllerType type; + QString name; + } ctrlTypes[] = { + { MidiController::Controller7, QString("Control7") }, + { MidiController::Controller14, QString("Control14") }, + { MidiController::RPN, QString("RPN") }, + { MidiController::NRPN, QString("NRPN") }, + { MidiController::Pitch, QString("Pitch") }, + { MidiController::Program, QString("Program") }, + { MidiController::RPN14, QString("RPN14") }, + { MidiController::NRPN14, QString("NRPN14") }, + { MidiController::Controller7, QString("Control") }, // alias + }; + +//--------------------------------------------------------- +// ctrlType2Int +//--------------------------------------------------------- + +MidiController::ControllerType ctrlType2Int(const QString& s) + { + int n = sizeof(ctrlTypes)/sizeof(*ctrlTypes); + for (int i = 0; i < n; ++i) { + if (ctrlTypes[i].name == s) + return ctrlTypes[i].type; + } + return MidiController::ControllerType(0); + } + +//--------------------------------------------------------- +// int2ctrlType +//--------------------------------------------------------- + +const QString& int2ctrlType(int n) + { + static QString dontKnow("?T?"); + int size = sizeof(ctrlTypes)/sizeof(*ctrlTypes); + for (int i = 0; i < size; ++i) { + if (ctrlTypes[i].type == n) + return ctrlTypes[i].name; + } + return dontKnow; + } + +//--------------------------------------------------------- +// initMidiController +//--------------------------------------------------------- + +void initMidiController() + { + static bool initialized = false; + if (initialized) + return; + defaultMidiController.push_back(&veloCtrl); + defaultMidiController.push_back(&pitchCtrl); + defaultMidiController.push_back(&programCtrl); + defaultMidiController.push_back(&mastervolCtrl); + defaultMidiController.push_back(&volumeCtrl); + defaultMidiController.push_back(&panCtrl); + defaultMidiController.push_back(&reverbCtrl); + defaultMidiController.push_back(&chorusCtrl); + defaultMidiController.push_back(&variationCtrl); + initialized = true; + } + +//--------------------------------------------------------- +// midiCtrlName +//--------------------------------------------------------- + +QString midiCtrlName(int ctrl) + { + if (ctrl < 0x10000) + return QString(ctrlName[ctrl]); + QString s("?N?"); + switch(ctrl) { + case CTRL_PITCH: + s = "Pitch"; + break; + case CTRL_PROGRAM: + s = "ProgramChange"; + break; + case CTRL_VELOCITY: + s = "Velocity"; + break; + case CTRL_MASTER_VOLUME: + s = "MasterVolume"; + break; + default: + printf("midiCtrlName unknown %x\n", ctrl); + break; + } + return s; + } + +//--------------------------------------------------------- +// MidiController +//--------------------------------------------------------- + +MidiController::MidiController() + : _name(QString(QT_TR_NOOP("Velocity"))) + { + _num = CTRL_VELOCITY; + _minVal = 0; + _maxVal = 127; + _initVal = 0; + _moveWithPart = true; + } + +MidiController::MidiController(const QString& s, int n, int min, int max, int init, + bool mwp) + : _name(s), _num(n), _minVal(min), _maxVal(max), _initVal(init), + _moveWithPart(mwp) + { + } + +//--------------------------------------------------------- +// type +//--------------------------------------------------------- + +MidiController::ControllerType midiControllerType(int num) + { + if (num == CTRL_PITCH) + return MidiController::Pitch; + if (num == CTRL_PROGRAM) + return MidiController::Program; + if (num == CTRL_VELOCITY || num == CTRL_SVELOCITY) + return MidiController::Velo; + if (num < CTRL_14_OFFSET) + return MidiController::Controller7; + if (num < CTRL_RPN_OFFSET) + return MidiController::Controller14; + if (num < CTRL_NRPN_OFFSET) + return MidiController::RPN; + if (num < CTRL_RPN14_OFFSET) + return MidiController::NRPN; + if (num < CTRL_NRPN14_OFFSET) + return MidiController::RPN14; + if (num < CTRL_NONE_OFFSET) + return MidiController::NRPN14; + return MidiController::Controller7; + } + +//--------------------------------------------------------- +// MidiController::write +//--------------------------------------------------------- + +void MidiController::write(Xml& xml) const + { + ControllerType t = midiControllerType(_num); + QString type(int2ctrlType(t)); + + int h = (_num >> 8) & 0x7f; + int l = _num & 0x7f; + + QString sl; + if ((_num & 0xff) == 0xff) + sl = "Pitch"; + else + sl.setNum(l); + + QString s = QString("Controller name=\"%1\" type=\"%2\" h=\"%3\" l=\"%4\" min=\"%5\" max=\"%6\" init=\"%7\"") + .arg(Xml::xmlString(_name)).arg(type).arg(h).arg(sl).arg(_minVal).arg(_maxVal).arg(_initVal); + if (_comment.isEmpty()) + xml.tagE(s); + else { + xml.putLevel(); + xml << '<' << s << '>' << Xml::xmlString(_comment) << "\n"; + } + } + +//--------------------------------------------------------- +// MidiController::read +//--------------------------------------------------------- + +void MidiController::read(QDomNode node) + { + ControllerType t = Controller7; + static const int NOT_SET = 0x100000; + int l = 0; + + QDomElement e = node.toElement(); + _name = e.attribute("name"); + _comment = e.text(); + t = ctrlType2Int(e.attribute("type")); + int h = e.attribute("h","0").toInt(0,0); + QString s = e.attribute("l"); + if (s == "pitch") + l = 0xff; + else + l = s.toInt(0,0); + _minVal = e.attribute("min", "0").toInt(0,0); + _maxVal = e.attribute("max", "0x100000").toInt(0,0); + _initVal = e.attribute("init", "-1").toInt(0,0); + + _num = (h << 8) + l; + switch (t) { + case RPN: + if (_maxVal == NOT_SET) + _maxVal = 127; + _num |= 0x20000; + break; + case NRPN: + if (_maxVal == NOT_SET) + _maxVal = 127; + _num |= 0x30000; + break; + case Controller7: + if (_maxVal == NOT_SET) + _maxVal = 127; + break; + case Controller14: + _num |= 0x10000; + if (_maxVal == NOT_SET) + _maxVal = 127 * 127 * 127; + break; + case RPN14: + if (_maxVal == NOT_SET) + _maxVal = 127 * 127 * 127; + _num |= 0x50000; + break; + case NRPN14: + if (_maxVal == NOT_SET) + _maxVal = 127 * 127 * 127; + _num |= 0x60000; + break; + case Pitch: + if (_maxVal == NOT_SET) + _maxVal = 8191; + if (_minVal == NOT_SET) + _minVal = -8192; + _num = CTRL_PITCH; + break; + case Program: + if (_maxVal == NOT_SET) + _maxVal = 127 * 127 * 127; + _num = CTRL_PROGRAM; + break; + case Velo: // cannot happen + break; + } + return; + } + +//--------------------------------------------------------- +// type +//--------------------------------------------------------- + +MidiController::ControllerType MidiController::type() const + { + return midiControllerType(num()); + } + +//--------------------------------------------------------- +// genNum +//--------------------------------------------------------- + + +int MidiController::genNum(MidiController::ControllerType t, int h, int l) + { + int val = (h << 8) + l; + switch(t) { + case Controller7: + return l; + case Controller14: + return val + CTRL_14_OFFSET; + case RPN: + return l + CTRL_RPN_OFFSET; + case NRPN: + return l + CTRL_NRPN_OFFSET; + case RPN14: + return val + CTRL_RPN14_OFFSET; + case NRPN14: + return val + CTRL_NRPN14_OFFSET; + case Pitch: + return CTRL_PITCH; + case Program: + return CTRL_PROGRAM; + default: + return -1; + } + } + diff --git a/attic/muse_qt4_evolution/muse/midictrl.h b/attic/muse_qt4_evolution/muse/midictrl.h new file mode 100644 index 00000000..9d20fdcc --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midictrl.h @@ -0,0 +1,168 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MIDICTRL_H__ +#define __MIDICTRL_H__ + +const int CTRL_HBANK = 0x00; +const int CTRL_LBANK = 0x20; + +const int CTRL_HDATA = 0x06; +const int CTRL_LDATA = 0x26; + +const int CTRL_HNRPN = 0x63; +const int CTRL_LNRPN = 0x62; + +const int CTRL_HRPN = 0x65; +const int CTRL_LRPN = 0x64; + +const int CTRL_MODULATION = 0x01; +const int CTRL_PORTAMENTO_TIME = 0x05; +const int CTRL_VOLUME = 0x07; +const int CTRL_PANPOT = 0x0a; +const int CTRL_EXPRESSION = 0x0b; +const int CTRL_SUSTAIN = 0x40; +const int CTRL_PORTAMENTO = 0x41; +const int CTRL_SOSTENUTO = 0x42; +const int CTRL_SOFT_PEDAL = 0x43; +const int CTRL_HARMONIC_CONTENT = 0x47; +const int CTRL_RELEASE_TIME = 0x48; +const int CTRL_ATTACK_TIME = 0x49; + +const int CTRL_BRIGHTNESS = 0x4a; +const int CTRL_PORTAMENTO_CONTROL = 0x54; +const int CTRL_REVERB_SEND = 0x5b; +const int CTRL_CHORUS_SEND = 0x5d; +const int CTRL_VARIATION_SEND = 0x5e; + +const int CTRL_ALL_SOUNDS_OFF = 0x78; // 120 +const int CTRL_RESET_ALL_CTRL = 0x79; // 121 +const int CTRL_LOCAL_OFF = 0x7a; // 122 + +// controller types 0x10000 - 0x1ffff are 14 bit controller with +// 0x1xxyy +// xx - MSB controller +// yy - LSB controller + +// RPN - registered parameter numbers 0x20000 - +// NRPN - non registered parameter numbers 0x30000 - + +// internal controller types: +const int CTRL_PITCH = 0x40000; +const int CTRL_PROGRAM = 0x40001; +const int CTRL_VELOCITY = 0x40002; +const int CTRL_MASTER_VOLUME = 0x40003; +const int CTRL_OTHER = 0x40004; +const int CTRL_SVELOCITY = 0x40005; // single velocity, used for drum editor + // to show only velocity for current instrument +const int CTRL_NO_CTRL = 0x40006; + +const int CTRL_VAL_UNKNOWN = -1; // used as unknown hwVal + +const int CTRL_14_OFFSET = 0x10000; +const int CTRL_RPN_OFFSET = 0x20000; +const int CTRL_NRPN_OFFSET = 0x30000; +const int CTRL_RPN14_OFFSET = 0x50000; +const int CTRL_NRPN14_OFFSET = 0x60000; +const int CTRL_NONE_OFFSET = 0x70000; + +namespace AL { + class Xml; + }; +using AL::Xml; + +//--------------------------------------------------------- +// MidiController +//--------------------------------------------------------- + +class MidiController { + public: + // + // mapping of midi controller types to + // controller number: + // + enum ControllerType { + Controller7, // num values from 0 - 0x7f + Controller14, // values from 0x10000 - 0x12fff + RPN, // registered parameter 0x20000 - + NRPN, // non registered parameter 0x30000 - + RPN14, // registered parameter 0x50000 + NRPN14, // non registered parameter 0x60000 - + Pitch, // num value = CTRL_PITCH + Program, // num value = CTRL_PROGRAM + Velo // not assigned + }; + private: + QString _name; + QString _comment; + int _num; // Controller Number + int _minVal; // controller value range (used in gui) + int _maxVal; + int _initVal; + bool _moveWithPart; + + public: + MidiController(); + MidiController(const QString& n, int num, int min, int max, int init, + bool mwp = true); + const QString& name() const { return _name; } + void setName(const QString& s) { _name = s; } + const QString& comment() const { return _comment; } + void setComment(const QString& s) { _comment = s; } + int num() const { return _num; } + void setNum(int v) { _num = v; } + void write(Xml& xml) const; + void read(QDomNode); + int minVal() const { return _minVal; } + int maxVal() const { return _maxVal; } + int initVal() const { return _initVal; } + void setInitVal(int val) { _initVal = val; } + void setMinVal(int val) { _minVal = val; } + void setMaxVal(int val) { _maxVal = val; } + bool moveWithPart() const { return _moveWithPart; } + void setMoveWithPart(bool v) { _moveWithPart = v; } + ControllerType type() const; + static int genNum(ControllerType, int, int); + }; + +//--------------------------------------------------------- +// MidiControllerList +// this is a list of used midi controllers created +// - excplicit by user +// - implicit during import of a midi file +//--------------------------------------------------------- + +class MidiControllerList : public QList {}; + +typedef MidiControllerList::iterator iMidiController; +typedef MidiControllerList::const_iterator ciMidiController; + +extern MidiControllerList defaultMidiController; +extern void initMidiController(); + +extern MidiController::ControllerType midiControllerType(int num); +extern void configMidiController(); +extern const QString& int2ctrlType(int n); +extern MidiController::ControllerType ctrlType2Int(const QString& s); +extern QString midiCtrlName(int ctrl); +extern MidiController veloCtrl; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/midiedit/CMakeLists.txt b/attic/muse_qt4_evolution/muse/midiedit/CMakeLists.txt new file mode 100644 index 00000000..a71aed71 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/CMakeLists.txt @@ -0,0 +1,71 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +QT4_WRAP_CPP ( midiedit_mocs + midicmd.h + gatetime.h + velocity.h + quantconfig.h + dcanvas.h + drumedit.h + ecanvas.h + midieditor.h + pianoroll.h + prcanvas.h + miditracker.h + trackpattern.h + ) + +QT4_WRAP_UI ( midiedit_ui_headers + midicmd.ui + gatetime.ui + velocity.ui + quantconfig.ui + ) + +add_library ( midiedit STATIC + midicmd.h + gatetime.h + ${midiedit_ui_headers} + ${midiedit_mocs} + midicmd.cpp + gatetime.cpp + velocity.cpp + quantconfig.cpp + citem.h + cmd.h + drummap.h + midicmd.h + citem.cpp + dcanvas.cpp + drumedit.cpp + drummap.cpp + ecanvas.cpp + midieditor.cpp + pianoroll.cpp + prcanvas.cpp + miditracker.cpp + trackpattern.cpp + ) + +set_target_properties( midiedit + PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h" + ) + diff --git a/attic/muse_qt4_evolution/muse/midiedit/citem.cpp b/attic/muse_qt4_evolution/muse/midiedit/citem.cpp new file mode 100644 index 00000000..b7ae8287 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/citem.cpp @@ -0,0 +1,82 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "part.h" +#include "citem.h" + +//--------------------------------------------------------- +// CItem +//--------------------------------------------------------- + +CItem::CItem() + { + isMoving = false; + } + +CItem::CItem(const Event& e, Part* p) + { + event = e; + part = p; + isMoving = false; + pos = e.pos() + *p; + } + +//--------------------------------------------------------- +// isSelected +//--------------------------------------------------------- + +bool CItem::isSelected() const + { + return event.empty() ? part->selected() : event.selected(); + } + +//--------------------------------------------------------- +// setSelected +//--------------------------------------------------------- + +void CItem::setSelected(bool f) + { + event.empty() ? part->setSelected(f) : event.setSelected(f); + } + +//--------------------------------------------------------- +// CItemList +//--------------------------------------------------------- + +CItem* CItemList::find(const QPoint& pos) const + { + for (rciCItem i = rbegin(); i != rend(); ++i) { + if (i->second->contains(pos)) + return i->second; + } + return 0; + } + +//--------------------------------------------------------- +// CItemList +//--------------------------------------------------------- + +void CItemList::add(CItem* item) + { + std::multimap >::insert( + std::pair (item->pos.tick(), item) + ); + } + diff --git a/attic/muse_qt4_evolution/muse/midiedit/citem.h b/attic/muse_qt4_evolution/muse/midiedit/citem.h new file mode 100644 index 00000000..5b3452ac --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/citem.h @@ -0,0 +1,70 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __CITEM_H__ +#define __CITEM_H__ + +#include "al/pos.h" +#include "event.h" + +class Part; + +//--------------------------------------------------------- +// CItem +// Canvas Item +//--------------------------------------------------------- + +struct CItem { + Event event; + Part* part; + + bool isMoving; + AL::Pos moving; + int my; + + QRect bbox; + AL::Pos pos; + + CItem(); + CItem(const Event& e, Part* p); + + bool isSelected() const; + void setSelected(bool f); + bool contains(const QPoint& p) const { return bbox.contains(p); } + bool intersects(const QRect& r) const { return r.intersects(bbox); } + }; + +typedef std::multimap >::iterator iCItem; +typedef std::multimap >::const_iterator ciCItem; +typedef std::multimap >::const_reverse_iterator rciCItem; + +//--------------------------------------------------------- +// CItemList +// Canvas Item List +//--------------------------------------------------------- + +class CItemList: public std::multimap > { + public: + void add(CItem*); + CItem* find(const QPoint& pos) const; + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/midiedit/cmd.h b/attic/muse_qt4_evolution/muse/midiedit/cmd.h new file mode 100644 index 00000000..7f51abdd --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/cmd.h @@ -0,0 +1,32 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __CMD_H__ +#define __CMD_H__ + +enum { + MCMD_LEFT, + MCMD_RIGHT, + MCMD_INSERT, + MCMD_DELETE, + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/midiedit/dcanvas.cpp b/attic/muse_qt4_evolution/muse/midiedit/dcanvas.cpp new file mode 100644 index 00000000..20d8170d --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/dcanvas.cpp @@ -0,0 +1,723 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "dcanvas.h" +#include "song.h" +#include "midieditor.h" +#include "drummap.h" +#include "audio.h" +#include "velocity.h" +#include "gconfig.h" +#include "part.h" + +#define CARET 12 +#define CARET2 6 + +//--------------------------------------------------------- +// drumMap +//--------------------------------------------------------- + +DrumMap* DrumCanvas::drumMap() const + { + DrumMap* drumMap = track()->drumMap(); + if (drumMap == 0) + drumMap = &noDrumMap; + return drumMap; + } + +//--------------------------------------------------------- +// y2pitch +//--------------------------------------------------------- + +int DrumCanvas::y2pitch(int y) const + { + return drumMap()->anote(EventCanvas::y2pitch(y)); + } + +//--------------------------------------------------------- +// pitch2y +//--------------------------------------------------------- + +int DrumCanvas::pitch2y(int pitch) const + { + return EventCanvas::pitch2y(drumMap()->outmap(pitch)); + } + +//--------------------------------------------------------- +// DrumCanvas +//--------------------------------------------------------- + +DrumCanvas::DrumCanvas(MidiEditor* pr) + : EventCanvas(pr, TIME_CANVAS_DRUMEDIT) + { + singlePitch = -1; + verticalScrollBar()->setSingleStep(drumHeight/2); + canvasTools = PointerTool | PencilTool | RubberTool; + songChanged(SC_TRACK_INSERTED); + connect(track(), SIGNAL(drumMapChanged()), widget(), SLOT(update())); + } + +//--------------------------------------------------------- +// addItem +//--------------------------------------------------------- + +void DrumCanvas::addItem(Part* part, const Event& event) + { + CItem* item = new CItem(event, part); + unsigned tick = event.tick() + part->tick(); + item->pos = Pos(tick); + items.add(item); + } + +//--------------------------------------------------------- +// paint +//--------------------------------------------------------- + +void DrumCanvas::paint(QPainter& p, QRect r) + { + p.setPen(QPen(Qt::black, 0.0)); + + QPainterPath pa; + pa.moveTo(-CARET2, 0); + pa.lineTo(0, - CARET2); + pa.lineTo(CARET2, 0); + pa.lineTo(0, CARET2); + pa.closeSubpath(); + + Pos p1(pix2pos(r.x() - CARET2)); + Pos p2(pix2pos(r.x() + r.width() + CARET2)); + iCItem from(items.lower_bound(p1.tick())); + iCItem to(items.upper_bound(p2.tick())); + + for (iCItem i = from; i != to; ++i) { + CItem* e = i->second; + int x = pos2pix(AL::Pos(i->first)); + int y = pitch2y(e->event.pitch()) + drumHeight/2; + QPoint pt(x, y); + Event me(e->event); + + DrumMapEntry* dm = drumMap()->entry(me.pitch()); //Get the drum item + QColor color; + int velo = me.velo(); + if (velo < dm->lv1) + color.setRgb(240, 240, 255); + else if (velo < dm->lv2) + color.setRgb(200, 200, 255); + else if (velo < dm->lv3) + color.setRgb(170, 170, 255); + else + color.setRgb(0, 0, 255); + + if (e->part != curPart) + p.setBrush(Qt::lightGray); + else if (e->isMoving) { + p.setBrush(Qt::gray); + p.translate(pt); + p.drawPath(pa); + p.translate(-pt); + p.setBrush(Qt::black); + + int x = pos2pix(e->moving); + int y = e->my + drumHeight/2; + pt = QPoint(x, y); + } + else if (e->isSelected()) + p.setBrush(Qt::black); + else + p.setBrush(color); + p.translate(pt); + p.drawPath(pa); + p.translate(-pt); + } + + //--------------------------------------------------- + // draw lasso + //--------------------------------------------------- + + if (drag == DRAG_LASSO) { + p.setPen(Qt::blue); + p.setBrush(Qt::NoBrush); + p.drawRect(lasso); + } + } + +//--------------------------------------------------------- +// moveItem +//--------------------------------------------------------- + +void DrumCanvas::moveItem(CItem* nevent, DragType dtype) + { + Part* part = nevent->part; + Event event = nevent->event; + int npitch = y2pitch(nevent->my); + + Event newEvent = event.clone(); + newEvent.setPitch(npitch); + newEvent.setPos(nevent->moving - *(nevent->part)); + if (dtype == MOVE_COPY) + audio->msgAddEvent(newEvent, part, false); + else + audio->msgChangeEvent(event, newEvent, part, false); + } + +//--------------------------------------------------------- +// newItem +//--------------------------------------------------------- + +CItem* DrumCanvas::newItem(const QPoint& p, int state) + { + AL::Pos pos(pix2pos(p.x())); + pos.snap(raster()); + if (pos < partPos1 || pos >= partPos2) { + return 0; + } + + int pitch = y2pitch(p.y()); + int instr = drumMap()->outmap(pitch); + DrumMapEntry* dm = drumMap()->entry(instr); + int velo = dm->lv4; + if (state == Qt::ShiftModifier) + velo = dm->lv3; + else if (state == Qt::ControlModifier) + velo = dm->lv2; + else if (state == (Qt::ControlModifier | Qt::ShiftModifier)) + velo = dm->lv1; + + Event e(Note); + e.setPos(pos - *curPart); + e.setPitch(drumMap()->anote(instr)); + e.setVelo(velo); + e.setLenTick(dm->len); + return new CItem(e, curPart); + } + +//--------------------------------------------------------- +// resizeItem +//--------------------------------------------------------- + +void DrumCanvas::resizeItem(CItem* nevent, bool) + { + Event ev = nevent->event; + audio->msgDeleteEvent(ev, nevent->part); + } + +//--------------------------------------------------------- +// newItem +//--------------------------------------------------------- + +void DrumCanvas::newItem(CItem* nevent, bool noSnap) + { + Event event = nevent->event; + Pos pos(nevent->pos); + if (!noSnap) + pos.snap(editor->raster()); + event.setPos(pos - *(nevent->part)); + int npitch = event.pitch(); + event.setPitch(npitch); + + // + // check for existing event + // if found change command semantic from insert to delete + // + EventList* el = nevent->part->events(); + iEvent lower = el->lower_bound(event.tick()); + iEvent upper = el->upper_bound(event.tick()); + + for (iEvent i = lower; i != upper; ++i) { + Event ev = i->second; + if (ev.pitch() == npitch) { + audio->msgDeleteEvent(ev, nevent->part); + return; + } + } + + audio->msgAddEvent(event, nevent->part); + } + +//--------------------------------------------------------- +// deleteItem +//--------------------------------------------------------- + +bool DrumCanvas::deleteItem(CItem* item) + { + Event ev = item->event; + audio->msgDeleteEvent(ev, item->part); + return false; + } + +//--------------------------------------------------------- +// cmd +//--------------------------------------------------------- + +void DrumCanvas::cmd(QAction* a) + { + QString cmd(a->data().toString()); + + if (cmd == "paste") + paste(); + else if (cmd == "sel_all") { + for (iCItem k = items.begin(); k != items.end(); ++k) { + if (!k->second->isSelected()) + selectItem(k->second, true); + } + } + else if (cmd == "sel_none") + deselectAll(); + else if (cmd == "sel_inv") { + for (iCItem k = items.begin(); k != items.end(); ++k) + selectItem(k->second, !k->second->isSelected()); + } + else if (cmd == "sel_ins_loc") { + for (iCItem k = items.begin(); k != items.end(); ++k) { + CItem* nevent = k->second; + Part* part = nevent->part; + Event event = nevent->event; + unsigned tick = event.tick() + part->tick(); + if (tick < song->lpos() || tick >= song->rpos()) + selectItem(k->second, false); + else + selectItem(k->second, true); + } + } + else if (cmd == "sel_out_loc") { + for (iCItem k = items.begin(); k != items.end(); ++k) { + CItem* nevent = k->second; + Part* part = nevent->part; + Event event = nevent->event; + unsigned tick = event.tick() + part->tick(); + if (tick < song->lpos() || tick >= song->rpos()) + selectItem(k->second, true); + else + selectItem(k->second, false); + } + } + else if (cmd == "delete") { + if (selectionSize()) { + song->startUndo(); + for (iCItem i = items.begin(); i != items.end(); ++i) { + if (!i->second->isSelected()) + continue; + Event ev = i->second->event; + audio->msgDeleteEvent(ev, i->second->part, false); + } + song->endUndo(SC_EVENT_REMOVED); + } + return; + } + else if (cmd == "midi_fixed_len") { + if (selectionSize()) { + song->startUndo(); + for (iCItem k = items.begin(); k != items.end(); ++k) { + if (k->second->isSelected()) { + CItem* devent = k->second; + Event event = devent->event; + Event newEvent = event.clone(); + newEvent.setLenTick(drumMap()->entry(event.pitch())->len); + audio->msgChangeEvent(event, newEvent, devent->part, false); + } + } + song->endUndo(SC_EVENT_MODIFIED); + } + } + else if (cmd == "goto_left") { + int frames = pos[0].tick() - editor->rasterStep(pos[0].tick()); + if (frames < 0) + frames = 0; + Pos p(frames, AL::TICKS); + song->setPos(0, p, true, true, true); + } + else if (cmd == "goto_right") { + Pos p(pos[0].tick() + editor->rasterStep(pos[0].tick()), AL::TICKS); + song->setPos(0, p, true, true, true); + } + else if (cmd == "mid_mod_velo") { + Velocity w(this); + w.setRange(editor->applyTo()); + if (w.exec()) { + editor->setApplyTo(w.range()); + int rate = w.rateVal(); + int offset = w.offsetVal(); + + song->startUndo(); + for (iCItem k = items.begin(); k != items.end(); ++k) { + CItem* devent = k->second; + Event event = devent->event; + if (event.type() != Note) + continue; + unsigned tick = event.tick(); + bool selected = devent->isSelected(); + bool inLoop = (tick >= song->lpos()) && (tick < song->rpos()); + + int range = editor->applyTo(); + if ((range == RANGE_ALL) + || (range == RANGE_SELECTED && selected) + || (range == RANGE_LOOPED && inLoop) + || (range == (RANGE_LOOPED | RANGE_SELECTED) && selected && inLoop)) { + int velo = event.velo(); + + //velo = rate ? (velo * 100) / rate : 64; + velo = (velo * rate) / 100; + velo += offset; + + if (velo <= 0) + velo = 1; + if (velo > 127) + velo = 127; + if (event.velo() != velo) { + Event newEvent = event.clone(); + newEvent.setVelo(velo); + audio->msgChangeEvent(event, newEvent, devent->part, false); + } + } + } + song->endUndo(SC_EVENT_MODIFIED); + } + } + widget()->update(); + } + +//--------------------------------------------------------- +// paste +// paste events +//--------------------------------------------------------- + +void DrumCanvas::paste() + { + QString stype("x-muse-eventlist"); + QString s = QApplication::clipboard()->text(stype, QClipboard::Selection); + pasteAt(s, song->cpos()); + } + +//--------------------------------------------------------- +// startDrag +//--------------------------------------------------------- + +void DrumCanvas::startDrag(CItem* /* item*/, bool /*copymode*/) + { +printf("DrumCanvas: startDrag\n"); +#if 0 //TD + QMimeData* drag = getTextDrag(); + if (drag) { + QApplication::clipboard()->setMimeData(drag, QClipboard::Selection); + if (copymode) + drag->dragCopy(); + else + drag->dragMove(); + } +#endif + } + +//--------------------------------------------------------- +// dragEnterEvent +//--------------------------------------------------------- + +void DrumCanvas::dragEnterEvent(QDragEnterEvent* /*event*/) + { +printf("DrumCanvas: dragEnterEvent\n"); +//TD event->accept(Q3TextDrag::canDecode(event)); + } + +//--------------------------------------------------------- +// dragMoveEvent +//--------------------------------------------------------- + +void DrumCanvas::dragMoveEvent(QDragMoveEvent*) + { + printf("drag move %p\n", this); + } + +//--------------------------------------------------------- +// dragLeaveEvent +//--------------------------------------------------------- + +void DrumCanvas::dragLeaveEvent(QDragLeaveEvent*) + { + printf("drag leave\n"); + } + +//--------------------------------------------------------- +// dropEvent +//--------------------------------------------------------- + +void DrumCanvas::viewDropEvent(QDropEvent* /*event*/) + { +printf("DrumCanvas: viewDropEvent\n"); +#if 0 //TD + QString text; + if (event->source() == this) { + printf("local DROP\n"); + return; + } + if (Q3TextDrag::decode(event, text)) { +// printf("drop <%s>\n", text.ascii()); + int x = editor->rasterVal(event->pos().x()); + if (x < 0) + x = 0; + pasteAt(text, x); + } +#endif + } + +//--------------------------------------------------------- +// keyPressed +//--------------------------------------------------------- + +void DrumCanvas::keyPressed(int index, bool) + { + int pitch = drumMap()->entry(index)->anote; + + // play note: + MidiEvent e(0, 0, 0x90, pitch, 127); + track()->playMidiEvent(&e); + } + +//--------------------------------------------------------- +// keyReleased +//--------------------------------------------------------- + +void DrumCanvas::keyReleased(int index, bool) + { + int pitch = drumMap()->entry(index)->anote; + + // release note: + MidiEvent e(0, 0, 0x90, pitch, 0); + track()->playMidiEvent(&e); + } + +//--------------------------------------------------------- +// resizeEvent +//--------------------------------------------------------- + +void DrumCanvas::resizeEvent(QResizeEvent* ev) + { + if (ev->size().width() != ev->oldSize().width()) + emit newWidth(ev->size().width()); + EventCanvas::resizeEvent(ev); + } + + +//--------------------------------------------------------- +// modifySelected +//--------------------------------------------------------- + +void DrumCanvas::modifySelected(NoteInfo::ValType type, int delta) + { + audio->msgIdle(true); + song->startUndo(); + for (iCItem i = items.begin(); i != items.end(); ++i) { + if (!(i->second->isSelected())) + continue; + CItem* e = i->second; + Event event = e->event; + if (event.type() != Note) + continue; + + Part* part = e->part; + Event newEvent = event.clone(); + + switch (type) { + case NoteInfo::VAL_TIME: + { + int newTime = event.tick() + delta; + if (newTime < 0) + newTime = 0; + newEvent.setTick(newTime); + } + break; + case NoteInfo::VAL_LEN: + /* + { + int len = event.lenTick() + delta; + if (len < 1) + len = 1; + newEvent.setLenTick(len); + } + */ + printf("DrumCanvas::modifySelected - NoteInfo::VAL_LEN not implemented\n"); + break; + case NoteInfo::VAL_VELON: + /* + { + int velo = event->velo() + delta; + if (velo > 127) + velo = 127; + else if (velo < 0) + velo = 0; + newEvent.setVelo(velo); + } + */ + printf("DrumCanvas::modifySelected - NoteInfo::VAL_VELON not implemented\n"); + break; + case NoteInfo::VAL_VELOFF: + /* + { + int velo = event.veloOff() + delta; + if (velo > 127) + velo = 127; + else if (velo < 0) + velo = 0; + newEvent.setVeloOff(velo); + } + */ + printf("DrumCanvas::modifySelected - NoteInfo::VAL_VELOFF not implemented\n"); + break; + case NoteInfo::VAL_PITCH: + { + int pitch = event.pitch() - delta; // Reversing order since the drumlist is displayed in increasing order + if (pitch > 127) + pitch = 127; + else if (pitch < 0) + pitch = 0; + newEvent.setPitch(pitch); + } + break; + } + song->changeEvent(event, newEvent, part); + song->undoOp(UndoOp::ModifyEvent, newEvent, event, part); + } + song->endUndo(SC_EVENT_MODIFIED); + audio->msgIdle(false); + } + +//--------------------------------------------------------- +// paintDrumList +//--------------------------------------------------------- + +void DrumCanvas::paintDrumList(QPainter& p, QRect r) + { + p.fillRect(r, QColor(0xe0, 0xe0, 0xe0)); + paintVLine(p, 0, rPanelB.y(), rPanelA.x() + rPanelA.width()); +// p.setFont(config.fonts[1]); + + int yoff = wpos.y() - rPanelA.y(); + int i = (r.y() + yoff) / drumHeight; + if (i < 0) + i = 0; + if (i > 127) + return; + int y = i * drumHeight - yoff; + DrumMap* dm = drumMap(); + + for (; i < 128; ++i, y += drumHeight) { + if (y > r.y() + r.height()) + break; + QRect r(3, y, drumWidth-4, drumHeight); + if (dm->anote(i) == curPitch || dm->anote(i) == singlePitch) + p.fillRect(0, y, drumWidth-4, drumHeight, Qt::white); + DrumMapEntry* de = dm->entry(i); + if (de->mute) { + p.setPen(Qt::red); + p.drawText(r, Qt::AlignVCenter | Qt::AlignLeft, "m"); + p.setPen(Qt::darkGray); + p.drawText(r.adjusted(16, 0, 0, 0), Qt::AlignVCenter | Qt::AlignLeft, de->name); + } + else { + p.setPen(Qt::black); + p.drawText(r, Qt::AlignVCenter | Qt::AlignLeft, "m"); + p.drawText(r.adjusted(16, 0, 0, 0), Qt::AlignVCenter | Qt::AlignLeft, de->name); + } + if (i != 0) + p.drawLine(0, y, drumWidth-3, y); + } + p.setPen(QPen(Qt::darkGray, 1)); + p.drawLine(17, r.y(), 17, r.y() + r.height()); + } + +//--------------------------------------------------------- +// searchItem +//--------------------------------------------------------- + +CItem* DrumCanvas::searchItem(const QPoint& p) const + { + Pos p1(pix2pos(p.x() - CARET2)); + Pos p2(pix2pos(p.x() + CARET2)); + + ciCItem from(items.lower_bound(p1.tick())); + ciCItem to(items.upper_bound(p2.tick())); + + int pitch = y2pitch(p.y()); + for (ciCItem i = from; i != to; ++i) { + if (pitch == i->second->event.pitch()) + return i->second; + } + return 0; + } + +//--------------------------------------------------------- +// selectLasso +//--------------------------------------------------------- + +void DrumCanvas::selectLasso(bool toggle) + { + Pos p1(pix2pos(lasso.x())); + Pos p2(pix2pos(lasso.x() + lasso.width())); + + iCItem from(items.lower_bound(p1.tick())); + iCItem to(items.upper_bound(p2.tick())); + int y = lasso.y(); + int pitch1 = y2pitch(y); + int pitch2 = y2pitch(y + lasso.height()); + + int n = 0; + for (iCItem i = from; i != to; ++i) { + CItem* item = i->second; + int pitch = item->event.pitch(); + if (pitch >= pitch1 && pitch <= pitch2) { + selectItem(item, !(toggle && item->isSelected())); + ++n; + } + } + if (n) { + updateSelection(); + widget()->update(); + } + } + +//--------------------------------------------------------- +// mousePress +//--------------------------------------------------------- + +void DrumCanvas::mousePress(QMouseEvent* ev) + { + QPoint r(ev->pos()); + int pitch = y2pitch(r.y() - rPanelA.y() - wpos.y()); + if (r.x() < 20) { + // + // "mute" button click + // + DrumMap* dm = drumMap(); + int idx = dm->outmap(pitch); + DrumMapEntry* de = dm->entry(idx); + de->mute = !de->mute; + widget()->update(rPanelA); + return; + } + else if (r.x() < rCanvasA.x()) { + if (pitch != singlePitch) { + singlePitch = pitch; + for (iCtrlEdit i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i) + (*i)->setSinglePitch(singlePitch); + widget()->update(); + } + } + EventCanvas::mousePress(ev); + } + + diff --git a/attic/muse_qt4_evolution/muse/midiedit/dcanvas.h b/attic/muse_qt4_evolution/muse/midiedit/dcanvas.h new file mode 100644 index 00000000..9d4ab754 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/dcanvas.h @@ -0,0 +1,77 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __DCANVAS_H__ +#define __DCANVAS_H__ + +#include "ecanvas.h" + +class MidiEditor; +class DrumMap; + +//--------------------------------------------------------- +// DrumCanvas +//--------------------------------------------------------- + +class DrumCanvas : public EventCanvas { + Q_OBJECT + + int singlePitch; + virtual void mousePress(QMouseEvent*); + virtual void paint(QPainter&, QRect); + virtual void addItem(Part* part, const Event& event); + virtual void moveItem(CItem*, DragType); + virtual CItem* newItem(const QPoint&, int); + virtual void resizeItem(CItem*, bool); + virtual void newItem(CItem*, bool); + virtual bool deleteItem(CItem*); + virtual CItem* searchItem(const QPoint& p) const; + + void copy(); + void paste(); + void startDrag(CItem*, bool copymode); + void dragEnterEvent(QDragEnterEvent* event); + void dragMoveEvent(QDragMoveEvent*); + void dragLeaveEvent(QDragLeaveEvent*); + void viewDropEvent(QDropEvent* event); + virtual void resizeEvent(QResizeEvent*); + virtual void paintDrumList(QPainter&, QRect); + virtual void selectLasso(bool toggle); + + DrumMap* drumMap() const; + + protected: + virtual int y2pitch(int y) const; + virtual int pitch2y(int pitch) const; + + signals: + void newWidth(int); + + public slots: + void keyPressed(int, bool); + void keyReleased(int, bool); + + public: + DrumCanvas(MidiEditor*); + void cmd(QAction*); + virtual void modifySelected(NoteInfo::ValType type, int delta); + }; +#endif + diff --git a/attic/muse_qt4_evolution/muse/midiedit/drumedit.cpp b/attic/muse_qt4_evolution/muse/midiedit/drumedit.cpp new file mode 100644 index 00000000..a21a56a0 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/drumedit.cpp @@ -0,0 +1,450 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "drumedit.h" +#include "icons.h" +#include "drummap.h" +#include "audio.h" +#include "shortcuts.h" +#include "part.h" +#include "muse.h" +#include "song.h" + +static const int drumeditTools = PointerTool | PencilTool | RubberTool | DrawTool; + +int DrumEdit::initWidth = DrumEdit::INIT_WIDTH; +int DrumEdit::initHeight = DrumEdit::INIT_HEIGHT; +int DrumEdit::initRaster = DrumEdit::INIT_RASTER; +int DrumEdit::initQuant = DrumEdit::INIT_QUANT; +bool DrumEdit::initFollow = DrumEdit::INIT_FOLLOW; +bool DrumEdit::initSpeaker = DrumEdit::INIT_SPEAKER; +bool DrumEdit::initMidiin = DrumEdit::INIT_MIDIIN; +double DrumEdit::initXmag = 0.08; // DrumEdit::INIT_XMAG; +int DrumEdit::initApplyTo = DrumEdit::INIT_APPLY_TO; + +//--------------------------------------------------------- +// DrumEdit +//--------------------------------------------------------- + +DrumEdit::DrumEdit(PartList* pl, bool init) + : MidiEditor(pl) + { + _applyTo = initApplyTo; + + deltaMode = false; + drumMap = &noDrumMap; + + //---------Pulldown Menu---------------------------- + QMenuBar* mb = menuBar(); + + menuEdit->addSeparator(); + menuEdit->addAction(getAction("delete", this)); + + // Functions + menuFunctions = mb->addMenu(tr("&Functions")); + menuFunctions->addAction(getAction("midi_fixed_len", this)); + menuFunctions->addAction(getAction("midi_mod_velo", this)); + + menuSelect = menuEdit->addMenu(tr("&Select")); + menuSelect->setIcon(QIcon(*selectIcon)); + + menuSelect->addAction(getAction("sel_all", this)); + menuSelect->addAction(getAction("sel_none", this)); + menuSelect->addAction(getAction("sel_inv", this)); + menuSelect->addSeparator(); + menuSelect->addAction(getAction("sel_ins_loc", this)); + menuSelect->addAction(getAction("sel_out_loc", this)); + + connect(menuSelect, SIGNAL(triggered(QAction*)), SLOT(cmd(QAction*))); + connect(menuFunctions, SIGNAL(triggered(QAction*)), SLOT(cmd(QAction*))); + + //--------------------------------------------------- + // Toolbars + //--------------------------------------------------- + + tools = addToolBar(tr("Drum Tools")); + tools->addAction(undoAction); + tools->addAction(redoAction); + tools->addSeparator(); + + tools->addAction(stepRecAction); + stepRecAction->setChecked(INIT_SREC); + + tools->addAction(midiInAction); + midiInAction->setChecked(INIT_MIDIIN); + + tools->addAction(speaker); + speaker->setChecked(INIT_SPEAKER); + + tools->addAction(followSongAction); + followSongAction->setChecked(INIT_FOLLOW); + + tools2 = new EditToolBar(this, drumeditTools); + addToolBar(tools2); + + QToolBar* transport = addToolBar(tr("Transport")); + muse->setupTransportToolbar(transport); + + addToolBarBreak(); + toolbar = new Toolbar1(initRaster, initQuant, false); + addToolBar(toolbar); + addToolBarBreak(); + info = new NoteInfo(this); + addToolBar(info); + + tcanvas = new DrumCanvas(this); + setCentralWidget(tcanvas); + tcanvas->setCornerWidget(new QSizeGrip(tcanvas)); + tcanvas->setFollow(INIT_FOLLOW); + + connect(song, SIGNAL(posChanged(int,const AL::Pos&,bool)), canvas(), SLOT(setLocatorPos(int,const AL::Pos&,bool))); + connect(canvas(), SIGNAL(posChanged(int,const AL::Pos&)), SLOT(setPos(int,const AL::Pos&))); + + connect(canvas(), SIGNAL(toolChanged(int)), tools2, SLOT(set(int))); + connect(tools2, SIGNAL(toolChanged(int)), canvas(), SLOT(setTool(int))); + + connect(canvas(), SIGNAL(selectionChanged(int, Event&, Part*)), + SLOT(setSelection(int, Event&, Part*))); + + setWindowTitle(canvas()->getCaption()); + + Pos p1(0, AL::TICKS), p2(0, AL::TICKS); + canvas()->range(p1, p2); + p2 += AL::sigmap.ticksMeasure(p2.tick()); // show one more measure + canvas()->setTimeRange(p1, p2); + + // connect toolbar + connect(canvas(), SIGNAL(cursorPos(const AL::Pos&,bool)), toolbar, SLOT(setTime(const AL::Pos&,bool))); + connect(toolbar, SIGNAL(quantChanged(int)), SLOT(setQuant(int))); + connect(toolbar, SIGNAL(rasterChanged(int)), SLOT(setRaster(int))); + connect(toolbar, SIGNAL(soloChanged(bool)), SLOT(soloChanged(bool))); + connect(toolbar, SIGNAL(toChanged(int)), SLOT(setApplyTo(int))); + + connect(info, SIGNAL(valueChanged(NoteInfo::ValType, int)), SLOT(noteinfoChanged(NoteInfo::ValType, int))); + + clipboardChanged(); // enable/disable "Paste" + selectionChanged(); // enable/disable "Copy" & "Paste" + + canvas()->selectFirst(); + + // + // install misc shortcuts + // + QShortcut* sc; + sc = new QShortcut(Qt::Key_Escape, this); + sc->setContext(Qt::WindowShortcut); + connect(sc, SIGNAL(activated()), SLOT(close())); + + QSignalMapper* cmdMap = new QSignalMapper(this); + static const char* actions[] = { + "curpos_increase", "curpos_decrease", + "pointer", "pencil", "eraser", + "midi_quant_1", "midi_quant_2", "midi_quant_3", "midi_quant_4", + "midi_quant_5", "midi_quant_6", "midi_quant_7", + "midi_quant_triol", "midi_quant_punct", "midi_quant_punct2" + }; + for (unsigned i = 0; i < sizeof(actions)/sizeof(*actions); ++i) { + QAction* a = getAction(actions[i], this); + addAction(a); + cmdMap->setMapping(a, a); + connect(a, SIGNAL(triggered()), cmdMap, SLOT(map())); + } + connect(cmdMap, SIGNAL(mapped(QObject*)), SLOT(drumCmd(QObject*))); + + + connect(song, SIGNAL(songChanged(int)), canvas(), SLOT(songChanged(int))); + connect(followSongAction, SIGNAL(toggled(bool)), canvas(), SLOT(setFollow(bool))); + canvas()->selectFirst(); + + Part* part = canvas()->part(); + + setRaster(part->raster() != -1 ? part->raster() : initRaster); + setQuant(part->quant() != -1 ? part->quant() : initQuant); + setXmag(part->xmag() != -1.0 ? part->xmag() : initXmag); + + if (init) + initFromPart(); + else + resize(initWidth, initHeight); + } + +//--------------------------------------------------------- +// ~DrumEdit +//--------------------------------------------------------- + +DrumEdit::~DrumEdit() + { + } + +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void DrumEdit::closeEvent(QCloseEvent* e) + { + MidiEditor::closeEvent(e); + } + +//--------------------------------------------------------- +// setSelection +// update Info Line +//--------------------------------------------------------- + +void DrumEdit::setSelection(int tick, Event& e, Part* p) + { + int selections = canvas()->selectionSize(); + selEvent = e; + selPart = p; + + if (selections > 1) { + info->setEnabled(true); + info->setDeltaMode(true); + if (!deltaMode) { + deltaMode = true; + info->setValues(0, 0, 0, 0, 0); + tickOffset = 0; + lenOffset = 0; + pitchOffset = 0; + veloOnOffset = 0; + veloOffOffset = 0; + } + } + else if (selections == 1) { + deltaMode = false; + info->setEnabled(true); + info->setDeltaMode(false); + info->setValues(tick, + selEvent.lenTick(), + selEvent.pitch(), + selEvent.velo(), + selEvent.veloOff()); + } + else { + deltaMode = false; + info->setEnabled(false); + } + selectionChanged(); + } + +//--------------------------------------------------------- +// soloChanged +//--------------------------------------------------------- + +void DrumEdit::soloChanged(bool flag) + { + song->setSolo(canvas()->track(), flag); + } + +//--------------------------------------------------------- +// edit currently selected Event +//--------------------------------------------------------- + +void DrumEdit::noteinfoChanged(NoteInfo::ValType type, int val) + { + int selections = canvas()->selectionSize(); + + if (selections == 0) { + printf("noteinfoChanged while nothing selected\n"); + } + else if (selections == 1) { + Event event = selEvent.clone(); + switch(type) { + case NoteInfo::VAL_TIME: + event.setTick(val - selPart->tick()); + break; + case NoteInfo::VAL_LEN: + event.setLenTick(val); + break; + case NoteInfo::VAL_VELON: + event.setVelo(val); + break; + case NoteInfo::VAL_VELOFF: + event.setVeloOff(val); + break; + case NoteInfo::VAL_PITCH: + event.setPitch(val); + break; + } + audio->msgChangeEvent(selEvent, event, selPart); + } + else { + // multiple events are selected; treat noteinfo values + // as offsets to event values + + int delta = 0; + switch (type) { + case NoteInfo::VAL_TIME: + delta = val - tickOffset; + tickOffset = val; + break; + case NoteInfo::VAL_LEN: + delta = val - lenOffset; + lenOffset = val; + break; + case NoteInfo::VAL_VELON: + delta = val - veloOnOffset; + veloOnOffset = val; + break; + case NoteInfo::VAL_VELOFF: + delta = val - veloOffOffset; + veloOffOffset = val; + break; + case NoteInfo::VAL_PITCH: + delta = val - pitchOffset; + pitchOffset = val; + break; + } + if (delta) + canvas()->modifySelected(type, delta); + } + } + +//--------------------------------------------------------- +// cmd +// pulldown menu commands +//--------------------------------------------------------- + +void DrumEdit::cmd(QAction* a) + { + canvas()->cmd(a); + } + +//--------------------------------------------------------- +// drumCmd +//--------------------------------------------------------- + +void DrumEdit::drumCmd(QObject* object) + { + QAction* a = (QAction*)object; + QString cmd(a->data().toString()); + + static const int rasterTable[] = { + //-9----8- 7 6 5 4 3(1/4) 2 1 + 4, 8, 16, 32, 64, 128, 256, 512, 1024, // triple + 6, 12, 24, 48, 96, 192, 384, 768, 1536, + 9, 18, 36, 72, 144, 288, 576, 1152, 2304 // dot + }; + + DrumCanvas* dc = canvas(); + int index = 0; + int n = sizeof(rasterTable); + for (; index < n; ++index) + if (rasterTable[index] == raster()) + break; + int off = (index / 9) * 9; + index = index % 9; + int val; + + if (cmd == "curpos_increase") { + dc->cmd(a); + return; + } + else if (cmd == "curpos_decrease") { + dc->cmd(a); + return; + } + else if (cmd == "pointer") { + tools2->set(PointerTool); + return; + } + else if (cmd == "pencil") { + tools2->set(PencilTool); + return; + } + else if (cmd == "eraser") { + tools2->set(RubberTool); + return; + } + else if (cmd == "midi_quant_1") + val = rasterTable[8 + off]; + else if (cmd == "midi_quant_2") + val = rasterTable[7 + off]; + else if (cmd == "midi_quant_3") + val = rasterTable[6 + off]; + else if (cmd == "midi_quant_4") + val = rasterTable[5 + off]; + else if (cmd == "midi_quant_5") + val = rasterTable[4 + off]; + else if (cmd == "midi_quant_6") + val = rasterTable[3 + off]; + else if (cmd == "midi_quant_7") + val = rasterTable[2 + off]; + else if (cmd == "midi_quant_triol") + val = rasterTable[index + ((off == 0) ? 9 : 0)]; + else if (cmd == "midi_quant_punct") + val = rasterTable[index + ((off == 18) ? 9 : 18)]; + + else if (cmd == "midi_quant_punct2") { + if ((off == 18) && (index > 2)) { + val = rasterTable[index + 9 - 1]; + } + else if ((off == 9) && (index < 8)) { + val = rasterTable[index + 18 + 1]; + } + else + return; + } + else { + printf("DrumEdit::drumCmd: unknown cmd <%s>\n", cmd.toLatin1().data()); + return; + } + setQuant(val); + setRaster(val); + toolbar->setQuant(quant()); + toolbar->setRaster(raster()); + } + +//--------------------------------------------------------- +// writeConfiguration +//--------------------------------------------------------- + +void DrumEdit::writeConfiguration(Xml& xml) + { + xml.stag("DrumEdit"); + if (DrumEdit::initWidth != DrumEdit::INIT_WIDTH) + xml.tag("width", DrumEdit::initWidth); + if (DrumEdit::initHeight != DrumEdit::INIT_HEIGHT) + xml.tag("height", DrumEdit::initHeight); + if (DrumEdit::initRaster != DrumEdit::INIT_RASTER) + xml.tag("raster", DrumEdit::initRaster); + xml.etag("DrumEdit"); + } + +//--------------------------------------------------------- +// readConfiguration +//--------------------------------------------------------- + +void DrumEdit::readConfiguration(QDomNode node) + { + for (node = node.firstChild(); !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + QString tag(e.tagName()); + int i = e.text().toInt(); + if (tag == "width") + DrumEdit::initWidth = i; + else if (tag == "height") + DrumEdit::initHeight = i; + else if (tag == "raster") + DrumEdit::initRaster = i; + else + printf("MusE:DrumEdit: unknown tag %s\n", tag.toLatin1().data()); + } + } + diff --git a/attic/muse_qt4_evolution/muse/midiedit/drumedit.h b/attic/muse_qt4_evolution/muse/midiedit/drumedit.h new file mode 100644 index 00000000..20cf99f6 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/drumedit.h @@ -0,0 +1,93 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __DRUM_EDIT_H__ +#define __DRUM_EDIT_H__ + +#include "midieditor.h" +#include "dcanvas.h" + +namespace AL { + class Xml; + }; +using AL::Xml; + + +class PartList; +class Part; +class DrumMap; + +//--------------------------------------------------------- +// DrumEdit +//--------------------------------------------------------- + +class DrumEdit : public MidiEditor { + Q_OBJECT + + Event selEvent; + DrumMap* drumMap; + int selTick; + QMenu *menuFunctions, *menuSelect; + + int tickOffset; + int lenOffset; + int pitchOffset; + int veloOnOffset; + int veloOffOffset; + bool deltaMode; + + virtual void closeEvent(QCloseEvent*); + QWidget* genToolbar(QWidget* parent); + DrumCanvas* canvas() { return (DrumCanvas*)tcanvas; } + + private slots: + void noteinfoChanged(NoteInfo::ValType type, int val); + virtual void cmd(QAction*); + void drumCmd(QObject* object); + + public slots: + void setSelection(int, Event&, Part*); + void soloChanged(bool); // called by Solo button + + public: + DrumEdit(PartList*, bool); + ~DrumEdit(); + + static int initRaster, initQuant, initWidth, initHeight; + static bool initFollow, initSpeaker, initMidiin; + static int initApplyTo; + static double initXmag; + + static void readConfiguration(QDomNode); + static void writeConfiguration(Xml&); + + static const int INIT_WIDTH = 650; + static const int INIT_HEIGHT = 450; + static const int INIT_RASTER = 384 / 4; + static const int INIT_QUANT = 384 / 4; + static const bool INIT_FOLLOW = false; + static const bool INIT_SPEAKER = true; + static const bool INIT_SREC = false; + static const bool INIT_MIDIIN = false; + static const double INIT_XMAG = 0.08; + static const int INIT_APPLY_TO = 0; + }; + +#endif diff --git a/attic/muse_qt4_evolution/muse/midiedit/drummap.cpp b/attic/muse_qt4_evolution/muse/midiedit/drummap.cpp new file mode 100644 index 00000000..978c7dab --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/drummap.cpp @@ -0,0 +1,219 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "drummap.h" +#include "al/xml.h" + +static const int DEFAULT_QUANT = 16; +static const int DEFAULT_LEN = 32; +static const int DEFAULT_CHANNEL = -1; +static const int DEFAULT_LV1 = 70; +static const int DEFAULT_LV2 = 90; +static const int DEFAULT_LV3 = 110; +static const int DEFAULT_LV4 = 127; + +//--------------------------------------------------------- +// GM default drum map +//--------------------------------------------------------- + +DrumMap gmDrumMap("generic"); +DrumMap noDrumMap("no-map"); + +//--------------------------------------------------------- +// DrumMap +//--------------------------------------------------------- + +DrumMap::DrumMap(const QString& s) + { + _name = s; + for (int i = 0; i < DRUM_MAPSIZE; ++i) { + map[i].name = "?"; + map[i].enote = i; + map[i].anote = i; + map[i].quant = DEFAULT_QUANT; + map[i].len = DEFAULT_LEN; + map[i].channel = DEFAULT_CHANNEL; + map[i].lv1 = DEFAULT_LV1; + map[i].lv2 = DEFAULT_LV2; + map[i].lv3 = DEFAULT_LV3; + map[i].lv4 = DEFAULT_LV4; + map[i].mute = false; + } + init(); + } + +//--------------------------------------------------------- +// initGm +//--------------------------------------------------------- + +void DrumMap::initGm() + { + static const char* gmNames[] = { + "Acoustic Bass Drum", "Bass Drum 1", "Side Stick", "Acoustic Snare", + "Hand Clap", "Electric Snare", "Low Floor Tom", "Closed Hi-Hat", + "High Floor Tom", "Pedal Hi-Hat", "Low Tom", "Open Hi-Hat", "Low-Mid Tom", + "Hi-Mid Tom", "Crash Cymbal 1", "High Tom", "Ride Cymbal 1", + "Chinese Cymbal", "Ride Bell", "Tambourine", "Splash Cymbal", + "Cowbell", "Crash Cymbal 2", "Vibraslap", "Ride Cymbal 2", + "Hi Bongo", "Low Bongo", "Mute Hi Conga", "Open Hi Conga", + "Low Conga", "High Timbale", "Low Timbale", "High Agogo", + "Low Agogo", "Cabasa", "Maracas", "Short Whistle", + "Long Whistle", "Short Guiro", "Long Guiro", "Claves", + "Hi Wood Block", "Low Wood Block", "Mute Cuica", + "Open Cuica", "Mute Triangle", "Open Triangle", 0 + }; + init(); + int idx = 0; + const char** p = &gmNames[0]; + int val = 35; + for (; *p; ++p, ++val, ++idx) { + map[idx].name = *p; + map[idx].enote = val; + map[idx].anote = val; + _inmap[int(map[idx].enote)] = idx; + _outmap[int(map[idx].anote)] = idx; + } + } + +//--------------------------------------------------------- +// init +// populate Inmap and Outmap +//--------------------------------------------------------- + +void DrumMap::init() + { + memset(_inmap, 0, sizeof(_inmap)); + memset(_outmap, 0, sizeof(_outmap)); + for (int i = 0; i < DRUM_MAPSIZE; ++i) { + _inmap[int(map[i].enote)] = i; + _outmap[int(map[i].anote)] = i; + } + } + +//--------------------------------------------------------- +// writeDrumMap +//--------------------------------------------------------- + +void DrumMap::write(Xml& xml) + { + xml.stag("drummap"); + for (int i = 0; i < DRUM_MAPSIZE; ++i) { + DrumMapEntry* dm = &map[i]; + dm->write(xml); + } + xml.etag("drummap"); + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void DrumMapEntry::write(Xml& xml) + { + xml.stag("entry"); + xml.tag("name", name); + if (quant != DEFAULT_QUANT) + xml.tag("quant", quant); + if (len != DEFAULT_LEN) + xml.tag("len", len); + if (channel != DEFAULT_CHANNEL) + xml.tag("channel", channel); + if (lv1 != DEFAULT_LV1) + xml.tag("lv1", lv1); + if (lv2 != DEFAULT_LV2) + xml.tag("lv2", lv2); + if (lv3 != DEFAULT_LV3) + xml.tag("lv3", lv3); + if (lv4 != DEFAULT_LV4) + xml.tag("lv4", lv4); + xml.tag("enote", enote); + if (anote != enote) + xml.tag("anote", anote); + xml.etag("entry"); + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void DrumMapEntry::read(QDomNode n) + { + anote = -1; + for (QDomNode node = n.firstChild(); !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + QString tag(e.tagName()); + QString s(e.text()); + if (tag == "name") + name = s; + else if (tag == "quant") + quant = s.toInt(); + else if (tag == "len") + len = s.toInt(); + else if (tag == "channel") + channel = s.toInt(); + else if (tag == "lv1") + lv1 = s.toInt(); + else if (tag == "lv2") + lv2 = s.toInt(); + else if (tag == "lv3") + lv3 = s.toInt(); + else if (tag == "lv4") + lv4 = s.toInt(); + else if (tag == "enote") + enote = s.toInt(); + else if (tag == "anote") + anote = s.toInt(); + else if (tag == "mute") + mute = s.toInt(); + else { + printf("read Drummap Entry: unknown tag %s\n", tag.toLatin1().data()); + break; + } + } + if (anote == -1) + anote = enote; + } + +//--------------------------------------------------------- +// readDrummap +//--------------------------------------------------------- + +void DrumMap::read(QDomNode node) + { + init(); + int idx = 0; + for (; !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + QString tag(e.tagName()); + + if (tag == "entry") { + QDomNode entryNode = node.firstChild(); + map[idx].read(entryNode); + _inmap[int(map[idx].enote)] = idx; + _outmap[int(map[idx].anote)] = idx; + ++idx; + } + else { + printf("read Drummap: unknown tag %s\n", tag.toLatin1().data()); + break; + } + } + } + diff --git a/attic/muse_qt4_evolution/muse/midiedit/drummap.h b/attic/muse_qt4_evolution/muse/midiedit/drummap.h new file mode 100644 index 00000000..0ec1d536 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/drummap.h @@ -0,0 +1,81 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __DRUMMAP_H__ +#define __DRUMMAP_H__ + +namespace AL { + class Xml; + }; +using AL::Xml; + +const int DRUM_MAPSIZE = 128; + +//--------------------------------------------------------- +// DrumMapEntry +//--------------------------------------------------------- + +struct DrumMapEntry { + QString name; + int quant; + int len; // len of event in ticks + int channel; // midi channel + char lv1, lv2, lv3, lv4; // velocities + char enote, anote; // input note - output note + bool mute; + + void read(QDomNode node); + void write(Xml& xml); + }; + +//--------------------------------------------------------- +// DrumMap +//--------------------------------------------------------- + +class DrumMap { + QString _name; + DrumMapEntry map[DRUM_MAPSIZE]; + char _outmap[DRUM_MAPSIZE]; + char _inmap[DRUM_MAPSIZE]; + + public: + DrumMap(const QString& name); + void init(); + void write(Xml& xml); + void read(QDomNode); + void initGm(); + DrumMapEntry* entry(int idx) { return &map[idx]; } + QString name() const { return _name; } + QString name(int i) const { return map[i].name; } + int quant(int i) const { return map[i].quant; } + int len(int i) const { return map[i].len; } + int channel(int i) const { return map[i].channel; } + int enote(int i) const { return map[i].enote; } + int anote(int i) const { return map[i].anote; } + bool mute(int i) const { return map[i].mute; } + int inmap(int i) const { return _inmap[i]; } + int outmap(int i) const { return _outmap[i]; } + }; + +extern DrumMap gmDrumMap; +extern DrumMap noDrumMap; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/midiedit/ecanvas.cpp b/attic/muse_qt4_evolution/muse/midiedit/ecanvas.cpp new file mode 100644 index 00000000..8c2eefbf --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/ecanvas.cpp @@ -0,0 +1,1549 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "midieditor.h" +#include "ecanvas.h" +#include "song.h" +#include "shortcuts.h" +#include "widgets/simplebutton.h" +#include "widgets/tools.h" +#include "widgets/utils.h" +#include "part.h" +#include "audio.h" +#include "midi.h" + +//--------------------------------------------------------- +// EventCanvas +//--------------------------------------------------------- + +EventCanvas::EventCanvas(MidiEditor* pr, TimeCanvasType type) + : TimeCanvas(type) + { + setMarkerList(song->marker()); + canvasTools = 0; + curItem = 0; + curSplitter = -1; + dragSplitter = false; + + keyDown = -1; + + itemPopupMenu = 0; + canvasPopupMenu = 0; + drag = DRAG_OFF; + + editor = pr; + curVelo = 70; + + setAcceptDrops(true); + setFocusPolicy(Qt::StrongFocus); + setMouseTracking(true); + + curPart = editor->parts()->begin()->second; + connect(song, SIGNAL(midiEvent(const MidiEvent&)), SLOT(midiNote(const MidiEvent&))); + } + +//--------------------------------------------------------- +// range +//--------------------------------------------------------- + +void EventCanvas::range(AL::Pos& s, AL::Pos& e) const + { + s.setTick(startTick); + e.setTick(endTick); + } + +//--------------------------------------------------------- +// getCaption +//--------------------------------------------------------- + +QString EventCanvas::getCaption() const + { + int bar1, bar2, xx; + unsigned x; + AL::sigmap.tickValues(curPart->tick(), &bar1, &xx, &x); + AL::sigmap.tickValues(curPart->tick() + curPart->lenTick(), &bar2, &xx, &x); + + return QString("MusE: Part <") + curPart->name() + + QString("> %1-%2").arg(bar1+1).arg(bar2+1); + } + +//--------------------------------------------------------- +// startUndo +//--------------------------------------------------------- + +void EventCanvas::startUndo(DragType) + { + song->startUndo(); + } + +//--------------------------------------------------------- +// endUndo +//--------------------------------------------------------- + +void EventCanvas::endUndo(DragType dtype) + { + song->endUndo((dtype == MOVE_COPY) ? SC_EVENT_INSERTED : SC_EVENT_MODIFIED); + } + +//--------------------------------------------------------- +// updateSelection +//--------------------------------------------------------- + +void EventCanvas::updateSelection() + { + song->update(SC_SELECTION); + } + +//--------------------------------------------------------- +// songChanged(type) +// called from MidiEditor +//--------------------------------------------------------- + +void EventCanvas::songChanged(int flags) + { + if ((flags & ~SC_SELECTION) && !editor->parts()->empty()) { + items.clear(); + startTick = INT_MAX; + endTick = 0; + for (iPart p = editor->parts()->begin(); p != editor->parts()->end(); ++p) { + Part* part = p->second; + unsigned stick = part->tick(); + unsigned etick = stick + part->lenTick(); + if (stick < startTick) + startTick = stick; + if (etick > endTick) + endTick = etick; + + EventList* el = part->events(); + for (iEvent i = el->begin(); i != el->end(); ++i) { + Event e = i->second; + if (e.isNote()) + addItem(part, e); + } + } + } + + Event event; + Part* part = 0; + int x = 0; + CItem* nevent = 0; + + int n = 0; // count selections + for (iCItem k = items.begin(); k != items.end(); ++k) { + Event ev = k->second->event; + bool selected = ev.selected(); + if (selected) { + k->second->setSelected(true); + ++n; + if (!nevent) { + nevent = k->second; + Event mi = nevent->event; + curVelo = mi.velo(); + } + } + } + startTick = song->roundDownBar(startTick); + endTick = song->roundUpBar(endTick); + + if (n == 1) { + x = nevent->bbox.x(); + event = nevent->event; + part = nevent->part; + } + emit selectionChanged(x, event, part); + if (curPart) + setPart(*curPart, curPart->end()); + widget()->update(); + } + +//--------------------------------------------------------- +// selectFirst +//--------------------------------------------------------- + +void EventCanvas::selectFirst() + { + //Select leftmost note if none selected and there are any + if (!items.empty() && selectionSize() == 0) { + iCItem i = items.begin(); + if (!i->second->isSelected()) { + selectItem(i->second, true); + songChanged(SC_SELECTION); + } + } + } + +//--------------------------------------------------------- +// track +//--------------------------------------------------------- + +MidiTrack* EventCanvas::track() const + { + return (MidiTrack*)(curPart->track()); + } + +//--------------------------------------------------------- +// keyPress +//--------------------------------------------------------- + +void EventCanvas::keyPress(QKeyEvent* event) + { +#if 0 // TODOB + int key = event->key(); + if (event->modifiers() & Qt::ShiftModifier) + key += Qt::SHIFT; + if (event->modifiers() & Qt::AltModifier) + key += Qt::ALT; + if (event->modifiers() & Qt::ControlModifier) + key += Qt::CTRL; + + // + // Shortcut for DrumEditor & PianoRoll + // Sets locators to selected events + // + if (key == shortcuts[SHRT_LOCATORS_TO_SELECTION].key) { + int tick_max = 0; + int tick_min = INT_MAX; + bool found = false; + + for (iCItem i= items.begin(); i != items.end(); i++) { + if (!i->second->isSelected()) + continue; + + int tick = i->second->bbox.x(); + int len = i->second->event.lenTick(); + found = true; + if (tick + len > tick_max) + tick_max = tick + len; + if (tick < tick_min) + tick_min = tick; + } + if (found) { + Pos p1(tick_min, AL::TICKS); + Pos p2(tick_max, AL::TICKS); + song->setPos(1, p1); + song->setPos(2, p2); + } + } + // Select items by key (PianoRoll & DrumEditor) + else if (key == shortcuts[SHRT_SEL_RIGHT].key || key == shortcuts[SHRT_SEL_RIGHT_ADD].key) { + iCItem i, iRightmost; + CItem* rightmost = NULL; + //Get the rightmost selected note (if any) + for (i = items.begin(); i != items.end(); ++i) { + if (i->second->isSelected()) { + iRightmost = i; + rightmost = i->second; + } + } + if (rightmost) { + iCItem temp = iRightmost; + temp++; + //If so, deselect current note and select the one to the right + if (temp != items.end()) { + if (key != shortcuts[SHRT_SEL_RIGHT_ADD].key) + deselectAll(); + + iRightmost++; + iRightmost->second->setSelected(true); + updateSelection(); + } + } + } + //Select items by key: (PianoRoll & DrumEditor) + else if (key == shortcuts[SHRT_SEL_LEFT].key || key == shortcuts[SHRT_SEL_LEFT_ADD].key) { + iCItem i, iLeftmost; + CItem* leftmost = NULL; + for (i = items.end(), i--; i != items.begin(); i--) { + if (i->second->isSelected()) { + iLeftmost = i; + leftmost = i->second; + } + } + if (leftmost) { + if (iLeftmost != items.begin()) { + //Add item + if (key != shortcuts[SHRT_SEL_LEFT_ADD].key) + deselectAll(); + + iLeftmost--; + iLeftmost->second->setSelected(true); + updateSelection(); + } + } + } + else if (key == shortcuts[SHRT_INC_PITCH].key) { + modifySelected(NoteInfo::VAL_PITCH, 1); + } + else if (key == shortcuts[SHRT_DEC_PITCH].key) { + modifySelected(NoteInfo::VAL_PITCH, -1); + } + else if (key == shortcuts[SHRT_INC_POS].key) { + // TODO: Check boundaries + modifySelected(NoteInfo::VAL_TIME, editor->raster()); + } + else if (key == shortcuts[SHRT_DEC_POS].key) { + // TODO: Check boundaries + modifySelected(NoteInfo::VAL_TIME, 0 - editor->raster()); + } + else + event->ignore(); +#endif + } + +//--------------------------------------------------------- +// mousePressCanvasA +//--------------------------------------------------------- + +void EventCanvas::mousePressCanvasA(QMouseEvent* me) + { + QPoint p(me->pos() - rCanvasA.topLeft()); + + // special events if right button is clicked while operations + // like moving or drawing lasso is performed. + + if (button == Qt::RightButton) { + switch (drag) { + case DRAG_LASSO: + drag = DRAG_OFF; + widget()->update(); + return; + case DRAG_MOVE: + drag = DRAG_OFF; + endMoveItems(MOVE_MOVE); + return; + default: + break; + } + } + // ignore event if (another) button is already active: + if (me->buttons() & (Qt::LeftButton | Qt::RightButton | Qt::MidButton) + & ~button) + return; + + bool shift = keyState & Qt::ShiftModifier; + bool ctrl = keyState & Qt::ControlModifier; + start = p; + startPitch = y2pitch(start.y()); + deltaPitch = 0; + + //--------------------------------------------------- + // set curItem to item mouse is pointing + // (if any) + //--------------------------------------------------- + + curItem = searchItem(start); + if (curItem && editor->playEvents()) { + int pitch = curItem->event.pitch() + track()->transposition(); + MidiEvent e(0, 0, ME_NOTEON, pitch, curItem->event.velo()); + track()->playMidiEvent(&e); + } + + if (curItem && (button == Qt::MidButton)) { + if (!curItem->isSelected()) { + selectItem(curItem, true); + updateSelection(); + widget()->update(); + } + startDrag(curItem, shift); + } + else if (button == Qt::RightButton) { + if (curItem) { + if (shift) { + drag = DRAG_RESIZE; + setCursor(); + Pos p1(curItem->bbox.x(), timeType()); + Pos p2(pix2pos(start.x())); + curItem->bbox.setWidth(p2.time(timeType())-p1.time(timeType())); + + start.setX(curItem->bbox.x()); + deselectAll(); + selectItem(curItem, true); + updateSelection(); + widget()->update(); + } + else { + itemPopupMenu = genItemPopup(curItem); + if (itemPopupMenu) { + QAction* a = itemPopupMenu->exec(QCursor::pos()); + if (a) { + int n = a->data().toInt(); + itemPopup(curItem, n, start); + } + delete itemPopupMenu; + } + } + } + else { + canvasPopupMenu = genCanvasPopup(); + if (canvasPopupMenu) { + QAction* a = canvasPopupMenu->exec(QCursor::pos(), 0); + if (a) { + int n = a->data().toInt(); + canvasPopup(n); + } + delete canvasPopupMenu; + } + } + } + else if (button == Qt::LeftButton) { + switch (_tool) { + case PointerTool: + if (curItem) { + itemPressed(curItem); + if (curItem->part != curPart) + setCurPart(curItem->part); + if (shift && !ctrl) + drag = DRAG_COPY_START; + else if (!shift && ctrl) { + //Select all on the same pitch + deselectAll(); + int pitch = curItem->event.pitch(); + for (iCItem i = items.begin(); i != items.end(); ++i) { + if (i->second->event.pitch() == pitch) + selectItem(i->second, true); + } + updateSelection(); + widget()->update(); + drag = DRAG_MOVE_START; + } + else + drag = DRAG_MOVE_START; + } + else + drag = DRAG_LASSO_START; + setCursor(); + break; + + case RubberTool: + deleteItem(p); + drag = DRAG_DELETE; + setCursor(); + break; + + case PencilTool: + if (curItem) { + drag = DRAG_RESIZE; + setCursor(); + + Pos p1(curItem->bbox.x(), timeType()); + Pos p2(pix2pos(start.x())); + int w = p2.time(timeType()) - p1.time(timeType()); + curItem->bbox.setWidth(w); + start.setX(curItem->bbox.x()); + start.setY(curItem->bbox.y()); + } + else { + drag = DRAG_NEW; + setCursor(); + curItem = newItem(start, keyState); + if (curItem) { + items.add(curItem); + if (editor->playEvents()) { + int pitch = curItem->event.pitch() + track()->transposition(); + MidiEvent e(0, 0, ME_NOTEON, pitch, curItem->event.velo()); + track()->playMidiEvent(&e); + } + } + else { + drag = DRAG_OFF; + setCursor(); + } + } + deselectAll(); + if (curItem) + selectItem(curItem, true); + updateSelection(); + widget()->update(); + break; + + default: + break; + } + } + } + +//--------------------------------------------------------- +// mouseMoveCanvasA +// pos is relative to CanvasA +//--------------------------------------------------------- + +void EventCanvas::mouseMoveCanvasA(QPoint pos) + { + QPoint dist = pos - start; + bool isMoving = dist.manhattanLength() >= QApplication::startDragDistance(); + + switch (drag) { + case DRAG_LASSO_START: + if (!isMoving) + break; + drag = DRAG_LASSO; + setCursor(); + // proceed with DRAG_LASSO: + + case DRAG_LASSO: + lasso = QRect(start, QSize(dist.x(), dist.y())); + widget()->update(); + break; + + case DRAG_MOVE_START: + case DRAG_COPY_START: + if (!isMoving) + break; + { + bool shift = keyState & Qt::ShiftModifier; + bool ctrl = keyState & Qt::ControlModifier; + if (shift && ctrl) { + if (qAbs(dist.x()) > qAbs(dist.y())) { + if (drag == DRAG_MOVE_START) + drag = DRAGX_MOVE; + else + drag = DRAGX_COPY; + } + else { + if (drag == DRAG_MOVE_START) + drag = DRAGY_MOVE; + else + drag = DRAGY_COPY; + } + } + else { + if (drag == DRAG_MOVE_START) + drag = DRAG_MOVE; + else + drag = DRAG_COPY; + } + setCursor(); + if (!curItem->isSelected()) { + if (drag == DRAG_MOVE) + deselectAll(); + selectItem(curItem, true); + updateSelection(); + widget()->update(); + } + for (iCItem i = items.begin(); i != items.end(); ++i) { + if (i->second->isSelected()) { + i->second->isMoving = true; + moving.add(i->second); + } + } + moveItems(pos, 0); + } + break; + + case DRAG_MOVE: + case DRAG_COPY: + moveItems(pos, 0); + break; + + case DRAGX_MOVE: + case DRAGX_COPY: + moveItems(pos, 1); + break; + + case DRAGY_MOVE: + case DRAGY_COPY: + moveItems(pos, 2); + break; + + case DRAG_NEW: + case DRAG_RESIZE: + if (dist.x()) { + Pos p1(curItem->bbox.x(), timeType()); + Pos p2(pix2pos(pos.x())); + int w = p2.time(timeType()) - p1.time(timeType()); + if (w < 1) + w = 1; + curItem->bbox.setWidth(w); + widget()->update(); + } + break; + case DRAG_DELETE: + deleteItem(pos); + break; + + case DRAG_OFF: + break; + } + } + +//--------------------------------------------------------- +// mouseReleaseCanvasA +//--------------------------------------------------------- + +void EventCanvas::mouseReleaseCanvasA(QMouseEvent* me) + { + if (curItem && editor->playEvents()) { + int pitch = curItem->event.pitch() + track()->transposition(); + MidiEvent e(0, 0, ME_NOTEON, pitch, 0); + track()->playMidiEvent(&e); + } + // ignore event if (another) button is already active: + + if (me->buttons() & (Qt::LeftButton | Qt::RightButton | Qt::MidButton) + & ~button) + return; + + bool shift = keyState & Qt::ShiftModifier; + bool ctrl = keyState & Qt::ControlModifier; + bool redrawFlag = false; + + switch (drag) { + case DRAG_MOVE_START: + case DRAG_COPY_START: + if (!(shift || ctrl)) + deselectAll(); + if (!ctrl) + selectItem(curItem, !(shift && curItem->isSelected())); + updateSelection(); + redrawFlag = true; + itemReleased(); + break; + case DRAG_COPY: + case DRAGX_COPY: + case DRAGY_COPY: + endMoveItems(MOVE_COPY); + break; + case DRAG_MOVE: + case DRAGX_MOVE: + case DRAGY_MOVE: + endMoveItems(MOVE_MOVE); + break; + case DRAG_OFF: + break; + case DRAG_RESIZE: + resizeItem(curItem, false); + break; + case DRAG_NEW: + newItem(curItem, false); + redrawFlag = true; + break; + case DRAG_LASSO_START: + lasso.setRect(-1, -1, -1, -1); + if (!shift) + deselectAll(); + updateSelection(); + redrawFlag = true; + break; + + case DRAG_LASSO: + if (!shift) + deselectAll(); + lasso = lasso.normalized(); + selectLasso(shift); + updateSelection(); + redrawFlag = true; + break; + + case DRAG_DELETE: + break; + } + drag = DRAG_OFF; + if (redrawFlag) + widget()->update(); + setCursor(); + } + + +//--------------------------------------------------------- +// endMoveItems +//--------------------------------------------------------- + +void EventCanvas::endMoveItems(DragType dragtype) + { + startUndo(dragtype); + + for (iCItem i = moving.begin(); i != moving.end(); ++i) { + selectItem(i->second, true); + moveItem(i->second, dragtype); +//TD if (moving.size() == 1) { +// itemReleased(); +// } + if (dragtype == MOVE_COPY) + selectItem(i->second, false); + } + endUndo(dragtype); + moving.clear(); + updateSelection(); + widget()->update(); + } + +//--------------------------------------------------------- +// selectItem +//--------------------------------------------------------- + +void EventCanvas::selectItem(CItem* e, bool flag) + { + e->setSelected(flag); + } + +//--------------------------------------------------------- +// deselectAll +//--------------------------------------------------------- + +void EventCanvas::deselectAll() + { + for (iCItem i = items.begin(); i != items.end(); ++i) + i->second->setSelected(false); + } + +//--------------------------------------------------------- +// genCanvasPopup +//--------------------------------------------------------- + +QMenu* EventCanvas::genCanvasPopup() + { + if (canvasTools == 0) + return 0; + QMenu* canvasPopup = new QMenu(this); + + for (int i = 0; i < TOOLS; ++i) { + int data = 1 << i; + if ((canvasTools & data) == 0) + continue; + QAction* a = getAction(toolList[i], this); + a->setData(data); + a->setCheckable(true); + a->setChecked(data == int(_tool)); + canvasPopup->addAction(a); + } + return canvasPopup; + } + +//--------------------------------------------------------- +// canvasPopup +//--------------------------------------------------------- + +void EventCanvas::canvasPopup(int n) + { + setTool(n); + } + +//--------------------------------------------------------- +// setCursor +//--------------------------------------------------------- + +void EventCanvas::setCursor() + { + if (curSplitter != -1) { + widget()->setCursor(Qt::SplitVCursor); + return; + } + switch (drag) { + case DRAGX_MOVE: + case DRAGX_COPY: + widget()->setCursor(QCursor(Qt::SizeHorCursor)); + break; + + case DRAGY_MOVE: + case DRAGY_COPY: + widget()->setCursor(QCursor(Qt::SizeVerCursor)); + break; + + case DRAG_MOVE: + case DRAG_COPY: + widget()->setCursor(QCursor(Qt::SizeAllCursor)); + break; + + case DRAG_RESIZE: + widget()->setCursor(QCursor(Qt::SizeHorCursor)); + break; + + case DRAG_DELETE: + case DRAG_COPY_START: + case DRAG_MOVE_START: + case DRAG_NEW: + case DRAG_LASSO_START: + case DRAG_LASSO: + case DRAG_OFF: + TimeCanvas::setCursor(); + break; + } + } + +//--------------------------------------------------------- +// deleteItem +// p is relative to CanvasA +//--------------------------------------------------------- + +void EventCanvas::deleteItem(const QPoint& p) + { + Pos pos(pix2pos(p.x())); + int pitch(y2pitch(p.y())); + +// printf("%d %d - %d %d\n", p.x(), p.y(), pos.tick(), pitch); + + pos -= *curPart; + for (iCItem i = items.begin(); i != items.end(); ++i) { + Event& event = i->second->event; + if (event.pitch() == pitch + && (pos >= event.pos()) + && (pos < event.end())) { + deleteItem(i->second); + break; + } + } + } + +//--------------------------------------------------------- +// moveItems +// dir = 0 move in all directions +// 1 move only horizontal +// 2 move only vertical +//--------------------------------------------------------- + +void EventCanvas::moveItems(const QPoint& pos, int dir) + { + int dpitch = y2pitch(pos.y()) - startPitch; + + Pos sp(pix2pos(start.x())); + Pos cp(pix2pos(pos.x())); + + bool left = sp > cp; + Pos dx(left ? sp - cp : cp - sp); + + if (dir == 2) + dx.setTick(0); + + for (iCItem i = moving.begin(); i != moving.end(); ++i) { + CItem* item = i->second; + Pos p; + if (left) { + // + // restrict movement to pos >= 0 + // + if (dx > item->pos) + p.setTick(0); + else + p = item->pos - dx; + } + else + p = item->pos + dx; + p.snap(raster()); + + if (p < *curPart) + p = *curPart; + + if (item->moving != p || dpitch != deltaPitch) { + item->moving = p; + if (dir != 1) + item->my = pitch2y(item->event.pitch() + dpitch) + + (int)(wpos.y() / _ymag); + itemMoved(item); + } + } + deltaPitch = dpitch; + widget()->update(); + } + +//--------------------------------------------------------- +// selectionSize +//--------------------------------------------------------- + +int EventCanvas::selectionSize() const + { + int n = 0; + for (ciCItem i = items.begin(); i != items.end(); ++i) { + if (i->second->isSelected()) + ++n; + } + return n; + } + +//--------------------------------------------------------- +// layout +// called after resize +//--------------------------------------------------------- + +void EventCanvas::layout() + { + int n = ctrlEditList.size(); + if (n == 0) + return; + if (ctrlHeight == 0) { + int wh = widget()->height(); + resizeController(wh < 120 ? wh / 2 : 100); + } + + // check, if layout is ok already; this happens after + // song load + int h = 0; + for (iCtrlEdit i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i) { + CtrlEdit* c = *i; + h += c->height(); + } + if (h == ctrlHeight) { + for (iCtrlEdit i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i) + layoutPanelB(*i); + return; + } + + int y = 0; + int sch = ctrlHeight / n; + for (iCtrlEdit i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i) { + CtrlEdit* c = *i; + c->y = y; + c->setHeight(sch); + layoutPanelB(c); + y += sch; + } + } + +//--------------------------------------------------------- +// layout1 +// called after read song +//--------------------------------------------------------- + +void EventCanvas::layout1() + { + int n = ctrlEditList.size(); + if (n == 0) + return; + int y = 0; + for (iCtrlEdit i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i) { + CtrlEdit* c = *i; + c->y = y; + y += c->height(); + } + resizeController(y); + } + +//--------------------------------------------------------- +// layoutPanelB +//--------------------------------------------------------- + +void EventCanvas::layoutPanelB(CtrlEdit* c) + { + int y = c->y; + int h = c->height(); + int bx = rPanelB.x() + rPanelB.width() - 23; + int by = rPanelB.y() + y + h - 19; + c->minus->setGeometry(bx, by, 18, 18); + bx = rPanelB.x() + 1; + by = rPanelB.y() + y + 5; + c->sel->setGeometry(bx, by, rPanelB.width()-5, 18); + } + +//--------------------------------------------------------- +// addController +//--------------------------------------------------------- + +void EventCanvas::addController() + { + int n = ctrlEditList.size(); + CtrlEdit* ce = new CtrlEdit(widget(), this, track()); + ce->setHeight(50); + ctrlEditList.push_back(ce); + + ce->minus->defaultAction()->setData(n); + connect(ce->minus, SIGNAL(triggered(QAction*)), SLOT(removeController(QAction*))); + ce->minus->show(); + ce->sel->show(); + + layout(); + widget()->update(); + updatePartControllerList(); + } + +void EventCanvas::addController(int id, int h) + { + ctrlHeight += h; + int n = ctrlEditList.size(); + + CtrlEdit* ce = new CtrlEdit(widget(), this, track()); + ce->setHeight(h); + ce->setCtrl(id); + ctrlEditList.push_back(ce); + + ce->minus->defaultAction()->setData(n); + connect(ce->minus, SIGNAL(triggered(QAction*)), SLOT(removeController(QAction*))); + } + +//--------------------------------------------------------- +// paintControllerCanvas +// r(0, 0) is PanelB topLeft() +//--------------------------------------------------------- + +void EventCanvas::paintControllerCanvas(QPainter& p, QRect r) + { + int x1 = r.x(); + int x2 = x1 + r.width(); + + int xx2 = rCanvasB.width(); + if (xx2 >= x2) + x2 = xx2 - 2; + for (iCtrlEdit i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i) { + CtrlEdit* c = *i; + int y = c->y; + paintHLine(p, x1, x2, y); + p.setPen(lineColor[0]); + p.drawLine(xx2-1, 1, xx2-1, splitWidth-2); + + QRect rc(0, y + splitWidth, rCanvasB.width(), c->cheight()); + QPoint pt(rc.topLeft()); + rc &= r; + if (!rc.isEmpty()) { + p.translate(pt); + c->paint(p, rc.translated(-pt)); + p.translate(-pt); + } + } + } + +//--------------------------------------------------------- +// paintControllerPanel +// panelB +//--------------------------------------------------------- + +void EventCanvas::paintControllerPanel(QPainter& p, QRect r) + { + p.fillRect(r, QColor(0xe0, 0xe0, 0xe0)); + int x1 = r.x(); + int x2 = x1 + r.width(); + + paintVLine(p, r.y() + splitWidth, r.y() + r.height(), + rPanelB.x() + rPanelB.width()); + + if (x1 == 0) + x1 = 1; + for (iCtrlEdit i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i) { + CtrlEdit* c = *i; + paintHLine(p, x1, x2, c->y); + p.setPen(lineColor[0]); + p.drawLine(0, 1, 0, splitWidth-2); + } + } + +//--------------------------------------------------------- +// removeController +//--------------------------------------------------------- + +void EventCanvas::removeController(QAction* a) + { + int id = a->data().toInt(); + + int k = 0; + for (iCtrlEdit i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i, ++k) { + if (k == id) { + CtrlEdit* c = *i; + delete c; + ctrlEditList.erase(i); + break; + } + } + k = 0; + for (iCtrlEdit i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i, ++k) { + CtrlEdit* c = *i; + c->minus->defaultAction()->setData(k); + } + + if (ctrlEditList.empty()) + resizeController(0); + else + layout(); + widget()->update(); + updatePartControllerList(); + } + +//--------------------------------------------------------- +// enterB +//--------------------------------------------------------- + +void EventCanvas::enterB() + { + if ((button == 0) && curSplitter != -1) { + curSplitter = -1; + setCursor(); + } + } + +//--------------------------------------------------------- +// leaveB +//--------------------------------------------------------- + +void EventCanvas::leaveB() + { + if ((button == 0) && (curSplitter != -1)) { + curSplitter = -1; + setCursor(); + } + } + +//--------------------------------------------------------- +// noteOn +//--------------------------------------------------------- + +void EventCanvas::noteOn(int pitch, int velocity, bool shift) + { + DrumMap* dm = track()->drumMap(); + if (!dm) + pitch += track()->transposition(); + + // play note: + if (editor->playEvents()) { + MidiEvent e(0, 0, ME_NOTEON, pitch, velocity); + track()->playMidiEvent(&e); + } + + if (curPart && editor->stepRec() + && pos[0].tick() >= startTick + && pos[0].tick() < endTick) { + int len = editor->quant(); + unsigned tick = pos[0].tick() - curPart->tick(); //CDW + if (shift) + tick -= editor->rasterStep(tick); + Event e(Note); + e.setTick(tick); + e.setPitch(pitch); + e.setVelo(127); + e.setLenTick(len); + audio->msgAddEvent(e, curPart); + tick += editor->rasterStep(tick) + curPart->tick(); + if (tick != song->cpos()) { + Pos p(tick, AL::TICKS); + song->setPos(0, p, true, false, true); + } + } + } + +//--------------------------------------------------------- +// noteOff +//--------------------------------------------------------- + +void EventCanvas::noteOff(int pitch) + { + if (!editor->playEvents()) + return; + DrumMap* dm = track()->drumMap(); + if (!dm) + pitch += track()->transposition(); + + // release key: + MidiEvent e(0, 0, ME_NOTEON, pitch, 0); + track()->playMidiEvent(&e); + } + +//--------------------------------------------------------- +// mouseDoubleClick +//--------------------------------------------------------- + +void EventCanvas::mouseDoubleClick(QMouseEvent* me) + { + mousePress(me); + } + +//--------------------------------------------------------- +// mousePress +//--------------------------------------------------------- + +void EventCanvas::mousePress(QMouseEvent* me) + { + QPoint pos(me->pos()); + if (rPanelA.contains(pos)) { + bool shift = keyState & Qt::ShiftModifier; + if (keyDown != -1) { + noteOff(keyDown); + keyDown = -1; + } + keyDown = y2pitch(pos.y() - rCanvasA.y()); + int velocity = me->x()*127/40; + if (keyDown != -1) + noteOn(keyDown, velocity, shift); + return; + } + if (rCanvasA.contains(pos)) { + mousePressCanvasA(me); + return; + } + if (curSplitter != -1) { + dragSplitter = true; + splitterY = pos.y(); + return; + } + if (rCanvasB.contains(pos)) { + for (iCtrlEdit i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i) { + CtrlEdit* c = *i; + QRect r(rCanvasB.x(), rCanvasB.y() + c->y + splitWidth, + rCanvasB.width(), c->cheight()); + if (r.contains(pos)) { + c->mousePress(pos - r.topLeft(), me); + break; + } + } + } + } + +//--------------------------------------------------------- +// mouseMove +//--------------------------------------------------------- + +void EventCanvas::mouseMove(QPoint pos) + { + if (rPanelA.contains(pos) || rCanvasA.contains(pos)) { + int y = pos.y() - rCanvasA.y(); + int pitch = y2pitch(y); + if (curPitch != pitch) { + curPitch = pitch; + widget()->update(rPanelA); // update keyboard + emit pitchChanged(curPitch); + if (button != Qt::NoButton) { + if (keyDown != -1 && curPitch != -1) { + bool shift = keyState & Qt::ShiftModifier; + if (curPitch != keyDown) { + noteOff(keyDown); + keyDown = curPitch; + int velocity = std::min(pos.x()*127/40, 127); + noteOn(keyDown, velocity, shift); + } + } + } + } + } + if (dragSplitter) { + int deltaY = pos.y() - splitterY; + + iCtrlEdit i = ctrlEditList.begin(); + int y = 0; + if (curSplitter > 0) { + int k = 0; + CtrlEdit* c = 0; + for (; i != ctrlEditList.end(); ++i, ++k) { + c = *i; + y += c->height(); + if ((k+1) == curSplitter) + break; + } + if (i == ctrlEditList.end()) { + printf("unexpected edit list end, curSplitter %d\n", curSplitter); + return; + } + if (c->height() + deltaY < splitWidth) + deltaY = splitWidth - c->height(); + ++i; + int rest = 0; + for (iCtrlEdit ii = i; ii != ctrlEditList.end(); ++ii) + rest += (*ii)->cheight(); + if (rest < deltaY) + deltaY = rest; + c->setHeight(c->height() + deltaY); + layoutPanelB(c); + y += deltaY; + } + // + // layout rest, add deltaY vertical + // + int rest = 0; + for (iCtrlEdit ii = i; ii != ctrlEditList.end(); ++ii) { + CtrlEdit* c = *ii; + rest += c->cheight(); + } + if (rest < deltaY) + deltaY = rest; + rest = deltaY; + for (; i != ctrlEditList.end(); ++i) { + CtrlEdit* c = *i; + int d = c->cheight(); + if (d > deltaY) + d = deltaY; + c->setHeight(c->height() - d); + c->y = y; + layoutPanelB(c); + y += c->height(); + deltaY -= d; + if (deltaY == 0) + break; + } + if (i != ctrlEditList.end()) + ++i; + for (; i != ctrlEditList.end(); ++i) { + CtrlEdit* c = *i; + c->y = y; + y += c->height(); + } + if (curSplitter == 0) + resizeController(ctrlHeight - rest); + else + widget()->update(rPanelB | rCanvasB); + splitterY = pos.y(); + updatePartControllerList(); + return; + } + if (rCanvasA.contains(pos)) { + mouseMoveCanvasA(pos - rCanvasA.topLeft()); + return; + } + if (button == 0) { + if (rPanelB.contains(pos) || rCanvasB.contains(pos)) { + int y = pos.y() - rPanelB.y(); + int k = 0; + for (iCtrlEdit i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i, ++k) { + CtrlEdit* c = *i; + if (y >= c->y && y < (c->y + splitWidth)) { + curSplitter = k; + setCursor(); + return; + } + int ypos = y - c->y - splitWidth; + if (ypos >= 0) + emit yChanged(c->pixel2val(ypos)); + } + } + if (curSplitter != -1) { + curSplitter = -1; + setCursor(); + } + return; + } + if (rCanvasB.contains(pos)) { + for (iCtrlEdit i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i) { + CtrlEdit* c = *i; + QRect r(rCanvasB.x(), rCanvasB.y() + c->y + splitWidth, + rCanvasB.width(), c->cheight()); + if (r.contains(pos)) { + c->mouseMove(pos - r.topLeft()); + break; + } + } + } + } + +//--------------------------------------------------------- +// mouseRelease +//--------------------------------------------------------- + +void EventCanvas::mouseRelease(QMouseEvent* me) + { + if (keyDown != -1) { + noteOff(keyDown); + keyDown = -1; + } + if (dragSplitter) { + dragSplitter = false; + return; + } + QPoint pos(me->pos()); + if (rCanvasA.contains(pos)) { + mouseReleaseCanvasA(me); + return; + } + if (rCanvasB.contains(pos)) { + for (iCtrlEdit i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i) { + CtrlEdit* c = *i; + QRect r(rCanvasB.x(), rCanvasB.y() + c->y + splitWidth, + rCanvasB.width(), c->cheight()); + if (r.contains(pos)) { + c->mouseRelease(); + break; + } + } + } + } + +//--------------------------------------------------------- +// setCurPart +//--------------------------------------------------------- + +void EventCanvas::setCurPart(Part* part) + { + curPart = part; + + if (curPart->raster() != -1) + editor->setRaster(curPart->raster()); + if (curPart->quant() != -1) + editor->setQuant(curPart->quant()); + if (curPart->xmag() != 0.0) + editor->setXmag(curPart->xmag()); + curPart->setRaster(editor->raster()); + curPart->setQuant(editor->quant()); + curPart->setXmag(editor->xmag()); + setPart(*curPart, curPart->end()); + editor->setWindowTitle(getCaption()); + } + +//--------------------------------------------------------- +// getTextDrag +//--------------------------------------------------------- + +QMimeData* EventCanvas::getTextDrag() + { + //--------------------------------------------------- + // generate event list from selected events + //--------------------------------------------------- + + EventList el; + unsigned startTick = INT_MAX; + for (iCItem i = items.begin(); i != items.end(); ++i) { + if (!i->second->isSelected()) + continue; + CItem* ne = i->second; + Event e = ne->event; + if (startTick == INT_MAX) + startTick = e.tick(); + el.add(e); + } + QBuffer buffer; + buffer.open(QIODevice::WriteOnly); + Xml xml(&buffer); + xml.header(); + + xml.stag("eventlist"); + for (ciEvent e = el.begin(); e != el.end(); ++e) + e->second.write(xml, -startTick); + xml.etag("eventlist"); + + QByteArray data = buffer.buffer(); + QMimeData* drag = new QMimeData; + drag->setData("text/x-muse-eventlist", data); + buffer.close(); + return drag; + } + +//--------------------------------------------------------- +// pasteAt +//--------------------------------------------------------- + +void EventCanvas::pasteAt(const QString& pt, unsigned pos) + { + QDomDocument doc; + + if (!doc.setContent(pt, false)) { + printf("MusE:pasteAt(): syntax error\n"); + printf(">>%s<<\n", pt.toLatin1().data()); + return; + } + for (QDomNode node = doc.documentElement(); !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + if (e.isNull()) + continue; + if (e.tagName() == "eventlist") { + EventList el; + el.read(node.firstChild(), true); + song->startUndo(); + for (iEvent i = el.begin(); i != el.end(); ++i) { + Event e = i->second; + e.setTick(e.tick() + pos - curPart->tick()); + audio->msgAddEvent(e, curPart, false); + } + song->endUndo(SC_EVENT_INSERTED); + } + else + printf("MusE:pasteAt(): tag %s not supported\n", e.tagName().toLatin1().data()); + } + } + +//--------------------------------------------------------- +// midiNote +//--------------------------------------------------------- + +void EventCanvas::midiNote(const MidiEvent& me) + { + if (me.type() != ME_NOTEON) + return; + int pitch = me.dataA(); + int velo = me.dataB(); + + if (editor->midiIn() && editor->stepRec() && curPart + && !audio->isPlaying() && velo && pos[0].tick() >= startTick + && pos[0].tick() < endTick + && !(keyState & Qt::AltModifier)) { + int len = editor->quant(); + unsigned tick = pos[0].tick(); //CDW + unsigned starttick = tick; + if (keyState & Qt::ShiftModifier) + tick -= editor->rasterStep(tick); + + // + // extend len of last note? + // + EventList* events = curPart->events(); + if (keyState & Qt::ControlModifier) { + for (iEvent i = events->begin(); i != events->end(); ++i) { + Event ev = i->second; + if (!ev.isNote()) + continue; + if (ev.pitch() == pitch && ((ev.tick() + ev.lenTick()) == starttick)) { + Event e = ev.clone(); + e.setLenTick(ev.lenTick() + editor->rasterStep(starttick)); + audio->msgChangeEvent(ev, e, curPart); + tick += editor->rasterStep(tick); + if (tick != song->cpos()) { + Pos p(tick, AL::TICKS); + song->setPos(0, p, true, false, true); + } + return; + } + } + } + + // + // if we already entered the note, delete it + // + EventRange range = events->equal_range(tick); + for (iEvent i = range.first; i != range.second; ++i) { + Event ev = i->second; + if (ev.isNote() && ev.pitch() == pitch) { + audio->msgDeleteEvent(ev, curPart); + if (keyState & Qt::ShiftModifier) + tick += editor->rasterStep(tick); + return; + } + } + Event e(Note); + e.setTick(tick - curPart->tick()); + e.setPitch(pitch); + e.setVelo(velo); + e.setLenTick(len); + audio->msgAddEvent(e, curPart); + tick += editor->rasterStep(tick); + if (tick != song->cpos()) { + Pos p(tick, AL::TICKS); + song->setPos(0, p, true, false, true); + } + } + } + +//--------------------------------------------------------- +// magChanged +//--------------------------------------------------------- + +void EventCanvas::magChanged() + { + if (part()) { + part()->setXmag(_xmag); + } + } + +//--------------------------------------------------------- +// updatePartControllerList +//--------------------------------------------------------- + +void EventCanvas::updatePartControllerList() + { + if (curPart == 0) + return; + CtrlCanvasList* cl = curPart->getCtrlCanvasList(); + cl->clear(); + for (iCtrlEdit i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i) { + CtrlCanvas cc; + cc.ctrlId = (*i)->ctrlId; + cc.height = (*i)->height(); + cl->push_back(cc); + } + } + diff --git a/attic/muse_qt4_evolution/muse/midiedit/ecanvas.h b/attic/muse_qt4_evolution/muse/midiedit/ecanvas.h new file mode 100644 index 00000000..f128e5fa --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/ecanvas.h @@ -0,0 +1,173 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __ECANVAS_H__ +#define __ECANVAS_H__ + +#include "al/pos.h" +#include "awl/tcanvas.h" +#include "widgets/noteinfo.h" +#include "citem.h" +#include "ctrl/ctrledit.h" +#include "widgets/tb1.h" + +class MidiTrack; +class MidiEditor; +class MidiEvent; +class Part; +class Event; +class CtrlEdit; + +//--------------------------------------------------------- +// EventCanvas +//--------------------------------------------------------- + +class EventCanvas : public TimeCanvas { + Q_OBJECT + + int startPitch; // on start dragging events + int deltaPitch; + int keyDown; // pressed key on piano keypad (or drum instrument list) + int playedPitch; + + void noteOn(int pitch, int velocity, bool shift); + void noteOff(int pitch); + virtual void layout(); + virtual void magChanged(); + + protected: + enum DragMode { + DRAG_OFF, DRAG_NEW, + DRAG_MOVE_START, DRAG_MOVE, + DRAG_COPY_START, DRAG_COPY, + DRAGX_MOVE, DRAGY_MOVE, + DRAGX_COPY, DRAGY_COPY, + DRAG_DELETE, + DRAG_RESIZE, DRAG_LASSO_START, DRAG_LASSO, + }; + + enum DragType { + MOVE_MOVE, MOVE_COPY + }; + + CtrlEditList ctrlEditList; + MidiEditor* editor; + CItemList items; + CItemList moving; + CItem* curItem; + Part* curPart; + int canvasTools; + int curSplitter; // -1 mouse not in splitter + bool dragSplitter; + int splitterY; + + DragMode drag; + QRect lasso; + QPoint start; + QMenu* itemPopupMenu; + QMenu* canvasPopupMenu; + + unsigned startTick, endTick; + int curVelo; + + virtual void mousePress(QMouseEvent*); + virtual void mouseDoubleClick(QMouseEvent*); + virtual void mouseMove(QPoint); + virtual void enterB(); + virtual void leaveB(); + virtual void mouseRelease(QMouseEvent*); + void layoutPanelB(CtrlEdit* c); + + void updateSelection(); + virtual CItem* searchItem(const QPoint& p) const = 0; + virtual void addItem(Part*, const Event&) = 0; + virtual void moveItem(CItem*, DragType) = 0; + virtual CItem* newItem(const QPoint&, int state) = 0; + virtual void newItem(CItem*, bool noSnap=false) = 0; + virtual bool deleteItem(CItem*) = 0; + virtual void resizeItem(CItem*, bool noSnap=false) = 0; + + virtual void startDrag(CItem*, bool) {} + virtual QMenu* genItemPopup(CItem*) { return 0; } + virtual void itemPopup(CItem*, int, const QPoint&) {} + virtual void itemReleased() {} + virtual void itemPressed(const CItem*) {} + virtual void itemMoved(const CItem*) {} + + virtual void addController(); + + void endMoveItems(DragType); + virtual void selectItem(CItem* e, bool); + virtual void deselectAll(); + QMenu* genCanvasPopup(); + void canvasPopup(int); + virtual void startUndo(DragType); + virtual void endUndo(DragType); + virtual void selectLasso(bool) {} + void setCursor(); + virtual void deleteItem(const QPoint&); + void moveItems(const QPoint& pos, int dir); + void mousePressCanvasA(QPoint pos); + void mousePressCanvasA(QMouseEvent*); + void mouseMoveCanvasA(QPoint pos); + void mouseReleaseCanvasA(QMouseEvent*); + + virtual void paintControllerCanvas(QPainter&, QRect); + virtual void paintControllerPanel(QPainter&, QRect); + + void pasteAt(const QString& pt, unsigned pos); + void updatePartControllerList(); + + private slots: + void removeController(QAction*); + void midiNote(const MidiEvent&); + + public slots: + void setQuant(int) { update(); } + void songChanged(int); + + signals: + void selectionChanged(int, Event&, Part*); + void enterCanvas(); + void yChanged(int); // emitted from mouseMove in controller canvas + + public: + EventCanvas(MidiEditor*, TimeCanvasType); + MidiTrack* track() const; + Part* part() const { return curPart; } + QString getCaption() const; + void range(AL::Pos& s, AL::Pos& e) const; + void selectFirst(); + virtual void modifySelected(NoteInfo::ValType, int) {} + virtual void keyPress(QKeyEvent*); + int selectionSize() const; + void setCurPart(Part*); + QMimeData* getTextDrag(); + CItemList* getItems() { return &items; } + CtrlEditList* getCtrlEditors() { return &ctrlEditList; } + const CtrlEditList* getCtrlEditors() const { return &ctrlEditList; } + void addController(int id, int h); + void layout1(); + }; + +extern void paintVLine(QPainter& p, int y1, int y2, int x); + +#endif + diff --git a/attic/muse_qt4_evolution/muse/midiedit/gatetime.cpp b/attic/muse_qt4_evolution/muse/midiedit/gatetime.cpp new file mode 100644 index 00000000..862d4aaf --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/gatetime.cpp @@ -0,0 +1,105 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "gatetime.h" +#include "song.h" +#include "tb1.h" + +//--------------------------------------------------------- +// GateTime +//--------------------------------------------------------- + +GateTime::GateTime(QWidget*) + : MidiCmdDialog() + { + setWindowTitle(tr("MusE: Modify Gate Time")); + QWidget* gateTime = new QWidget; + gt.setupUi(gateTime); + layout->addWidget(gateTime); + layout->addStretch(10); + _rateVal = 0; + _offsetVal = 0; + gt.rate->setValue(_rateVal); + gt.offset->setValue(_offsetVal); + } + +//--------------------------------------------------------- +// accept +//--------------------------------------------------------- + +void GateTime::accept() + { + _rateVal = gt.rate->value(); + _offsetVal = gt.offset->value(); + MidiCmdDialog::accept(); + } + +//--------------------------------------------------------- +// MidifyGateTime +//--------------------------------------------------------- + +ModifyGateTimeCmd::ModifyGateTimeCmd(MidiEditor* e) + : MidiCmd(e) + { + dialog = 0; + } + +//--------------------------------------------------------- +// guiDialog +//--------------------------------------------------------- + +MidiCmdDialog* ModifyGateTimeCmd::guiDialog() + { + if (dialog == 0) + dialog = new GateTime(0); + return dialog; + } + +//--------------------------------------------------------- +// process +//--------------------------------------------------------- + +void ModifyGateTimeCmd::process(CItemList* items) + { + int rate = dialog->rateVal(); + int offset = dialog->offsetVal(); + + for (iCItem k = items->begin(); k != items->end(); ++k) { + CItem* item = k->second; + Event event = item->event; + if (event.type() != Note) + continue; + + if (itemInRange(item)) { + unsigned len = event.lenTick(); + len = rate ? (len * 100) / rate : 1; + len += offset; + if (len <= 1) + len = 1; + + if (event.lenTick() != len) { + Event newEvent = event.clone(); + newEvent.setLenTick(len); + changeEvent(event, newEvent, item->part); + } + } + } + } + diff --git a/attic/muse_qt4_evolution/muse/midiedit/gatetime.h b/attic/muse_qt4_evolution/muse/midiedit/gatetime.h new file mode 100644 index 00000000..699b7c61 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/gatetime.h @@ -0,0 +1,62 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __GATETIME_H__ +#define __GATETIME_H__ + +#include "ui_gatetime.h" +#include "midicmd.h" + +//--------------------------------------------------------- +// GateTime +//--------------------------------------------------------- + +class GateTime : public MidiCmdDialog { + Q_OBJECT + + Ui::GateTimeBase gt; + int _rateVal; + int _offsetVal; + + protected slots: + void accept(); + + public: + GateTime(QWidget* parent = 0); + int rateVal() const { return _rateVal; } + int offsetVal() const { return _offsetVal; } + }; + +//--------------------------------------------------------- +// ModifyGateTimeCmd +//--------------------------------------------------------- + +class ModifyGateTimeCmd : public MidiCmd + { + GateTime* dialog; + virtual MidiCmdDialog* guiDialog(); + virtual void process(CItemList* items); + + public: + ModifyGateTimeCmd(MidiEditor* e); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/midiedit/gatetime.ui b/attic/muse_qt4_evolution/muse/midiedit/gatetime.ui new file mode 100644 index 00000000..e1b92e7e --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/gatetime.ui @@ -0,0 +1,85 @@ + + + + + GateTimeBase + + + + 0 + 0 + 262 + 149 + + + + MusE: Modify Gate Time + + + + 11 + + + 6 + + + + + Values + + + + 6 + + + 3 + + + + + Rate: + + + + + + + Offset: + + + + + + + % + + + 200 + + + 100 + + + + + + + 999 + + + -999 + + + 1 + + + + + + + + + qPixmapFromMimeSource + + + diff --git a/attic/muse_qt4_evolution/muse/midiedit/midicmd.cpp b/attic/muse_qt4_evolution/muse/midiedit/midicmd.cpp new file mode 100644 index 00000000..bb6b1972 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/midicmd.cpp @@ -0,0 +1,135 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "midicmd.h" +#include "song.h" +#include "gatetime.h" +#include "velocity.h" +#include "audio.h" +#include "midieditor.h" +#include "widgets/tb1.h" + +//========================================================== +// class MidiCmd is an attempt to formalize the +// interface between midi command code and MusE. +// Maybe this can be extended to an specialized +// plugin interface +//========================================================== + +//--------------------------------------------------------- +// MidiCmdDialog +//--------------------------------------------------------- + +MidiCmdDialog::MidiCmdDialog() + : QDialog() + { + QWidget* rangeWidget = new QWidget; + mc.setupUi(rangeWidget); + layout = new QVBoxLayout; + setLayout(layout); + layout->addWidget(rangeWidget); + rangeGroup = new QButtonGroup(this); + rangeGroup->setExclusive(true); + rangeGroup->addButton(mc.allEventsButton, RANGE_ALL); + rangeGroup->addButton(mc.selectedEventsButton, RANGE_SELECTED); + rangeGroup->addButton(mc.loopedEventsButton, RANGE_LOOPED); + rangeGroup->addButton(mc.selectedLoopedButton, RANGE_SELECTED | RANGE_LOOPED); + mc.allEventsButton->setChecked(true); + } + +//--------------------------------------------------------- +// setRange +//--------------------------------------------------------- + +void MidiCmdDialog::setRange(int id) + { + if (rangeGroup->button(id)) + rangeGroup->button(id)->setChecked(true); + else + printf("setRange: not button %d!\n", id); + } + +//--------------------------------------------------------- +// accept +//--------------------------------------------------------- + +void MidiCmdDialog::accept() + { + _range = rangeGroup->checkedId(); + QDialog::accept(); + } + +//--------------------------------------------------------- +// MidiCmd +//--------------------------------------------------------- + +MidiCmd::MidiCmd(MidiEditor* e) + { + editor = e; + } + +//--------------------------------------------------------- +// processEvents +//--------------------------------------------------------- + +void MidiCmd::processEvents(CItemList* items) + { + MidiCmdDialog* dialog = guiDialog(); + range = editor->applyTo(); + dialog->setRange(range); + bool rv = dialog->exec(); + if (!rv) + return; + range = dialog->range(); // all, selected, looped, sel+loop + editor->setApplyTo(range); + + modified = 0; + song->startUndo(); + process(items); + song->endUndo(modified); + } + +//--------------------------------------------------------- +// eventInRange +//--------------------------------------------------------- + +bool MidiCmd::itemInRange(CItem* item) + { + unsigned tick = item->event.tick(); + bool selected = item->isSelected(); + bool inLoop = (tick >= song->lpos()) && (tick < song->rpos()); + return ( + (range == 0) + || (range == 1 && selected) + || (range == 2 && inLoop) + || (range == 3 && selected && inLoop) + ); + } + +//--------------------------------------------------------- +// changeEvent +//--------------------------------------------------------- + +void MidiCmd::changeEvent(Event oldEvent, Event newEvent, Part* part) + { + audio->msgChangeEvent(oldEvent, newEvent, part, false); + modified = SC_EVENT_MODIFIED; + } + diff --git a/attic/muse_qt4_evolution/muse/midiedit/midicmd.h b/attic/muse_qt4_evolution/muse/midiedit/midicmd.h new file mode 100644 index 00000000..f78f9cb9 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/midicmd.h @@ -0,0 +1,81 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MIDICMD_H__ +#define __MIDICMD_H__ + +#include "citem.h" +#include "ui_midicmd.h" + +class MidiEditor; +class MidiCmdDialog; + +//--------------------------------------------------------- +// MidiCmdDialog +// GUI base class for midiCmd +//--------------------------------------------------------- + +class MidiCmdDialog : public QDialog + { + Q_OBJECT + + QButtonGroup* rangeGroup; + int _range; + Ui::MidiCmd mc; + + protected: + void accept(); + QVBoxLayout* layout; + + public: + MidiCmdDialog(); + int range() const { return _range; } + void setRange(int); + }; + +//--------------------------------------------------------- +// MidiCmd +// abstract base class for midi commands +//--------------------------------------------------------- + +class MidiCmd { + int modified; + + protected: + MidiEditor* editor; + int range; + + // convenience classes for derived classes + bool itemInRange(CItem* item); + void changeEvent(Event oldEvent, Event newEvent, Part* part); + + // virtual functions provided by derived classes + virtual void process(CItemList*) = 0; + virtual MidiCmdDialog* guiDialog() { return 0; } + + public: + MidiCmd(MidiEditor*); + virtual ~MidiCmd() {} + void processEvents(CItemList*); + }; + + +#endif + diff --git a/attic/muse_qt4_evolution/muse/midiedit/midicmd.ui b/attic/muse_qt4_evolution/muse/midiedit/midicmd.ui new file mode 100644 index 00000000..e64e6ba4 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/midicmd.ui @@ -0,0 +1,76 @@ + + + + + MidiCmd + + + + 0 + 0 + 387 + 392 + + + + MusE: Modify Gate Time + + + + 11 + + + 6 + + + + + Apply To + + + + 6 + + + 3 + + + + + All Events + + + + + + + Selected Events + + + true + + + + + + + Looped Events + + + + + + + Selected AND Looped + + + + + + + + + qPixmapFromMimeSource + + + diff --git a/attic/muse_qt4_evolution/muse/midiedit/midieditor.cpp b/attic/muse_qt4_evolution/muse/midiedit/midieditor.cpp new file mode 100644 index 00000000..d004ef29 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/midieditor.cpp @@ -0,0 +1,444 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "midieditor.h" +#include "part.h" +#include "song.h" +#include "widgets/tools.h" +#include "ecanvas.h" +#include "icons.h" +#include "audio.h" +#include "shortcuts.h" + +//--------------------------------------------------------- +// MidiEditor +//--------------------------------------------------------- + +MidiEditor::MidiEditor(PartList* pl) + : Editor() + { + _pl = pl; + selPart = 0; + tools2 = 0; + info = 0; + tools = 0; + toolbar = 0; + + QMenuBar* mb = menuBar(); + + //---------Menu------------------------------- + menuEdit = new QMenu(tr("&Edit")); + mb->addMenu(menuEdit); + + menuEdit->addAction(undoAction); + menuEdit->addAction(redoAction); + + menuEdit->addSeparator(); + cutAction = getAction("cut", this); + menuEdit->addAction(cutAction); + copyAction = getAction("copy", this); + menuEdit->addAction(copyAction); + pasteAction = getAction("paste", this); + menuEdit->addAction(pasteAction); + + speaker = new QAction(this); + speaker->setCheckable(true); + speaker->setIcon(QIcon(*speakerIcon)); + speaker->setText(tr("Play Events")); + speaker->setToolTip(tr("Play Events")); + + stepRecAction = new QAction(this); + stepRecAction->setIcon(QIcon(*steprecIcon)); + stepRecAction->setText(tr("Step Record")); + stepRecAction->setToolTip(tr("Step Record")); + stepRecAction->setCheckable(true); + + midiInAction = new QAction(this); + midiInAction->setIcon(QIcon(*midiinIcon)); + midiInAction->setText(tr("Midi Input")); + midiInAction->setToolTip(tr("Midi Input")); + midiInAction->setCheckable(true); + + followSongAction = new QAction(this); + followSongAction->setText("F"); + followSongAction->setToolTip(tr("Follow Song")); + followSongAction->setCheckable(true); + + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + + QClipboard* cb = QApplication::clipboard(); + connect(cb, SIGNAL(dataChanged()), SLOT(clipboardChanged())); + connect(cb, SIGNAL(selectionChanged()), SLOT(clipboardChanged())); + connect(menuEdit, SIGNAL(triggered(QAction*)), SLOT(midiCmd(QAction*))); + } + +//--------------------------------------------------------- +// cmd +//--------------------------------------------------------- + +void MidiEditor::midiCmd(QAction* a) + { + QString s(a->data().toString()); + if (s == "cut") { + copy(); + song->startUndo(); + CItemList* items = canvas()->getItems(); + for (iCItem i = items->begin(); i != items->end(); ++i) { + if (!i->second->isSelected()) + continue; + CItem* e = i->second; + Event event = e->event; + audio->msgDeleteEvent(event, e->part, false); + } + song->endUndo(SC_EVENT_REMOVED); + } + else if (s == "copy") + copy(); + else + cmd(a); + } + +//--------------------------------------------------------- +// copy +// cut copy paste +//--------------------------------------------------------- + +void MidiEditor::copy() + { + QMimeData* drag = canvas()->getTextDrag(); + if (drag) + QApplication::clipboard()->setMimeData(drag, QClipboard::Selection); + } + + +//--------------------------------------------------------- +// setPos +// snap locator positioning +//--------------------------------------------------------- + +void MidiEditor::setPos(int idx, const AL::Pos& pos) + { + song->setPos(idx, pos.snaped(_raster)); + } + +//--------------------------------------------------------- +// genPartlist +//--------------------------------------------------------- + +void MidiEditor::genPartlist() + { + MidiTrackList* tl = song->midis(); + PartList* npl = new PartList; + for (iPart ip = _pl->begin(); ip != _pl->end(); ++ip) { + Part* part = ip->second; + for (iMidiTrack it = tl->begin(); it != tl->end(); ++it) { + PartList* pl2 = (*it)->parts(); + iPart ip2 = pl2->begin(); + for (; ip2 != pl2->end(); ++ip2) + if (ip2->second == part) { + npl->add(part); + break; + } + if (ip2 != pl2->end()) + break; + } + } + delete _pl; + _pl = npl; + for (iPart ip = _pl->begin(); ip != _pl->end(); ++ip) { + if (ip->second == selPart) + return; + } + if (_pl->empty()) + return; + selPart = _pl->begin()->second; + if (canvas()) + canvas()->setCurPart(selPart); + } + +//--------------------------------------------------------- +// MidiEditor +//--------------------------------------------------------- + +MidiEditor::~MidiEditor() + { + if (_pl) + delete _pl; + } + +//--------------------------------------------------------- +// writePartList +//--------------------------------------------------------- + +void MidiEditor::writePartList(Xml& xml) const + { + for (ciPart p = _pl->begin(); p != _pl->end(); ++p) { + Part* part = p->second; + Track* track = part->track(); + int trkIdx = song->tracks()->indexOf(track); + int partIdx = track->parts()->index(part); + xml.stag("part"); + xml.put(QString("%1:%2").arg(trkIdx).arg(partIdx)); + xml.etag("part"); + } + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void MidiEditor::songChanged(int type) + { + if (type & (SC_PART_REMOVED | SC_PART_MODIFIED + | SC_PART_INSERTED | SC_TRACK_REMOVED)) { + genPartlist(); + // close window if editor has no parts anymore + if (parts()->empty()) { + close(); + return; + } + } + canvas()->songChanged(type); + } + +//--------------------------------------------------------- +// setQuant +//--------------------------------------------------------- + +void MidiEditor::setQuant(int val) + { + _quant = val; + if (toolbar) + toolbar->setQuant(val); + if (canvas() && canvas()->part()) + canvas()->part()->setQuant(val); + } + +//--------------------------------------------------------- +// setRaster +//--------------------------------------------------------- + +void MidiEditor::setRaster(int val) + { + _raster = val; + if (toolbar) + toolbar->setRaster(val); + if (canvas()) { + canvas()->setRaster(val); + if (canvas()->part()) + canvas()->part()->setRaster(val); + } + } + +//--------------------------------------------------------- +// setApplyTo +//--------------------------------------------------------- + +void MidiEditor::setApplyTo(int val) + { + _applyTo = val; + if (toolbar) + toolbar->setApplyTo(_applyTo); + } + +//--------------------------------------------------------- +// rasterStep +//--------------------------------------------------------- + +int MidiEditor::rasterStep(unsigned tick) const + { + return AL::sigmap.rasterStep(tick, raster()); + } + +//--------------------------------------------------------- +// rasterVal +//--------------------------------------------------------- + +unsigned MidiEditor::rasterVal(unsigned v) const + { + return AL::sigmap.raster(v, raster()); + } + +//--------------------------------------------------------- +// rasterVal1 +//--------------------------------------------------------- + +unsigned MidiEditor::rasterVal1(unsigned v) const + { + return AL::sigmap.raster1(v, raster()); + } + +//--------------------------------------------------------- +// rasterVal2 +//--------------------------------------------------------- + +unsigned MidiEditor::rasterVal2(unsigned v) const + { + return AL::sigmap.raster2(v, raster()); + } + +//--------------------------------------------------------- +// quantVal +//--------------------------------------------------------- + +int MidiEditor::quantVal(int v) const + { + int q = quant(); + int val = ((v+q/2)/q)*q; + if (val == 0) + val = q; + return val; + } + +//--------------------------------------------------------- +// xmag +//--------------------------------------------------------- + +double MidiEditor::xmag() const + { + return tcanvas->xmag(); + } + +//--------------------------------------------------------- +// setXmag +//--------------------------------------------------------- + +void MidiEditor::setXmag(double val) + { + if (canvas()) + canvas()->setMag(val, tcanvas->ymag()); + } + +//--------------------------------------------------------- +// tool +//--------------------------------------------------------- + +int MidiEditor::tool() const + { + return tcanvas->tool(); + } + +//--------------------------------------------------------- +// setTool +//--------------------------------------------------------- + +void MidiEditor::setTool(int n) + { + tcanvas->setTool(n); + tools2->set(n); + } + +//--------------------------------------------------------- +// canvasPos +//--------------------------------------------------------- + +QPoint MidiEditor::canvasPos() const + { + return tcanvas->getWPos(); + } + +//--------------------------------------------------------- +// setCanvasPos +//--------------------------------------------------------- + +void MidiEditor::setCanvasPos(const QPoint& p) + { + if (tcanvas) + tcanvas->setWPos(p); + } + +//--------------------------------------------------------- +// clipboardChanged +//--------------------------------------------------------- + +void MidiEditor::clipboardChanged() + { + QString stype("x-muse-eventlist"); + QString s = QApplication::clipboard()->text(stype, QClipboard::Selection); + pasteAction->setEnabled(!s.isEmpty()); + } + +//--------------------------------------------------------- +// selectionChanged +//--------------------------------------------------------- + +void MidiEditor::selectionChanged() + { + bool flag = canvas()->selectionSize() > 0; + cutAction->setEnabled(flag); + copyAction->setEnabled(flag); + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void MidiEditor::read(QDomNode node) + { + for (node = node.firstChild(); !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + QString tag(e.tagName()); + if (tag == "CtrlEdit") { + int id = e.attribute("id","0").toInt(); + int h = e.attribute("h","50").toInt(); + canvas()->addController(id, h); + } + else + AL::readProperties(this, node); + } + canvas()->layout1(); + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void MidiEditor::write(Xml& xml) const + { + writePartList(xml); + xml.stag(metaObject()->className()); + xml.writeProperties(this); + const CtrlEditList* el = canvas()->getCtrlEditors(); + for (ciCtrlEdit i = el->begin(); i != el->end(); ++i) { + xml.tagE(QString("CtrlEdit h=\"%1\" id=\"%2\"") + .arg((*i)->height()).arg((*i)->ctrl()->id())); + } + xml.etag(metaObject()->className()); + } + +//--------------------------------------------------------- +// initFromPart +//--------------------------------------------------------- + +void MidiEditor::initFromPart() + { + Part* part = canvas()->part(); + CtrlCanvasList* cl = part->getCtrlCanvasList(); + if (!cl->empty()) { +#if 0 + for (iCtrlCanvas i = cl->begin(); i != cl->end(); ++i) { +printf("MidiEditor::initFromPart(): add controller %d %d\n", i->ctrlId, i->height); + canvas()->addController(i->ctrlId, i->height); + } +#endif + canvas()->layout1(); + } + } + diff --git a/attic/muse_qt4_evolution/muse/midiedit/midieditor.h b/attic/muse_qt4_evolution/muse/midiedit/midieditor.h new file mode 100644 index 00000000..3791e017 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/midieditor.h @@ -0,0 +1,147 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MIDIEDITOR_H__ +#define __MIDIEDITOR_H__ + +#include "editor.h" + +namespace AL { + class Xml; + class Pos; + }; +using AL::Xml; + +class EditToolBar; +class NoteInfo; +class Toolbar1; +class Part; +class PartList; +class EventCanvas; +class ScrollScale; +class MTScale; +class WaveView; + +//--------------------------------------------------------- +// MidiEditor +//--------------------------------------------------------- + +class MidiEditor : public Editor { + Q_OBJECT + + Q_PROPERTY(int raster READ raster WRITE setRaster) + Q_PROPERTY(int quant READ quant WRITE setQuant) + Q_PROPERTY(bool stepRec READ stepRec WRITE setStepRec) + Q_PROPERTY(bool midiIn READ midiIn WRITE setMidiIn) + Q_PROPERTY(bool playEvents READ playEvents WRITE setPlayEvents) + Q_PROPERTY(bool followSong READ followSong WRITE setFollowSong) + Q_PROPERTY(double xmag READ xmag WRITE setXmag) + Q_PROPERTY(int applyTo READ applyTo WRITE setApplyTo) + Q_PROPERTY(QPoint canvasPos READ canvasPos WRITE setCanvasPos) + Q_PROPERTY(int tool READ tool WRITE setTool) + + bool _playEvents; + + EventCanvas* canvas() { return (EventCanvas*)tcanvas; } + const EventCanvas* canvas() const { return (EventCanvas*)tcanvas; } + void copy(); + + protected: + int _raster; + int _quant; + int _applyTo; + + PartList* _pl; + Part* selPart; + + QMenu *menuEdit; + QAction* speaker; + QAction* stepRecAction; + QAction* midiInAction; + QAction* followSongAction; + QAction* cutAction; + QAction* copyAction; + QAction* pasteAction; + + EditToolBar* tools2; + NoteInfo* info; + QToolBar* tools; + Toolbar1* toolbar; + + void writePartList(Xml&) const; + void genPartlist(); + void writeStatus(Xml&) const; + void initFromPart(); + + private slots: + void midiCmd(QAction*); + + protected slots: + void clipboardChanged(); // enable/disable "Paste" + void selectionChanged(); // enable/disable "Copy" & "Paste" + virtual void songChanged(int); //add virtual to allow editors that do not use + //ecancav to use there own songChanged slot + //and avoid crashing, like MidiTrackerEditor + void setPos(int, const AL::Pos&); + virtual void cmd(QAction*) = 0; + + public slots: + void setQuant(int val); + void setApplyTo(int val); + void setRaster(int val); + + public: + MidiEditor(PartList*); + virtual ~MidiEditor(); + + void read(QDomNode); + void write(Xml&) const; + void readStatus(QDomNode); + + PartList* parts() { return _pl; } + int rasterStep(unsigned tick) const; + unsigned rasterVal(unsigned v) const; + unsigned rasterVal1(unsigned v) const; + unsigned rasterVal2(unsigned v) const; + int quantVal(int v) const; + int raster() const { return _raster; } + int quant() const { return _quant; } + int applyTo() const { return _applyTo; } + bool playEvents() const { return speaker->isChecked(); } + void setPlayEvents(bool val) { speaker->setChecked(val); } + bool stepRec() const { return stepRecAction->isChecked(); } + void setStepRec(bool val) { stepRecAction->setChecked(val); } + bool midiIn() const { return midiInAction->isChecked(); } + void setMidiIn(bool val) { midiInAction->setChecked(val); } + bool followSong() const { return followSongAction->isChecked(); } + void setFollowSong(bool val) { followSongAction->setChecked(val); } + double xmag() const; + void setXmag(double val); + QPoint canvasPos() const; + void setCanvasPos(const QPoint&); + void setTool(int); + int tool() const; + enum { + CMD_CUT, CMD_COPY, CMD_PASTE + }; + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/midiedit/miditracker.cpp b/attic/muse_qt4_evolution/muse/midiedit/miditracker.cpp new file mode 100644 index 00000000..e345f454 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/miditracker.cpp @@ -0,0 +1,234 @@ +//================================================================= +// miditracker +// midi editor a la soundtracker +// miditracker.cpp +// (C) Copyright 2006 Nil Geisweiller (a_lin@user.sourceforge.net) +//================================================================= + +#include "ecanvas.h" +#include "miditracker.h" +#include "trackpattern.h" +#include "song.h" +#include "muse.h" +#include "part.h" + +#define MAX(x,y) (x>y?x:y) + +class TrackPattern; +//class EventCanvas; + +//--------------------------------------------------------- +// MidiTrackerEditor +//--------------------------------------------------------- + +MidiTrackerEditor::MidiTrackerEditor(PartList* pl, bool /*init*/) + : MidiEditor(pl) { + //-------- + //menuView + //-------- + menuView = menuBar()->addMenu(tr("&View")); + + //------- + //ToolBar + //------- + tools = addToolBar(tr("MidiTracker Tools")); + tools->addAction(undoAction); + tools->addAction(redoAction); + tools->addSeparator(); + + tools->addAction(stepRecAction); + stepRecAction->setChecked(INIT_SREC); + + tools->addAction(midiInAction); + midiInAction->setChecked(INIT_MIDIIN); + + tools->addAction(speaker); + speaker->setChecked(INIT_SPEAKER); + + tools->addAction(followSongAction); + followSongAction->setChecked(INIT_FOLLOW); + setFollow(INIT_FOLLOW); + + //panic button + QToolBar* panicToolbar = addToolBar(tr("Panic")); + panicToolbar->addAction(panicAction); + + //Transport Bar + QToolBar* transport = addToolBar(tr("Transport")); + muse->setupTransportToolbar(transport); + + //frame containing the different matrices of time and notes and FX + //QFrame* matricesFrame = new QFrame + + //second bar + addToolBarBreak(); + //row per bar + QToolBar* rowfeatures = addToolBar(tr("row features")); + + QLabel* quantLabel = new QLabel(tr("Quantize")); + quantLabel->setIndent(5); + rowfeatures->addWidget(quantLabel); + _quantCombo = new QuantCombo(rowfeatures); + rowfeatures->addWidget(_quantCombo); + + //QLabel* rpmLabel = new QLabel(tr("Row per bar"), rowfeatures); + //rpmLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter); + //rpmLabel->setIndent(3); + //rowfeatures->addWidget(rpmLabel); + //_rpmSpinBox = new QSpinBox(rowfeatures); + //_rpmSpinBox->setRange(1, 256); + //_rpmSpinBox->setFixedHeight(24); + //rowfeatures->addWidget(_rpmSpinBox); + + //init row per bar + setQuant(96); //corresponds to 16 quant + updateQuant(); + + //number of visible rows + //rowfeatures->addSeparator(); + /*QLabel* nvrLabel = new QLabel(tr("Number of visible rows"), rowfeatures); + nvrLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter); + nvrLabel->setIndent(3); + rowfeatures->addWidget(nvrLabel); + _nvrSpinBox = new QSpinBox(rowfeatures); + _nvrSpinBox->setRange(1, 256); + _nvrSpinBox->setFixedHeight(24); + rowfeatures->addWidget(_nvrSpinBox);*/ + //init number of visible row + /*setNumVisibleRows(20); + updateNumVisibleRows();*/ + + //evaluate fisrtTick and lastTick + unsigned firstTick = _pl->begin()->second->tick(); + unsigned lastTick = 0; + for(ciPart p = _pl->begin(); p != _pl->end(); ++p) { + Part* part = p->second; + lastTick = MAX(lastTick, part->endTick()); + } + + //------------- + //timing matrix + //------------- + _timingPattern = + new TimingPattern(this, "Timing", firstTick, lastTick, _quant); + int nbrRow = _timingPattern->getAbsoluteNbrRow(); + + //--------------- + //tracks matrices + //--------------- + for(ciPart p = _pl->begin(); p != _pl->end(); ++p) { + Part* part = p->second; + Track* track = part->track(); + if(track->isMidiTrack()) { + bool trackNotFound = true; + for(unsigned int i = 0; i < _trackPatterns.size(); i++) + if(_trackPatterns[i]->getTrack()==track) trackNotFound = false; + if(trackNotFound) { + TrackPattern* tp; + tp = new TrackPattern(this, track->name(), firstTick, lastTick, + _quant, pl, (MidiTrack*) track, nbrRow); + _trackPatterns.push_back(tp); + } + } + } + + //signals from TimingPattern and TrackPattern + connect(_timingPattern, SIGNAL(moveCurrentRow(unsigned)), + this, SLOT(updateMoveCurrentRow(unsigned))); + for(unsigned i = 0; i < _trackPatterns.size(); i++) { + connect(_trackPatterns[i], SIGNAL(moveCurrentRow(unsigned)), + this, SLOT(updateMoveCurrentRow(unsigned))); + } + + /* + addToolBarBreak(); + toolbar = new Toolbar1(initRaster, initQuant); + addToolBar(toolbar); + + addToolBarBreak(); + info = new NoteInfo(this); + addToolBar(info); + + setCentralWidget(tcanvas); + tcanvas->setCornerWidget(new QSizeGrip(tcanvas)); + + connect(song, SIGNAL(posChanged(int,const AL::Pos&,bool)), canvas(), + SLOT(setLocatorPos(int,const AL::Pos&,bool))); + connect(canvas(), SIGNAL(posChanged(int,const AL::Pos&)), + SLOT(setPos(int,const AL::Pos&))); + + connect(canvas(), SIGNAL(toolChanged(int)), tools2, SLOT(set(int))); + connect(tools2, SIGNAL(toolChanged(int)), canvas(), SLOT(setTool(int))); + + connect(info, SIGNAL(valueChanged(NoteInfo::ValType, int)), + SLOT(noteinfoChanged(NoteInfo::ValType, int))); + + connect(canvas(), SIGNAL(selectionChanged(int, Event&, Part*)), this, + SLOT(setSelection(int, Event&, Part*))); + + info->setEnabled(false); + + setWindowTitle(canvas()->getCaption()); + int s1, e; + canvas()->range(&s1, &e); + e += AL::sigmap.ticksMeasure(e); // show one more measure + canvas()->setTimeRange(s1, e);*/ + +} + +//--------------------------------------------------------- +// setQuant +//--------------------------------------------------------- +void MidiTrackerEditor::setQuant(int q) { + _quant = q; +} + +//--------------------------------------------------------- +// getQuant +//--------------------------------------------------------- +int MidiTrackerEditor::getQuant() { + return _quant; +} + +//--------------------------------------------------------- +// updateQuant +//--------------------------------------------------------- +void MidiTrackerEditor::updateQuant() { + _quantCombo->blockSignals(true); + _quantCombo->setQuant(_quant); + _quantCombo->blockSignals(false); +} + +//--------------------------------------------------------- +// setFollow +//--------------------------------------------------------- +void MidiTrackerEditor::setFollow(bool f) { + _follow = f; +} + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- +void MidiTrackerEditor::songChanged(int i) { + emit signalSongChanged(i); +} + +//--------------------------------------------------------- +// cmd +// pulldown menu commands +//--------------------------------------------------------- + +void MidiTrackerEditor::cmd(QAction* /*a*/) { + //int cmd = a->data().toInt(); + //canvas()->cmd(cmd, _quantStrength, _quantLimit, _quantLen); +} + +//void MidiTrackerEditor::resizeEvent(QResizeEvent *event) { +// for(int i = 0; i < _trackPatterns.size(); i++) +// _trackPatterns[i]->fillTrackPat(); +// _timingPattern->fillTimmingPat(); +//} + +void MidiTrackerEditor::updateMoveCurrentRow(unsigned index) { + emit signalMoveCurrentRow(index); +} diff --git a/attic/muse_qt4_evolution/muse/midiedit/miditracker.h b/attic/muse_qt4_evolution/muse/midiedit/miditracker.h new file mode 100644 index 00000000..5e6d706a --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/miditracker.h @@ -0,0 +1,76 @@ +//================================================================= +// miditracker +// midi editor a la soundtracker +// miditracker.h +// (C) Copyright 2006 Nil Geisweiller (a_lin@user.sourceforge.net) +//================================================================= + +#ifndef __MTEDITOR_H__ +#define __MTEDITOR_H__ + +#include "midieditor.h" +#include "trackpattern.h" +#include "quantcombo.h" +#include + + +class QuantCombo; + +namespace AL { + class Xml; + }; +using AL::Xml; + +//--------------------------------------------------------- +// MidiTrackerEditor +//--------------------------------------------------------- + +class MidiTrackerEditor : public MidiEditor { + Q_OBJECT + + private: + int _quant; + QuantCombo* _quantCombo; + //int _numVisibleRows; + //QSpinBox* _nvrSpinBox; + + QMenu* menuView; + bool _follow; + void setFollow(bool); + + std::vector _trackPatterns; + TimingPattern* _timingPattern; + + private slots: + void updateMoveCurrentRow(unsigned); + virtual void cmd(QAction*); + + protected slots: + virtual void songChanged(int); + + public: + MidiTrackerEditor(PartList*, bool); + ~MidiTrackerEditor() {} + + void setQuant(int rpm); + int getQuant(); + void updateQuant(); //update the gui + + void setNumVisibleRows(int nvr); + int getNumVisibleRows(); + void updateNumVisibleRows(); //update the gui + + static const bool INIT_FOLLOW = false; + static const bool INIT_SPEAKER = true; + static const bool INIT_SREC = false; + static const bool INIT_MIDIIN = false; + + protected: + //void resizeEvent(QResizeEvent *event); + + signals: + void signalMoveCurrentRow(unsigned); + void signalSongChanged(int); +}; + +#endif diff --git a/attic/muse_qt4_evolution/muse/midiedit/pianoroll.cpp b/attic/muse_qt4_evolution/muse/midiedit/pianoroll.cpp new file mode 100644 index 00000000..c9be06e9 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/pianoroll.cpp @@ -0,0 +1,526 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "pianoroll.h" +#include "song.h" +#include "icons.h" +#include "cmd.h" +#include "muse.h" +#include "widgets/tools.h" +#include "quantconfig.h" +#include "shortcuts.h" +#include "audio.h" +#include "part.h" + +static int pianorollTools = PointerTool | PencilTool | RubberTool | DrawTool; +int PianoRoll::initWidth = PianoRoll::INIT_WIDTH; +int PianoRoll::initHeight = PianoRoll::INIT_HEIGHT; +int PianoRoll::initRaster = PianoRoll::INIT_RASTER; +int PianoRoll::initQuant = PianoRoll::INIT_QUANT; +int PianoRoll::initColorMode = PianoRoll::INIT_COLOR_MODE; +bool PianoRoll::initFollow = PianoRoll::INIT_FOLLOW; +bool PianoRoll::initSpeaker = PianoRoll::INIT_SPEAKER; +bool PianoRoll::initMidiin = PianoRoll::INIT_MIDIIN; +double PianoRoll::initXmag = 0.08; // PianoRoll::INIT_XMAG; (compiler problem?) +int PianoRoll::initApplyTo = PianoRoll::INIT_APPLY_TO; +int PianoRoll::initQuantStrength = PianoRoll::INIT_QUANT_STRENGTH; +int PianoRoll::initQuantLimit = PianoRoll::INIT_QUANT_LIMIT; +bool PianoRoll::initQuantLen = PianoRoll::INIT_QUANT_LEN; + +//--------------------------------------------------------- +// PianoRoll +//--------------------------------------------------------- + +PianoRoll::PianoRoll(PartList* pl, bool init) + : MidiEditor(pl) + { + _applyTo = initApplyTo; + _colorMode = initColorMode; + _quantStrength = initQuantStrength; + _quantLimit = initQuantLimit; + _quantLen = initQuantLen; + + deltaMode = false; + quantConfig = 0; + + tcanvas = new PianoCanvas(this); + QMenuBar* mb = menuBar(); + + menu_ids[CMD_EVENT_COLOR] = getAction("change_event_color", this); + menu_ids[CMD_CONFIG_QUANT] = getAction("config_quant", this); + + //---------Menu---------------------------------- + menuEdit->addSeparator(); + + QAction* a = getAction("delete", this); + menuEdit->addAction(a); + + menuEdit->addSeparator(); + + menuSelect = menuEdit->addMenu(QIcon(*selectIcon),tr("&Select")); + + menuSelect->addAction(getAction("sel_all", this)); + menuSelect->addAction(getAction("sel_none", this)); + menuSelect->addAction(getAction("sel_inv", this)); + menuSelect->addAction(getAction("sel_ins_loc", this)); + menuSelect->addAction(getAction("sel_out_loc", this)); + + menuConfig = mb->addMenu(tr("&Config")); + eventColor = menuConfig->addMenu(tr("event color")); + menu_ids[CMD_EVENT_COLOR] = eventColor->menuAction(); + + colorModeAction[0] = eventColor->addAction(tr("blue")); + colorModeAction[0]->setData(0); + colorModeAction[0]->setCheckable(true); + colorModeAction[1] = eventColor->addAction(tr("pitch colors")); + colorModeAction[1]->setData(1); + colorModeAction[1]->setCheckable(true); + colorModeAction[2] = eventColor->addAction(tr("velocity colors")); + colorModeAction[2]->setData(2); + colorModeAction[2]->setCheckable(true); + connect(eventColor, SIGNAL(triggered(QAction*)), SLOT(setEventColorMode(QAction*))); + + menuFunctions = mb->addMenu(tr("&Functions")); + + menuFunctions->addAction(getAction("midi_over_quant", this)); + menuFunctions->addAction(getAction("midi_quant_noteon", this)); + menuFunctions->addAction(getAction("midi_quant_noteoff", this)); + menuFunctions->addAction(getAction("midi_quant_iterative", this)); + + menuFunctions->addSeparator(); + + menu_ids[CMD_CONFIG_QUANT] = menuFunctions->addAction(tr("Config Quant...")); + connect(menu_ids[CMD_CONFIG_QUANT], SIGNAL(triggered()), this, SLOT(configQuant())); + + menuFunctions->addSeparator(); + + menuFunctions->addAction(getAction("midi_mod_gate_time", this)); + menuFunctions->addAction(getAction("midi_mod_velo", this)); + +#if 0 // TODO + menuFunctions->addAction(getAction("midi_crescendo", this)); + menuFunctions->addAction(getAction("midi_transpose", this)); + menuFunctions->addAction(getAction("midi_thin_out", this)); + menuFunctions->addAction(getAction("midi_erase_event", this)); + menuFunctions->addAction(getAction("midi_note_shift", this)); + menuFunctions->addAction(getAction("midi_move_clock", this)); + menuFunctions->addAction(getAction("midi_copy_measure", this)); + menuFunctions->addAction(getAction("midi_erase_measure", this)); + menuFunctions->addAction(getAction("midi_delete_measure", this)); + menuFunctions->addAction(getAction("midi_create_measure", this)); +#endif + + connect(menuSelect, SIGNAL(triggered(QAction*)), SLOT(cmd(QAction*))); + connect(menuFunctions, SIGNAL(triggered(QAction*)), SLOT(cmd(QAction*))); + + //---------ToolBar---------------------------------- + tools = addToolBar(tr("Pianoroll Tools")); + tools->addAction(undoAction); + tools->addAction(redoAction); + tools->addSeparator(); + + tools->addAction(stepRecAction); + stepRecAction->setChecked(INIT_SREC); + + tools->addAction(midiInAction); + midiInAction->setChecked(INIT_MIDIIN); + + tools->addAction(speaker); + speaker->setChecked(INIT_SPEAKER); + + tools->addAction(followSongAction); + followSongAction->setChecked(INIT_FOLLOW); + tcanvas->setFollow(INIT_FOLLOW); + + tools2 = new EditToolBar(this, pianorollTools); + addToolBar(tools2); + + QToolBar* panicToolbar = addToolBar(tr("Panic")); + panicToolbar->addAction(panicAction); + + //------------------------------------------------------------- + // Transport Bar + + QToolBar* transport = addToolBar(tr("Transport")); + muse->setupTransportToolbar(transport); + + addToolBarBreak(); + toolbar = new Toolbar1(initRaster, initQuant); + addToolBar(toolbar); + + addToolBarBreak(); + info = new NoteInfo(this); + addToolBar(info); + + setCentralWidget(tcanvas); + tcanvas->setCornerWidget(new QSizeGrip(tcanvas)); + + connect(song, SIGNAL(posChanged(int,const AL::Pos&,bool)), canvas(), SLOT(setLocatorPos(int,const AL::Pos&,bool))); + connect(canvas(), SIGNAL(posChanged(int,const AL::Pos&)), SLOT(setPos(int,const AL::Pos&))); + + connect(canvas(), SIGNAL(toolChanged(int)), tools2, SLOT(set(int))); + connect(tools2, SIGNAL(toolChanged(int)), canvas(), SLOT(setTool(int))); + + connect(info, SIGNAL(valueChanged(NoteInfo::ValType, int)), SLOT(noteinfoChanged(NoteInfo::ValType, int))); + + connect(canvas(), SIGNAL(selectionChanged(int, Event&, Part*)), this, + SLOT(setSelection(int, Event&, Part*))); + + info->setEnabled(false); + + setWindowTitle(canvas()->getCaption()); + Pos p1(0, AL::TICKS), p2(0, AL::TICKS); + canvas()->range(p1, p2); + p2 += AL::sigmap.ticksMeasure(p2.tick()); // show one more measure + canvas()->setTimeRange(p1, p2); + + // connect to toolbar + connect(canvas(), SIGNAL(pitchChanged(int)), toolbar, SLOT(setPitch(int))); + connect(canvas(), SIGNAL(yChanged(int)), toolbar, SLOT(setInt(int))); + connect(canvas(), SIGNAL(cursorPos(const AL::Pos&,bool)), toolbar, SLOT(setTime(const AL::Pos&,bool))); + connect(toolbar, SIGNAL(quantChanged(int)), SLOT(setQuant(int))); + connect(toolbar, SIGNAL(rasterChanged(int)),SLOT(setRaster(int))); + connect(toolbar, SIGNAL(toChanged(int)), SLOT(setApplyTo(int))); + connect(toolbar, SIGNAL(soloChanged(bool)), SLOT(soloChanged(bool))); + + setEventColorMode(_colorMode); + + clipboardChanged(); // enable/disable "Paste" + selectionChanged(); // enable/disable "Copy" & "Paste" + + // + // install misc shortcuts + // + QShortcut* sc = new QShortcut(Qt::Key_Escape, this); + sc->setContext(Qt::WindowShortcut); + connect(sc, SIGNAL(activated()), SLOT(close())); + + QSignalMapper* cmdMap = new QSignalMapper(this); + static const char* actions[] = { + "curpos_increase", "curpos_decrease", + "midi_insert_at_loc", + "midi_quant_1", "midi_quant_2", "midi_quant_3", "midi_quant_4", + "midi_quant_5", "midi_quant_6", "midi_quant_7", + "midi_quant_punct", "midi_quant_punct2", "midi_quant_triol", + }; + for (unsigned i = 0; i < sizeof(actions)/sizeof(*actions); ++i) { + a = getAction(actions[i], this); + addAction(a); + cmdMap->setMapping(a, a); + connect(a, SIGNAL(triggered()), cmdMap, SLOT(map())); + } + connect(cmdMap, SIGNAL(mapped(QObject*)), SLOT(pianoCmd(QObject*))); + + connect(song, SIGNAL(songChanged(int)), canvas(), SLOT(songChanged(int))); + connect(followSongAction, SIGNAL(toggled(bool)), canvas(), SLOT(setFollow(bool))); + canvas()->selectFirst(); + + Part* part = canvas()->part(); + setRaster(part->raster() != -1 ? part->raster() : initRaster); + setQuant(part->quant() != -1 ? part->quant() : initQuant); + setXmag(part->xmag() != -1.0 ? part->xmag() : initXmag); + + if (init) + initFromPart(); + else { + resize(initWidth, initHeight); + } + } + +//--------------------------------------------------------- +// cmd +// pulldown menu commands +//--------------------------------------------------------- + +void PianoRoll::cmd(QAction* a) + { + canvas()->cmd(a, _quantStrength, _quantLimit, _quantLen); + } + +//--------------------------------------------------------- +// setSelection +// update Info Line +//--------------------------------------------------------- + +void PianoRoll::setSelection(int tick, Event& e, Part* p) + { + int selections = canvas()->selectionSize(); + + selEvent = e; + selPart = p; + + if (selections > 1) { + info->setEnabled(true); + info->setDeltaMode(true); + if (!deltaMode) { + deltaMode = true; + info->setValues(0, 0, 0, 0, 0); + tickOffset = 0; + lenOffset = 0; + pitchOffset = 0; + veloOnOffset = 0; + veloOffOffset = 0; + } + } + else if (selections == 1) { + deltaMode = false; + info->setEnabled(true); + info->setDeltaMode(false); + info->setValues(tick, + selEvent.lenTick(), + selEvent.pitch(), + selEvent.velo(), + selEvent.veloOff()); + } + else { + deltaMode = false; + info->setEnabled(false); + } + selectionChanged(); + } + +//--------------------------------------------------------- +// edit currently selected Event +//--------------------------------------------------------- + +void PianoRoll::noteinfoChanged(NoteInfo::ValType type, int val) + { + int selections = canvas()->selectionSize(); + + if (selections == 0) { + printf("noteinfoChanged while nothing selected\n"); + } + else if (selections == 1) { + Event event = selEvent.clone(); + switch(type) { + case NoteInfo::VAL_TIME: + event.setTick(val - selPart->tick()); + break; + case NoteInfo::VAL_LEN: + event.setLenTick(val); + break; + case NoteInfo::VAL_VELON: + event.setVelo(val); + break; + case NoteInfo::VAL_VELOFF: + event.setVeloOff(val); + break; + case NoteInfo::VAL_PITCH: + event.setPitch(val); + break; + } + audio->msgChangeEvent(selEvent, event, selPart); + } + else { + // multiple events are selected; treat noteinfo values + // as offsets to event values + + int delta = 0; + switch (type) { + case NoteInfo::VAL_TIME: + delta = val - tickOffset; + tickOffset = val; + break; + case NoteInfo::VAL_LEN: + delta = val - lenOffset; + lenOffset = val; + break; + case NoteInfo::VAL_VELON: + delta = val - veloOnOffset; + veloOnOffset = val; + break; + case NoteInfo::VAL_VELOFF: + delta = val - veloOffOffset; + veloOffOffset = val; + break; + case NoteInfo::VAL_PITCH: + delta = val - pitchOffset; + pitchOffset = val; + break; + } + if (delta) + canvas()->modifySelected(type, delta); + } + } + +//--------------------------------------------------------- +// soloChanged +// signal from solo button +//--------------------------------------------------------- + +void PianoRoll::soloChanged(bool flag) + { + song->setSolo(canvas()->track(), flag); + } + +//--------------------------------------------------------- +// pianoCmd +//--------------------------------------------------------- + +void PianoRoll::pianoCmd(QObject* object) + { + QAction* a = (QAction*)object; + QString cmd(a->data().toString()); + + static int rasterTable[] = { + //-9----8- 7 6 5 4 3(1/4) 2 1 + 4, 8, 16, 32, 64, 128, 256, 512, 1024, // triple + 6, 12, 24, 48, 96, 192, 384, 768, 1536, + 9, 18, 36, 72, 144, 288, 576, 1152, 2304 // dot + }; + + int index; + int n = sizeof(rasterTable)/sizeof(*rasterTable); + for (index = 0; index < n; ++index) + if (rasterTable[index] == raster()) + break; + if (index == n) { + index = 0; + // raster 1 is not in table + } + int off = (index / 9) * 9; + index = index % 9; + + int val = 0; + + PianoCanvas* pc = canvas(); + + if (cmd == "curpos_increase") + canvas()->pianoCmd(MCMD_LEFT); + else if (cmd == "curpos_decrease") + canvas()->pianoCmd(MCMD_RIGHT); + else if (cmd == "midi_insert_at_loc") { + pc->pianoCmd(MCMD_INSERT); + return; + } + else if (cmd == "midi_quant_1") + val = rasterTable[8 + off]; + else if (cmd == "midi_quant_2") + val = rasterTable[7 + off]; + else if (cmd == "midi_quant_3") + val = rasterTable[6 + off]; + else if (cmd == "midi_quant_4") + val = rasterTable[5 + off]; + else if (cmd == "midi_quant_5") + val = rasterTable[4 + off]; + else if (cmd == "midi_quant_6") + val = rasterTable[3 + off]; + else if (cmd == "midi_quant_7") + val = rasterTable[2 + off]; + else if (cmd == "midi_quant_triol") + val = rasterTable[index + ((off == 0) ? 9 : 0)]; + else if (cmd == "change_event_color") { + _colorMode = (_colorMode + 1) % 3; + setEventColorMode(_colorMode); + return; + } + else if (cmd == "midi_quant_punct") + val = rasterTable[index + ((off == 18) ? 9 : 18)]; + else if (cmd == "midi_quant_punct2") { + if ((off == 18) && (index > 2)) { + val = rasterTable[index + 9 - 1]; + } + else if ((off == 9) && (index < 8)) { + val = rasterTable[index + 18 + 1]; + } + else + return; + } + else + printf("unknown cmd <%s>\n", cmd.toLatin1().data()); + setQuant(val); + setRaster(val); + toolbar->setQuant(quant()); + toolbar->setRaster(raster()); + } + +//--------------------------------------------------------- +// configQuant +//--------------------------------------------------------- + +void PianoRoll::configQuant() + { + QuantConfig quantConfig(_quantStrength, _quantLimit, _quantLen, this); + if (!quantConfig.exec()) + return; + _quantStrength = quantConfig.quantStrength(); + _quantLimit = quantConfig.quantLimit(); + _quantLen = quantConfig.doQuantLen(); + } + +//--------------------------------------------------------- +// setEventColorMode +//--------------------------------------------------------- + +void PianoRoll::setEventColorMode(QAction* a) + { + setEventColorMode(a->data().toInt()); + } + +void PianoRoll::setEventColorMode(int mode) + { + _colorMode = mode; + for (int i = 0; i < 3; ++i) + colorModeAction[i]->setChecked(mode == i); + canvas()->setColorMode(mode); + } + +//--------------------------------------------------------- +// readConfiguration +// read static init values +//--------------------------------------------------------- + +void PianoRoll::readConfiguration(QDomNode node) + { + for (node = node.firstChild(); !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + QString tag(e.tagName()); + int i = e.text().toInt(); + if (tag == "width") + PianoRoll::initWidth = i; + else if (tag == "height") + PianoRoll::initHeight = i; + else if (tag == "raster") + PianoRoll::initRaster = i; + else if (tag == "quant") + PianoRoll::initQuant = i; + else + printf("MusE:PianoRoll: unknown tag %s\n", tag.toLatin1().data()); + } + } + +//--------------------------------------------------------- +// writeConfiguration +// write static init values +//--------------------------------------------------------- + +void PianoRoll::writeConfiguration(Xml& xml) + { + xml.stag("PianoRoll"); + if (PianoRoll::initWidth != PianoRoll::INIT_WIDTH) + xml.tag("width", PianoRoll::initWidth); + if (PianoRoll::initHeight != PianoRoll::INIT_HEIGHT) + xml.tag("height", PianoRoll::initHeight); + if (PianoRoll::initRaster != PianoRoll::INIT_RASTER) + xml.tag("raster", PianoRoll::initRaster); + if (PianoRoll::initQuant != PianoRoll::INIT_QUANT) + xml.tag("quant", PianoRoll::initQuant); + xml.etag("PianoRoll"); + } diff --git a/attic/muse_qt4_evolution/muse/midiedit/pianoroll.h b/attic/muse_qt4_evolution/muse/midiedit/pianoroll.h new file mode 100644 index 00000000..e510408c --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/pianoroll.h @@ -0,0 +1,126 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __PIANOROLL_H__ +#define __PIANOROLL_H__ + +#include "midieditor.h" +#include "prcanvas.h" + +namespace AL { + class Xml; + }; +using AL::Xml; + +class PianoCanvas; +class PartList; +class QuantConfig; +class Part; +class TimeCanvas; + +//--------------------------------------------------------- +// PianoRoll +//--------------------------------------------------------- + +class PianoRoll : public MidiEditor { + Q_OBJECT + + Q_PROPERTY(int colorMode READ colorMode WRITE setColorMode) + Q_PROPERTY(int quantStrength READ quantStrength WRITE setQuantStrength) + Q_PROPERTY(int quantLimit READ quantLimit WRITE setQuantLimit) + Q_PROPERTY(bool quantLen READ quantLen WRITE setQuantLen) + + int _quantStrength, _quantLimit; + bool _quantLen; + int _colorMode; + + Event selEvent; + + enum { CMD_EVENT_COLOR, CMD_CONFIG_QUANT, CMD_LAST }; + + QAction* menu_ids[CMD_LAST]; + QMenu *menuFunctions, *menuSelect, *menuConfig; + + int tickOffset; + int lenOffset; + int pitchOffset; + int veloOnOffset; + int veloOffOffset; + bool deltaMode; + + QAction* colorModeAction[3]; + QMenu* eventColor; + QuantConfig* quantConfig; + + QWidget* genToolbar(QWidget* parent); + void setEventColorMode(int); + PianoCanvas* canvas() { return (PianoCanvas*)tcanvas; } + const PianoCanvas* canvas() const { return (PianoCanvas*)tcanvas; } + + private slots: + void setSelection(int, Event&, Part*); + void noteinfoChanged(NoteInfo::ValType, int); + void soloChanged(bool flag); + void configQuant(); + + virtual void cmd(QAction*); + void setEventColorMode(QAction*); + void pianoCmd(QObject*); + + public: + PianoRoll(PartList*, bool); + ~PianoRoll() {} + + int colorMode() const { return _colorMode; } + void setColorMode(int val) { _colorMode = val; } + int quantStrength() const { return _quantStrength; } + int quantLimit() const { return _quantLimit; } + bool quantLen() const { return _quantLen; } + void setQuantStrength(int val) { _quantStrength = val; } + void setQuantLimit(int val) { _quantLimit = val; } + void setQuantLen(bool val) { _quantLen = val; } + + static void readConfiguration(QDomNode); + static void writeConfiguration(Xml&); + static int initRaster, initQuant, initWidth, initHeight; + static bool initFollow, initSpeaker, initMidiin; + static int initColorMode, initApplyTo; + static double initXmag; + static int initQuantStrength, initQuantLimit; + static bool initQuantLen; + + static const int INIT_WIDTH = 650; + static const int INIT_HEIGHT = 450; + static const int INIT_RASTER = 384 / 2; + static const int INIT_QUANT = 384 / 2; + static const bool INIT_FOLLOW = false; + static const bool INIT_SPEAKER = true; + static const bool INIT_MIDIIN = false; + static const bool INIT_SREC = false; + static const bool INIT_COLOR_MODE = 0; + static const double INIT_XMAG = 0.08; + static const int INIT_APPLY_TO = 0; + static const int INIT_QUANT_STRENGTH = 100; + static const int INIT_QUANT_LIMIT = 0; + static const int INIT_QUANT_LEN = false; + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/midiedit/prcanvas.cpp b/attic/muse_qt4_evolution/muse/midiedit/prcanvas.cpp new file mode 100644 index 00000000..f6890b02 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/prcanvas.cpp @@ -0,0 +1,773 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "midieditor.h" +#include "prcanvas.h" +#include "cmd.h" +#include "gatetime.h" +#include "velocity.h" +#include "song.h" +#include "audio.h" +#include "part.h" + +#include "velocity.h" +#include "gatetime.h" + +//--------------------------------------------------------- +// PianoCanvas +//--------------------------------------------------------- + +PianoCanvas::PianoCanvas(MidiEditor* pr) + : EventCanvas(pr, TIME_CANVAS_PIANOROLL) + { + verticalScrollBar()->setSingleStep(keyHeight/2); + playedPitch = -1; + colorMode = 0; + canvasTools = PointerTool | PencilTool | RubberTool | DrawTool; + + // register midi commands + cmdModifyGateTime = new ModifyGateTimeCmd(pr); + cmdModifyVelocity = new ModifyVelocityCmd(pr); + + songChanged(SC_TRACK_INSERTED); + } + +//--------------------------------------------------------- +// addItem +//--------------------------------------------------------- + +void PianoCanvas::addItem(Part* part, const Event& event) + { + CItem* item = new CItem(event, part); + int y = pitch2y(event.pitch()) + keyHeight/4 + (int)(wpos.y()/_ymag); + item->pos = event.pos() + *part; + unsigned time = item->pos.time(timeType()); + item->bbox = QRect(time, y, event.lenTick(), keyHeight/2); + items.add(item); + } + +//--------------------------------------------------------- +// timeTypeChanged +//--------------------------------------------------------- + +void PianoCanvas::timeTypeChanged() + { + // + // recalculate bounding boxes + // + for (iCItem i = items.begin(); i != items.end(); ++i) { + CItem* item = i->second; + unsigned t1 = item->event.pos().time(timeType()); + unsigned t2 = item->event.end().time(timeType()); + item->bbox.setX(t1 + (item->part)->time(timeType())); + item->bbox.setWidth(t2 - t1); + } + } + +//--------------------------------------------------------- +// paint +//--------------------------------------------------------- + +void PianoCanvas::paint(QPainter& p, QRect cr) + { + static QColor color1[12] = { + QColor(0xff, 0x3d, 0x39), + QColor(0x39, 0xff, 0x39), + QColor(0x39, 0x3d, 0xff), + QColor(0xff, 0xff, 0x39), + QColor(0xff, 0x3d, 0xff), + QColor(0x39, 0xff, 0xff), + QColor(0xff, 0x7e, 0x7a), + QColor(0x7a, 0x7e, 0xff), + QColor(0x7a, 0xff, 0x7a), + QColor(0xff, 0x7e, 0xbf), + QColor(0x7a, 0xbf, 0xff), + QColor(0xff, 0xbf, 0x7a) + }; + + QPoint off(MAP_OFFSET - wpos.x(), -wpos.y()); + p.translate(off); + cr.translate(-off); + + int time1 = lrint(cr.x() / _xmag); + int w = lrint(cr.width() / _xmag); + cr.setRect( + time1, + lrint(cr.y() / _ymag), + w, + lrint(cr.height() / _ymag) + ); + p.scale(_xmag, _ymag); + + int time2 = time1 + w; + + //--------------------------------------------------- + // draw Canvas Items + //--------------------------------------------------- + + p.setPen(QPen(Qt::black, 0.0)); + + for (iCItem i = items.begin(); i != items.end(); ++i) { + CItem* item = i->second; + QRect r(item->bbox); + if (r.x() >= time2) + break; + if (!cr.intersects(r)) + continue; + Event event(item->event); + + QColor color; + if (item->part != curPart) + p.setBrush(Qt::lightGray); + else { + if (item->isMoving) { + p.setBrush(Qt::gray); + p.drawRect(r); + p.setBrush(Qt::NoBrush); + int x = item->moving.tick(); + int y = item->my + item->bbox.height()/2; + int w = item->bbox.width(); + int h = item->bbox.height(); + p.drawRect(x, y, w, h); + } + else if (item->isSelected()) { + p.setBrush(Qt::black); + } + else { + if (colorMode == 1) + color = color1[event.pitch() % 12]; + else if (colorMode == 2) { + int velo = event.velo(); + if (velo < 64) + color.setRgb(velo*4, 0, 0xff); + else + color.setRgb(0xff, 0, (127-velo) * 4); + } + else + color.setRgb(0, 0, 255); + p.setBrush(color); + } + } + p.drawRect(r); + } + + //--------------------------------------------------- + // draw lasso + //--------------------------------------------------- + + p.resetMatrix(); + p.translate(rCanvasA.topLeft()); + + if (drag == DRAG_LASSO) { + p.setPen(Qt::blue); + p.setBrush(Qt::NoBrush); + p.drawRect(lasso); + QColor fillColor(Qt::blue); + fillColor.setAlpha(40); + QBrush fillBrush(fillColor); + p.fillRect(lasso,fillBrush); + } + } + +//--------------------------------------------------------- +// viewMouseDoubleClickEvent +//--------------------------------------------------------- + +void PianoCanvas::viewMouseDoubleClickEvent(QMouseEvent* event) + { + if ((_tool != PointerTool) && (event->button() != Qt::LeftButton)) { +// mousePress(event); + return; + } + } + +//--------------------------------------------------------- +// moveItem +// called after moving an object +//--------------------------------------------------------- + +void PianoCanvas::moveItem(CItem* item, DragType dtype) + { + Part* part = item->part; + Event event = item->event; + int npitch = y2pitch((int)((item->my - (int)(wpos.y()/_ymag) + + item->bbox.height())*_ymag)); + if ((curItem==item) //remove this if want to have all selection playing + && event.pitch() != npitch && editor->playEvents()) { + // release note: + MidiEvent ev1(0, 0, 0x90, playedPitch, 0); + track()->playMidiEvent(&ev1); + //remove below because the note is never cut off + //MidiEvent ev2(0, 0, 0x90, npitch + track()->transposition(), event.velo()); + //track()->playMidiEvent(&ev2); + } + + Event newEvent = event.clone(); + newEvent.setPitch(npitch); + newEvent.setPos(item->moving - *part); + + if (dtype == MOVE_COPY) + audio->msgAddEvent(newEvent, part, false); + else + audio->msgChangeEvent(event, newEvent, part, false); + } + +//--------------------------------------------------------- +// newItem(p, state) +//--------------------------------------------------------- + +CItem* PianoCanvas::newItem(const QPoint& p, int) + { + Pos opos(pix2pos(p.x())); + Pos pos(opos); + pos.downSnap(raster()); + + if (pos < partPos1 || pos >= partPos2) + return 0; + + int pitch = y2pitch(p.y()); + + Event e(Note); + e.setPitch(pitch); + e.setVelo(curVelo); + e.setPos(pos - *curPart); + + CItem* i = new CItem(e, curPart); + int l = timeType() == AL::TICKS ? e.lenTick() : e.lenFrame(); + int x = pos.time(timeType()); + int y = pitch2y(pitch) + keyHeight/4 + (int)(wpos.y() / _ymag); + i->bbox = QRect(x, y, l, keyHeight/2); + + return i; + } + +void PianoCanvas::newItem(CItem* item, bool noSnap) + { + Event event = item->event; + Pos p1(item->bbox.x(), timeType()); + Pos p2(item->bbox.x() + item->bbox.width(), timeType()); + int tickLen; + + if (noSnap) + tickLen = p2.tick() - p1.tick(); + else { + p1.downSnap(raster()); + tickLen = editor->quantVal(p2.tick() - p1.tick()); + } + + Part* part = item->part; + event.setPos(p1 - *part); + event.setLenTick(tickLen); + audio->msgAddEvent(event, part); + } + +//--------------------------------------------------------- +// resizeItem +//--------------------------------------------------------- + +void PianoCanvas::resizeItem(CItem* item, bool noSnap) + { + Event event = item->event; + Event newEvent = event.clone(); + int len; + if (noSnap) + len = item->bbox.width(); + else + len = editor->quantVal(item->bbox.width()); + newEvent.setLenTick(len); + audio->msgChangeEvent(event, newEvent, item->part); + } + +//--------------------------------------------------------- +// deleteItem +//--------------------------------------------------------- + +bool PianoCanvas::deleteItem(CItem* item) + { + if (item->part == curPart) { + Event ev = item->event; + audio->msgDeleteEvent(ev, curPart); + return true; + } + return false; + } + +//--------------------------------------------------------- +// pianoCmd +//--------------------------------------------------------- + +void PianoCanvas::pianoCmd(int cmd) + { + switch(cmd) { + case MCMD_LEFT: + { + int frames = pos[0].tick() - editor->rasterStep(pos[0].tick()); + if (frames < 0) + frames = 0; + Pos p(frames, AL::TICKS); + song->setPos(0, p, true, true, true); //CDW + } + break; + case MCMD_RIGHT: + { + Pos p(pos[0].tick() + editor->rasterStep(pos[0].tick()), AL::TICKS); + //if (p > part->tick()) + // p = part->tick(); + song->setPos(0, p, true, true, true); //CDW + } + break; + case MCMD_INSERT: + { + if (pos[0].tick() < startTick || pos[0].tick() >= endTick) + break; + Part* part = curPart; + + if (part == 0) + break; + song->startUndo(); + EventList* el = part->events(); + + std::list elist; + for (iEvent e = el->lower_bound(pos[0].tick() - part->tick()); e != el->end(); ++e) + elist.push_back((Event)e->second); + for (std::list::iterator i = elist.begin(); i != elist.end(); ++i) { + Event event = *i; + Event newEvent = event.clone(); + newEvent.setTick(event.tick() + editor->raster()); + audio->msgChangeEvent(event, newEvent, part, false); + } + song->endUndo(SC_EVENT_MODIFIED); + Pos p(editor->rasterVal(pos[0].tick() + editor->rasterStep(pos[0].tick())), AL::TICKS); + song->setPos(0, p, true, false, true); + } + return; + case MCMD_DELETE: + if (pos[0].tick() < startTick || pos[0].tick() >= endTick) + break; + { + Part* part = curPart; + if (part == 0) + break; + song->startUndo(); + EventList* el = part->events(); + + std::list elist; + for (iEvent e = el->lower_bound(pos[0].tick()); e != el->end(); ++e) + elist.push_back((Event)e->second); + for (std::list::iterator i = elist.begin(); i != elist.end(); ++i) { + Event event = *i; + Event newEvent = event.clone(); + newEvent.setTick(event.tick() - editor->raster() - part->tick()); + audio->msgChangeEvent(event, newEvent, part, false); + } + song->endUndo(SC_EVENT_MODIFIED); + Pos p(editor->rasterVal(pos[0].tick() - editor->rasterStep(pos[0].tick())), AL::TICKS); + song->setPos(0, p, true, false, true); + } + break; + } + } + +//--------------------------------------------------------- +// cmd +// pulldown menu commands +//--------------------------------------------------------- + +void PianoCanvas::cmd(QAction* a, int quantStrength, int quantLimit, bool quantLen) + { + QString cmd(a->data().toString()); + + if (cmd == "paste") + paste(); + else if (cmd == "delete") { + if (selectionSize()) { + song->startUndo(); + for (iCItem i = items.begin(); i != items.end(); ++i) { + if (!i->second->isSelected()) + continue; + Event ev = i->second->event; + audio->msgDeleteEvent(ev, i->second->part, false); + } + song->endUndo(SC_EVENT_REMOVED); + } + return; + } + if (cmd == "midi_over_quant") + quantize(100, 1, quantLen); + else if (cmd == "midi_quant_noteon") + quantize(50, 1, false); + else if (cmd == "midi_quant_noteoff") + quantize(50, 1, true); + else if (cmd == "midi_quant_iterative") + quantize(quantStrength, quantLimit, quantLen); + else if (cmd == "sel_all") { + for (iCItem k = items.begin(); k != items.end(); ++k) { + if (!k->second->isSelected()) + selectItem(k->second, true); + } + } + else if (cmd == "sel_none") + deselectAll(); + else if (cmd == "sel_inv") { + for (iCItem k = items.begin(); k != items.end(); ++k) + selectItem(k->second, !k->second->isSelected()); + } + else if (cmd == "sel_ins_loc") { + for (iCItem k = items.begin(); k != items.end(); ++k) { + CItem* item = k->second; + Event event = item->event; + unsigned tick = event.tick(); + if (tick < song->lpos() || tick >= song->rpos()) + selectItem(k->second, false); + else + selectItem(k->second, true); + } + } + else if (cmd == "sel_out_loc") { + for (iCItem k = items.begin(); k != items.end(); ++k) { + CItem* item = k->second; + Event event = item->event; + unsigned tick = event.tick(); + if (tick < song->lpos() || tick >= song->rpos()) + selectItem(k->second, true); + else + selectItem(k->second, false); + } + } + else if (cmd == "midi_mod_gate_time") + cmdModifyGateTime->processEvents(&items); + else if (cmd == "midi_mod_velo") + cmdModifyVelocity->processEvents(&items); + updateSelection(); + widget()->update(); + } + +//--------------------------------------------------------- +// quantize +//--------------------------------------------------------- + +void PianoCanvas::quantize(int strength, int limit, bool quantLen) + { + song->startUndo(); + for (iCItem k = items.begin(); k != items.end(); ++k) { + CItem* item = k->second; + Event event = item->event; + Part* part = item->part; + if (event.type() != Note) + continue; + + if ((editor->applyTo() & CMD_RANGE_SELECTED) && !k->second->isSelected()) + continue; + + unsigned tick = event.tick() + part->tick(); + + if ((editor->applyTo() & CMD_RANGE_LOOP) + && ((tick < song->lpos() || tick >= song->rpos()))) + continue; + + unsigned len = event.lenTick(); + int tick2 = tick + len; + + // quant start position + int diff = editor->rasterVal(tick) - tick; + if (abs(diff) > limit) + tick += ((diff * strength) / 100); + + // quant len + diff = editor->rasterVal(tick2) - tick2; + if (quantLen && (abs(diff) > limit)) + len += ((diff * strength) / 100); + + // something changed? + if (((event.tick() + part->tick()) != tick) || (event.lenTick() != len)) { + Event newEvent = event.clone(); + newEvent.setTick(tick - part->tick()); + newEvent.setLenTick(len); + audio->msgChangeEvent(event, newEvent, part, false); + } + } + song->endUndo(SC_EVENT_MODIFIED); + } + +//--------------------------------------------------------- +// paste +// paste events +//--------------------------------------------------------- + +void PianoCanvas::paste() + { + QString stype("x-muse-eventlist"); + QString s = QApplication::clipboard()->text(stype, QClipboard::Selection); + pasteAt(s, song->cpos()); + } + +//--------------------------------------------------------- +// startDrag +//--------------------------------------------------------- + +void PianoCanvas::startDrag(CItem* /*item*/, bool /*copymode*/) + { +printf("PianoCanvas: startDrag\n"); + QMimeData* drag = getTextDrag(); + if (drag) { + QApplication::clipboard()->setMimeData(drag); +#if 0 + if (copymode) + drag->dragCopy(); + else + drag->dragMove(); +#endif + } + } + +//--------------------------------------------------------- +// dragEnterEvent +//--------------------------------------------------------- + +void PianoCanvas::dragEnterEvent(QDragEnterEvent*) + { +printf("PianoCanvas: dragEnterEvent\n"); +//TD event->accept(Q3TextDrag::canDecode(event)); + } + +//--------------------------------------------------------- +// dragMoveEvent +//--------------------------------------------------------- + +void PianoCanvas::dragMoveEvent(QDragMoveEvent*) + { + printf("drag move %p\n", this); + } + +//--------------------------------------------------------- +// dragLeaveEvent +//--------------------------------------------------------- + +void PianoCanvas::dragLeaveEvent(QDragLeaveEvent*) + { + printf("drag leave\n"); + } + +//--------------------------------------------------------- +// dropEvent +//--------------------------------------------------------- + +void PianoCanvas::viewDropEvent(QDropEvent*) + { +printf("PianoCanvas: viewDropEvent\n"); +#if 0 //TD + QString text; + if (event->source() == this) { + printf("local DROP\n"); + return; + } + if (Q3TextDrag::decode(event, text)) { + int x = editor->rasterVal(event->pos().x()); + if (x < 0) + x = 0; + pasteAt(text, x); + } + else { + printf("cannot decode drop\n"); + } +#endif + } + + +//--------------------------------------------------------- +// itemPressed +//--------------------------------------------------------- + +void PianoCanvas::itemPressed(const CItem* item) + { + if (!editor->playEvents()) + return; + Event event = item->event; + playedPitch = event.pitch() + track()->transposition(); + //int velo = event.velo(); + + // play note: + //I comment the following code because a note + //is already played in EventCanvas::mousePressCanvasA(QMouseEvent* me) + /*MidiEvent e(0, 0, 0x90, playedPitch, velo); + track()->playMidiEvent(&e);*/ + } + +//--------------------------------------------------------- +// itemReleased +//--------------------------------------------------------- + +void PianoCanvas::itemReleased() + { + if (!editor->playEvents()) + return; + + // release note: + MidiEvent ev(0, 0, 0x90, playedPitch, 0); + track()->playMidiEvent(&ev); + playedPitch = -1; + } + +//--------------------------------------------------------- +// itemMoved +//--------------------------------------------------------- + +void PianoCanvas::itemMoved(const CItem* item) + { + int npitch = y2pitch((int)((item->my - (int)(wpos.y()/_ymag) + + item->bbox.height())*_ymag)); + npitch += track()->transposition(); + if ((curItem==item) //remove this if want to have all selection playing + && (playedPitch != -1) && (playedPitch != npitch) + && editor->playEvents()) { + Event event = item->event; + // release note: + MidiEvent ev1(0, 0, 0x90, playedPitch, 0); + track()->playMidiEvent(&ev1); + // play note: + MidiEvent e2(0, 0, 0x90, npitch, event.velo()); + track()->playMidiEvent(&e2); + playedPitch = npitch; + } + } + +//--------------------------------------------------------- +// modifySelected +//--------------------------------------------------------- + +void PianoCanvas::modifySelected(NoteInfo::ValType type, int delta) + { + audio->msgIdle(true); + song->startUndo(); + for (iCItem i = items.begin(); i != items.end(); ++i) { + if (!(i->second->isSelected())) + continue; + CItem* e = i->second; + Event event = e->event; + if (event.type() != Note) + continue; + + Part* part = e->part; + Event newEvent = event.clone(); + + switch (type) { + case NoteInfo::VAL_TIME: + { + int newTime = event.tick() + delta; + if (newTime < 0) + newTime = 0; + newEvent.setTick(newTime); + } + break; + case NoteInfo::VAL_LEN: + { + int len = event.lenTick() + delta; + if (len < 1) + len = 1; + newEvent.setLenTick(len); + } + break; + case NoteInfo::VAL_VELON: + { + int velo = event.velo() + delta; + if (velo > 127) + velo = 127; + else if (velo < 0) + velo = 0; + newEvent.setVelo(velo); + } + break; + case NoteInfo::VAL_VELOFF: + { + int velo = event.veloOff() + delta; + if (velo > 127) + velo = 127; + else if (velo < 0) + velo = 0; + newEvent.setVeloOff(velo); + } + break; + case NoteInfo::VAL_PITCH: + { + int pitch = event.pitch() + delta; + if (pitch > 127) + pitch = 127; + else if (pitch < 0) + pitch = 0; + newEvent.setPitch(pitch); + } + break; + } + song->changeEvent(event, newEvent, part); + song->undoOp(UndoOp::ModifyEvent, newEvent, event, part); + } + song->endUndo(SC_EVENT_MODIFIED); + audio->msgIdle(false); + } + +//--------------------------------------------------------- +// setColorMode +//--------------------------------------------------------- + +void PianoCanvas::setColorMode(int mode) + { + colorMode = mode; + widget()->update(); + } + +//--------------------------------------------------------- +// searchItem +//--------------------------------------------------------- + +CItem* PianoCanvas::searchItem(const QPoint& pt) const + { + QPoint p( + lrint((pt.x() - MAP_OFFSET + wpos.x()) / _xmag), + lrint((pt.y() + wpos.y()) / _ymag) + ); + return items.find(p); + } + +//--------------------------------------------------------- +// selectLasso +//--------------------------------------------------------- + +void PianoCanvas::selectLasso(bool toggle) + { + QRect r( + lrint((lasso.x() + wpos.x()) / _xmag), + lrint((lasso.y() + wpos.y()) / _ymag), + lrint(lasso.width() / _xmag), + lrint(lasso.height() / _ymag) + ); + + int n = 0; + for (iCItem i = items.begin(); i != items.end(); ++i) { + if (i->second->intersects(r)) { + selectItem(i->second, !(toggle && i->second->isSelected())); + ++n; + } + } + if (n) { + updateSelection(); + widget()->update(); + } + } + diff --git a/attic/muse_qt4_evolution/muse/midiedit/prcanvas.h b/attic/muse_qt4_evolution/muse/midiedit/prcanvas.h new file mode 100644 index 00000000..7f92e95e --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/prcanvas.h @@ -0,0 +1,75 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __PRCANVAS_H__ +#define __PRCANVAS_H__ + +#include "ecanvas.h" + +class CItem; +class MidiCmd; + +//--------------------------------------------------------- +// PianoCanvas +//--------------------------------------------------------- + +class PianoCanvas : public EventCanvas { + Q_OBJECT + + int colorMode; + int playedPitch; + + MidiCmd* cmdModifyGateTime; + MidiCmd* cmdModifyVelocity; + + virtual void paint(QPainter&, QRect); + virtual CItem* searchItem(const QPoint& p) const; + virtual void addItem(Part* part, const Event& event); + virtual void viewMouseDoubleClickEvent(QMouseEvent*); + virtual void moveItem(CItem*, DragType); + virtual CItem* newItem(const QPoint&, int); + virtual void resizeItem(CItem*, bool noSnap); + virtual void newItem(CItem*, bool noSnap); + virtual bool deleteItem(CItem*); + virtual void startDrag(CItem* item, bool copymode); + virtual void dragEnterEvent(QDragEnterEvent* event); + virtual void dragMoveEvent(QDragMoveEvent*); + virtual void dragLeaveEvent(QDragLeaveEvent*); + virtual void viewDropEvent(QDropEvent* event); + virtual void selectLasso(bool toggle); + virtual void timeTypeChanged(); + + void quantize(int, int, bool); + void paste(); + virtual void itemPressed(const CItem*); + virtual void itemReleased(); + virtual void itemMoved(const CItem*); + + public slots: + void pianoCmd(int); + + public: + PianoCanvas(MidiEditor*); + void cmd(QAction*, int, int, bool); + void setColorMode(int mode); + virtual void modifySelected(NoteInfo::ValType type, int delta); + }; +#endif + diff --git a/attic/muse_qt4_evolution/muse/midiedit/quantconfig.cpp b/attic/muse_qt4_evolution/muse/midiedit/quantconfig.cpp new file mode 100644 index 00000000..229b8875 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/quantconfig.cpp @@ -0,0 +1,68 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "quantconfig.h" + +const char* wtStrengthTxt = QT_TR_NOOP("sets amount of quantization:\n" + "0 - no quantization\n" + "100 - full quantization"); +const char* wtQLimitTxt = QT_TR_NOOP("don't quantize notes above this tick limit"); +const char* wtQLenTxt = QT_TR_NOOP("quantize also note len as default"); + +//--------------------------------------------------------- +// QuantConfig +//--------------------------------------------------------- + +QuantConfig::QuantConfig(int s, int l, bool lenFlag, QWidget* parent) + : QDialog(parent) + { + setupUi(this); + strength->setValue(s); + dontQuantize->setValue(l); + quantLen->setChecked(lenFlag); + } + +//--------------------------------------------------------- +// quantStrength +//--------------------------------------------------------- + +int QuantConfig::quantStrength() const + { + return strength->value(); + } + +//--------------------------------------------------------- +// quantLimit +//--------------------------------------------------------- + +int QuantConfig::quantLimit() const + { + return dontQuantize->value(); + } + +//--------------------------------------------------------- +// doQuantLen +//--------------------------------------------------------- + +bool QuantConfig::doQuantLen() const + { + return quantLen->isChecked(); + } + diff --git a/attic/muse_qt4_evolution/muse/midiedit/quantconfig.h b/attic/muse_qt4_evolution/muse/midiedit/quantconfig.h new file mode 100644 index 00000000..08e75cb2 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/quantconfig.h @@ -0,0 +1,42 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __QCONFIG_H__ +#define __QCONFIG_H__ + +#include "ui_quantconfig.h" + +//--------------------------------------------------------- +// QuantConfig +//--------------------------------------------------------- + +class QuantConfig : public QDialog, public Ui::QuantConfigBase { + Q_OBJECT + + public: + QuantConfig(int, int, bool, QWidget* parent = 0); + int quantStrength() const; + int quantLimit() const; + bool doQuantLen() const; + }; + + +#endif + diff --git a/attic/muse_qt4_evolution/muse/midiedit/quantconfig.ui b/attic/muse_qt4_evolution/muse/midiedit/quantconfig.ui new file mode 100644 index 00000000..1da9f790 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/quantconfig.ui @@ -0,0 +1,151 @@ + + + + + QuantConfigBase + + + + 0 + 0 + 333 + 193 + + + + MusE: Configure Quantize + + + + 9 + + + 6 + + + + + 500 + + + + + + + 0 + + + 6 + + + + + Qt::Horizontal + + + + 131 + 31 + + + + + + + + OK + + + + + + + Cancel + + + + + + + + + Strength: + + + + + + + % + + + 100 + + + + + + + Don't Quantize: + + + + + + + Quant Len + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + okButton + clicked() + QuantConfigBase + accept() + + + 278 + 253 + + + 96 + 254 + + + + + cancelButton + clicked() + QuantConfigBase + reject() + + + 369 + 253 + + + 179 + 282 + + + + + diff --git a/attic/muse_qt4_evolution/muse/midiedit/trackpattern.cpp b/attic/muse_qt4_evolution/muse/midiedit/trackpattern.cpp new file mode 100644 index 00000000..d50fffd0 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/trackpattern.cpp @@ -0,0 +1,627 @@ +#include "trackpattern.h" +#include "event.h" +#include "al/sig.h" + +class EventList; + +#define MAX(x,y) (x>y?x:y) + +#define EMPTYCHAR "-" +#define NONREADCHAR "*" +#define SPACECHAR "-" +#define PLUSCHAR "+" +#define STOPCHAR "=" +#define SEPCHAR " " +//#define FONT "Console" +#define FONT "Monospace" +//#define FONT "MiscFixed" +#define FONT_HEIGHT 14 +#define OFFSET_HEIGHT 3 +#define OFFSET_Y 3 + +//---------------------------------------------------------- +// EventPat +// has to be derived, can be note or control +//---------------------------------------------------------- +EventPat::EventPat(bool e, bool r) {_isEmpty = e; _isReadable = r;} +EventPat::EventPat() {EventPat(true, true);} +EventPat::~EventPat() {} + +void EventPat::setEmpty(bool e) {_isEmpty = e;} +bool EventPat::getEmpty() {return _isEmpty;} +void EventPat::setReadable(bool r) {_isReadable = r;} +bool EventPat::getReadable() {return _isReadable;} + +//---------------------------------------------------------- +// VoiceEventPat +//---------------------------------------------------------- +VoiceEventPat::VoiceEventPat(int n, int v):EventPat(false, true) { + _noteNum = n; + _velocity = v; +} + +VoiceEventPat::VoiceEventPat(bool e, bool r):EventPat(e, r) {} + +VoiceEventPat::VoiceEventPat():EventPat(true, true) {} + +VoiceEventPat::~VoiceEventPat() {} + + +void VoiceEventPat::setNoteNum(int n) { _noteNum = n; } + +int VoiceEventPat::getNoteNum() { return _noteNum; } + +void VoiceEventPat::setVelocity(int n) { _velocity = n; } + +int VoiceEventPat::getVelocity() { return _velocity; } + +QString VoiceEventPat::str() { + if(_isEmpty) { + return QString(EMPTYCHAR EMPTYCHAR EMPTYCHAR EMPTYCHAR) + + QString(SEPCHAR) + QString(EMPTYCHAR EMPTYCHAR EMPTYCHAR); + } + else if(_isReadable) { + if(_velocity==0) { + return QString(STOPCHAR STOPCHAR STOPCHAR STOPCHAR) + + QString(SEPCHAR) + QString(EMPTYCHAR EMPTYCHAR EMPTYCHAR); + } + else { + int octave = _noteNum/12 - 2; + int note = _noteNum%12; + QString sNote; + switch(note) { + case 0: sNote = QString("C") + QString(SPACECHAR); + break; + case 1: sNote = QString("C#"); + break; + case 2: sNote = QString("D") + QString(SPACECHAR); + break; + case 3: sNote = QString("D#"); + break; + case 4: sNote = QString("E") + QString(SPACECHAR); + break; + case 5: sNote = QString("F") + QString(SPACECHAR); + break; + case 6: sNote = QString("F#"); + break; + case 7: sNote = QString("G") + QString(SPACECHAR); + break; + case 8: sNote = QString("G#"); + break; + case 9: sNote = QString("A") + QString(SPACECHAR); + break; + case 10: sNote = QString("A#"); + break; + case 11: sNote = QString("F") + QString(SPACECHAR); + break; + default: + printf("VoiceEventPat::str() Error : case note not treated\n"); + break; + } + QString sOctave; + sOctave.setNum(octave); + if(octave>=0) { + sOctave = QString(PLUSCHAR) + sOctave; + } + QString sVel; + sVel.setNum(_velocity); + if(_velocity<10) { + sVel = QString("00") + sVel; + } + else if(_velocity<100) { + sVel = QString("0") + sVel; + } + return sNote + sOctave + QString(SEPCHAR) + sVel; + } + } + else { + return QString(NONREADCHAR NONREADCHAR NONREADCHAR NONREADCHAR) + + QString(SEPCHAR) + QString(NONREADCHAR NONREADCHAR NONREADCHAR); + } +} + +//---------------------------------------------------------- +// CtrlEventPat +//---------------------------------------------------------- +CtrlEventPat::CtrlEventPat(int c, int v):EventPat(false, true) { + _ctrlNum = c; + _value = v; +} + +CtrlEventPat::CtrlEventPat():EventPat(true, true) {} + +CtrlEventPat::~CtrlEventPat() {} + + +void CtrlEventPat::setCtrlNum(int n) { _ctrlNum = n; } + +int CtrlEventPat::getCtrlNum() { return _ctrlNum; } + +void CtrlEventPat::setValue(int n) { _value = n; } + +int CtrlEventPat::getValue() { return _value; } + +QString CtrlEventPat::str() { + //TODO + if(_isReadable) { + QString sCtrl; + sCtrl.setNum(_ctrlNum); + QString s = " "; + QString sVal; + sVal.setNum(_value); + return sCtrl + s + sVal; + } + else { + QString s = "***"; + return s; + } +} + +//---------------------------------------------------------- +// BasePat +//---------------------------------------------------------- +BasePat::BasePat() { +} +BasePat::BasePat(QString name, unsigned firstTick, + unsigned lastTick, int quant) { + _name = name; + _firstTick = firstTick; + _lastTick = lastTick; + _quant = quant; +} + +BasePat::~BasePat() {} + +QString BasePat::getName() { + return _name; +} + +bool BasePat::isRow(unsigned tick) { + Pos p = AL::sigmap.raster(_firstTick + tick, _quant); + return p.tick() == _firstTick + tick; +} + +unsigned BasePat::tick2row(unsigned tick) { + return (_firstTick + tick) / _quant - (_firstTick / _quant); +} + +//---------------------------------------------------------- +// VoicePat +//---------------------------------------------------------- +VoicePat::VoicePat(QString name, unsigned firstTick, unsigned lastTick, + int quant):BasePat(name, firstTick, lastTick, quant) { + _events = new EventList(); +} + +VoicePat::~VoicePat() { + delete(_events); +} + + +std::vector VoicePat::getEventsCol() { + return _eventsCol; +} + +bool VoicePat::add(const Event* ev, unsigned tick) { + Event* e = new Event(*ev); + if(isFreeSpace(e, tick)) { + //add into the list of events + _events->add(*e, tick); + //add the begin tick into the column + unsigned beginRow = tick2row(tick); + if(beginRow >= _eventsCol.size()) { + for(unsigned i = _eventsCol.size(); i <= beginRow; i++) { + //empty voice event + _eventsCol.push_back(new VoiceEventPat()); + } + } + VoiceEventPat* vbep; + if(isRow(tick)) vbep = new VoiceEventPat(e->pitch(), e->velo()); + else vbep = new VoiceEventPat(false, false); //non-readable + if(_eventsCol[beginRow]) delete(_eventsCol[beginRow]); + _eventsCol[beginRow] = vbep; + + //add the end tick into the column + unsigned endTick = e->lenTick() + tick; + unsigned endRow = tick2row(endTick); + if(endRow >= _eventsCol.size()) { + for(unsigned i = _eventsCol.size(); i <= endRow; i++) { + //empty voice event + _eventsCol.push_back(new VoiceEventPat()); + } + } + VoiceEventPat* veep; + if(isRow(endTick)) veep = new VoiceEventPat(e->pitch(), 0); + else veep = new VoiceEventPat(false, false); //non-readable + if(_eventsCol[endRow] + && + (_eventsCol[endRow]->getEmpty() || tick2row(endTick)==tick2row(tick))) { + delete(_eventsCol[endRow]); + _eventsCol[endRow] = veep; + } + return true; + } + else { + return false; + } +} + +bool VoicePat::isFreeSpace(const Event* e, unsigned tick) { + bool isFree = true; + for(ciEvent ce = _events->begin(); ce != _events->end(); ce++) { + const Event* cevent = &ce->second; + unsigned beginTick = ce->first; + unsigned endTick = ce->first + cevent->lenTick(); + isFree = (endTick <= tick) || (beginTick >= tick + e->lenTick()); + if(!isFree) break; + } + return isFree; +} + +//---------------------------------------------------------- +// CtrlPat +//---------------------------------------------------------- +CtrlPat::CtrlPat(QString /*name*/) { +} + +CtrlPat::~CtrlPat() {} + +//---------------------------------------------------------- +// BaseTrackPat +//---------------------------------------------------------- +BaseTrackPat::BaseTrackPat(QMainWindow* parent, unsigned anr) { + _parent = parent; + _tree = new QTreeWidget(this); + + _absoluteNbrRow = anr; + + _update = false; + + connect(_tree, SIGNAL(itemClicked(QTreeWidgetItem*, int)), + SLOT(currentItemChanged(QTreeWidgetItem*))); + connect(_tree, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), + SLOT(currentItemChanged(QTreeWidgetItem*))); + connect(_parent, SIGNAL(signalMoveCurrentRow(unsigned)), this, + SLOT(moveRowFromSignal(unsigned))); + //connect signalSongChanged to update the pattern + connect(parent, SIGNAL(signalSongChanged(int)), this, SLOT(updatePattern(int))); +} + +BaseTrackPat::~BaseTrackPat() { +} + +void BaseTrackPat::setRowMag() { + _rowMag = (unsigned) height()/_fontHeight - OFFSET_Y; + _lastRow = _firstRow + _rowMag - 1; +} +void BaseTrackPat::setFirstRow(unsigned f) { + _firstRow = f; + _lastRow = f + _rowMag - 1; +} +void BaseTrackPat::setRelativeCurrentRow(unsigned r) { + _relativeCurrentRow = r; + _absoluteCurrentRow = r + _firstRow; +} +void BaseTrackPat::setAbsoluteCurrentRow(unsigned a) { + _absoluteCurrentRow = a; + _relativeCurrentRow = a - _firstRow; +} + +unsigned BaseTrackPat::getRowMag() { + return _rowMag; +} +unsigned BaseTrackPat::getFirstRow() { + return _firstRow; +} +unsigned BaseTrackPat::getLastRow() { + return _lastRow; +} +unsigned BaseTrackPat::getRelativeCurrentRow() { + return _relativeCurrentRow; +} +unsigned BaseTrackPat::getAbsoluteCurrentRow() { + return _absoluteCurrentRow; +} + +unsigned BaseTrackPat::getAbsoluteNbrRow() { + return _absoluteNbrRow; +} + +void BaseTrackPat::moveRelativeCurrentRow(unsigned newIndex) { + if(newIndex==0 && getFirstRow()>0) { + setFirstRow(getFirstRow() - 1); + setRelativeCurrentRow(newIndex + 1); + _update = true; + } + else if(newIndex==getRowMag()-1 && getLastRow()<_absoluteNbrRow-1) { + setFirstRow(getFirstRow() + 1); + setRelativeCurrentRow(newIndex - 1); + _update = true; + } + else setRelativeCurrentRow(newIndex); +} + +//void BaseTrackPat::itemSelectionChanged() { +void BaseTrackPat::currentItemChanged(QTreeWidgetItem* nitem) { + int index; + if(nitem) { + index = _tree->indexOfTopLevelItem(nitem); + + emit moveCurrentRow(index); + } +} + +void BaseTrackPat::moveRowFromSignal(unsigned index) { + moveRelativeCurrentRow(index); + if(_update==true) { + fillPattern(); + _update = false; + } + selectCurrentRow(); +} + +void BaseTrackPat::resizeEvent(QResizeEvent* /*event*/) { + setRowMag(); + fillPattern(); + selectCurrentRow(); +} + +void BaseTrackPat::selectCurrentRow() { + unsigned rcr = getRelativeCurrentRow(); + if(rcr < getRowMag()) { + QTreeWidgetItem* item = _tree->topLevelItem(getRelativeCurrentRow()); + if(item) { + _tree->blockSignals(true); + item->setSelected(true); + _tree->setCurrentItem(item); + _tree->blockSignals(false); + } + } +} + +void BaseTrackPat::updatePattern(int /*type*/) { + clearMatrix(); + buildMatrix(); + fillPattern(); + selectCurrentRow(); +} + +//---------------------------------------------------------- +// TrackPattern +//---------------------------------------------------------- +TrackPattern::TrackPattern(QMainWindow* parent, QString name, + unsigned firstTick, unsigned lastTick, + int quant, PartList* pl, MidiTrack* t, unsigned anr) + : BaseTrackPat(parent, anr), BasePat(name, firstTick, lastTick, quant) { + + //set attributs + _track = t; + + //build the list of parts belonging to track t + _partList = new PartList; + for(ciPart p = pl->begin(); p != pl->end(); p++) { + Part* part = p->second; + if(t==part->track()) + _partList->add(part); + } + + //build the matrix of events + buildMatrix(); + + //configure and add the dockWidget + setWindowTitle(_track->name()); + setFeatures(QDockWidget::DockWidgetClosable |QDockWidget::DockWidgetMovable); + parent->addDockWidget(Qt::LeftDockWidgetArea, this, Qt::Horizontal); + + //build the treeWidget + _tree->setColumnCount(_voiceColumns.size() + _ctrlColumns.size()); + QStringList headerLabels; + for(unsigned i = 0; i < _voiceColumns.size(); i++) { + headerLabels += QStringList(_voiceColumns[i]->getName()); + } + for(unsigned i = 0; i < _ctrlColumns.size(); i++) { + //TODO CTRL + //headerLabels += QStringList(_ctrlColumns[i]->getName()); + } + _tree->setHeaderLabels(headerLabels); + //set some display properties + _tree->setRootIsDecorated(false); + _tree->setUniformRowHeights(true); + _tree->setAlternatingRowColors(true); + QFont font =_tree->font(); + font.setFamily(FONT); + _tree->setFont(font); + font.setPixelSize(FONT_HEIGHT); + _fontHeight = font.pixelSize() + OFFSET_HEIGHT; + setWidget(_tree); + + //set the range of rows to display + setFirstRow(10); //TODO : choose accordingly to current position of muse song + setAbsoluteCurrentRow(10); //TODO : the same + setRowMag(); + + //fill the treeWidget + fillPattern(); + selectCurrentRow(); + + //Resize the columns + for(unsigned i = 0; i < _voiceColumns.size(); i++) + _tree->resizeColumnToContents(i); +} + +TrackPattern::~TrackPattern() { +} + +void TrackPattern::add(const Event* e, unsigned tick) { + if(e->isNote()) { + bool success = false; + for(unsigned i = 0; i < _voiceColumns.size(); i++) { + success = _voiceColumns[i]->add(e, tick); + if(success) break; + } + if(!success) { + QString voiceName; + voiceName.setNum(_voiceColumns.size()); + voiceName = QString("Voice " + voiceName); + VoicePat* vp = new VoicePat(voiceName, _firstTick, 0, _quant); + _voiceColumns.push_back(vp); + bool success = vp->add(e, tick); + if(!success) printf("Error TrackPattern::add\n"); + } + } + else { + //TODO Ctrl + } +} + +void TrackPattern::setQuant(int /*quant*/) { + //TODO +} + +void TrackPattern::clearMatrix() { + _voiceColumns.clear(); + _ctrlColumns.clear(); +} + +void TrackPattern::buildMatrix() { + for(ciPart p = _partList->begin(); p != _partList->end(); p++) { + Part* part = p->second; + EventList* events = part->events(); + for(ciEvent e = events->begin(); e != events->end(); e++) { + const Event* event = &e->second; + unsigned rescaledTick = part->tick() + event->tick() - _firstTick; + add(event, rescaledTick); + } + } +} + +void TrackPattern::fillPattern() { + _tree->blockSignals(true); + + _tree->clear(); + for(unsigned i = 0; i < _voiceColumns.size(); i++) { + for(unsigned j = getFirstRow(); j <= getLastRow(); j++) { + QTreeWidgetItem* item = _tree->topLevelItem(j - getFirstRow()); + if(!item) item = new QTreeWidgetItem(_tree); + VoiceEventPat* vep = (_voiceColumns[i]->getEventsCol())[j]; + if(vep) item->setText(i, vep->str()); + } + } + for(unsigned i = 0; i < _ctrlColumns.size(); i++) { + //TODO CTRL + } + + _tree->blockSignals(false); +} + +//--------------------------------------------------------------- +// TimingEvent +//--------------------------------------------------------------- +TimingEvent::TimingEvent(unsigned row) { + _row = row; +} +TimingEvent::~TimingEvent() { +} + +void TimingEvent::setBarBeatTick(unsigned tick) { + AL::sigmap.tickValues(tick, &_bar, &_beat, &_tick); +} + +QString TimingEvent::barBeatTickStr() { + QString barS; + barS.setNum(_bar + 1); + if(_bar<10) barS = QString("000") + barS; + else if(_bar<100) barS = QString("00") + barS; + else if(_bar<1000) barS = QString("0") + barS; + QString beatS; + beatS.setNum(_beat + 1); + if(_beat<10) beatS = QString("0") + beatS; + QString tickS; + tickS.setNum(_tick); + if(_tick<10) tickS = QString("00") + tickS; + else if(_tick<100) tickS = QString("0") + tickS; + return barS + QString(":") + beatS + QString(":") + tickS; +} + +QString TimingEvent::rowStr() { + QString r; + r.setNum(_row); + if(_row<10) r = QString("00") + r; + else if(_row<100) r = QString("0") + r; + return r; +} + +//--------------------------------------------------------------- +// TimingPattern +//--------------------------------------------------------------- +TimingPattern::TimingPattern(QMainWindow* parent, QString name, + unsigned firstTick, unsigned lastTick, int quant) + : BasePat(name, firstTick, lastTick, quant), BaseTrackPat(parent) { + //build the timing matrix + buildMatrix(); + + //configure and add the dockWidget + setWindowTitle(name); + setFeatures(QDockWidget::DockWidgetClosable |QDockWidget::DockWidgetMovable); + parent->addDockWidget(Qt::LeftDockWidgetArea, this, Qt::Horizontal); + + //build the treeWidget + QStringList headerLabels; + _tree->setHeaderLabels(QStringList("bar:bt:tick") + QStringList("row")); + _tree->setHeaderLabels(headerLabels); + //set some display properties + _tree->setRootIsDecorated(false); + _tree->setUniformRowHeights(true); + _tree->setAlternatingRowColors(true); + QFont font =_tree->font(); + font.setFamily(FONT); + _tree->setFont(font); + font.setPixelSize(FONT_HEIGHT); + _fontHeight = font.pixelSize() + OFFSET_HEIGHT; + setWidget(_tree); + + //set the range of rows to display + setFirstRow(10); //TODO : choose accordingly to current position of muse song + setAbsoluteCurrentRow(10); //TODO : the same + setRowMag(); + + //fill the treeWidget + fillPattern(); + selectCurrentRow(); + + //resize the columns + for(int i = 0; i < _tree->columnCount(); i++) + _tree->resizeColumnToContents(i); +} + +TimingPattern::~TimingPattern() { +} + +void TimingPattern::clearMatrix() { + _timingEvents.clear(); +} + +void TimingPattern::buildMatrix() { + for(unsigned tick = _firstTick; tick <= _lastTick; tick++) { + if(isRow(tick)) { + TimingEvent* te = new TimingEvent(tick2row(tick) - tick2row(_firstTick)); + te->setBarBeatTick(tick); + _timingEvents.push_back(te); + } + } + _absoluteNbrRow = _timingEvents.size(); +} + +void TimingPattern::fillPattern() { + _tree->blockSignals(true); + + _tree->clear(); + for(unsigned i = getFirstRow(); i <= getLastRow(); i++) { + QTreeWidgetItem* item = new QTreeWidgetItem(_tree); + TimingEvent* te = _timingEvents[i]; + item->setText(0, te->barBeatTickStr()); + item->setText(1, te->rowStr()); + } + + _tree->blockSignals(false); +} diff --git a/attic/muse_qt4_evolution/muse/midiedit/trackpattern.h b/attic/muse_qt4_evolution/muse/midiedit/trackpattern.h new file mode 100644 index 00000000..d9d91aee --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/trackpattern.h @@ -0,0 +1,261 @@ +//================================================================= +// trackpattern.h +// TrackPattern class for miditracker, QDock, QTree, Part, matrix +// miditracker.h +// (C) Copyright 2006 Nil Geisweiller (a_lin@user.sourceforge.net) +//================================================================= + +#ifndef __TRACKERPATTERN_H__ +#define __TRACKERPATTERN_H__ + +#include +#include "miditrack.h" +#include "part.h" + +class PartList; + +//---------------------------------------------------------- +// EventPat +// has to be derived, can be note or control +//---------------------------------------------------------- +class EventPat { + private: + protected: + bool _isReadable; //true iff the time of the event is the exact row time + bool _isEmpty; + public: + EventPat(bool isEmpty, bool isReadable); + EventPat(); //_isEmpty=true and_isReadable=true at the initialization + ~EventPat(); + + void setEmpty(bool); + bool getEmpty(); + void setReadable(bool); + bool getReadable(); +}; + +//---------------------------------------------------------- +// VoiceEventPat +//---------------------------------------------------------- +class VoiceEventPat : public EventPat { + private: + int _noteNum; //absolute note number including octave + int _velocity; //if velocity is 0 note is off + public: + VoiceEventPat(int noteNum, int velocity); // _isReadable is initialized true + VoiceEventPat(bool isEmpty, bool isReadable); + VoiceEventPat(); //_isEmpty = true, _isReadable = true + ~VoiceEventPat(); + + void setNoteNum(int n); + int getNoteNum(); + void setVelocity(int n); + int getVelocity(); + QString str(); //return the string to display on the entry of the pattern +}; + +//---------------------------------------------------------- +// CtrlEventPat +//---------------------------------------------------------- +class CtrlEventPat : public EventPat { + private: + int _ctrlNum; + int _value; //if velocity is 0 note is off + public: + CtrlEventPat(int ctrlNum, int value); // _isReadable is initialized true + CtrlEventPat(); // _isReadable is initialized false + ~CtrlEventPat(); + + void setCtrlNum(int n); + int getCtrlNum(); + void setValue(int n); + int getValue(); + QString str(); //return the string to display on the entry of the pattern +}; + +//---------------------------------------------------------- +// BasePat +//---------------------------------------------------------- +class BasePat { + protected: + QString _name; + unsigned _firstTick; + unsigned _lastTick; + int _quant; + public: + BasePat(); + BasePat(QString name, unsigned firstTick, unsigned lastTick, int quant); + ~BasePat(); + + QString getName(); + + bool isRow(unsigned tick); //return true iff tick coincides with one row + unsigned tick2row(unsigned tick); +}; + +//---------------------------------------------------------- +// VoicePat +//---------------------------------------------------------- +class VoicePat : public BasePat { + private: + std::vector _eventsCol; //column of VoiceEventPat to display + EventList* _events; //actual list of events, only one at a time + public: + VoicePat(QString name, unsigned firstTick, unsigned lastTick, int quant); + ~VoicePat(); + + std::vector getEventsCol(); + + bool add(const Event* e, unsigned tick); //add the Event e into the EventList + //and update properly _events + //return true if success, that is + //there is an empty space of the + //event + bool isFreeSpace(const Event* e, unsigned tick); //return true iff there + //is space to add the + //event e without + //overlapping other events +}; + +//---------------------------------------------------------- +// CtrlPat +//---------------------------------------------------------- +class CtrlPat { + private: + std::vector _events; //column of CtrlEventPat + public: + CtrlPat(QString name); + ~CtrlPat(); +}; + +//------------------------------------------------------ +// BaseTrackPat +//------------------------------------------------------ +class BaseTrackPat : public QDockWidget { + Q_OBJECT + + protected: + QTreeWidget* _tree; + QMainWindow* _parent; + + unsigned _rowMag; //contains the number of rows + unsigned _firstRow; //absolute index of the first row + unsigned _lastRow; //absolute index of the last row, included + unsigned _relativeCurrentRow; //index of the current according to the tree + unsigned _absoluteCurrentRow; //index of the current row according to the + //event matrix + unsigned _absoluteNbrRow; //contains the number of rows of the matrix + + int _fontHeight; + + bool _update; //if true then the tree must updated + + public: + BaseTrackPat(QMainWindow* parent, unsigned anr = 0); + ~BaseTrackPat(); + + void setRowMag(); //set _rowMag with the number of rows to display according + //to the size of the window, adjust _lastRow accordingly, + //assum that first row is set appropriately + void setFirstRow(unsigned f); //set _firstRow with f, that is the absolute index + //of the first row, adjust _lastRow appropriately + void setRelativeCurrentRow(unsigned r); //set _relativeCurrentRow with r + //and _absoluteCurrentRow accordingly + void setAbsoluteCurrentRow(unsigned a); //set _absoluteCurrentRow with a + //and _relativeCurrentRow accordingly + + unsigned getRowMag(); + unsigned getFirstRow(); + unsigned getLastRow(); + unsigned getRelativeCurrentRow(); + unsigned getAbsoluteCurrentRow(); + + unsigned getAbsoluteNbrRow(); + + void moveRelativeCurrentRow(unsigned newIndex); //update _firstRow, _lastrow + //relativeCurrentRow, + //absoluteCurrentRow, considering + //that the new relative index is + //newIndex + + void resizeEvent(QResizeEvent* /*event*/); + + virtual void clearMatrix() {} + virtual void buildMatrix() {} + virtual void fillPattern() {} //fill the treeWidget with the right window of times + //according to _firstRow and _lastRow + + + void selectCurrentRow(); //block the signals and select the current row + + signals: + void moveCurrentRow(unsigned i); //send the signal that the current row is moved + //at the relative index i + private slots: + void currentItemChanged(QTreeWidgetItem* nitem); + void moveRowFromSignal(unsigned index); + void updatePattern(int songChangeType); +}; + +//------------------------------------------------------ +// TrackPattern +//------------------------------------------------------ +class TrackPattern : public BaseTrackPat, public BasePat { + private: + PartList* _partList; //partList concerned by a track + MidiTrack* _track; + std::vector _voiceColumns; //matrix of voice events + std::vector _ctrlColumns; //matrix of ctrl events + public: + TrackPattern(QMainWindow* parent, QString name, + unsigned firstTick, unsigned lastTick, + int quant, PartList* pl, MidiTrack* t, unsigned anr = 0); + ~TrackPattern(); + + void add(const Event* e, unsigned tick); //add the Event e and + //build consequently + //the matrix, + //creating new voices when necessary + MidiTrack* getTrack() {return _track;} + void setQuant(int quant); + + virtual void clearMatrix(); + virtual void buildMatrix(); + virtual void fillPattern(); +}; + +//------------------------------------------------------ +// TimingEvent +//------------------------------------------------------ +class TimingEvent { + private: + int _bar; + int _beat; + unsigned _tick; + unsigned _row; + + public: + TimingEvent(unsigned row); + ~TimingEvent(); + + void setBarBeatTick(unsigned tick); + + QString barBeatTickStr(); + QString rowStr(); +}; + +class TimingPattern : public BasePat, public BaseTrackPat { + private: + //QTreeWidget* _tree; + std::vector _timingEvents; + public: + TimingPattern(QMainWindow* parent, QString name, unsigned firstTick, + unsigned lastTick, int quant); + ~TimingPattern(); + + virtual void clearMatrix(); + virtual void buildMatrix(); + virtual void fillPattern(); +}; + +#endif diff --git a/attic/muse_qt4_evolution/muse/midiedit/velocity.cpp b/attic/muse_qt4_evolution/muse/midiedit/velocity.cpp new file mode 100644 index 00000000..f0abd845 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/velocity.cpp @@ -0,0 +1,108 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "velocity.h" +#include "song.h" +#include "tb1.h" +#include "audio.h" + +//--------------------------------------------------------- +// Velocity +//--------------------------------------------------------- + +Velocity::Velocity(QWidget*) + : MidiCmdDialog() + { + setWindowTitle(tr("MusE: Modify Velocity")); + QWidget* velocityWidget = new QWidget; + velo.setupUi(velocityWidget); + layout->addWidget(velocityWidget); + layout->addStretch(10); + _rateVal = 0; + _offsetVal = 0; + velo.rate->setValue(_rateVal); + velo.offset->setValue(_offsetVal); + } + +//--------------------------------------------------------- +// accept +//--------------------------------------------------------- + +void Velocity::accept() + { + _rateVal = velo.rate->value(); + _offsetVal = velo.offset->value(); + MidiCmdDialog::accept(); + } + +//--------------------------------------------------------- +// ModifyVelocityCmd +//--------------------------------------------------------- + +ModifyVelocityCmd::ModifyVelocityCmd(MidiEditor* e) + : MidiCmd(e) + { + dialog = 0; + } + +//--------------------------------------------------------- +// guiDialog +//--------------------------------------------------------- + +MidiCmdDialog* ModifyVelocityCmd::guiDialog() + { + if (dialog == 0) + dialog = new Velocity(0); + return dialog; + } + +//--------------------------------------------------------- +// process +//--------------------------------------------------------- + +void ModifyVelocityCmd::process(CItemList* items) + { + int rate = dialog->rateVal(); + int offset = dialog->offsetVal(); + + for (iCItem k = items->begin(); k != items->end(); ++k) { + CItem* item = k->second; + Event event = item->event; + if (event.type() != Note) + continue; + if (itemInRange(item)) { + int velo = event.velo(); + velo = (velo * rate) / 100; + velo += offset; + + if (velo <= 0) + velo = 1; + if (velo > 127) + velo = 127; + if (event.velo() != velo) { + Event newEvent = event.clone(); + newEvent.setVelo(velo); + audio->msgChangeEvent(event, newEvent, item->part, false); + } + } + } + } + + diff --git a/attic/muse_qt4_evolution/muse/midiedit/velocity.h b/attic/muse_qt4_evolution/muse/midiedit/velocity.h new file mode 100644 index 00000000..2ac4e700 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/velocity.h @@ -0,0 +1,62 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __VELOCITY_H__ +#define __VELOCITY_H__ + +#include "ui_velocity.h" +#include "midicmd.h" + +//--------------------------------------------------------- +// Velocity +//--------------------------------------------------------- + +class Velocity : public MidiCmdDialog { + Q_OBJECT + + Ui::VelocityBase velo; + int _rateVal; + int _offsetVal; + + protected slots: + void accept(); + + public: + Velocity(QWidget* parent = 0); + int rateVal() const { return _rateVal; } + int offsetVal() const { return _offsetVal; } + }; + +//--------------------------------------------------------- +// ModifyVelocityCmd +//--------------------------------------------------------- + +class ModifyVelocityCmd : public MidiCmd + { + Velocity* dialog; + virtual MidiCmdDialog* guiDialog(); + virtual void process(CItemList* items); + + public: + ModifyVelocityCmd(MidiEditor* e); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/midiedit/velocity.ui b/attic/muse_qt4_evolution/muse/midiedit/velocity.ui new file mode 100644 index 00000000..342611c0 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiedit/velocity.ui @@ -0,0 +1,86 @@ + + + + + VelocityBase + + + + 0 + 0 + 275 + 335 + + + + MusE: Modify Velocity + + + + 11 + + + 6 + + + + + Values + + + + 6 + + + 3 + + + + + Rate: + + + + + + + Offset: + + + + + + + % + + + 200 + + + 100 + + + + + + + 127 + + + 1 + + + 1 + + + + + + + + + + qPixmapFromMimeSource + + + diff --git a/attic/muse_qt4_evolution/muse/midievent.cpp b/attic/muse_qt4_evolution/muse/midievent.cpp new file mode 100644 index 00000000..80fd30a8 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midievent.cpp @@ -0,0 +1,129 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "midievent.h" + +#include "helper.h" +#include "event.h" +#include "midictrl.h" +#include "muse/midi.h" + +//--------------------------------------------------------- +// MidiEvent +//--------------------------------------------------------- + +MidiEvent::MidiEvent(unsigned t, int tpe, const unsigned char* data, int len) + { + _time = t; + edata.setData(data, len); + _type = tpe; + } + +MidiEvent::MidiEvent(unsigned tick, int channel, const Event& e) + { + setChannel(channel); + setTime(tick); + switch(e.type()) { + case Note: + setType(ME_NOTEON); + setA(e.dataA()); + setB(e.dataB()); + break; + case Controller: + setType(ME_CONTROLLER); + setA(e.dataA()); // controller number + setB(e.dataB()); // controller value + break; + case PAfter: + setType(ME_POLYAFTER); + setA(e.dataA()); + setB(e.dataB()); + break; + case CAfter: + setType(ME_AFTERTOUCH); + setA(e.dataA()); + setB(0); + break; + case Sysex: + setType(ME_SYSEX); + setData(e.eventData()); + break; + default: + printf("MEvent::MEvent(): event type %d not implemented\n", + type()); + break; + } + } + +//--------------------------------------------------------- +// dump +//--------------------------------------------------------- + +void MidiEvent::dump() const + { + printf("chan:%d ", _channel+1); + if (_type == ME_NOTEON) { + QString s = pitch2string(_a); + printf("NoteOn %3s(0x%02x) %3d\n", s.toLatin1().data(), _a, _b); + } + else if (_type == ME_NOTEOFF) { + QString s = pitch2string(_a); + printf("NoteOff %3s(0x%02x) %3d\n", s.toLatin1().data(), _a, _b); + } + else if (_type == ME_SYSEX) { + printf("SysEx len %d ", len()); + int n = len() < 7 ? len() : 7; + unsigned char* p = data(); + for (int i = 0; i < n; ++i) + printf("%02x ", *p++); + printf("\n"); + } + else if (_type == ME_CONTROLLER) + printf("Ctrl %d(0x%02x) %d(0x%02x)\n", _a, _a, _b, _b); + else if (_type == ME_PROGRAM) + printf("Prog %d(0x%02x)\n", _a, _a); + else if (_type == ME_AFTERTOUCH) + printf("Aftertouch %d\n", _a); + else if (_type == ME_PITCHBEND) + printf("PitchBend %d\n", _a); + else + printf("type:0x%02x a=%d(0x%02x) b=%d(0x%02x)\n", _type, _a, _a, _b, _b); + } + +//--------------------------------------------------------- +// operator < +//--------------------------------------------------------- + +bool MidiEvent::operator<(const MidiEvent& e) const + { + if (time() != e.time()) + return time() < e.time(); + + // play note off events first to prevent overlapping + // notes + + if (channel() == e.channel()) + return type() == ME_NOTEOFF + || (type() == ME_NOTEON && dataB() == 0); + + int map[16] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10, 11, 12, 13, 14, 15 }; + return map[channel()] < map[e.channel()]; + } + diff --git a/attic/muse_qt4_evolution/muse/midievent.h b/attic/muse_qt4_evolution/muse/midievent.h new file mode 100644 index 00000000..780c7ce6 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midievent.h @@ -0,0 +1,100 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MIDIEVENT_H__ +#define __MIDIEVENT_H__ + +#include +#include "evdata.h" + +#include "midi.h" + +class Event; + +//--------------------------------------------------------- +// MidiEvent +//--------------------------------------------------------- + +class MidiEvent { + unsigned _time; + EvData edata; + unsigned char _channel, _type; + int _a, _b; + + public: + MidiEvent() {} + MidiEvent(unsigned tm, int c, int t, int a, int b) + : _time(tm), _channel(c & 0xf), _type(t), _a(a), _b(b) {} + MidiEvent(unsigned t, int type, const unsigned char* data, int len); + MidiEvent(unsigned t, int tpe, EvData d) : _time(t), edata(d), _type(tpe) {} + MidiEvent(unsigned t, int channel, const Event& e); + + ~MidiEvent() {} + + MidiEvent& operator=(const MidiEvent& ed) { + _time = ed._time; + edata = ed.edata; + _channel = ed._channel; + _type = ed._type; + _a = ed._a; + _b = ed._b; + return *this; + } + + int channel() const { return _channel; } + int type() const { return _type; } + int dataA() const { return _a; } + int dataB() const { return _b; } + unsigned time() const { return _time; } + + void setChannel(int val) { _channel = val; } + void setType(int val) { _type = val; } + void setA(int val) { _a = val; } + void setB(int val) { _b = val; } + void setTime(unsigned val) { _time = val; } + + const EvData& eventData() const { return edata; } + unsigned char* data() const { return edata.data; } + int len() const { return edata.dataLen; } + void setData(const EvData& e) { edata = e; } + void setData(const unsigned char* p, int len) { edata.setData(p, len); } + void dump() const; + bool isNote() const { return _type == ME_NOTEON; } + bool isNoteOff() const { return (_type == ME_NOTEOFF)||(_type == ME_NOTEON && _b == 0); } + bool operator<(const MidiEvent&) const; + }; + +//--------------------------------------------------------- +// MidiEventList +//--------------------------------------------------------- + +// typedef std::multiset, +// __gnu_cxx::__mt_alloc > MPEL; + +class MidiEventList : public std::multiset > + { + public: + }; + +typedef MidiEventList::iterator iMidiEvent; +typedef MidiEventList::const_iterator ciMidiEvent; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/midieventbase.cpp b/attic/muse_qt4_evolution/muse/midieventbase.cpp new file mode 100644 index 00000000..2e3f371c --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midieventbase.cpp @@ -0,0 +1,159 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "event.h" +#include "midieventbase.h" +#include "al/xml.h" +#include "midievent.h" +#include "midictrl.h" +#include "muse.h" + +//--------------------------------------------------------- +// MidiEventBase +//--------------------------------------------------------- + +MidiEventBase::MidiEventBase(EventType t) + : EventBase(t) + { + a = 0; + b = 0; + c = 0; + } + +//--------------------------------------------------------- +// MidiEventBase::mid +//--------------------------------------------------------- + +EventBase* MidiEventBase::mid(unsigned b, unsigned e) + { + if (tick() < b || tick() >= e) + return 0; + return new MidiEventBase(*this); + } + +//--------------------------------------------------------- +// isNoteOff +//--------------------------------------------------------- + +bool MidiEventBase::isNoteOff() const + { + return (type() == Note && (velo() == 0)); + } + +bool MidiEventBase::isNoteOff(const Event& e) const + { + return (e.isNoteOff() && (e.pitch() == a)); + } + +//--------------------------------------------------------- +// dump +//--------------------------------------------------------- + +void MidiEventBase::dump(int n) const + { + EventBase::dump(n); + QString p = eventTypeName(); + QString s; + s.sprintf("%s<%s> a:0x%x(%d) b:0x%x(%d)\n", + QString(n+2, ' ').toLocal8Bit().data(), p.toLocal8Bit().data(), a, a, b, b); + printf("%s\n", s.toLocal8Bit().data()); + } + +//--------------------------------------------------------- +// MidiEventBase::write +//--------------------------------------------------------- + +void MidiEventBase::write(Xml& xml, const Pos& offset) const + { + QString s = QString("event tick=\"%1\"").arg(tick() + offset.tick()); + + switch (type()) { + case Note: + s += QString(" len=\"%1\"").arg(lenTick()); + break; + default: + s += QString(" type=\"%1\"").arg(type()); + break; + } + if (edata.dataLen) { + s += QString(" datalen=\"%1\"").arg(edata.dataLen); + xml.stag(s); + xml.dump(edata.dataLen, edata.data); + xml.etag("event"); + } + else { + if (a) + s += QString(" a=\"%1\"").arg(a); + if (b) + s += QString(" b=\"%1\"").arg(b); + if (c) + s += QString(" b=\"%1\"").arg(c); + xml.tagE(s); + } + } + +//--------------------------------------------------------- +// MidiEventBase::read +//--------------------------------------------------------- + +void MidiEventBase::read(QDomNode node) + { + QDomElement e = node.toElement(); + setTick(e.attribute("tick","0").toInt()); + setType(EventType(e.attribute("type","0").toInt())); + setLenTick(e.attribute("len","0").toInt()); + a = e.attribute("a","0").toInt(); + b = e.attribute("b","0").toInt(); + c = e.attribute("c","0").toInt(); + int dataLen = e.attribute("datalen","0").toInt(); + + if (dataLen) { + QStringList l = e.text().simplified().split(" ", QString::SkipEmptyParts); + if (dataLen != l.size()) { + printf("error converting init string <%s>\n", e.text().toLatin1().data()); + } + edata.data = new unsigned char[dataLen]; + edata.dataLen = dataLen; + unsigned char* d = edata.data; + int numberBase = 16; + for (int i = 0; i < l.size(); ++i) { + bool ok; + *d++ = l.at(i).toInt(&ok, numberBase); + if (!ok) + printf("error converting data val <%s>\n", l.at(i).toLatin1().data()); + } + } + } + +//--------------------------------------------------------- +// MidiEventBase::operator== +//--------------------------------------------------------- + +bool MidiEventBase::operator==(const EventBase& ev) const { + const MidiEventBase* pev = dynamic_cast(&ev); + + if(pev) return operator==(*pev); + else return false; +} + +bool MidiEventBase::operator==(const MidiEventBase& ev) const { + return (ev.a==a && ev.b==b && ev.c==c && ev.edata==edata + && PosLen::operator==((const PosLen&)ev)); +} diff --git a/attic/muse_qt4_evolution/muse/midieventbase.h b/attic/muse_qt4_evolution/muse/midieventbase.h new file mode 100644 index 00000000..64a8269c --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midieventbase.h @@ -0,0 +1,76 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MIDI_EVENT_BASE_H__ +#define __MIDI_EVENT_BASE_H__ + +#include "eventbase.h" + +//--------------------------------------------------------- +// MidiEventBase +//--------------------------------------------------------- + +class MidiEventBase : public EventBase { + int a, b, c; // pitch, velo-on, velo-off + EvData edata; + + virtual EventBase* clone() const { return new MidiEventBase(*this); } + + public: + MidiEventBase(EventType t); + virtual ~MidiEventBase() {} + + virtual bool isNote() const { return type() == Note; } + virtual bool isNoteOff() const; + virtual bool isNoteOff(const Event&) const; + virtual int pitch() const { return a; } + virtual int program() const { return a; } + virtual int cntrl() const { return a; } + virtual int dataA() const { return a; } + virtual void setA(int val) { a = val; } + virtual void setPitch(int v) { a = v; } + + virtual int cntrlVal() const { return b; } + virtual int dataB() const { return b; } + virtual int velo() const { return b; } + virtual void setB(int val) { b = val; } + virtual void setVelo(int v) { b = v; } + + virtual int veloOff() const { return c; } + virtual int dataC() const { return c; } + virtual void setC(int val) { c = val; } + virtual void setVeloOff(int v) { c = v; } + + virtual const unsigned char* data() const { return edata.data; } + virtual int dataLen() const { return edata.dataLen; } + virtual void setData(const unsigned char* data, int len) { edata.setData(data, len); } + virtual const EvData eventData() const { return edata; } + + virtual void dump(int n = 0) const; + virtual void read(QDomNode); + virtual void write(Xml&, const Pos& offset) const; + virtual EventBase* mid(unsigned, unsigned); + + virtual bool operator==(const EventBase&) const; + virtual bool operator==(const MidiEventBase&) const; + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/midififo.cpp b/attic/muse_qt4_evolution/muse/midififo.cpp new file mode 100644 index 00000000..f68afd83 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midififo.cpp @@ -0,0 +1,103 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "midififo.h" + +//--------------------------------------------------------- +// put +// return true on fifo overflow +//--------------------------------------------------------- + +bool MidiFifo::put(const MidiEvent& event) + { + if (size < MIDI_FIFO_SIZE) { + fifo[wIndex] = event; + wIndex = (wIndex + 1) % MIDI_FIFO_SIZE; + // q_atomic_increment(&size); + ++size; + return false; + } + return true; + } + +//--------------------------------------------------------- +// get +//--------------------------------------------------------- + +MidiEvent MidiFifo::get() + { + MidiEvent event(fifo[rIndex]); + rIndex = (rIndex + 1) % MIDI_FIFO_SIZE; + // q_atomic_decrement(&size); + --size; + return event; + } + +//--------------------------------------------------------- +// peek +//--------------------------------------------------------- + +const MidiEvent& MidiFifo::peek(int n) + { + int idx = (rIndex + n) % MIDI_FIFO_SIZE; + return fifo[idx]; + } + +//--------------------------------------------------------- +// remove +//--------------------------------------------------------- + +void MidiFifo::remove() + { + rIndex = (rIndex + 1) % MIDI_FIFO_SIZE; + // q_atomic_decrement(&size); + --size; + } + +//--------------------------------------------------------- +// put +// return true on fifo overflow +//--------------------------------------------------------- + +bool MidiOutFifo::put(const MidiOutEvent& event) + { + if (size < MIDI_FIFO_SIZE) { + fifo[wIndex] = event; + wIndex = (wIndex + 1) % MIDI_FIFO_SIZE; + // q_atomic_increment(&size); + ++size; + return false; + } + return true; + } + +//--------------------------------------------------------- +// get +//--------------------------------------------------------- + +MidiOutEvent MidiOutFifo::get() + { + MidiOutEvent event(fifo[rIndex]); + rIndex = (rIndex + 1) % MIDI_FIFO_SIZE; + // q_atomic_decrement(&size); + --size; + return event; + } + diff --git a/attic/muse_qt4_evolution/muse/midififo.h b/attic/muse_qt4_evolution/muse/midififo.h new file mode 100644 index 00000000..e2342feb --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midififo.h @@ -0,0 +1,92 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MIDIFIFO_H__ +#define __MIDIFIFO_H__ + +#include "midievent.h" +#include "port.h" + +#define MIDI_FIFO_SIZE 512 + +//--------------------------------------------------------- +// MidiFifo +//--------------------------------------------------------- + +class MidiFifo { + MidiEvent fifo[MIDI_FIFO_SIZE]; + volatile int size; + int wIndex; + int rIndex; + + public: + MidiFifo() { clear(); } + bool put(const MidiEvent& event); // returns true on fifo overflow + MidiEvent get(); + const MidiEvent& peek(int n = 0); + void remove(); + bool isEmpty() const { return size == 0; } + void clear() { size = 0, wIndex = 0, rIndex = 0; } + int getSize() const { return size; } + }; + +//--------------------------------------------------------- +// MidiOutEvent +//--------------------------------------------------------- + +struct MidiOutEvent { + Port port; + MidiEvent event; + + MidiOutEvent() {} + MidiOutEvent(const Port& p, const MidiEvent& e) + : port(p), event(e) {} + bool operator<(const MidiOutEvent& e) const { + if (port == e.port) + return event < e.event; + return event < e.event; + } + }; + +typedef std::multiset > MidiOutEventList; +typedef MidiOutEventList::iterator iMidiOutEvent; +typedef MidiOutEventList::const_iterator ciMidiOutEvent; + +//--------------------------------------------------------- +// MidiOutFifo +//--------------------------------------------------------- + +class MidiOutFifo { + MidiOutEvent fifo[MIDI_FIFO_SIZE]; + volatile int size; + int wIndex; + int rIndex; + + public: + MidiOutFifo() { clear(); } + bool put(const MidiOutEvent& event); // returns true on fifo overflow + MidiOutEvent get(); + bool isEmpty() const { return size == 0; } + void clear() { size = 0, wIndex = 0, rIndex = 0; } + }; + + +#endif + diff --git a/attic/muse_qt4_evolution/muse/midifile.cpp b/attic/muse_qt4_evolution/muse/midifile.cpp new file mode 100644 index 00000000..c45c57d2 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midifile.cpp @@ -0,0 +1,673 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "song.h" +#include "midi.h" +#include "midifile.h" +#include "midiedit/drummap.h" +#include "event.h" +#include "globals.h" +#include "midictrl.h" +#include "midictrl.h" +#include "midievent.h" +#include "gconfig.h" + +const char* errString[] = { + "no Error", + "unexpected EOF", + "read Error", + "write Error", + "bad midifile: 'MTrk' expected", + "bad midifile: 'MThd' expected", + "bad midi fileformat", + }; + +enum ERROR { + MF_NO_ERROR, + MF_EOF, + MF_READ, + MF_WRITE, + MF_MTRK, + MF_MTHD, + MF_FORMAT, + }; + +//--------------------------------------------------------- +// error +//--------------------------------------------------------- + +QString MidiFile::error() + { + return QString(errString[_error]); + } + +//--------------------------------------------------------- +// MidiFile +//--------------------------------------------------------- + +MidiFile::MidiFile() + { + fp = 0; + curPos = 0; + _error = MF_NO_ERROR; + _tracks = new MidiFileTrackList; + _midiType = MT_GENERIC; + } + +MidiFile::~MidiFile() + { + delete _tracks; + } + +//--------------------------------------------------------- +// read +// return true on error +//--------------------------------------------------------- + +bool MidiFile::read(void* p, size_t len) + { + for (;;) { + curPos += len; + qint64 rv = fp->read((char*)p, len); + if (rv == len) + return false; + if (fp->atEnd()) { + _error = MF_EOF; + return true; + } + _error = MF_READ; + return true; + } + return false; + } + +//--------------------------------------------------------- +// write +// return true on error +//--------------------------------------------------------- + +bool MidiFile::write(const void* p, size_t len) + { + qint64 rv = fp->write((char*)p, len); + if (rv == len) + return false; + _error = MF_WRITE; + return true; + } + +//--------------------------------------------------------- +// writeShort +// return true on error +//--------------------------------------------------------- + +bool MidiFile::writeShort(int i) + { + short format = BE_SHORT(i); + return write(&format, 2); + } + +//--------------------------------------------------------- +// writeLong +// return true on error +//--------------------------------------------------------- + +bool MidiFile::writeLong(int i) + { + int format = BE_LONG(i); + return write(&format, 4); + } + +//--------------------------------------------------------- +// readShort +//--------------------------------------------------------- + +int MidiFile::readShort() + { + short format; + read(&format, 2); + return BE_SHORT(format); + } + +//--------------------------------------------------------- +// readLong +// writeLong +//--------------------------------------------------------- + +int MidiFile::readLong() + { + int format; + read(&format, 4); + return BE_LONG(format); + } + +/*--------------------------------------------------------- + * skip + * This is meant for skipping a few bytes in a + * file or fifo. + *---------------------------------------------------------*/ + +bool MidiFile::skip(size_t len) + { + char tmp[len]; + return read(tmp, len); + } + +/*--------------------------------------------------------- + * getvl + * Read variable-length number (7 bits per byte, MSB first) + *---------------------------------------------------------*/ + +int MidiFile::getvl() + { + int l = 0; + for (int i = 0; i < 16; i++) { + uchar c; + if (read(&c, 1)) + return -1; + l += (c & 0x7f); + if (!(c & 0x80)) + return l; + l <<= 7; + } + return -1; + } + +/*--------------------------------------------------------- + * putvl + * Write variable-length number (7 bits per byte, MSB first) + *---------------------------------------------------------*/ + +void MidiFile::putvl(unsigned val) + { + unsigned long buf = val & 0x7f; + while ((val >>= 7) > 0) { + buf <<= 8; + buf |= 0x80; + buf += (val & 0x7f); + } + for (;;) { + put(buf); + if (buf & 0x80) + buf >>= 8; + else + break; + } + } + +//--------------------------------------------------------- +// readTrack +// return true on error +//--------------------------------------------------------- + +bool MidiFile::readTrack(MidiFileTrack* t) + { + MidiEventList* el = &(t->events); + char tmp[4]; + if (read(tmp, 4)) + return true; + if (memcmp(tmp, "MTrk", 4)) { + _error = MF_MTRK; + return true; + } + int len = readLong(); // len + int endPos = curPos + len; + status = -1; + sstatus = -1; // running status, not reset scanning meta or sysex + click = 0; + + int port = 0; + int channel = 0; + + for (;;) { + MidiEvent event; + lastport = -1; + lastchannel = -1; + + int rv = readEvent(&event, t); + if (lastport != -1) + port = lastport; + if (lastchannel != -1) { + channel = lastchannel; + if (channel >= MIDI_CHANNELS) { + printf("channel %d >= %d, reset to 0\n", port, MIDI_CHANNELS); + channel = 0; + } + } + if (rv == 0) + break; + else if (rv == -1) + continue; + else if (rv == -2) // error + return true; + +//TODO3 event.setPort(port); + if (event.type() == ME_SYSEX || event.type() == ME_META) + event.setChannel(channel); + else + channel = event.channel(); + el->insert(event); + } + int end = curPos; + if (end != endPos) { + printf("MidiFile::readTrack(): TRACKLEN does not fit %d+%d != %d, %d too much\n", + endPos-len, len, end, endPos-end); + if (end < endPos) + skip(endPos - end); + } + return false; + } + +//--------------------------------------------------------- +// readEvent +// returns: +// 0 End of track +// -1 Event filtered +// -2 Error +//--------------------------------------------------------- + +int MidiFile::readEvent(MidiEvent* event, MidiFileTrack* t) + { + uchar me, type, a, b; + + int nclick = getvl(); + if (nclick == -1) { + printf("readEvent: error 1\n"); + return 0; + } + click += nclick; + for (;;) { + if (read(&me, 1)) { + printf("readEvent: error 2\n"); + return 0; + } + if (me >= 0xf8 && me <= 0xfe) + printf("Midi: Real Time Message 0x%02x??\n", me & 0xff); + else + break; + } + + event->setTime(click); + int len; + unsigned char* buffer; + + if ((me & 0xf0) == 0xf0) { + if (me == 0xf0 || me == 0xf7) { + // + // SYSEX + // + status = -1; // no running status + len = getvl(); + if (len == -1) { + printf("readEvent: error 3\n"); + return -2; + } + buffer = new unsigned char[len]; + if (read(buffer, len)) { + printf("readEvent: error 4\n"); + delete[] buffer; + return -2; + } + if (buffer[len-1] != 0xf7) { + printf("SYSEX endet nicht mit 0xf7!\n"); + // Forstsetzung folgt? + } + else + --len; // don't count 0xf7 + event->setType(ME_SYSEX); + event->setData(buffer, len); + + if ((len == (signed)gmOnMsgLen) && memcmp(buffer, gmOnMsg, gmOnMsgLen) == 0) + _midiType = MT_GM; + else if ((len == (signed)gsOnMsgLen) && memcmp(buffer, gsOnMsg, gsOnMsgLen) == 0) + _midiType = MT_GS; + + if (buffer[0] == 0x43) { // Yamaha + _midiType = MT_XG; + int type = buffer[1] & 0xf0; + switch (type) { + case 0x00: // bulk dump + buffer[1] = 0; + break; + case 0x10: + if (buffer[1] != 0x10) { + buffer[1] = 0x10; // fix to Device 1 + } + if (len == 7 && buffer[2] == 0x4c && buffer[3] == 0x08 && buffer[5] == 7) { + // part mode + // 0 - normal + // 1 - DRUM + // 2 - DRUM 1 + // 3 - DRUM 2 + // 4 - DRUM 3 + // 5 - DRUM 4 + printf("xg set part mode channel %d to %d\n", buffer[4]+1, buffer[6]); + if (buffer[6] != 0) + t->isDrumTrack = true; + } + break; + case 0x20: + printf("YAMAHA DUMP REQUEST\n"); + return -1; + case 0x30: + printf("YAMAHA PARAMETER REQUEST\n"); + return -1; + default: + printf("YAMAHA unknown SYSEX: data[2]=%02x\n", buffer[1]); + return -1; + } + } + else if (buffer[0] == 0x43) { + if (_midiType != MT_XG) + _midiType = MT_GS; + } + + return 3; + } + if (me == 0xff) { + // + // META + // + status = -1; // no running status + if (read(&type, 1)) { // read type + printf("readEvent: error 5\n"); + return -2; + } + len = getvl(); // read len + if (len == -1) { + printf("readEvent: error 6\n"); + return -2; + } + buffer = new unsigned char[len+1]; + *buffer = 0; + if (len) { + if (read(buffer, len)) { + printf("readEvent: error 7\n"); + delete[] buffer; + return -2; + } + buffer[len] = 0; + } + event->setType(ME_META); + event->setData(buffer, len+1); + event->setA(type); + buffer[len] = 0; + switch(type) { + case 0x21: // switch port + lastport = buffer[0]; + return 3; + case 0x20: // switch channel + lastchannel = buffer[0]; + return 3; + case 0x2f: // End of Track + delete[] buffer; + return 0; + default: + return 3; + } + } + else { + printf("Midi: unknown Message 0x%02x\n", me & 0xff); + return -1; + } + } + + if (me & 0x80) { // status byte + status = me; + sstatus = status; + if (read(&a, 1)) { + printf("readEvent: error 9\n"); + return -2; + } + a &= 0x7F; + } + else { + if (status == -1) { + // Meta events and sysex events cancel running status. + // There are some midi files which do not send + // status again after this events. Silently assume + // old running status. + + if (debugMsg || sstatus == -1) + printf("readEvent: no running status, read 0x%02x, old status 0x%02x\n", me, sstatus); + if (sstatus == -1) + return -1; + status = sstatus; + } + a = me; + } + b = 0; + switch (status & 0xf0) { + case ME_NOTEOFF: + case ME_NOTEON: + case ME_POLYAFTER: + case ME_CONTROLLER: + case ME_PITCHBEND: + if (read(&b, 1)) { + printf("readEvent: error 15\n"); + return -2; + } + event->setB(b & 0x80 ? 0 : b); + break; + case ME_PROGRAM: + case ME_AFTERTOUCH: + break; + default: // f1 f2 f3 f4 f5 f6 f7 f8 f9 + printf("BAD STATUS 0x%02x, me 0x%02x\n", status, me); + return -2; + } + event->setA(a & 0x7f); + event->setType(status & 0xf0); + event->setChannel(status & 0xf); + if ((a & 0x80) || (b & 0x80)) { + printf("8'tes Bit in Daten(%02x %02x): tick %d read 0x%02x status:0x%02x\n", + a & 0xff, b & 0xff, click, me, status); + printf("readEvent: error 16\n"); + if (b & 0x80) { + // Try to fix: interpret as channel byte + status = b & 0xf0; + sstatus = status; + return 3; + } + return -1; + } + if (event->type() == ME_PITCHBEND) { + int val = (event->dataB() << 7) + event->dataA(); + val -= 8192; + event->setA(val); + } + return 3; + } + +//--------------------------------------------------------- +// writeTrack +//--------------------------------------------------------- + +bool MidiFile::writeTrack(const MidiFileTrack* t) + { + const MidiEventList* events = &(t->events); + write("MTrk", 4); + int lenpos = fp->pos(); + writeLong(0); // dummy len + + status = -1; + int tick = 0; + for (iMidiEvent i = events->begin(); i != events->end(); ++i) { + int ntick = i->time(); + if (ntick < tick) { + printf("MidiFile::writeTrack: ntick %d < tick %d\n", ntick, tick); + ntick = tick; + } + putvl(((ntick - tick) * config.midiDivision + config.division/2)/config.division); + tick = ntick; + writeEvent(&(*i)); + } + + //--------------------------------------------------- + // write "End Of Track" Meta + // write Track Len + // + + putvl(0); + put(0xff); // Meta + put(0x2f); // EOT + putvl(0); // len 0 + int endpos = fp->pos(); + fp->seek(lenpos); + writeLong(endpos-lenpos-4); // tracklen + fp->seek(endpos); + return false; + } + +//--------------------------------------------------------- +// writeEvent +//--------------------------------------------------------- + +void MidiFile::writeEvent(const MidiEvent* event) + { + int c = event->channel(); + int nstat = event->type(); + + // we dont save meta data into smf type 0 files: + + if (config.smfFormat == 0 && nstat == ME_META) + return; + + nstat |= c; + // + // running status; except for Sysex- and Meta Events + // + if (((nstat & 0xf0) != 0xf0) && (nstat != status)) { + status = nstat; + put(nstat); + } + switch (event->type()) { + case ME_NOTEOFF: + case ME_NOTEON: + case ME_POLYAFTER: + case ME_CONTROLLER: + case ME_PITCHBEND: + put(event->dataA()); + put(event->dataB()); + break; + case ME_PROGRAM: // Program Change + case ME_AFTERTOUCH: // Channel Aftertouch + put(event->dataA()); + break; + case ME_SYSEX: + put(0xf0); + putvl(event->len() + 1); // including 0xf7 + write(event->data(), event->len()); + put(0xf7); + status = -1; // invalidate running status + break; + case ME_META: + put(0xff); + put(event->dataA()); + putvl(event->len()); + write(event->data(), event->len()); + status = -1; + break; + } + } + +//--------------------------------------------------------- +// write +// returns true on error +//--------------------------------------------------------- + +bool MidiFile::write(QFile* _fp) + { + fp = _fp; + write("MThd", 4); + writeLong(6); // header len + writeShort(format); + if (format == 0) { + // ?? writeShort(1); + MidiFileTrack dst; + for (iMidiFileTrack i = _tracks->begin(); i != _tracks->end(); ++i) { + MidiEventList* sl = &((*i)->events); + for (iMidiEvent ie = sl->begin(); ie != sl->end(); ++ie) + dst.events.insert(*ie); + } + writeShort(1); + writeShort(_division); + writeTrack(&dst); + } + else { + writeShort(_tracks->size()); + writeShort(_division); + for (ciMidiFileTrack i = _tracks->begin(); i != _tracks->end(); ++i) + writeTrack(*i); + } + return false; // (ferror(fp) != 0); + } + +//--------------------------------------------------------- +// readMidi +// returns true on error +//--------------------------------------------------------- + +bool MidiFile::read(QFile* _fp) + { + fp = _fp; + _error = MF_NO_ERROR; + int i; + char tmp[4]; + + if (read(tmp, 4)) + return true; + int len = readLong(); + if (memcmp(tmp, "MThd", 4) || len < 6) { + _error = MF_MTHD; + return true; + } + format = readShort(); + ntracks = readShort(); + _division = readShort(); + + if (_division < 0) + _division = (-(_division/256)) * (_division & 0xff); + if (len > 6) + skip(len-6); // skip excess bytes + + switch (format) { + case 0: + { + MidiFileTrack* t = new MidiFileTrack; + _tracks->push_back(t); + if (readTrack(t)) + return true; + } + break; + case 1: + for (i = 0; i < ntracks; i++) { + MidiFileTrack* t = new MidiFileTrack; + _tracks->push_back(t); + if (readTrack(t)) + return true; + } + break; + default: + _error = MF_FORMAT; + return true; + } + return false; + } + diff --git a/attic/muse_qt4_evolution/muse/midifile.h b/attic/muse_qt4_evolution/muse/midifile.h new file mode 100644 index 00000000..dd51a7d3 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midifile.h @@ -0,0 +1,121 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MIDIFILE_H__ +#define __MIDIFILE_H__ + +#include "globaldefs.h" +#include "midievent.h" + +struct MidiEventList; +class MidiEvent; + +//--------------------------------------------------------- +// MidiFileTrack +//--------------------------------------------------------- + +struct MidiFileTrack { + MidiEventList events; + bool isDrumTrack; + MidiFileTrack() { + isDrumTrack = false; + } + }; + +typedef std::list MidiFileTrackList; +typedef MidiFileTrackList::iterator iMidiFileTrack; +typedef MidiFileTrackList::const_iterator ciMidiFileTrack; + +//--------------------------------------------------------- +// MidiFile +//--------------------------------------------------------- + +class MidiFile { + int _error; + int format; // smf file format + int ntracks; // number of midi tracks + int _division; + MidiInstrumentType _midiType; + MidiFileTrackList* _tracks; + + int status, click; + int sstatus; + int lastport, lastchannel; + QFile* fp; + int curPos; + + bool read(void*, size_t); + bool write(const void*, size_t); + void put(unsigned char c) { write(&c, 1); } + bool skip(size_t); + int readShort(); + bool writeShort(int); + int readLong(); + bool writeLong(int); + int getvl(); + void putvl(unsigned); + + bool readTrack(MidiFileTrack*); + bool writeTrack(const MidiFileTrack*); + + int readEvent(MidiEvent*, MidiFileTrack*); + void writeEvent(const MidiEvent*); + + public: + MidiFile(); + ~MidiFile(); + bool read(QFile* f); + bool write(QFile* f); + QString error(); + MidiFileTrackList* trackList() { return _tracks; } + int tracks() const { return ntracks; } + void setTrackList(MidiFileTrackList* tr) { + _tracks = tr; + } + void setDivision(int d) { _division = d; } + int division() const { return _division; } + void setFormat(int val) { format = val; } + MidiInstrumentType midiType() const { return _midiType; } + }; + +#define XCHG_SHORT(x) ((((x)&0xFF)<<8) | (((x)>>8)&0xFF)) +#ifdef __i486__ +#define XCHG_LONG(x) \ + ({ int __value; \ + asm ("bswap %1; movl %1,%0" : "=g" (__value) : "r" (x)); \ + __value; }) +#else +#define XCHG_LONG(x) ((((x)&0xFF)<<24) | \ + (((x)&0xFF00)<<8) | \ + (((x)&0xFF0000)>>8) | \ + (((x)>>24)&0xFF)) +#endif + +#if __BYTE_ORDER == __LITTLE_ENDIAN +#define BE_SHORT(x) XCHG_SHORT(x) +#define BE_LONG(x) XCHG_LONG(x) +#else +#define BE_SHORT(x) x +#define BE_LONG(x) x +#endif + + +#endif + diff --git a/attic/muse_qt4_evolution/muse/midiinport.cpp b/attic/muse_qt4_evolution/muse/midiinport.cpp new file mode 100644 index 00000000..afe53876 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiinport.cpp @@ -0,0 +1,241 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "song.h" +#include "midiplugin.h" +#include "midi.h" +#include "midictrl.h" +#include "al/xml.h" +#include "audiodev.h" +#include "audio.h" +#include "gconfig.h" +#include "midiinport.h" +#include "jackaudio.h" + +//--------------------------------------------------------- +// MidiInPort +//--------------------------------------------------------- + +MidiInPort::MidiInPort() + : MidiTrackBase() + { + _channels = 1; + for (int i = 0; i < MIDI_CHANNELS; ++i) + activity[i] = 0; + } + +//--------------------------------------------------------- +// MidiInPort +//--------------------------------------------------------- + +MidiInPort::~MidiInPort() + { + } + +//--------------------------------------------------------- +// setName +//--------------------------------------------------------- + +void MidiInPort::setName(const QString& s) + { + Track::setName(s); + if (!jackPort(0).isZero()) + audioDriver->setPortName(jackPort(), s); + } + +//--------------------------------------------------------- +// MidiInPort::write +//--------------------------------------------------------- + +void MidiInPort::write(Xml& xml) const + { + xml.stag("MidiInPort"); + MidiTrackBase::writeProperties(xml); + xml.etag("MidiInPort"); + } + +//--------------------------------------------------------- +// MidiInPort::read +//--------------------------------------------------------- + +void MidiInPort::read(QDomNode node) + { + while (!node.isNull()) { + QDomElement e = node.toElement(); + QString tag(e.tagName()); + if (MidiTrackBase::readProperties(node)) + printf("MusE:MidiInPort: unknown tag %s\n", tag.toLatin1().data()); + node = node.nextSibling(); + } + } + +//--------------------------------------------------------- +// midiReceived +// called from midiSeq context +//--------------------------------------------------------- + +void MidiInPort::eventReceived(jack_midi_event_t* ev) + { + MidiEvent event; + event.setB(0); + + // + // move all events 2*segmentSize into the future to get + // jitterfree playback + // + // cycle n-1 n n+1 + // -+----------+----------+----------+- + // ^ ^ ^ + // catch process play + // + const SeqTime* st = audio->seqTime(); + +// unsigned curFrame = st->startFrame() + segmentSize; + unsigned curFrame = st->lastFrameTime; + event.setTime(curFrame + ev->time); + + event.setChannel(*(ev->buffer) & 0xf); + int type = *(ev->buffer) & 0xf0; + int a = *(ev->buffer + 1) & 0x7f; + int b = *(ev->buffer + 2) & 0x7f; + event.setType(type); + switch(type) { + case ME_NOTEON: + case ME_NOTEOFF: + case ME_CONTROLLER: + event.setA(*(ev->buffer + 1)); + event.setB(*(ev->buffer + 2)); + break; + case ME_PROGRAM: + case ME_AFTERTOUCH: + event.setA(*(ev->buffer + 1)); + break; + + case ME_PITCHBEND: + event.setA(((b << 7) + a) - 8192); + break; + + case ME_SYSEX: + { + int type = *(ev->buffer) & 0xff; + switch(type) { + case ME_SYSEX: + event.setTime(0); // mark as used + event.setType(ME_SYSEX); + event.setData((unsigned char*)(ev->buffer + 1), + ev->size - 2); + break; + case ME_CLOCK: + case ME_SENSE: + break; + default: + printf("unknown event 0x%02x\n", type); + return; + } + } + return; + } + + if (midiInputTrace) { + printf("MidiInput<%s>: ", name().toLatin1().data()); + event.dump(); + } + // + // process midi filter pipeline and add event to + // _recordEvents + // + + MidiEventList il, ol; + il.insert(event); + pipeline()->apply(st->curTickPos, st->nextTickPos, &il, &ol); + + // + // update midi activity + // notify gui of new events + // + + for (iMidiEvent i = ol.begin(); i != ol.end(); ++i) { + triggerActivity(i->channel()); + song->putEvent(*i); + if (recordFifo.put(*i)) + printf("MusE: eventReceived(): fifo overflow\n"); + } + } + +//--------------------------------------------------------- +// afterProcess +// clear all recorded events after a process cycle +//--------------------------------------------------------- + +void MidiInPort::afterProcess() + { + while (tmpRecordCount--) + recordFifo.remove(); + } + +//--------------------------------------------------------- +// beforeProcess +// "freeze" fifo for this process cycle +//--------------------------------------------------------- + +void MidiInPort::beforeProcess() + { + if (!jackPort(0).isZero()) + audioDriver->collectMidiEvents(this, jackPort(0)); + tmpRecordCount = recordFifo.getSize(); + } + +//--------------------------------------------------------- +// getEvents +// called from jack process context +// This method can be called multiple times in a process +// cycle so we have to empty the fifo at +// "afterProcess()". +//--------------------------------------------------------- + +void MidiInPort::getEvents(unsigned, unsigned, int ch, MidiEventList* dst) + { + for (int i = 0; i < tmpRecordCount; ++i) { + const MidiEvent& ev = recordFifo.peek(i); + if (ch == -1 || (ev.channel() == ch)) + dst->insert(ev); + } + } + +//--------------------------------------------------------- +// checkActivity +//--------------------------------------------------------- + +bool MidiInPort::checkActivity(int channel) + { + if (activity[channel]) + --activity[channel]; + return activity[channel] != 0; + } + +//--------------------------------------------------------- +// triggerActivity +//--------------------------------------------------------- + +void MidiInPort::triggerActivity(int channel) + { + activity[channel] = config.guiRefresh / 5 + 1; // hold for >= 1/5 sec + } + diff --git a/attic/muse_qt4_evolution/muse/midiinport.h b/attic/muse_qt4_evolution/muse/midiinport.h new file mode 100644 index 00000000..899ee0a8 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiinport.h @@ -0,0 +1,67 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MIDIINPORT_H__ +#define __MIDIINPORT_H__ + +#include "midififo.h" +#include "miditrackbase.h" +#include "midievent.h" + +static const int RECORD_FIFO_SIZE = 512; + +//--------------------------------------------------------- +// MidiInPort +//--------------------------------------------------------- + +class MidiInPort : public MidiTrackBase { + Q_OBJECT + + MidiFifo recordFifo; + + int tmpRecordCount; + int activity[MIDI_CHANNELS]; + + public: + MidiInPort(); + ~MidiInPort(); + virtual TrackType type() const { return MIDI_IN; } + + virtual void setName(const QString& s); + virtual void write(Xml&) const; + virtual void read(QDomNode); + virtual bool isMute() const { return _mute; } + virtual Part* newPart(Part*, bool) { return 0; } + + void eventReceived(jack_midi_event_t*); + + virtual void getEvents(unsigned from, unsigned to, int channel, MidiEventList* dst); + void beforeProcess(); + void afterProcess(); + bool checkActivity(int channel); + void triggerActivity(int channel); + }; + +typedef QList MidiInPortList; +typedef MidiInPortList::iterator iMidiInPort; +typedef MidiInPortList::const_iterator ciMidiInPort; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/midiout.cpp b/attic/muse_qt4_evolution/muse/midiout.cpp new file mode 100644 index 00000000..c35f115f --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiout.cpp @@ -0,0 +1,398 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "midiout.h" +#include "midictrl.h" +#include "miditrackbase.h" +#include "al/al.h" +#include "al/tempo.h" +#include "event.h" +#include "sync.h" +#include "audio.h" +#include "gconfig.h" + +static const unsigned char mmcDeferredPlayMsg[] = { 0x7f, 0x7f, 0x06, 0x03 }; +static const unsigned char mmcStopMsg[] = { 0x7f, 0x7f, 0x06, 0x01 }; + +//--------------------------------------------------------- +// MidiOut +//--------------------------------------------------------- + +MidiOut::MidiOut() + { + track = 0; + } + +//--------------------------------------------------------- +// sendGmOn +// send GM-On message to midi device and keep track +// of device state +//--------------------------------------------------------- + +void MidiOut::sendGmOn() + { + sendSysex(gmOnMsg, gmOnMsgLen); + track->setHwCtrlState(CTRL_PROGRAM, 0); + track->setHwCtrlState(CTRL_PITCH, 0); + track->setHwCtrlState(CTRL_VOLUME, 100); + track->setHwCtrlState(CTRL_PANPOT, 64); + track->setHwCtrlState(CTRL_REVERB_SEND, 40); + track->setHwCtrlState(CTRL_CHORUS_SEND, 0); + track->setMeter(0, 0.0); + } + +//--------------------------------------------------------- +// sendGsOn +// send Roland GS-On message to midi device and keep track +// of device state +//--------------------------------------------------------- + +void MidiOut::sendGsOn() + { + static unsigned char data2[] = { 0x41, 0x10, 0x42, 0x12, 0x40, 0x01, 0x33, 0x50, 0x3c }; + static unsigned char data3[] = { 0x41, 0x10, 0x42, 0x12, 0x40, 0x01, 0x34, 0x50, 0x3b }; + + sendSysex(data2, sizeof(data2)); + sendSysex(data3, sizeof(data3)); + } + +//--------------------------------------------------------- +// sendXgOn +// send Yamaha XG-On message to midi device and keep track +// of device state +//--------------------------------------------------------- + +void MidiOut::sendXgOn() + { + sendSysex(xgOnMsg, xgOnMsgLen); + track->setHwCtrlState(CTRL_PROGRAM, 0); + track->setHwCtrlState(CTRL_MODULATION, 0); + track->setHwCtrlState(CTRL_PORTAMENTO_TIME, 0); + track->setHwCtrlState(CTRL_VOLUME, 0x64); + track->setHwCtrlState(CTRL_PANPOT, 0x40); + track->setHwCtrlState(CTRL_EXPRESSION, 0x7f); + track->setHwCtrlState(CTRL_SUSTAIN, 0x0); + track->setHwCtrlState(CTRL_PORTAMENTO, 0x0); + track->setHwCtrlState(CTRL_SOSTENUTO, 0x0); + track->setHwCtrlState(CTRL_SOFT_PEDAL, 0x0); + track->setHwCtrlState(CTRL_HARMONIC_CONTENT, 0x40); + track->setHwCtrlState(CTRL_RELEASE_TIME, 0x40); + track->setHwCtrlState(CTRL_ATTACK_TIME, 0x40); + track->setHwCtrlState(CTRL_BRIGHTNESS, 0x40); + track->setHwCtrlState(CTRL_REVERB_SEND, 0x28); + track->setHwCtrlState(CTRL_CHORUS_SEND, 0x0); + track->setHwCtrlState(CTRL_VARIATION_SEND, 0x0); + track->setMeter(0, 0.0); + } + +//--------------------------------------------------------- +// sendSysex +// send SYSEX message to midi device +//--------------------------------------------------------- + +void MidiOut::sendSysex(const unsigned char* p, int n) + { + MidiEvent event(0, ME_SYSEX, p, n); + track->routeEvent(event); + } + +//--------------------------------------------------------- +// sendStart +//--------------------------------------------------------- + +void MidiOut::sendStart() + { + MidiEvent event(0, 0, ME_START, 0, 0); + track->routeEvent(event); + } + +//--------------------------------------------------------- +// sendStop +//--------------------------------------------------------- + +void MidiOut::sendStop() + { + MidiEvent event(0, 0, ME_STOP, 0, 0); + track->routeEvent(event); + } + +//--------------------------------------------------------- +// sendClock +//--------------------------------------------------------- + +void MidiOut::sendClock() + { + MidiEvent event(0, 0, ME_CLOCK, 0, 0); + track->routeEvent(event); + } + +//--------------------------------------------------------- +// sendContinue +//--------------------------------------------------------- + +void MidiOut::sendContinue() + { + MidiEvent event(0, 0, ME_CONTINUE, 0, 0); + track->routeEvent(event); + } + +//--------------------------------------------------------- +// sendSongpos +//--------------------------------------------------------- + +void MidiOut::sendSongpos(int pos) + { + MidiEvent event(0, 0, ME_SONGPOS, pos, 0); + track->routeEvent(event); + } + +//--------------------------------------------------------- +// playMidiEvent +// called from GUI +//--------------------------------------------------------- + +void MidiOut::playMidiEvent(MidiEvent* ev) + { + if (eventFifo.put(*ev)) + printf("MidiPort::playMidiEvent(): port overflow, drop event\n"); + } + +//--------------------------------------------------------- +// seek +//--------------------------------------------------------- + +void MidiOut::seek(unsigned tickPos, unsigned framePos) + { + if (genMCSync && track->sendSync()) { + int beat = (tickPos * 4) / config.division; + sendStop(); + sendSongpos(beat); + sendContinue(); + } + if (track->mute()) + return; + +// if (pos == 0 && !song->record()) +// audio->initDevices(); + + //--------------------------------------------------- + // stop all notes + //--------------------------------------------------- + + for (iMidiEvent i = _schedEvents.begin(); i != _schedEvents.end(); ++i) { + MidiEvent ev = *i; + if (ev.isNoteOff()) { + ev.setTime(framePos); + track->routeEvent(ev); + } + } + _schedEvents.clear(); + + //--------------------------------------------------- + // set all controller + //--------------------------------------------------- + + if (track->autoRead()) { + CtrlList* cl = track->controller(); + for (iCtrl ic = cl->begin(); ic != cl->end(); ++ic) { + Ctrl* c = ic->second; + int val = c->value(tickPos).i; + if ((val != CTRL_VAL_UNKNOWN) && (c->curVal().i != val)) { + MidiEvent ev(0, -1, ME_CONTROLLER, c->id(), val); + track->routeEvent(ev); + c->setCurVal(val); + } + } + } + foreach (const Route& r, *track->inRoutes()) { + MidiTrackBase* t = (MidiTrackBase*)r.src.track; + int dstChannel = r.dst.channel; + if (t->isMute() || !t->autoRead()) + continue; + CtrlList* cl = t->controller(); + for (iCtrl ic = cl->begin(); ic != cl->end(); ++ic) { + Ctrl* c = ic->second; + int val = c->value(tickPos).i; + if ((val != CTRL_VAL_UNKNOWN) && (c->curVal().i != val)) { + MidiEvent ev(0, dstChannel, ME_CONTROLLER, c->id(), val); + track->routeEvent(ev); + c->setCurVal(val); + } + } + } + } + +//--------------------------------------------------------- +// stop +//--------------------------------------------------------- + +void MidiOut::stop() + { + //--------------------------------------------------- + // stop all notes + //--------------------------------------------------- + + int time = audio->seqTime()->lastFrameTime; + for (iMidiEvent i = _schedEvents.begin(); i != _schedEvents.end(); ++i) { + MidiEvent ev = *i; + if (ev.isNoteOff()) { + ev.setTime(time); + track->routeEvent(ev); + } + } + _schedEvents.clear(); + + //--------------------------------------------------- + // reset sustain + //--------------------------------------------------- + + foreach (const Route& r, *track->inRoutes()) { + MidiTrackBase* t = (MidiTrackBase*)r.src.track; + int dstChannel = r.dst.channel; + if (t->isMute() || !t->autoRead()) + continue; + CtrlList* cl = t->controller(); + for (iCtrl ic = cl->begin(); ic != cl->end(); ++ic) { + Ctrl* c = ic->second; + if (c->id() == CTRL_SUSTAIN) { + if (c->curVal().i > 0) { + MidiEvent ev(time, dstChannel, ME_CONTROLLER, c->id(), 0); + track->routeEvent(ev); + c->setCurVal(0); + } + } + } + } + + if (track->sendSync()) { + if (genMMC) { + unsigned char mmcPos[] = { + 0x7f, 0x7f, 0x06, 0x44, 0x06, 0x01, + 0, 0, 0, 0, 0 + }; + double frame = double(audio->seqTime()->pos.frame()); + MTC mtc(frame / double(AL::sampleRate)); + mmcPos[6] = mtc.h() | (AL::mtcType << 5); + mmcPos[7] = mtc.m(); + mmcPos[8] = mtc.s(); + mmcPos[9] = mtc.f(); + mmcPos[10] = mtc.sf(); + sendSysex(mmcStopMsg, sizeof(mmcStopMsg)); + sendSysex(mmcPos, sizeof(mmcPos)); + } + if (genMCSync) { // Midi Clock + // send STOP and + // "set song position pointer" + sendStop(); + sendSongpos(audio->seqTime()->curTickPos * 4 / config.division); + } + } + } + +//--------------------------------------------------------- +// start +//--------------------------------------------------------- + +void MidiOut::start() + { + // TODO: set sustain to old value? + + if (!(genMMC || genMCSync || track->sendSync())) + return; + if (genMMC) + sendSysex(mmcDeferredPlayMsg, sizeof(mmcDeferredPlayMsg)); + if (genMCSync) { + if (audio->seqTime()->curTickPos) + sendContinue(); + else + sendStart(); + } + } + +//--------------------------------------------------------- +// reset +//--------------------------------------------------------- + +void MidiOut::reset() + { +/* TODO + MidiEvent ev; + ev.setType(0x90); + for (int chan = 0; chan < MIDI_CHANNELS; ++chan) { + ev.setChannel(chan); + for (int pitch = 0; pitch < 128; ++pitch) { + ev.setA(pitch); + ev.setB(0); + mp->putEvent(ev); + } + } +*/ + } + +//------------------------------------------------------------------- +// process +// Collect all midi events for the current process cycle and put +// into _schedEvents queue. For note on events create the proper +// note off events. The note off events maybe played later after the +// current process cycle. +// From _schedEvents queue copy all events for the current cycle +// to all output routes. Events routed to ALSA go into the +// _playEvents queue which is processed by the MidiSeq thread. +//------------------------------------------------------------------- + +void MidiOut::processMidi(MidiEventList& el, const SeqTime* time) + { + while (!eventFifo.isEmpty()) + el.insert(eventFifo.get()); + + // collect port controller + if (track->autoRead() && (time->curTickPos != time->nextTickPos)) { // if rolling + CtrlList* cl = track->controller(); + for (iCtrl ic = cl->begin(); ic != cl->end(); ++ic) { + Ctrl* c = ic->second; + iCtrlVal is = c->lowerBound(time->curTickPos); + iCtrlVal ie = c->lowerBound(time->nextTickPos); + for (iCtrlVal ic = is; ic != ie; ++ic) { + unsigned frame = AL::tempomap.tick2frame(ic.key()); + MidiEvent ev(frame, -1, ME_CONTROLLER, c->id(), ic.value().i); + el.insert(ev); + c->setCurVal(ic.value().i); + } + } + } + foreach (const Route& r, *track->inRoutes()) { + MidiTrackBase* t = (MidiTrackBase*)r.src.track; + int dstChannel = r.dst.channel; + if (t->isMute()) + continue; + MidiEventList ell; + t->getEvents(time->curTickPos, time->nextTickPos, r.src.channel, &ell); + int velo = 0; + for (iMidiEvent i = ell.begin(); i != ell.end(); ++i) { + MidiEvent ev(*i); + ev.setChannel(dstChannel); + el.insert(ev); + if (ev.type() == ME_NOTEON) + velo += ev.dataB(); + } + t->addMidiMeter(velo); + } + } + diff --git a/attic/muse_qt4_evolution/muse/midiout.h b/attic/muse_qt4_evolution/muse/midiout.h new file mode 100644 index 00000000..8bf25261 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiout.h @@ -0,0 +1,67 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MIDIOUT_H__ +#define __MIDIOUT_H__ + +#include "midififo.h" + +class Track; +class MidiInstrument; +class SeqTime; + +//--------------------------------------------------------- +// MidiOut +//--------------------------------------------------------- + +class MidiOut + { + public: + Track* track; + MidiInstrument* _instrument; + MidiEventList _schedEvents; // scheduled events by process() + + // fifo for midi events send from gui + // direct to midi port: + + MidiFifo eventFifo; + + MidiOut(); + void processMidi(MidiEventList&, const SeqTime*); + + void seek(unsigned, unsigned); + void stop(); + void start(); + void reset(); + + void sendSysex(const unsigned char*, int); + void sendSongpos(int); + void sendGmOn(); + void sendGsOn(); + void sendXgOn(); + void sendStart(); + void sendStop(); + void sendContinue(); + void sendClock(); + void playMidiEvent(MidiEvent* ev); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/midioutport.cpp b/attic/muse_qt4_evolution/muse/midioutport.cpp new file mode 100644 index 00000000..695f51a6 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midioutport.cpp @@ -0,0 +1,262 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "song.h" +#include "midiplugin.h" +#include "midictrl.h" +#include "al/al.h" +#include "al/tempo.h" +#include "al/xml.h" +#include "audiodev.h" +#include "audio.h" +#include "midioutport.h" +#include "sync.h" +#include "gconfig.h" +#include "instruments/minstrument.h" + +//--------------------------------------------------------- +// MidiOutPort +//--------------------------------------------------------- + +MidiOutPort::MidiOutPort() + : MidiTrackBase() + { + track = this; + _instrument = genericMidiInstrument; + setDeviceId(127); // all + addMidiController(_instrument, CTRL_MASTER_VOLUME); + _channels = 1; + } + +//--------------------------------------------------------- +// MidiOutPort +//--------------------------------------------------------- + +MidiOutPort::~MidiOutPort() + { + } + +//--------------------------------------------------------- +// setName +//--------------------------------------------------------- + +void MidiOutPort::setName(const QString& s) + { + Track::setName(s); + if (!jackPort().isZero()) + audioDriver->setPortName(jackPort(), s); + } + +//--------------------------------------------------------- +// MidiOutPort::write +//--------------------------------------------------------- + +void MidiOutPort::write(Xml& xml) const + { + xml.stag("MidiOutPort"); + MidiTrackBase::writeProperties(xml); + if (_instrument) + xml.tag("instrument", _instrument->iname()); + xml.tag("sendSync", sendSync()); + xml.tag("deviceId", deviceId()); + xml.etag("MidiOutPort"); + } + +//--------------------------------------------------------- +// MidiOutPort::read +//--------------------------------------------------------- + +void MidiOutPort::read(QDomNode node) + { + for (; !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + QString tag(e.tagName()); + if (tag == "instrument") { + QString iname = e.text(); + _instrument = registerMidiInstrument(iname); + } + else if (tag == "sendSync") + setSendSync(e.text().toInt()); + else if (tag == "deviceId") + setDeviceId(e.text().toInt()); + else if (MidiTrackBase::readProperties(node)) + printf("MusE:MidiOutPort: unknown tag %s\n", tag.toLatin1().data()); + } + } + +//--------------------------------------------------------- +// routeEvent +//--------------------------------------------------------- + +void MidiOutPort::routeEvent(const MidiEvent& event) + { + for (iRoute r = _outRoutes.begin(); r != _outRoutes.end(); ++r) { + if (r->dst.type == RouteNode::JACKMIDIPORT) + queueJackEvent(event); + else + fprintf(stderr, "MidiOutPort::process(): invalid routetype\n"); + } + } + +//--------------------------------------------------------- +// queueJackEvent +// called from MidiSeq +//--------------------------------------------------------- + +#define JO(e) audioDriver->putEvent(jackPort(0), e); + +void MidiOutPort::queueJackEvent(const MidiEvent& ev) + { + if (ev.type() == ME_CONTROLLER) { + int a = ev.dataA(); + int b = ev.dataB(); + int chn = ev.channel(); + unsigned t = ev.time(); + + if (a == CTRL_PITCH) { + int v = b + 8192; + audioDriver->putEvent(jackPort(0), MidiEvent(t, chn, ME_PITCHBEND, v & 0x7f, (v >> 7) & 0x7f)); + } + else if (a == CTRL_PROGRAM) { + // don't output program changes for GM drum channel +// if (!(song->mtype() == MT_GM && chn == 9)) { + int hb = (b >> 16) & 0xff; + int lb = (b >> 8) & 0xff; + int pr = b & 0x7f; + if (hb != 0xff) + JO(MidiEvent(t, chn, ME_CONTROLLER, CTRL_HBANK, hb)); + if (lb != 0xff) + JO(MidiEvent(t+1, chn, ME_CONTROLLER, CTRL_LBANK, lb)); + JO(MidiEvent(t+2, chn, ME_PROGRAM, pr, 0)); +// } + } + else if (a == CTRL_MASTER_VOLUME) { + unsigned char sysex[] = { + 0x7f, 0x7f, 0x04, 0x01, 0x00, 0x00 + }; + sysex[1] = deviceId(); + sysex[4] = b & 0x7f; + sysex[5] = (b >> 7) & 0x7f; + JO(MidiEvent(t, ME_SYSEX, sysex, 6)); + } + else if (a < CTRL_14_OFFSET) { // 7 Bit Controller + JO(ev); + } + else if (a < CTRL_RPN_OFFSET) { // 14 bit high resolution controller + int ctrlH = (a >> 8) & 0x7f; + int ctrlL = a & 0x7f; + int dataH = (b >> 7) & 0x7f; + int dataL = b & 0x7f; + JO(MidiEvent(t, chn, ME_CONTROLLER, ctrlH, dataH)); + JO(MidiEvent(t+1, chn, ME_CONTROLLER, ctrlL, dataL)); + } + else if (a < CTRL_NRPN_OFFSET) { // RPN 7-Bit Controller + int ctrlH = (a >> 8) & 0x7f; + int ctrlL = a & 0x7f; + JO(MidiEvent(t, chn, ME_CONTROLLER, CTRL_HRPN, ctrlH)); + JO(MidiEvent(t+1, chn, ME_CONTROLLER, CTRL_LRPN, ctrlL)); + JO(MidiEvent(t+2, chn, ME_CONTROLLER, CTRL_HDATA, b)); + } + else if (a < CTRL_RPN14_OFFSET) { // NRPN 7-Bit Controller + int ctrlH = (a >> 8) & 0x7f; + int ctrlL = a & 0x7f; + JO(MidiEvent(t, chn, ME_CONTROLLER, CTRL_HNRPN, ctrlH)); + JO(MidiEvent(t+1, chn, ME_CONTROLLER, CTRL_LNRPN, ctrlL)); + JO(MidiEvent(t+2, chn, ME_CONTROLLER, CTRL_HDATA, b)); + } + else if (a < CTRL_NRPN14_OFFSET) { // RPN14 Controller + int ctrlH = (a >> 8) & 0x7f; + int ctrlL = a & 0x7f; + int dataH = (b >> 7) & 0x7f; + int dataL = b & 0x7f; + JO(MidiEvent(t, chn, ME_CONTROLLER, CTRL_HRPN, ctrlH)); + JO(MidiEvent(t+1, chn, ME_CONTROLLER, CTRL_LRPN, ctrlL)); + JO(MidiEvent(t+2, chn, ME_CONTROLLER, CTRL_HDATA, dataH)); + JO(MidiEvent(t+3, chn, ME_CONTROLLER, CTRL_LDATA, dataL)); + } + else if (a < CTRL_NONE_OFFSET) { // NRPN14 Controller + int ctrlH = (a >> 8) & 0x7f; + int ctrlL = a & 0x7f; + int dataH = (b >> 7) & 0x7f; + int dataL = b & 0x7f; + JO(MidiEvent(t, chn, ME_CONTROLLER, CTRL_HNRPN, ctrlH)); + JO(MidiEvent(t+1, chn, ME_CONTROLLER, CTRL_LNRPN, ctrlL)); + JO(MidiEvent(t+2, chn, ME_CONTROLLER, CTRL_HDATA, dataH)); + JO(MidiEvent(t+3, chn, ME_CONTROLLER, CTRL_LDATA, dataL)); + } + else { + printf("putEvent: unknown controller type 0x%x\n", a); + } + } + else { + JO(ev); + } + } +#undef JO + +//--------------------------------------------------------- +// setInstrument +//--------------------------------------------------------- + +void MidiOutPort::setInstrument(MidiInstrument* i) + { + _instrument = i; + emit instrumentChanged(); + } + +//------------------------------------------------------------------- +// process +// Collect all midi events for the current process cycle and put +// into _schedEvents queue. For note on events create the proper +// note off events. The note off events maybe played after the +// current process cycle. +// From _schedEvents queue copy all events for the current cycle +// to all output routes. +//------------------------------------------------------------------- + +void MidiOutPort::processMidi(const SeqTime* t) + { + if (track->mute()) + return; + + MidiEventList el; + MidiOut::processMidi(el, t); + + pipeline()->apply(t->curTickPos, t->nextTickPos, &el, &_schedEvents); + + // + // route events to destination + // + + int portVelo = 0; + unsigned endFrame = t->lastFrameTime + segmentSize; + iMidiEvent i = _schedEvents.begin(); + + for (; i != _schedEvents.end(); ++i) { + if (i->time() >= endFrame) + break; + routeEvent(*i); + if (i->type() == ME_NOTEON) + portVelo += i->dataB(); + } + _schedEvents.erase(_schedEvents.begin(), i); + addMidiMeter(portVelo); + } + diff --git a/attic/muse_qt4_evolution/muse/midioutport.h b/attic/muse_qt4_evolution/muse/midioutport.h new file mode 100644 index 00000000..31529349 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midioutport.h @@ -0,0 +1,70 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MIDIOUTPORT_H__ +#define __MIDIOUTPORT_H__ + +#include "miditrackbase.h" +#include "midiout.h" + +struct SeqTime; + +//--------------------------------------------------------- +// MidiOutPort +//--------------------------------------------------------- + +class MidiOutPort : public MidiTrackBase, public MidiOut { + Q_OBJECT + + MidiInstrument* _instrument; + void routeEvent(const MidiEvent&); + void queueAlsaEvent(const MidiEvent& event); + void queueJackEvent(const MidiEvent& event); + + signals: + void instrumentChanged(); + + public: + MidiOutPort(); + ~MidiOutPort(); + virtual TrackType type() const { return MIDI_OUT; } + + virtual void setName(const QString& s); + virtual void write(Xml&) const; + virtual void read(QDomNode); + virtual bool isMute() const { return _mute; } + virtual Part* newPart(Part*, bool) { return 0; } + + virtual MidiInstrument* instrument() { return _instrument; } + virtual MidiOut* midiOut() { return this; } + void setInstrument(MidiInstrument* i); + + bool guiVisible() const; + bool hasGui() const; + + virtual void processMidi(const SeqTime*); + }; + +typedef QList MidiOutPortList; +typedef MidiOutPortList::iterator iMidiOutPort; +typedef MidiOutPortList::const_iterator ciMidiOutPort; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/midiplugin.cpp b/attic/muse_qt4_evolution/muse/midiplugin.cpp new file mode 100644 index 00000000..1d13828d --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiplugin.cpp @@ -0,0 +1,625 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include + +#include "al/al.h" +#include "al/xml.h" +#include "al/tempo.h" +#include "al/sig.h" +#include "midiplugin.h" +#include "ctrl.h" +#include "midiplugins/libmidiplugin/mempi.h" +#include "audio.h" +#include "gconfig.h" + +MidiPluginList midiPlugins; + +MempiHost mempiHost; + +//--------------------------------------------------------- +// division +//--------------------------------------------------------- + +int MempiHost::division() const + { + return config.division; + } + +//--------------------------------------------------------- +// tempo +//--------------------------------------------------------- + +int MempiHost::tempo(unsigned tick) const + { + return AL::tempomap.tempo(tick); + } + +//--------------------------------------------------------- +// tick2frame +//--------------------------------------------------------- + +unsigned MempiHost::tick2frame(unsigned tick) const + { + return AL::tempomap.tick2frame(tick); + } + +//--------------------------------------------------------- +// frame2tick +//--------------------------------------------------------- + +unsigned MempiHost::frame2tick(unsigned frame) const + { + return AL::tempomap.frame2tick(frame); + } + +//--------------------------------------------------------- +// bar +//--------------------------------------------------------- + +void MempiHost::bar(int t, int* bar, int* beat, unsigned* tick) const + { + AL::sigmap.tickValues(t, bar, beat, tick); + } + +//--------------------------------------------------------- +// bar2tick +//--------------------------------------------------------- + +unsigned MempiHost::bar2tick(int bar, int beat, int tick) const + { + return AL::sigmap.bar2tick(bar, beat, tick); + } + +//--------------------------------------------------------- +// MidiPlugin +//--------------------------------------------------------- + +MidiPlugin::MidiPlugin(const QFileInfo* f, const MEMPI_Function mf, + const MEMPI* d) : fi(*f) + { + mempi = mf; + plugin = d; + _instances = 0; + } + +//--------------------------------------------------------- +// instantiate +//--------------------------------------------------------- + +MidiPluginI* MidiPlugin::instantiate(MidiTrackBase* t) + { + if (plugin == 0) { + printf("initMidiPluginInstance: zero plugin\n"); + return 0; + } + ++_instances; + QString inst("-" + QString::number(_instances)); + QString s = name() + inst; + + Mempi* m = plugin->instantiate(s.toLatin1().data(), &mempiHost); + if (m->init()) { + delete m; + return 0; + } + MidiPluginI* mp = new MidiPluginI(this, t, m); + return mp; + } + +bool MidiPlugin::instantiate(MidiPluginI* mp) + { + if (plugin == 0) { + printf("initMidiPluginInstance: zero plugin\n"); + return 0; + } + ++_instances; + QString inst("-" + QString::number(_instances)); + QString s = name() + inst; + + Mempi* m = plugin->instantiate(s.toLatin1().data(), &mempiHost); + if (m->init()) { + delete m; + return true; + } + mp->setMempi(m); + return false; + } + +//--------------------------------------------------------- +// MidiPluginI +//--------------------------------------------------------- + +MidiPluginI::MidiPluginI(MidiPlugin* p, MidiTrackBase* t, Mempi* m) + { + _track = t; + _plugin = p; + mempi = m; + _on = true; + } + +//--------------------------------------------------------- +// MidiPluginI +//--------------------------------------------------------- + +MidiPluginI::MidiPluginI(MidiTrackBase* t) + { + _track = t; + _plugin = 0; + mempi = 0; + _on = true; + } + +//--------------------------------------------------------- +// MidiPluginI +//--------------------------------------------------------- + +MidiPluginI::~MidiPluginI() + { + if (mempi) + delete mempi; + } + +//--------------------------------------------------------- +// loadMidiPlugin +//--------------------------------------------------------- + +static void loadMidiPlugin(QFileInfo* fi) + { + if (debugMsg) + printf(" load midi plugin <%s>\n", fi->filePath().toAscii().data()); + void* handle = dlopen(fi->filePath().toLocal8Bit().data(), RTLD_NOW); + if (handle == 0) { + fprintf(stderr, "loadMidiPlugin::dlopen(%s) failed: %s\n", + fi->filePath().toLatin1().data(), dlerror()); + return; + } + MEMPI_Function mempi = (MEMPI_Function)dlsym(handle, "mempi_descriptor"); + + if (!mempi) { + const char *txt = dlerror(); + if (txt) { + fprintf(stderr, + "Unable to find mempi_descriptor() function in plugin " + "library file \"%s\": %s.\n" + "Are you sure this is a MEMPI plugin file?\n", + fi->filePath().toLatin1().data(), + txt); + return; + } + } + const MEMPI* descr = mempi(); + + if (descr == 0) { + fprintf(stderr, "Mempi::instantiate: no MEMPI descr found\n"); + return; + } + if (descr->majorMempiVersion != MEMPI_MAJOR_VERSION) { + fprintf(stderr, "Mempi::instantiate: bad MEMPI version %d, expected %d\n", + descr->majorMempiVersion, MEMPI_MAJOR_VERSION); + return; + } + midiPlugins.push_back(new MidiPlugin(fi, mempi, descr)); + } + +//--------------------------------------------------------- +// loadMidiPluginDir +//--------------------------------------------------------- + +static void loadMidiPluginDir(const QString& s) + { + if (debugMsg) + printf("scan midi plugin dir <%s>\n", s.toLatin1().data()); +#ifdef __APPLE__ + QDir pluginDir(s, QString("*.dylib"), 0, QDir::Files); +#else + QDir pluginDir(s, QString("*.so"), 0, QDir::Files); +#endif + if (pluginDir.exists()) { + QFileInfoList list = pluginDir.entryInfoList(); + for (int i = 0; i < list.size(); ++i) { + QFileInfo fi = list.at(i); + loadMidiPlugin(&fi); + } + } + } + +//--------------------------------------------------------- +// initMidiPlugins +// search for midi MEPI plugins +//--------------------------------------------------------- + +void initMidiPlugins() + { + loadMidiPluginDir(museGlobalLib + QString("/midiplugins")); + } + +//--------------------------------------------------------- +// find +//--------------------------------------------------------- + +MidiPlugin* MidiPluginList::find(const QString& /*file*/, const QString& name) + { + for (iMidiPlugin i = begin(); i != end(); ++i) { + if (name == (*i)->name()) + return *i; + } + printf("MidiPlugin <%s> not found\n", name.toLatin1().data()); + return 0; + } + +//--------------------------------------------------------- +// Pipeline +//--------------------------------------------------------- + +MidiPipeline::MidiPipeline() + : QList() + { + } + +//--------------------------------------------------------- +// isOn +//--------------------------------------------------------- + +bool MidiPipeline::isOn(int idx) const + { + MidiPluginI* p = (*this)[idx]; + if (p) + return p->on(); + return false; + } + +//--------------------------------------------------------- +// setOn +//--------------------------------------------------------- + +void MidiPipeline::setOn(int idx, bool flag) + { + MidiPluginI* p = (*this)[idx]; + if (p) { + p->setOn(flag); + } + } + +//--------------------------------------------------------- +// name +//--------------------------------------------------------- + +QString MidiPipeline::name(int idx) const + { + MidiPluginI* p = (*this)[idx]; + if (p) + return p->name(); + return QString("empty"); + } + +#if 0 +//--------------------------------------------------------- +// empty +//--------------------------------------------------------- + +bool MidiPipeline::empty(int idx) const + { + MidiPluginI* p = (*this)[idx]; + return p == 0; + } +#endif + +//--------------------------------------------------------- +// move +//--------------------------------------------------------- + +void MidiPipeline::move(int idx, bool up) + { + MidiPluginI* p1 = (*this)[idx]; + if (up) { + (*this)[idx] = (*this)[idx-1]; + (*this)[idx-1] = p1; + } + else { + (*this)[idx] = (*this)[idx+1]; + (*this)[idx+1] = p1; + } + } + +//--------------------------------------------------------- +// showGui +//--------------------------------------------------------- + +void MidiPipeline::showGui(int idx, bool flag) + { + MidiPluginI* p = (*this)[idx]; + if (p) + p->showGui(flag); + } + +//--------------------------------------------------------- +// guiVisible +//--------------------------------------------------------- + +bool MidiPipeline::guiVisible(int idx) const + { + MidiPluginI* p = (*this)[idx]; + if (p) + return p->guiVisible(); + return false; + } + +//--------------------------------------------------------- +// hasGui +//--------------------------------------------------------- + +bool MidiPipeline::hasGui(int idx) const + { + MidiPluginI* p = (*this)[idx]; + if (p) + return p->hasGui(); + return false; + } + +//--------------------------------------------------------- +// apply +//--------------------------------------------------------- + +void MidiPipeline::apply(unsigned from, unsigned to, MidiEventList* il, MidiEventList* ool) + { + MidiEventList oList; + MidiEventList* ol = &oList; + + bool swap = true; + for (iMidiPluginI i = begin(); i != end(); ++i) { + MidiPluginI* p = *i; + if (p == 0 || !p->on()) + continue; + if (swap) { + ol->clear(); + p->apply(from, to, il, ol); + } + else { + il->clear(); + p->apply(from, to, ol, il); + } + swap = !swap; + } + MidiEventList* l = swap ? il : ol; + for (iMidiEvent i = l->begin(); i != l->end(); ++i) + ool->insert(*i); + } + +//--------------------------------------------------------- +// apply +//--------------------------------------------------------- + +void MidiPluginI::apply(unsigned from, unsigned to, MidiEventList* il, MidiEventList* ol) + { + mempi->process(from, to, il, ol); + } + +//--------------------------------------------------------- +// saveConfiguration +//--------------------------------------------------------- + +void MidiPluginI::writeConfiguration(Xml& xml) + { + xml.stag(QString("midiPlugin file=\"%1\" name=\"%2\"") + .arg(_plugin->lib()).arg(_plugin->name())); + if (_on == false) + xml.tag("on", _on); + if (mempi->hasGui()) { + xml.tag("guiVisible", mempi->guiVisible()); + int x, y, w, h; + w = 0; + h = 0; + mempi->getGeometry(&x, &y, &w, &h); + if (h || w) + xml.tag("geometry", QRect(x, y, w, h)); + } + + //--------------------------------------------- + // dump current state of plugin + //--------------------------------------------- + + int len = 0; + const unsigned char* p; + mempi->getInitData(&len, &p); + if (len) { + xml.stag(QString("init len=\"%1\"").arg(len)); + xml.dump(len, p); + xml.etag("init"); + } + xml.etag("midiPlugin"); + } + +//--------------------------------------------------------- +// readConfiguration +// return true on error +//--------------------------------------------------------- + +bool MidiPluginI::readConfiguration(QDomNode node) + { + QDomElement e = node.toElement(); + QString file = e.attribute("file"); + QString label = e.attribute("name"); + + if (_plugin == 0) { + _plugin = midiPlugins.find(file, label); + if (_plugin == 0) + return true; + if (_plugin->instantiate(this)) + return true; + } + node = node.firstChild(); + while (!node.isNull()) { + e = node.toElement(); + int i = e.text().toInt(); + QString tag(e.tagName()); + if (tag == "on") { + bool flag = i; + _on = flag; + } + else if (tag == "guiVisible") { + showGui(i); + } + else if (tag == "geometry") { + QRect r(AL::readGeometry(node)); + mempi->setGeometry(r.x(), r.y(), r.width(), r.height()); + } + else if (tag == "init") { + int len = e.attribute("len","0").toInt(); + if (len) { + const char* s = e.text().toLatin1().data(); + unsigned char data[len]; + unsigned char* d = data; + int numberBase = 16; + for (int i = 0; i < len; ++i) { + char* endp; + *d++ = strtol(s, &endp, numberBase); + s = endp; + if (s == 0) + break; + } + mempi->setInitData(len, data); + } + } + else + printf("MusE:MidiPluginI: unknown tag %s\n", e.tagName().toLatin1().data()); + node = node.nextSibling(); + } + return false; + } + +//--------------------------------------------------------- +// showGui +//--------------------------------------------------------- + +void MidiPluginI::showGui() + { + mempi->showGui(!mempi->guiVisible()); + } + +void MidiPluginI::showGui(bool flag) + { + mempi->showGui(flag); + } + +//--------------------------------------------------------- +// guiVisible +//--------------------------------------------------------- + +bool MidiPluginI::guiVisible() const + { + return mempi->guiVisible(); + } + +//--------------------------------------------------------- +// MidiPluginDialog +//--------------------------------------------------------- + +MidiPluginDialog::MidiPluginDialog(QWidget* parent) + : QDialog(parent) + { + resize(QSize(550, 300)); + setModal(true); + setWindowTitle(tr("MusE: select midi plugin")); + QVBoxLayout* layout = new QVBoxLayout(this); + + pList = new QTreeWidget(this); + pList->setIndentation(0); + pList->setColumnCount(4); + pList->setSortingEnabled(true); + pList->setSelectionBehavior(QAbstractItemView::SelectRows); + pList->setSelectionMode(QAbstractItemView::SingleSelection); + pList->setAlternatingRowColors(true); + + QStringList headerLabels; + + headerLabels << tr("File") << tr("Name") << tr("Version") << tr("Description"); + pList->header()->resizeSection(0, 100); + pList->header()->resizeSection(1, 120); + pList->header()->resizeSection(2, 70); + pList->header()->setResizeMode(3, QHeaderView::Stretch); + pList->setHeaderLabels(headerLabels); + + fillPlugs(); + + layout->addWidget(pList); + + //--------------------------------------------------- + // Ok/Cancel Buttons + //--------------------------------------------------- + + QBoxLayout* w5 = new QHBoxLayout; + layout->addLayout(w5); + + QPushButton* okB = new QPushButton(tr("Ok")); + QPushButton* cancelB = new QPushButton(tr("Cancel")); + okB->setFixedWidth(80); + cancelB->setFixedWidth(80); + okB->setDefault(true); + w5->addStretch(100); + w5->addWidget(okB); + w5->addWidget(cancelB); + + connect(pList, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), SLOT(accept())); + connect(cancelB, SIGNAL(clicked()), SLOT(reject())); + connect(okB, SIGNAL(clicked()), SLOT(accept())); + } + +//--------------------------------------------------------- +// getPlugin +//--------------------------------------------------------- + +MidiPlugin* MidiPluginDialog::getPlugin(QWidget* parent) + { + MidiPluginDialog* dialog = new MidiPluginDialog(parent); + if (dialog->exec()) + return dialog->value(); + return 0; + } + +//--------------------------------------------------------- +// value +//--------------------------------------------------------- + +MidiPlugin* MidiPluginDialog::value() + { + QTreeWidgetItem* item = pList->selectedItems().at(0); + if (item) + return midiPlugins.find(item->text(0), item->text(1)); + return 0; + } + +//--------------------------------------------------------- +// fillPlugs +//--------------------------------------------------------- + +void MidiPluginDialog::fillPlugs() + { + pList->clear(); + for (iMidiPlugin i = midiPlugins.begin(); i != midiPlugins.end(); ++i) { + if ((*i)->type() != MEMPI_FILTER) + continue; + QTreeWidgetItem* item = new QTreeWidgetItem; + item->setText(0, (*i)->lib()); + item->setText(1, (*i)->name()); + item->setText(2, (*i)->version()); + item->setText(3, (*i)->description()); + pList->addTopLevelItem(item); + } + } diff --git a/attic/muse_qt4_evolution/muse/midiplugin.h b/attic/muse_qt4_evolution/muse/midiplugin.h new file mode 100644 index 00000000..87e91953 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiplugin.h @@ -0,0 +1,168 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MIDIPLUGIN_H__ +#define __MIDIPLUGIN_H__ + +#include "globals.h" +#include "midiplugins/libmidiplugin/mempi.h" + +namespace AL { + class Xml; + }; +using AL::Xml; + +class MidiPluginIF; +class MidiPluginGui; +class MidiPluginI; +class MidiTrackBase; +class Ctrl; +class MidiEventList; +class MidiTrackBase; + +typedef const MEMPI* (*MEMPI_Function)(); + +//--------------------------------------------------------- +// MidiPlugin +//--------------------------------------------------------- + +class MidiPlugin { + MEMPI_Function mempi; + const MEMPI* plugin; + + protected: + int _instances; + QFileInfo fi; + + public: + MidiPlugin(const QFileInfo* f, const MEMPI_Function, const MEMPI* d); + virtual ~MidiPlugin() {} + + int instances() const { return _instances; } + virtual void incInstances(int val) { _instances += val; } + + QString lib() const { return fi.baseName(); } + QString path() const { return fi.absolutePath(); } + QString name() const { return QString(plugin->name); } + QString description() const { return QString(plugin->description); } + QString version() const { return QString(plugin->version); } + MempiType type() const { return plugin->type; } + MidiPluginI* instantiate(MidiTrackBase*); + bool instantiate(MidiPluginI*); + }; + +//--------------------------------------------------------- +// MidiPluginList +//--------------------------------------------------------- + +typedef QList::iterator iMidiPlugin; + +class MidiPluginList : public QList { + public: + MidiPlugin* find(const QString&, const QString&); + MidiPluginList() {} + }; + +//--------------------------------------------------------- +// MidiPluginI +// plugin instance +//--------------------------------------------------------- + +class MidiPluginI { + MidiPlugin* _plugin; + Mempi* mempi; + + MidiTrackBase* _track; + bool _on; + + public: + MidiPluginI(MidiPlugin*, MidiTrackBase*, Mempi*); + MidiPluginI(MidiTrackBase*); + ~MidiPluginI(); + + void setMempi(Mempi* m) { mempi = m; } + + MidiPlugin* plugin() const { return _plugin; } + bool on() const { return _on; } + void setOn(bool val) { _on = val; } + void apply(unsigned, unsigned, MidiEventList*, MidiEventList*); + + QString name() const { return QString(mempi->name()); } + QString lib() const { return _plugin->lib(); } + MidiTrackBase* track() const { return _track; } + void getGeometry(int*x, int*y, int* w, int* h) const { mempi->getGeometry(x, y, w, h); } + void setGeometry(int x, int y, int w, int h) { mempi->setGeometry(x, y, w, h); } + void writeConfiguration(Xml& xml); + bool readConfiguration(QDomNode); + + void showGui(); + void showGui(bool); + bool hasGui() const { return mempi->hasGui(); } + bool guiVisible() const; + void getInitData(int* len, const unsigned char** p) { mempi->getInitData(len, p); } + void setInitData(int len, const unsigned char* p) { mempi->setInitData(len, p); } + }; + +//--------------------------------------------------------- +// Pipeline +// chain of connected efx inserts +//--------------------------------------------------------- + +class MidiPipeline : public QList { + public: + MidiPipeline(); + bool isOn(int idx) const; + void setOn(int, bool); + QString name(int idx) const; + void showGui(int, bool); + bool guiVisible(int) const; + bool hasGui(int) const; + void apply(unsigned, unsigned, MidiEventList*, MidiEventList*); + void move(int idx, bool up); + }; + +typedef MidiPipeline::iterator iMidiPluginI; +typedef MidiPipeline::const_iterator ciMidiPluginI; + +//--------------------------------------------------------- +// MidiPluginDialog +//--------------------------------------------------------- + +class MidiPluginDialog : public QDialog { + QTreeWidget* pList; + + Q_OBJECT + + public: + MidiPluginDialog(QWidget* parent=0); + static MidiPlugin* getPlugin(QWidget* parent); + MidiPlugin* value(); + + public slots: + void fillPlugs(); + }; + +static const int MidiPipelineDepth = 4; + +extern void initMidiPlugins(); +extern MidiPluginList midiPlugins; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/midiportinfo.ui b/attic/muse_qt4_evolution/muse/midiportinfo.ui new file mode 100644 index 00000000..ad8ae201 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midiportinfo.ui @@ -0,0 +1,92 @@ + + MidiPortInfoBase + + + + 0 + 0 + 142 + 96 + + + + + 0 + 0 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 16777215 + 24 + + + + Midi Instrument + + + + + + + + 16777215 + 24 + + + + 127 + + + 127 + + + + + + + + 16777215 + 24 + + + + Device-Id: + + + + + + + + diff --git a/attic/muse_qt4_evolution/muse/midirack.cpp b/attic/muse_qt4_evolution/muse/midirack.cpp new file mode 100644 index 00000000..0b054729 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midirack.cpp @@ -0,0 +1,208 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "icons.h" +#include "gconfig.h" +#include "midirack.h" +#include "track.h" +#include "song.h" +#include "midiplugin.h" +#include "audio.h" +#include "muse.h" +#include "gui.h" + +//--------------------------------------------------------- +// MidiRack +//--------------------------------------------------------- + +MidiRack::MidiRack(QWidget* parent, MidiTrackBase* t) + : QListWidget(parent) + { + setUniformItemSizes(true); + setAlternatingRowColors(true); + setAttribute(Qt::WA_DeleteOnClose, true); + verticalScrollBar()->setStyle(smallStyle); + track = t; +// setFont(config.fonts[1]); + + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + + setSelectionMode(QAbstractItemView::SingleSelection); + songChanged(SC_RACK); // force update + connect(this, SIGNAL(itemDoubleClicked(QListWidgetItem*)), + this, SLOT(doubleClicked(QListWidgetItem*))); + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + setToolTip(tr("midi effect rack")); + } + +//--------------------------------------------------------- +// sizeHint +//--------------------------------------------------------- + +QSize MidiRack::sizeHint() const + { + QFontMetrics fm(font()); + int h = fm.lineSpacing() * MidiPipelineDepth + 1; + return QSize(STRIP_WIDTH, h); + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void MidiRack::songChanged(int typ) + { + if (typ & (SC_ROUTE | SC_RACK)) { + clear(); + foreach(MidiPluginI* plugin, *(track->pipeline())) { + QListWidgetItem* item = new QListWidgetItem; + item->setText(plugin->name()); + // tooltip should only be set if name does not fit + // (is elided) + item->setToolTip(plugin->name()); + item->setBackgroundColor(plugin->on() ? Qt::white : Qt::gray); + addItem(item); + } + } + } + +//--------------------------------------------------------- +// contextMenuEvent +//--------------------------------------------------------- + +void MidiRack::contextMenuEvent(QContextMenuEvent* ev) + { + QPoint pt(ev->pos()); + QListWidgetItem* item = itemAt(pt); + MidiPipeline* pipe = track->pipeline(); + + QMenu* menu = new QMenu; + QAction* upAction = menu->addAction(QIcon(*upIcon), tr("move up")); + QAction* downAction = menu->addAction(QIcon(*downIcon), tr("move down")); + QAction* removeAction = menu->addAction(tr("remove")); + QAction* bypassAction = menu->addAction(tr("bypass")); + QAction* showAction = menu->addAction(tr("show gui")); + QAction* newAction = menu->addAction(tr("new")); + bypassAction->setCheckable(true); + showAction->setCheckable(true); + + int idx = -1; + if (item == 0) { + upAction->setEnabled(false); + downAction->setEnabled(false); + removeAction->setEnabled(false); + bypassAction->setEnabled(false); + showAction->setEnabled(false); + } + else { + idx = row(item); + upAction->setEnabled(idx != 0); + downAction->setEnabled(idx < (pipe->size() - 1)); + showAction->setEnabled(pipe->hasGui(idx)); + bypassAction->setEnabled(true); + bypassAction->setChecked(!pipe->isOn(idx)); + showAction->setChecked(pipe->guiVisible(idx)); + } + + QAction* sel = menu->exec(mapToGlobal(pt), newAction); + delete menu; + if (sel == 0) + return; + + if (sel == newAction) { + selectNew(); + return; + } + if (sel == removeAction) { + audio->msgAddMidiPlugin(track, idx, 0); + } + else if (sel == bypassAction) { + bool flag = !pipe->isOn(idx); + pipe->setOn(idx, flag); + } + else if (sel == showAction) { + bool flag = !pipe->guiVisible(idx); + pipe->showGui(idx, flag); + } + else if (sel == upAction) { + if (idx > 0) { + setCurrentRow(idx-1); + pipe->move(idx, true); + } + } + else if (sel == downAction) { + if (idx < (pipe->size() - 1)) { + setCurrentRow(idx+1); + pipe->move(idx, false); + } + } + song->update(SC_RACK); + } + +//--------------------------------------------------------- +// doubleClicked +// toggle gui +//--------------------------------------------------------- + +void MidiRack::doubleClicked(QListWidgetItem* it) + { + if (track == 0) + return; + int idx = row(it); + MidiPipeline* pipe = track->pipeline(); + bool flag = !pipe->guiVisible(idx); + pipe->showGui(idx, flag); + song->update(SC_RACK); + } + +//--------------------------------------------------------- +// mouseDoubleClickEvent +//--------------------------------------------------------- + +void MidiRack::mouseDoubleClickEvent(QMouseEvent* event) + { + QListWidgetItem* it = itemAt(event->pos()); + if (it || (track == 0)) { + QListWidget::mouseDoubleClickEvent(event); + return; + } + selectNew(); + } + +//--------------------------------------------------------- +// selectNew +//--------------------------------------------------------- + +void MidiRack::selectNew() + { + MidiPlugin* plugin = MidiPluginDialog::getPlugin(this); + if (plugin) { + MidiPluginI* plugi = plugin->instantiate(track); + if (plugi == 0) { + printf("cannot instantiate plugin <%s>\n", + plugin->name().toLatin1().data()); + delete plugi; + } + else + audio->msgAddMidiPlugin(track, track->pipeline()->size(), plugi); + song->update(SC_RACK); + } + } + diff --git a/attic/muse_qt4_evolution/muse/midirack.h b/attic/muse_qt4_evolution/muse/midirack.h new file mode 100644 index 00000000..7f83ca42 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midirack.h @@ -0,0 +1,48 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MIDIRACK_H__ +#define __MIDIRACK_H__ + +class MidiTrackBase; + +//--------------------------------------------------------- +// MidiRack +//--------------------------------------------------------- + +class MidiRack : public QListWidget { + MidiTrackBase* track; + Q_OBJECT + + virtual void contextMenuEvent(QContextMenuEvent*); + virtual void mouseDoubleClickEvent(QMouseEvent*); + void selectNew(); + + private slots: + void doubleClicked(QListWidgetItem*); + void songChanged(int); + + public: + MidiRack(QWidget*, MidiTrackBase* t); + QSize sizeHint() const; + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/midirc.cpp b/attic/muse_qt4_evolution/muse/midirc.cpp new file mode 100644 index 00000000..14b69d55 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midirc.cpp @@ -0,0 +1,180 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "midirc.h" +#include "song.h" +#include "midi.h" + +MidiRCList midiRCList; + +//--------------------------------------------------------- +// isActive +//--------------------------------------------------------- + +bool MidiRCList::isActive(int action) + { + for (iMidiRC i = begin(); i != end(); ++i) { + if (i->action == action) + return true; + } + return false; + } + +//--------------------------------------------------------- +// setAction +//--------------------------------------------------------- + +void MidiRCList::setAction(const MidiEvent& e, int action) + { + // + // TODO: check for already used events + // + for (iMidiRC i = begin(); i != end(); ++i) { + if (i->action == action) { +// printf("replace action %d: ", action); +// i->event.dump(); + i->event = e; + return; + } + } + push_back(MidiRC(e, action)); +// printf("add action %d: ", action); + e.dump(); + } + +//--------------------------------------------------------- +// emitAction +//--------------------------------------------------------- + +void MidiRCList::emitAction(int action) const + { +// printf("emit action %d\n", action); + switch(action) { + case RC_STOP: + song->setStop(true); + break; + case RC_PLAY: + song->setPlay(true); + break; + case RC_RECORD: + song->setRecord(true); + break; + case RC_GOTO_LEFT_MARK: + song->setPos(0, song->lpos(), true, true, true); + break; + } + } + +//--------------------------------------------------------- +// doAction +// emit action associated with event e +// return true if action found +//--------------------------------------------------------- + +bool MidiRCList::doAction(const MidiEvent& e) + { +// printf("MidiRCList::doAction "); +// e.dump(); + for (iMidiRC i = begin(); i != end(); ++i) { + if ((i->event.type()& 0xf0) == (e.type() & 0xf0)) { + // + // for note on events only compare pitch, not velocity + // ignore note off events (note on with velicity zero + // + if ((e.type() == ME_NOTEON) + && i->event.dataA() == e.dataA() + && e.dataB() != 0) { + emitAction(i->action); + return true; + } + // + // compare controller and controller value + // TODO: maybe we need a special option to + // ignore the controller value + // + if ((e.type() == ME_CONTROLLER) + && i->event.dataA() == e.dataA() + && i->event.dataB() == e.dataB()) { + emitAction(i->action); + return true; + } + } + } + return false; + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void MidiRCList::read(QDomNode node) + { + int action = 0; + MidiEvent event; + for (node = node.firstChild(); !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + if (e.isNull()) + continue; + if (e.tagName() == "action") { + action = e.attribute("id", "0").toInt(); + for (QDomNode n = node.firstChild(); !n.isNull(); n = n.nextSibling()) { + QDomElement e1 = node.toElement(); + if (e1.isNull()) + continue; + if (e1.tagName() == "noteOn") { + event.setType(ME_NOTEON); + event.setA(e1.attribute("pitch","0").toInt()); + } + else if (e1.tagName() == "controller") { + event.setType(ME_CONTROLLER); + event.setA(e1.attribute("no","0").toInt()); + event.setB(e1.attribute("val","0").toInt()); + } + else + printf("MusE:midiRC:action: unknown tag %s\n", e1.tagName().toLatin1().data()); + } + setAction(event, action); + } + else + printf("MusE:midiRC: unknown tag %s\n", e.tagName().toLatin1().data()); + } + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void MidiRCList::write(Xml& xml) + { + xml.stag("midiRC"); + for (iMidiRC i = begin(); i != end(); ++i) { + xml.stag(QString("action id=\"%1\"").arg(i->action)); + if (i->event.type() == ME_NOTEON) + xml.stag(QString("noteOn pitch=\"%1\"").arg(i->event.dataA())); + else if (i->event.type() == ME_CONTROLLER) + xml.stag(QString("controller no=\"%1\" val=\"%2\"") + .arg(i->event.dataA()).arg(i->event.dataB())); + else + printf("remote event type %d not supported\n", i->event.type()); + xml.etag("action"); + } + xml.etag("midiRC"); + } + diff --git a/attic/muse_qt4_evolution/muse/midirc.h b/attic/muse_qt4_evolution/muse/midirc.h new file mode 100644 index 00000000..670fca63 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midirc.h @@ -0,0 +1,65 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MIDIRC_H__ +#define __MIDIRC_H__ + +#include "event.h" +#include "midievent.h" + +enum { + RC_STOP, RC_PLAY, RC_RECORD, RC_GOTO_LEFT_MARK + }; + +//--------------------------------------------------------- +// MidiRC +//--------------------------------------------------------- + +struct MidiRC { + MidiEvent event; + int action; + + MidiRC(const MidiEvent& e, int a) + : event(e), action(a) + { + } + }; + +//--------------------------------------------------------- +// MidiRCList +//--------------------------------------------------------- + +class MidiRCList : public std::list { + + void emitAction(int) const; + + public: + MidiRCList() {} + void setAction(const MidiEvent& e, int action); + bool isActive(int action); + bool doAction(const MidiEvent&); + void read(QDomNode); + void write(Xml&); + }; + +typedef MidiRCList::iterator iMidiRC; + +extern MidiRCList midiRCList; +#endif diff --git a/attic/muse_qt4_evolution/muse/midisynti.cpp b/attic/muse_qt4_evolution/muse/midisynti.cpp new file mode 100644 index 00000000..b53693af --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midisynti.cpp @@ -0,0 +1,225 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "song.h" +#include "midi.h" +#include "midisynti.h" +#include "midiplugin.h" +#include "midiplugins/libmidiplugin/mempi.h" +#include "al/tempo.h" + +//--------------------------------------------------------- +// MidiSynti +//--------------------------------------------------------- + +MidiSynti::MidiSynti() + : MidiTrackBase() + { + _synti = 0; + init(); + } + +MidiSynti::~MidiSynti() + { + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +void MidiSynti::init() + { + } + +//--------------------------------------------------------- +// hasGui +//--------------------------------------------------------- + +bool MidiSynti::hasGui() const + { + return _synti->hasGui(); + } + +//--------------------------------------------------------- +// hasGui +//--------------------------------------------------------- + +void MidiSynti::showGui(bool val) + { + return _synti->showGui(val); + } + +//--------------------------------------------------------- +// guiVisible +//--------------------------------------------------------- + +bool MidiSynti::guiVisible() const + { + return _synti->guiVisible(); + } + +//--------------------------------------------------------- +// initInstance +// return true on error +//--------------------------------------------------------- + +bool MidiSynti::initInstance(MidiPlugin* plugin) + { + _synti = plugin->instantiate(this); + return _synti == 0; + } + +//--------------------------------------------------------- +// MidiSynti::write +//--------------------------------------------------------- + +void MidiSynti::write(Xml& xml) const + { + xml.stag("MidiSynti"); + MidiTrackBase::writeProperties(xml); + xml.tag("class", _synti->plugin()->name()); + if (_synti->hasGui()) { + xml.tag("guiVisible", _synti->guiVisible()); + int x, y, w, h; + w = 0; + h = 0; + _synti->getGeometry(&x, &y, &w, &h); + if (h || w) + xml.tag("geometry", QRect(x, y, w, h)); + } + //--------------------------------------------- + // dump current state of plugin + //--------------------------------------------- + + int len = 0; + const unsigned char* p; + _synti->getInitData(&len, &p); + if (len) { + xml.stag(QString("init len=\"%1\"").arg(len)); + xml.dump(len, p); + xml.etag("init"); + } + xml.etag("MidiSynti"); + } + +//--------------------------------------------------------- +// MidiSynti::read +//--------------------------------------------------------- + +void MidiSynti::read(QDomNode node) + { + bool startGui = false; + QRect r; + QString sclass; + unsigned char* data = 0; + int len = 0; + for (; !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + QString tag(e.tagName()); + if (tag == "class") + sclass = e.text(); + else if (tag == "guiVisible") + startGui = e.text().toInt(); + else if (tag == "geometry") + r = AL::readGeometry(node); + else if (tag == "init") { + len = e.attribute("len", "0").toInt(); + if (len) { + QStringList l = e.text().simplified().split(" ", QString::SkipEmptyParts); + if (len != l.size()) { + printf("error converting init string <%s>\n", e.text().toLatin1().data()); + } + data = new unsigned char[len]; + unsigned char* d = data; + int numberBase = 16; + for (int i = 0; i < l.size(); ++i) { + bool ok; + *d++ = l.at(i).toInt(&ok, numberBase); + if (!ok) + printf("error converting init val <%s>\n", l.at(i).toLatin1().data()); + } + } + } + else if (MidiTrackBase::readProperties(node)) + printf("MusE:MidiSynti: unknown tag %s\n", node.toElement().tagName().toLatin1().data()); + } + iMidiPlugin i; + for (i = midiPlugins.begin(); i != midiPlugins.end(); ++i) { + if ((*i)->type() != MEMPI_GENERATOR) + continue; + if ((*i)->name() == sclass) + break; + } + if (i == midiPlugins.end()) { + fprintf(stderr, "MidiSynti::read: midi plugin not found\n"); + return; + } + MidiPlugin* mp = *i; + if (initInstance(mp)) { + fprintf(stderr, "MidiSynti::read: instantiate failed\n"); + return; + } + if (data) { + _synti->setInitData(len, data); + delete[] data; + } + song->insertTrack0(this, -1); + _synti->showGui(startGui); + _synti->setGeometry(r.x(), r.y(), r.width(), r.height()); + } + +//--------------------------------------------------------- +// getEvents +//--------------------------------------------------------- + +void MidiSynti::getEvents(unsigned from, unsigned to, int, MidiEventList* dst) + { + MidiEventList il; + foreach(const Route& r, *inRoutes()) { + MidiTrackBase* track = (MidiTrackBase*)r.src.track; + if (track->isMute()) + continue; + track->getEvents(from, to, r.src.channel, &il); + } + MidiEventList ol; + _synti->apply(from, to, &il, &ol); + for (iMidiEvent i = ol.begin(); i != ol.end(); ++i) { + MidiEvent ev(*i); + if (ev.type() == ME_NOTEON) { + _meter[0] += ev.dataB()/2; + if (_meter[0] > 127.0f) + _meter[0] = 127.0f; + } + // convert tick-time to sample-time + ev.setTime(AL::tempomap.tick2frame(ev.time())); + dst->insert(ev); + } + } + +bool MidiSynti::isMute() const + { + if (_solo) + return false; + if (song->solo()) + return true; + return _mute; + } + + diff --git a/attic/muse_qt4_evolution/muse/midisynti.h b/attic/muse_qt4_evolution/muse/midisynti.h new file mode 100644 index 00000000..89c77764 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/midisynti.h @@ -0,0 +1,62 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MIDISYNTH_H__ +#define __MIDISYNTH_H__ + +#include "miditrackbase.h" + +//--------------------------------------------------------- +// MidiSynti +//--------------------------------------------------------- + +class MidiSynti : public MidiTrackBase { + Q_OBJECT + + MidiPluginI* _synti; + + public: + MidiSynti(); + virtual ~MidiSynti(); + virtual TrackType type() const { return MIDI_SYNTI; } + + void init(); + + virtual void read(QDomNode); + virtual void write(Xml&) const; + virtual bool isMute() const; + + virtual Part* newPart(Part*, bool) { return 0; } + + bool initInstance(MidiPlugin*); + virtual void getEvents(unsigned from, unsigned to, int channel, MidiEventList* dst); + + bool hasGui() const; + bool guiVisible() const; + void showGui(bool); + }; + + +typedef QList MidiSyntiList; +typedef MidiSyntiList::iterator iMidiSynti; +typedef MidiSyntiList::const_iterator ciMidiSynti; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/miditrack.cpp b/attic/muse_qt4_evolution/muse/miditrack.cpp new file mode 100644 index 00000000..276eeccb --- /dev/null +++ b/attic/muse_qt4_evolution/muse/miditrack.cpp @@ -0,0 +1,716 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "miditrack.h" +#include "event.h" +#include "song.h" +#include "midi.h" +#include "midictrl.h" +#include "audio.h" +#include "part.h" +#include "al/tempo.h" +#include "midiedit/drummap.h" + +//--------------------------------------------------------- +// MidiTrack +//--------------------------------------------------------- + +MidiTrack::MidiTrack() + : MidiTrackBase() + { + _transposition = 0; + _velocity = 0; + _delay = 0; + _len = 100; // percent + _compression = 100; // percent + + initMidiController(); + recordPart = 0; + _drumMap = 0; + _useDrumMap = false; + + // + // create minimal set of managed controllers + // to make midi mixer operational + // + MidiInstrument* mi = genericMidiInstrument; + addMidiController(mi, CTRL_PROGRAM); + addMidiController(mi, CTRL_VOLUME); + addMidiController(mi, CTRL_PANPOT); + addMidiController(mi, CTRL_REVERB_SEND); + addMidiController(mi, CTRL_CHORUS_SEND); + addMidiController(mi, CTRL_VARIATION_SEND); + } + +MidiTrack::~MidiTrack() + { + } + +//--------------------------------------------------------- +// newPart +//--------------------------------------------------------- + +Part* MidiTrack::newPart(Part* p, bool clone) + { + Part* part = new Part(this); + if (p) { + if (clone) + part->clone(p->events()); + else + part->ref(); + part->setName(p->name()); + part->setColorIndex(p->colorIndex()); + + *(AL::PosLen*)part = *(AL::PosLen*)p; + part->setMute(p->mute()); + } + else + part->ref(); + return part; + } + +//--------------------------------------------------------- +// MidiTrack::write +//--------------------------------------------------------- + +void MidiTrack::write(Xml& xml) const + { + xml.stag("miditrack"); + MidiTrackBase::writeProperties(xml); + + xml.tag("transposition", _transposition); + xml.tag("velocity", _velocity); + xml.tag("delay", _delay); + xml.tag("len", _len); + xml.tag("compression", _compression); + xml.tag("useDrumMap", _useDrumMap); + + const PartList* pl = parts(); + for (ciPart p = pl->begin(); p != pl->end(); ++p) + p->second->write(xml); + xml.etag("miditrack"); + } + +//--------------------------------------------------------- +// MidiTrack::read +//--------------------------------------------------------- + +void MidiTrack::read(QDomNode node) + { + for (; !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + QString tag(e.tagName()); + QString s(e.text()); + int i = s.toInt(); + if (tag == "transposition") + _transposition = i; + else if (tag == "velocity") + _velocity = i; + else if (tag == "delay") + _delay = i; + else if (tag == "len") + _len = i; + else if (tag == "compression") + _compression = i; + else if (tag == "part") { + Part* p = newPart(); + p->read(node, true); + parts()->add(p); + } + else if (tag == "locked") + _locked = i; + else if (tag == "useDrumMap") + _useDrumMap = e.text().toInt(); + else if (MidiTrackBase::readProperties(node)) + printf("MusE:MidiTrack: unknown tag %s\n", e.tagName().toLatin1().data()); + } + } + +//--------------------------------------------------------- +// playMidiEvent +//--------------------------------------------------------- + +void MidiTrack::playMidiEvent(MidiEvent* ev) + { + foreach (const Route& r, _outRoutes) { + Track* track = r.dst.track; + ev->setChannel(r.dst.channel); + if (track->type() == MIDI_OUT) + ((MidiOutPort*)track)->playMidiEvent(ev); + else if (track->type() == AUDIO_SOFTSYNTH) + ((SynthI*)track)->playMidiEvent(ev); + } + } + +//--------------------------------------------------------- +// startRecording +// gui context +//--------------------------------------------------------- + +void MidiTrack::startRecording() + { + hbank = 0; + lbank = 0; + datah = 0; + datal = 0; + rpnh = 0; + rpnl = 0; + dataType = 0; + recordedEvents = 0; + partCreated = false; + recordPart = 0; + recordFifo.clear(); + keyDown.clear(); + + AL::Pos start = song->punchin() ? song->lPos() : song->cPos(); + + for (iPart ip = parts()->begin(); ip != parts()->end(); ++ip) { + Part* part = ip->second; + unsigned partStart = part->tick(); + unsigned partEnd = partStart + part->lenTick(); + if (start.tick() >= partStart && start.tick() < partEnd) { + recordPart = part; + } + } + if (recordPart == 0) { + // + // create new part for recording + // + recordPart = new Part(this); + recordPart->ref(); + recordPart->setTrack(this); + int startTick = song->roundDownBar(start.tick()); + int endTick = song->roundUpBar(start.tick()); + recordPart->setTick(startTick); + recordPart->setLenTick(endTick - startTick); + recordPart->setName(name()); + song->addPart(recordPart); + partCreated = true; + } + } + +//--------------------------------------------------------- +// recordBeat +// gui context +// update current recording +//--------------------------------------------------------- + +void MidiTrack::recordBeat() + { + int updateFlags = 0; + unsigned cpos = song->cpos(); + unsigned ptick = recordPart->tick(); + + if (song->punchout()) { + if (song->rPos() >= song->cPos()) { + while (!recordFifo.isEmpty()) + recordFifo.get(); + return; + } + } + QList el; + while (!recordFifo.isEmpty()) { + MidiEvent me(recordFifo.get()); + + unsigned time = me.time(); + if (song->punchin() && time < song->lpos()) + continue; + bool isOff = me.isNoteOff(); + + if (song->punchout() && (time >= song->rpos()) && !isOff) + continue; + + if (!partCreated && song->recMode() == Song::REC_REPLACE) { + // TODO: remove old events + } + + time -= ptick; + if (isOff) { + // + // process note off + // + for (std::list::iterator i = keyDown.begin(); i != keyDown.end(); ++i) { + if (i->pitch() == me.dataA()) { + unsigned tl = time - i->tick(); + if (tl != i->lenTick()) { + i->setLenTick(tl); + updateFlags |= SC_EVENT_MODIFIED; + } + keyDown.erase(i); + break; + } + } + } + else if (me.type() == ME_NOTEON && me.dataB() != 0) { + // + // create Note event on "note on" + // + Event event(Note); + event.setTick(time); + event.setLenTick(1); + event.setPitch(me.dataA()); + event.setVelo(me.dataB()); + keyDown.push_front(event); + el.append(event); + } + else if (me.type() == ME_POLYAFTER) { + Event event(PAfter); + event.setTick(time); + event.setA(me.dataA()); + event.setB(me.dataB()); + } + else if (me.type() == ME_CONTROLLER) { + Event event(Controller); + event.setTick(time + ptick); + switch(me.dataA()) { + case CTRL_HBANK: + hbank = me.dataB(); + break; + + case CTRL_LBANK: + lbank = me.dataB(); + break; + + case CTRL_HDATA: + datah = me.dataB(); + event.setA(dataType | (rpnh << 8) | rpnl); + event.setB(datah); + el.append(event); + break; + + case CTRL_LDATA: + datal = me.dataB(); + if (dataType == CTRL_NRPN_OFFSET) + dataType = CTRL_NRPN14_OFFSET; + else if (dataType == CTRL_RPN_OFFSET) + dataType = CTRL_RPN14_OFFSET; + break; + + case CTRL_HNRPN: + rpnh = me.dataB(); + dataType = CTRL_NRPN_OFFSET; + break; + + case CTRL_LNRPN: + rpnl = me.dataB(); + dataType = CTRL_NRPN_OFFSET; + break; + + case CTRL_HRPN: + rpnh = me.dataB(); + dataType = CTRL_RPN_OFFSET; + break; + + case CTRL_LRPN: + rpnl = me.dataB(); + dataType = CTRL_RPN_OFFSET; + break; + + default: + event.setA(me.dataA()); + event.setB(me.dataB()); + el.append(event); + break; + } + } + else if (me.type() == ME_PROGRAM) { + Event event(Controller); + event.setTick(time + ptick); + event.setA(CTRL_PROGRAM); + event.setB((hbank << 16) | (lbank << 8) | me.dataA()); + el.append(event); + } + else if (me.type() == ME_PITCHBEND) { + Event event(Controller); + event.setTick(time + ptick); + event.setA(CTRL_PITCH); + event.setB(me.dataA()); + el.append(event); + } + else if (me.type() == ME_SYSEX) { + Event event(Sysex); + event.setTick(time + ptick); + event.setData(me.data(), me.len()); + el.append(event); + } + else if (me.type() == ME_AFTERTOUCH) { + Event event(CAfter); + event.setTick(time + ptick); + event.setA(me.dataA()); + el.append(event); + } + } + if (!el.isEmpty()) { + for (int i = 0; i < el.size(); ++i) + el[i].setRecorded(true); + audio->msgAddEvents(&el, recordPart); + recordedEvents += el.size(); + updateFlags |= SC_EVENT_INSERTED; + } + + if (partCreated) { + recordPart->setLenTick(cpos - ptick); + updateFlags |= SC_PART_MODIFIED; + } + // + // modify len of all hold keys + // + for (std::list::iterator i = keyDown.begin(); i != keyDown.end(); ++i) { + if (cpos > (i->tick() + ptick)) + i->setLenTick(cpos - (i->tick() + ptick)); + updateFlags |= SC_EVENT_MODIFIED; + } + song->update(updateFlags); + } + +//--------------------------------------------------------- +// stopRecording +// gui context +//--------------------------------------------------------- + +void MidiTrack::stopRecording() + { + for (iEvent e = recordPart->events()->begin(); e != recordPart->events()->end(); ++e) { + e->second.setRecorded(false); + } + if (recordedEvents == 0 && partCreated) { + // TD: remove empty part? + } + // + // modify len of all hold keys + // + unsigned ptick = recordPart->tick(); + unsigned cpos = song->cpos(); + for (std::list::iterator i = keyDown.begin(); i != keyDown.end(); ++i) { + i->setLenTick(cpos - (i->tick() + ptick)); + } + // + // adjust part len && song len + // + if (recordPart->lenTick() < (cpos-ptick)) { + // + // TODO: check for events outside part boundaries + // + int endTick = song->roundUpBar(cpos); + recordPart->setLenTick(endTick - ptick); + } + + unsigned etick = recordPart->endTick(); + if (song->len() < etick) + song->setLen(etick); + } + +//--------------------------------------------------------- +// clone +//--------------------------------------------------------- + +void MidiTrack::clone(MidiTrack* t) + { + QString name; + for (int i = 1; ; ++i) { + name.sprintf("%s-%d", t->name().toLatin1().data(), i); + TrackList* tl = song->tracks(); + bool found = false; + for (iTrack it = tl->begin(); it != tl->end(); ++it) { + if ((*it)->name() == name) { + found = true; + break; + } + } + if (!found) + break; + } + setName(name); + _transposition = t->_transposition; + _velocity = t->_velocity; + _delay = t->_delay; + _len = t->_len; + _compression = t->_compression; + _recordFlag = t->_recordFlag; + _mute = t->_mute; + _solo = t->_solo; + _off = t->_off; + _monitor = t->_monitor; + _channels = t->_channels; + _locked = t->_locked; + _inRoutes = t->_inRoutes; + _outRoutes = t->_outRoutes; + _controller = t->_controller; + _autoRead = t->_autoRead; + _autoWrite = t->_autoWrite; + } + +//--------------------------------------------------------- +// isMute +//--------------------------------------------------------- + +bool MidiTrack::isMute() const + { + if (_solo) + return false; + if (song->solo()) + return true; + return _mute; + } + +//--------------------------------------------------------- +// processMidi +//--------------------------------------------------------- + +void MidiTrack::processMidi(SeqTime* t) + { + schedEvents.clear(); + // + // collect events only when transport is rolling + // + if (t->curTickPos < t->nextTickPos) { + for (iPart p = parts()->begin(); p != parts()->end(); ++p) { + Part* part = p->second; + if (part->mute()) + continue; + DrumMap* dm = drumMap(); + unsigned offset = _delay + part->tick(); + + if (offset > t->nextTickPos) + break; + + EventList* events = part->events(); + + iEvent ie = events->lower_bound((offset > t->curTickPos) ? 0 : t->curTickPos - offset); + iEvent iend = events->lower_bound(t->nextTickPos - offset); + + for (; ie != iend; ++ie) { + Event ev = ie->second; + if (ev.recorded()) + continue; + if (ev.type() == Meta) // ignore meta events + continue; + unsigned tick = ev.tick() + offset; + unsigned frame = t->tick2frame(tick); + if (ev.type() == Note) { + if (dm) { + if (dm->entry(dm->outmap(ev.pitch()))->mute) + continue; + } + // + // maybe we should skip next lines if using a + // drummap + + int pitch = ev.pitch() + _transposition + song->globalPitchShift(); + if (pitch > 127) + pitch = 127; + if (pitch < 0) + pitch = 0; + int velo = ev.velo(); + velo += _velocity; + velo = (velo * _compression) / 100; + if (velo > 127) + velo = 127; + if (velo < 1) // no off event + velo = 1; + int elen = (ev.lenTick() * _len)/100; + if (elen <= 0) // dont allow zero length + elen = 1; + int veloOff = ev.veloOff(); + + unsigned eframe = t->tick2frame(tick+elen); + schedEvents.insert(MidiEvent(frame, 0, ME_NOTEON, pitch, velo)); + schedEvents.insert(MidiEvent(eframe, 0, veloOff ? ME_NOTEOFF : ME_NOTEON, pitch, veloOff)); + _meter[0] += velo/2; + if (_meter[0] > 127.0f) + _meter[0] = 127.0f; + } + else { + schedEvents.insert(MidiEvent(frame, 0, ev)); + } + } + } + // + // collect controller + // + if (autoRead()) { + for (iCtrl ic = controller()->begin(); ic != controller()->end(); ++ic) { + Ctrl* c = ic->second; + iCtrlVal is = c->lowerBound(t->curTickPos); + iCtrlVal ie = c->lowerBound(t->nextTickPos); + for (iCtrlVal ic = is; ic != ie; ++ic) { + unsigned frame = t->tick2frame(ic.key()); + Event ev(Controller); + ev.setA(c->id()); + ev.setB(ic.value().i); + schedEvents.insert(MidiEvent(frame, -1, ev)); + c->setCurVal(ic.value().i); + } + } + } + } + + // + // process input routing + // + + foreach(const Route& r, *inRoutes()) { + MidiTrackBase* track = (MidiTrackBase*)r.src.track; + if (track->isMute()) + continue; + MidiEventList el; + track->getEvents(t->curTickPos, t->nextTickPos, r.src.channel, &el); + + for (iMidiEvent ie = el.begin(); ie != el.end(); ++ie) { + MidiEvent event(*ie); + unsigned eventTime = event.time(); + if (recordFlag() && audio->isRecording()) { + unsigned time = t->frame2tick(eventTime); + event.setTime(time); // set tick time + recordFifo.put(event); + } + if (event.type() == ME_NOTEON && (monitor() || recordFlag())) + addMidiMeter(event.dataB()); + if (monitor()) { + if (event.type() == ME_NOTEON) { + int pitch = event.dataA() + _transposition + song->globalPitchShift(); + if (pitch > 127) + pitch = 127; + if (pitch < 0) + pitch = 0; + event.setA(pitch); + if (!event.isNoteOff()) { + int velo = event.dataB() + _velocity; + velo = (velo * _compression) / 100; + if (velo > 127) + velo = 127; + if (velo < 1) + velo = 1; + event.setB(velo); + } + } + event.setTime(eventTime + segmentSize); + schedEvents.insert(event); + } + } + } + } + +//--------------------------------------------------------- +// getEvents +// from/to - midi ticks +//--------------------------------------------------------- + +void MidiTrack::getEvents(unsigned /*from*/, unsigned /*to*/, int, MidiEventList* dst) + { + for (iMidiEvent i = schedEvents.begin(); i != schedEvents.end(); ++i) { + dst->insert(*i); + } + } + +//--------------------------------------------------------- +// emitControllerChanged +//--------------------------------------------------------- + +void MidiTrack::emitControllerChanged(int id) + { + if (id == CTRL_PROGRAM && _useDrumMap) { + int val = ctrlVal(id).i; + MidiInstrument* mi = instrument(); + DrumMap* dm = mi->getDrumMap(val); + if (dm == 0) + dm = &gmDrumMap; + if (dm != _drumMap) + _drumMap = dm; + emit drumMapChanged(); + } + emit controllerChanged(id); + } + +//--------------------------------------------------------- +// setUseDrumMap +//--------------------------------------------------------- + +void MidiTrack::setUseDrumMap(bool val) + { + if (_useDrumMap != val) { + _useDrumMap = val; + if (_useDrumMap) { + MidiInstrument* mi = instrument(); + DrumMap* dm; + if (mi) { + int val = ctrlVal(CTRL_PROGRAM).i; + dm = mi->getDrumMap(val); + if (dm == 0) + dm = &gmDrumMap; + } + _drumMap = dm; + } + else + _drumMap = &noDrumMap; + emit drumMapChanged(); + emit useDrumMapChanged(_useDrumMap); + } + } + +//--------------------------------------------------------- +// instrument +//--------------------------------------------------------- + +MidiInstrument* MidiTrack::instrument() + { + if (_outRoutes.isEmpty()) + return genericMidiInstrument; + return _outRoutes[0].dst.track->instrument(); + } + +//--------------------------------------------------------- +// channelNo +//--------------------------------------------------------- + +int MidiTrack::channelNo() const + { + if (_outRoutes.isEmpty()) // TODO: better: remember old channel setting + return 0; + return _outRoutes[0].dst.channel; + } + +//--------------------------------------------------------- +// midiOut +//--------------------------------------------------------- + +MidiOut* MidiTrack::midiOut() + { + if (_outRoutes.isEmpty()) + return 0; + return _outRoutes[0].dst.track->midiOut(); + } + +//--------------------------------------------------------- +// setChannel +//--------------------------------------------------------- + +void MidiTrack::setChannel(int n) + { + if (_outRoutes.isEmpty()) + return; + Route r = _outRoutes[0]; + if (r.dst.channel == n) + return; + audio->msgRemoveRoute(r); + r.dst.channel = n; + audio->msgAddRoute(r); + emit channelChanged(n); + } diff --git a/attic/muse_qt4_evolution/muse/miditrack.h b/attic/muse_qt4_evolution/muse/miditrack.h new file mode 100644 index 00000000..994c3c92 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/miditrack.h @@ -0,0 +1,127 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MIDITRACK_H__ +#define __MIDITRACK_H__ + +#include "miditrackbase.h" +#include "midififo.h" +#include "event.h" + +class Part; +class EventList; +class MidiOut; +class SeqTime; + +//--------------------------------------------------------- +// MidiTrack +//--------------------------------------------------------- + +class MidiTrack : public MidiTrackBase { + Q_OBJECT + + EventList _events; // tmp Events during midi import + + // recording: + MidiFifo recordFifo; // for event transfer from RT-thread to gui thread + std::list keyDown; // keep track of "note on" events + Part* recordPart; // part we are recording into + int recordedEvents; + bool partCreated; + int hbank, lbank; + int datah, datal; + int rpnh, rpnl; + int dataType; + + // channel data: + DrumMap* _drumMap; + bool _useDrumMap; + + // play parameter + int _transposition; + int _velocity; + int _delay; + int _len; + int _compression; + + MidiEventList schedEvents; // scheduled events by process() + + signals: + void drumMapChanged() const; + void useDrumMapChanged(bool); + void channelChanged(int); + + public slots: + void setChannel(int); + + public: + MidiTrack(); + virtual ~MidiTrack(); + virtual TrackType type() const { return MIDI; } + void clone(MidiTrack*); + + int transposition() const { return _transposition; } + int velocity() const { return _velocity; } + int delay() const { return _delay; } + int len() const { return _len; } + int compression() const { return _compression; } + void setTransposition(int val) { _transposition = val; } + void setVelocity(int val) { _velocity = val; } + void setDelay(int val) { _delay = val; } + void setLen(int val) { _len = val; } + void setCompression(int val) { _compression = val; } + + void startRecording(); + void recordBeat(); + void stopRecording(); + + EventList* events() { return &_events; } + + virtual void read(QDomNode); + virtual void write(Xml&) const; + + virtual Part* newPart(Part*p=0, bool clone=false); + + virtual bool isMute() const; + virtual bool canRecord() const { return true; } + void playMidiEvent(MidiEvent*); + + virtual void processMidi(SeqTime*); + virtual void getEvents(unsigned from, unsigned to, int channel, MidiEventList* dst); + + bool useDrumMap() const { return _useDrumMap; } + DrumMap* drumMap() const { return _drumMap; } + void setUseDrumMap(bool val); + + int channelNo() const; + virtual void emitControllerChanged(int id); + + virtual MidiOut* midiOut(); + virtual MidiInstrument* instrument(); + }; + +typedef QList MidiTrackList; +typedef MidiTrackList::iterator iMidiTrack; +typedef MidiTrackList::const_iterator ciMidiTrack; + +Q_DECLARE_METATYPE(class MidiTrack*); + +#endif + diff --git a/attic/muse_qt4_evolution/muse/miditrackbase.cpp b/attic/muse_qt4_evolution/muse/miditrackbase.cpp new file mode 100644 index 00000000..7af53299 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/miditrackbase.cpp @@ -0,0 +1,136 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "miditrackbase.h" +#include "midiplugin.h" + +//--------------------------------------------------------- +// MidiTrackBase +//--------------------------------------------------------- + +MidiTrackBase::MidiTrackBase() + : Track() + { + _pipeline = new MidiPipeline(); + } + +//--------------------------------------------------------- +// MidiTrackBase +//--------------------------------------------------------- + +MidiTrackBase::~MidiTrackBase() + { + foreach(MidiPluginI* plugin, *_pipeline) + delete plugin; + delete _pipeline; + } + +//--------------------------------------------------------- +// MidiTrackBase::writeProperties +//--------------------------------------------------------- + +void MidiTrackBase::writeProperties(Xml& xml) const + { + Track::writeProperties(xml); + for (ciMidiPluginI ip = _pipeline->begin(); ip != _pipeline->end(); ++ip) { + if (*ip) + (*ip)->writeConfiguration(xml); + } + } + +//--------------------------------------------------------- +// MidiTrackBase::readProperties +//--------------------------------------------------------- + +bool MidiTrackBase::readProperties(QDomNode node) + { + QDomElement e = node.toElement(); + QString tag(e.tagName()); + if (tag == "midiPlugin") { + MidiPluginI* pi = new MidiPluginI(this); + if (pi->readConfiguration(node)) + delete pi; + else + addPlugin(pi, -1); + } + else + return Track::readProperties(node); + return false; + } + +//--------------------------------------------------------- +// plugin +//--------------------------------------------------------- + +MidiPluginI* MidiTrackBase::plugin(int idx) const + { + return _pipeline->value(idx); + } + +//--------------------------------------------------------- +// addPlugin +// realtime context +// idx = -1 append +// plugin = 0 remove slot +//--------------------------------------------------------- + +void MidiTrackBase::addPlugin(MidiPluginI* plugin, int idx) + { + if (plugin) { + if (idx == -1) + idx = _pipeline->size(); + _pipeline->insert(idx, plugin); +#if 0 + int ncontroller = plugin->plugin()->parameter(); + for (int i = 0; i < ncontroller; ++i) { + int id = (idx + 1) * 0x1000 + i; + QString name(plugin->getParameterName(i)); + double min, max; + plugin->range(i, &min, &max); + Ctrl* cl = getController(id); + if (cl == 0) { + cl = new Ctrl(id, name); + cl->setRange(min, max); + double defaultValue = plugin->defaultValue(i); + cl->setDefault(defaultValue); + cl->setCurVal(defaultValue); + addController(cl); + } + plugin->setParam(i, cl->schedVal().f); + plugin->setControllerList(cl); + } +#endif + } + else { + MidiPluginI* oldPlugin = _pipeline->takeAt(idx); + if (oldPlugin) { +#if 0 + int controller = oldPlugin->plugin()->parameter(); + for (int i = 0; i < controller; ++i) { + int id = (idx + 1) * 0x1000 + i; + removeController(id); + } +#endif + } + } + } + + + diff --git a/attic/muse_qt4_evolution/muse/miditrackbase.h b/attic/muse_qt4_evolution/muse/miditrackbase.h new file mode 100644 index 00000000..d10b2bb3 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/miditrackbase.h @@ -0,0 +1,53 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MIDITRACKBASE_H__ +#define __MIDITRACKBASE_H__ + +#include "track.h" + +//--------------------------------------------------------- +// MidiTrackBase +//--------------------------------------------------------- + +class MidiTrackBase : public Track { + Q_OBJECT + + MidiPipeline* _pipeline; + + public: + MidiTrackBase(); + virtual ~MidiTrackBase(); + + bool readProperties(QDomNode); + void writeProperties(Xml&) const; + + MidiPipeline* pipeline() { return _pipeline; } + void addPlugin(MidiPluginI* plugin, int idx); + MidiPluginI* plugin(int idx) const; + + virtual void processMidi(unsigned, unsigned, unsigned, unsigned) {} + virtual void getEvents(unsigned /*from*/, unsigned /*to*/, int /*channel*/, MidiEventList* /*dst*/) {} + }; + +#endif + + + diff --git a/attic/muse_qt4_evolution/muse/miditrackinfo.ui b/attic/muse_qt4_evolution/muse/miditrackinfo.ui new file mode 100644 index 00000000..c1624188 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/miditrackinfo.ui @@ -0,0 +1,292 @@ + + MidiTrackInfoBase + + + + 0 + 0 + 135 + 165 + + + + + 0 + 0 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 16777215 + 24 + + + + Transp. + + + + + + + + 0 + 0 + + + + + 16777215 + 24 + + + + Pitch Transpose + + + -127 + + + 127 + + + + + + + + 0 + 0 + + + + + 16777215 + 24 + + + + Delay + + + + + + + + 0 + 0 + + + + + 16777215 + 24 + + + + Track Delay (ticks) + + + -1000 + + + 1000 + + + + + + + + 0 + 0 + + + + + 16777215 + 24 + + + + Length + + + + + + + + 0 + 0 + + + + + 16777215 + 24 + + + + Modify Note Length + + + % + + + 25 + + + 200 + + + + + + + + 0 + 0 + + + + + 16777215 + 24 + + + + Velocity + + + + + + + + 0 + 0 + + + + + 16777215 + 24 + + + + Modify Note Velocity + + + -127 + + + 127 + + + + + + + + 0 + 0 + + + + + 16777215 + 24 + + + + Compr. + + + + + + + + 0 + 0 + + + + + 16777215 + 24 + + + + Compress Note Velocity + + + % + + + 25 + + + 200 + + + + + + + + 0 + 0 + + + + + 16777215 + 24 + + + + Instrument Patch + + + ??? + + + + + + + + diff --git a/attic/muse_qt4_evolution/muse/miditransform.cpp b/attic/muse_qt4_evolution/muse/miditransform.cpp new file mode 100644 index 00000000..f4e85be2 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/miditransform.cpp @@ -0,0 +1,1534 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "helper.h" +#include "event.h" +#include "miditransform.h" +#include "track.h" +#include "song.h" +#include "al/xml.h" +#include "globals.h" +#include "comboQuant.h" +#include "audio.h" +#include "gconfig.h" +#include "al/sig.h" + +static int eventTypeTable[] = { + Note, Controller, Sysex, PAfter, CAfter, Meta + }; + +static int procVal2Map[] = { 0, 1, 2, 3, 4, 5, 6, 7, 10, 11 }; + +//--------------------------------------------------------- +// MidiTransformation +//--------------------------------------------------------- + +class MidiTransformation { + public: + QString name; + QString comment; + + ValOp selEventOp; + EventType selType; + + ValOp selVal1; + int selVal1a, selVal1b; + ValOp selVal2; + int selVal2a, selVal2b; + ValOp selLen; + int selLenA, selLenB; + ValOp selRange; + int selRangeA, selRangeB; + + TransformOperator procEvent; + EventType eventType; + TransformOperator procVal1; + int procVal1a, procVal1b; + TransformOperator procVal2; + int procVal2a, procVal2b; + TransformOperator procLen; + int procLenA; + TransformOperator procPos; + int procPosA; + + TransformFunction funcOp; + int quantVal; + bool selectedTracks; + bool insideLoop; + + MidiTransformation(const QString& s) { + name = s; + selEventOp = All; + selType = Note; + selVal1 = Ignore; + selVal1a = 0; + selVal1b = 0; + selVal2 = Ignore; + selVal2a = 0; + selVal2b = 0; + selLen = Ignore; + selLenA = 0; + selLenB = 0; + selRange = Ignore; + selRangeA = 0; + selRangeB = 0; + procEvent = Keep; + eventType = Note; + procVal1 = Keep; + procVal1a = 0; + procVal1b = 0; + procVal2 = Keep; + procVal2a = 0; + procVal2b = 0; + procLen = Keep; + procLenA = 0; + procPos = Keep; + procPosA = 0; + funcOp = Select; + quantVal = config.division; + selectedTracks = false; + insideLoop = false; + } + void write(Xml& xml); + }; + +class MidiTransformPrivate { + public: + MidiTransformation* cmt; + int cindex; // current index in preset list + }; + +typedef std::list MidiTransformationList; +typedef std::list::iterator iMidiTransformation; +typedef std::list::const_iterator ciMidiTransformation; + +static MidiTransformationList mtlist; + +//--------------------------------------------------------- +// MidiTransformDialog +// Widgets: +// presetList nameEntry commentEntry +// selEventOp selType +// selVal1Op selVal1a selVal1b +// selVal2Op selVal2a selVal2b +// selLenOp selLenA selLenB +// selRangeOp selBarA selBarB +// +// procEventOp procType +// procVal1Op procVal1a procVal1b +// procVal2Op procVal2a procVal2b +// procLenOp procLenA +// procPosOp procPosA +// funcOp funcQuantVal +// processAll selectedTracks insideLoop +// buttonNew buttonDelete buttonApply buttonOk +//--------------------------------------------------------- + +MidiTransformerDialog::MidiTransformerDialog(QWidget* parent, + const char* name, bool modal, Qt::WFlags fl) + : MidiTransformDialogBase(parent, name, modal, fl) + { + data = new MidiTransformPrivate; + data->cmt = 0; + data->cindex = -1; + connect(buttonApply, SIGNAL(clicked()), SLOT(apply())); + connect(buttonNew, SIGNAL(clicked()), SLOT(presetNew())); + connect(buttonDelete, SIGNAL(clicked()), SLOT(presetDelete())); + connect(selEventOp, SIGNAL(activated(int)), SLOT(selEventOpSel(int))); + connect(selType, SIGNAL(activated(int)), SLOT(selTypeSel(int))); + connect(selVal1Op, SIGNAL(activated(int)), SLOT(selVal1OpSel(int))); + connect(selVal2Op, SIGNAL(activated(int)), SLOT(selVal2OpSel(int))); + connect(selLenOp, SIGNAL(activated(int)), SLOT(selLenOpSel(int))); + connect(selRangeOp, SIGNAL(activated(int)), SLOT(selRangeOpSel(int))); + connect(procEventOp, SIGNAL(activated(int)), SLOT(procEventOpSel(int))); + connect(procType, SIGNAL(activated(int)), SLOT(procEventTypeSel(int))); + connect(procVal1Op, SIGNAL(activated(int)), SLOT(procVal1OpSel(int))); + connect(procVal2Op, SIGNAL(activated(int)), SLOT(procVal2OpSel(int))); + connect(procLenOp, SIGNAL(activated(int)), SLOT(procLenOpSel(int))); + connect(procPosOp, SIGNAL(activated(int)), SLOT(procPosOpSel(int))); + connect(funcOp, SIGNAL(activated(int)), SLOT(funcOpSel(int))); + connect(funcQuantVal, SIGNAL(valueChanged(int)), SLOT(funcQuantValSel(int))); + connect(presetList, SIGNAL(highlighted(Q3ListBoxItem*)), + SLOT(presetChanged(Q3ListBoxItem*))); + connect(nameEntry, SIGNAL(textChanged(const QString&)), + SLOT(nameChanged(const QString&))); + connect(commentEntry, SIGNAL(textChanged()), SLOT(commentChanged())); + + connect(selVal1a, SIGNAL(valueChanged(int)), SLOT(selVal1aChanged(int))); + connect(selVal1b, SIGNAL(valueChanged(int)), SLOT(selVal1bChanged(int))); + connect(selVal2a, SIGNAL(valueChanged(int)), SLOT(selVal2aChanged(int))); + connect(selVal2b, SIGNAL(valueChanged(int)), SLOT(selVal2bChanged(int))); + connect(selLenA, SIGNAL(valueChanged(int)), SLOT(selLenAChanged(int))); + connect(selLenB, SIGNAL(valueChanged(int)), SLOT(selLenBChanged(int))); + connect(selBarA, SIGNAL(valueChanged(int)), SLOT(selBarAChanged(int))); + connect(selBarB, SIGNAL(valueChanged(int)), SLOT(selBarBChanged(int))); + connect(procVal1a, SIGNAL(valueChanged(int)), SLOT(procVal1aChanged(int))); + connect(procVal1b, SIGNAL(valueChanged(int)), SLOT(procVal1bChanged(int))); + connect(procVal2a, SIGNAL(valueChanged(int)), SLOT(procVal2aChanged(int))); + connect(procVal2b, SIGNAL(valueChanged(int)), SLOT(procVal2bChanged(int))); + connect(procLenA, SIGNAL(valueChanged(int)), SLOT(procLenAChanged(int))); + connect(procPosA, SIGNAL(valueChanged(int)), SLOT(procPosAChanged(int))); + + connect(processAll, SIGNAL(toggled(bool)), SLOT(processAllChanged(bool))); + connect(selectedTracks, SIGNAL(toggled(bool)), SLOT(selectedTracksChanged(bool))); + connect(insideLoop, SIGNAL(toggled(bool)), SLOT(insideLoopChanged(bool))); + + //--------------------------------------------------- + // populate preset list + //--------------------------------------------------- + + for (iMidiTransformation i = mtlist.begin(); i != mtlist.end(); ++i) { + presetList->insertItem((*i)->name); + if (data->cmt == 0) + data->cmt = *i; + } + if (data->cmt == 0) { + data->cmt = new MidiTransformation(tr("New")); + mtlist.push_back(data->cmt); + presetList->insertItem(tr("New")); + } + data->cindex = 0; + presetList->setCurrentItem(0); + } + +//--------------------------------------------------------- +// ~MidiTransformDialog +//--------------------------------------------------------- + +MidiTransformerDialog::~MidiTransformerDialog() + { + delete data; + } + +//--------------------------------------------------------- +// writeMidiTransforms +//--------------------------------------------------------- + +void writeMidiTransforms(Xml& xml) + { + for (iMidiTransformation i = mtlist.begin(); i != mtlist.end(); ++i) { + (*i)->write(xml); + } + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void MidiTransformation::write(Xml& xml) + { + xml.tag("midiTransform"); + xml.strTag("name", name); + xml.strTag("comment", comment); + xml.intTag("function", int(funcOp)); + xml.intTag("selectedTracks", selectedTracks); + xml.intTag("insideLoop", insideLoop); + if (funcOp == Quantize) { + xml.intTag("quantVal", quantVal); + } + if (funcOp == Transform || funcOp == Insert) { + if (procEvent != Keep) { + xml.intTag("procEventOp", int(procEvent)); + xml.intTag("eventType", int(eventType)); + } + if (procVal1 != Keep) { + xml.intTag("procVal1Op", int(procVal1)); + xml.intTag("procVal1a", procVal1a); + xml.intTag("procVal1b", procVal1b); + } + if (procVal2 != Keep) { + xml.intTag("procVal2Op", int(procVal2)); + xml.intTag("procVal2a", procVal2a); + xml.intTag("procVal2b", procVal2b); + } + if (procLen != Keep) { + xml.intTag("procLenOp", int(procLen)); + xml.intTag("procLen", procLenA); + } + if (procPos != Keep) { + xml.intTag("procPosOp", int(procPos)); + xml.intTag("procPos", procPosA); + } + } + if (selEventOp != Ignore) { + xml.intTag("selEventOp", int(selEventOp)); + xml.intTag("selEventType", int(selType)); + } + if (selVal1 != Ignore) { + xml.intTag("selVal1Op", int(selVal1)); + xml.intTag("selVal1a", selVal1a); + xml.intTag("selVal1b", selVal1b); + } + if (selVal2 != Ignore) { + xml.intTag("selVal2Op", int(selVal2)); + xml.intTag("selVal2a", selVal2a); + xml.intTag("selVal2b", selVal2b); + } + if (selLen != Ignore) { + xml.intTag("selLenOp", int(selLen)); + xml.intTag("selLenA", selLenA); + xml.intTag("selLenB", selLenB); + } + if (selRange != Ignore) { + xml.intTag("selRangeOp", int(selRange)); + xml.intTag("selRangeA", selRangeA); + xml.intTag("selRangeB", selRangeB); + } + xml.etag("midiTransform"); + } + +//--------------------------------------------------------- +// readMidiTransform +//--------------------------------------------------------- + +void readMidiTransform(QDomNode node) + { + MidiTransformation trans(QWidget::tr("new")); + + while (!node.isNull()) { + QDomElement e = node.toElement(); + QString tag(e.tagName()); + QString s(e.text()); + int i = s.toInt(); + + if (tag == "name") + trans.name = s; + else if (tag == "comment") + trans.comment = s; + else if (tag == "function") + trans.funcOp = TransformFunction(i); + else if (tag == "selectedTracks") + trans.selectedTracks = i; + else if (tag == "insideLoop") + trans.insideLoop = i; + else if (tag == "quantVal") + trans.quantVal = i; + else if (tag == "procEventOp") + trans.procEvent = TransformOperator(i); + else if (tag == "eventType") + trans.eventType = EventType(i); + else if (tag == "procVal1Op") + trans.procVal1 = TransformOperator(i); + else if (tag == "procVal1a") + trans.procVal1a = i; + else if (tag == "procVal1b") + trans.procVal1b = i; + else if (tag == "procVal2Op") + trans.procVal2 = TransformOperator(i); + else if (tag == "procVal2a") + trans.procVal2a = i; + else if (tag == "procVal2b") + trans.procVal2b = i; + else if (tag == "procLenOp") + trans.procLen = TransformOperator(i); + else if (tag == "procLen") + trans.procLenA = i; + else if (tag == "procPosOp") + trans.procPos = TransformOperator(i); + else if (tag == "procPos") + trans.procPosA = i; + else if (tag == "selEventOp") + trans.selEventOp = ValOp(i); + else if (tag == "selEventType") + trans.selType = EventType(i); + else if (tag == "selVal1Op") + trans.selVal1 = ValOp(i); + else if (tag == "selVal1a") + trans.selVal1a = i; + else if (tag == "selVal1b") + trans.selVal1b = i; + else if (tag == "selVal2Op") + trans.selVal2 = ValOp(i); + else if (tag == "selVal2a") + trans.selVal2a = i; + else if (tag == "selVal2b") + trans.selVal2b = i; + else if (tag == "selLenOp") + trans.selLen = ValOp(i); + else if (tag == "selLenA") + trans.selLenA = i; + else if (tag == "selLenB") + trans.selLenB = i; + else if (tag == "selRangeOp") + trans.selRange = ValOp(i); + else if (tag == "selRangeA") + trans.selRangeA = i; + else if (tag == "selRangeB") + trans.selRangeB = i; + else + printf("MusE:readMidiTransform(): unknown tag %s\n", e.tagName().toLatin1().data()); + node = node.nextSibling(); + } + MidiTransformation* t = new MidiTransformation(trans); + mtlist.push_back(t); + } + +//--------------------------------------------------------- +// accept +//--------------------------------------------------------- + +void MidiTransformerDialog::accept() + { + apply(); + reject(); + } + +//--------------------------------------------------------- +// transformEvent +// subfunction of processEvent() +//--------------------------------------------------------- + +void MidiTransformerDialog::transformEvent(Event& event, MidiPart* part, + MidiPart* newPart) + { + MidiTransformation* cmt = data->cmt; + Event newEvent = event.clone(); + + if (cmt->procEvent != Keep) + newEvent.setType(cmt->eventType); + + //--------------------------------------------------- + // transform value A + //--------------------------------------------------- + + int val = newEvent.dataA(); + switch (cmt->procVal1) { + case Keep: + break; + case Plus: + val += cmt->procVal1a; + break; + case Minus: + val -= cmt->procVal1a; + break; + case Multiply: + val = int(val * (cmt->procVal1a/100.0) + .5); + break; + case Divide: + val = int(val / (cmt->procVal1a/100.0) + .5); + break; + case Fix: + val = cmt->procVal1a; + break; + case Value: + val = cmt->procVal2a; + break; + case Invert: + val = 128 - val; + break; + case ScaleMap: + printf("scale map not implemented\n"); + break; + case Flip: + val = cmt->procVal1a - val; + break; + case Dynamic: // "crescendo" + val = (((cmt->procVal2b-cmt->procVal2a) + * (newEvent.tick() - song->lpos())) + / (song->rpos() - song->lpos())) + cmt->procVal2a; + break; + case Random: + { + int range = cmt->procVal1b - cmt->procVal1a; + if (range > 0) + val = (rand() % range) + cmt->procVal1a; + else if (range < 0) + val = (rand() % -range) + cmt->procVal1b; + else + val = cmt->procVal1a; + } + break; + } + if (val < 0) + val = 0; + if (val > 127) + val = 127; + newEvent.setA(val); + + //--------------------------------------------------- + // transform value B + //--------------------------------------------------- + + val = newEvent.dataB(); + switch (cmt->procVal2) { + case Plus: + val += cmt->procVal2a; + break; + case Minus: + val -= cmt->procVal2a; + break; + case Multiply: + val = int(val * (cmt->procVal2a/100.0) + .5); + break; + case Divide: + val = int(val / (cmt->procVal2a/100.0) + .5); + break; + case Fix: + val = cmt->procVal2a; + break; + case Value: + val = cmt->procVal1a; + break; + case Invert: + val = 128 - val; + break; + case Dynamic: + val = (((cmt->procVal2b-cmt->procVal2a) + * (newEvent.tick() - song->lpos())) + / (song->rpos() - song->lpos())) + cmt->procVal2a; + break; + case Random: + { + int range = cmt->procVal2b - cmt->procVal2a; + if (range > 0) + val = (rand() % range) + cmt->procVal2a; + else if (range < 0) + val = (rand() % -range) + cmt->procVal2b; + else + val = cmt->procVal1a; + } + break; + case ScaleMap: + case Keep: + case Flip: + break; + } + if (val < 0) + val = 0; + if (val > 127) + val = 127; + newEvent.setB(val); + + //--------------------------------------------------- + // transform len + //--------------------------------------------------- + + int len = newEvent.lenTick(); + switch (cmt->procLen) { + case Plus: + len += cmt->procLenA; + break; + case Minus: + len -= cmt->procLenA; + break; + case Multiply: + len = int(val * (cmt->procLenA/100.0) + .5); + break; + case Divide: + len = int(val / (cmt->procLenA/100.0) + .5); + break; + case Fix: + len = cmt->procLenA; + break; + case Invert: + case ScaleMap: + case Dynamic: + case Random: + case Keep: + case Flip: + case Value: + break; + } + if (len < 0) + len = 0; + newEvent.setLenTick(len); + + //--------------------------------------------------- + // transform pos + //--------------------------------------------------- + + int pos = newEvent.tick(); + switch (cmt->procPos) { + case Plus: + pos += cmt->procPosA; + break; + case Minus: + pos -= cmt->procPosA; + break; + case Multiply: + pos = int(val * (cmt->procPosA/100.0) + .5); + break; + case Divide: + pos = int(val / (cmt->procPosA/100.0) + .5); + break; + case Fix: + case Invert: + case ScaleMap: + case Dynamic: + case Random: + case Keep: + case Flip: + case Value: + break; + } + if (pos < 0) + pos = 0; + newEvent.setTick(pos); + + Event dummy; + switch(data->cmt->funcOp) { + case Transform: + song->changeEvent(event, newEvent, part); + song->undoOp(UndoOp::ModifyEvent, newEvent, event, part); + song->addUpdateFlags(SC_EVENT_MODIFIED); + break; + case Insert: + song->undoOp(UndoOp::AddEvent, dummy, newEvent, part); + song->addEvent(newEvent, part); + song->addUpdateFlags(SC_EVENT_INSERTED); + break; + case Extract: + song->undoOp(UndoOp::DeleteEvent, dummy, event, part); + song->deleteEvent(event, part); + song->addUpdateFlags(SC_EVENT_REMOVED); + case Copy: + newPart->addEvent(newEvent); + break; + default: + break; + } + } + +//--------------------------------------------------------- +// processEvent +//--------------------------------------------------------- + +void MidiTransformerDialog::processEvent(Event& event, MidiPart* part, MidiPart* newPart) + { + switch(data->cmt->funcOp) { + case Select: + break; + case Quantize: + { + int tick = event.tick(); + int rt = AL::sigmap.raster(tick, data->cmt->quantVal) - tick; + if (tick != rt) { + Event newEvent = event.clone(); + newEvent.setTick(rt); + song->changeEvent(event, newEvent, part); + song->undoOp(UndoOp::ModifyEvent, newEvent, event, part); + song->addUpdateFlags(SC_EVENT_MODIFIED); + } + } + break; + case Delete: + { + Event ev; + song->undoOp(UndoOp::DeleteEvent, ev, event, part); + song->deleteEvent(event, part); + song->addUpdateFlags(SC_EVENT_REMOVED); + } + break; + case Transform: + case Insert: + case Copy: + case Extract: + transformEvent(event, part, newPart); + break; + } + } + +//--------------------------------------------------------- +// isSelected +// apply Select filter +// return true if event is selected +//--------------------------------------------------------- + +bool MidiTransformerDialog::isSelected(Event& event, MidiPart*) + { + MidiTransformation* cmt = data->cmt; + + switch (cmt->selEventOp) { + case Equal: + if (event.type() != cmt->selType) { + return false; + } + break; + case Unequal: + if (event.type() == cmt->selType) { + return false; + } + break; + default: + break; + } + switch (cmt->selVal1) { + case Ignore: + break; + case Equal: + if (event.dataA() != cmt->selVal1a) + return false; + break; + case Unequal: + if (event.dataA() == cmt->selVal1a) + return false; + break; + case Higher: + if (event.dataA() <= cmt->selVal1a) + return false; + break; + case Lower: + if (event.dataA() >= cmt->selVal1a) + return false; + break; + case Inside: + if ((event.dataA() < cmt->selVal1a) + || (event.dataA() >= cmt->selVal1b)) + return false; + break; + case Outside: + if ((event.dataA() >= cmt->selVal1a) + && (event.dataA() < cmt->selVal1b)) + return false; + break; + } + switch (cmt->selVal2) { + case Ignore: + break; + case Equal: + if (event.dataB() != cmt->selVal2a) + return false; + break; + case Unequal: + if (event.dataB() == cmt->selVal2a) + return false; + break; + case Higher: + if (event.dataB() <= cmt->selVal2a) + return false; + break; + case Lower: + if (event.dataB() >= cmt->selVal2a) + return false; + break; + case Inside: + if ((event.dataB() < cmt->selVal2a) + || (event.dataB() >= cmt->selVal2b)) + return false; + break; + case Outside: + if ((event.dataB() >= cmt->selVal2a) + && (event.dataB() < cmt->selVal2b)) + return false; + break; + } + int len = event.lenTick(); + switch (cmt->selLen) { + case Ignore: + break; + case Equal: + if (len != cmt->selLenA) + return false; + break; + case Unequal: + if (len == cmt->selLenA) + return false; + break; + case Higher: + if (len <= cmt->selLenA) + return false; + break; + case Lower: + if (len >= cmt->selLenA) + return false; + break; + case Inside: + if ((len < cmt->selLenA) || (len >= cmt->selLenB)) + return false; + break; + case Outside: + if ((len >= cmt->selLenA) && (len < cmt->selLenB)) + return false; + break; + } + int bar, beat; + unsigned tick; + AL::sigmap.tickValues(event.tick(), &bar, &beat, &tick); + int beat1 = cmt->selRangeA / 1000; + unsigned tick1 = cmt->selRangeA % 1000; + int beat2 = cmt->selRangeB / 1000; + unsigned tick2 = cmt->selRangeB % 1000; + switch (cmt->selRange) { + case Ignore: + break; + case Equal: + if (beat != beat1 || tick != tick1) + return false; + break; + case Unequal: + if (beat == beat1 && tick == tick1) + return false; + break; + case Higher: + if (beat <= beat1) + return false; + if (beat == beat1 && tick <= tick1) + return false; + break; + case Lower: + if (beat >= beat1) + return false; + if (beat == beat1 && tick >= tick1) + return false; + break; + case Inside: + if ((beat < beat1) || (beat >= beat2)) + return false; + if (beat == beat1 && tick < tick1) + return false; + if (beat == beat2 && tick >= tick2) + return false; + break; + case Outside: + if ((beat >= beat1) || (beat < beat2)) + return false; + if (beat == beat1 && tick >= tick1) + return false; + if (beat == beat2 && tick < tick2) + return false; + break; + } + return true; + } + +//--------------------------------------------------------- +// apply +//--------------------------------------------------------- + +void MidiTransformerDialog::apply() + { + int flags = 0; + song->startUndo(); + audio->msgIdle(true); + bool copyExtract = (data->cmt->funcOp == Copy) + || (data->cmt->funcOp == Extract); + + MidiTrackList* tracks = song->midis(); + MidiTrackList tl; + for (iMidiTrack t = tracks->begin(); t != tracks->end(); ++t) { + if (data->cmt->selectedTracks && !(*t)->selected()) + continue; + MidiTrack* newTrack = 0; + PartList *pl = (*t)->parts(); + if (copyExtract) { + // check wether we must generate a new track + for (iPart p = pl->begin(); p != pl->end(); ++p) { + MidiPart* part = (MidiPart *) p->second; + EventList* el = part->events(); + for (iEvent i = el->begin(); i != el->end(); ++i) { + Event event = i->second; + unsigned tick = event.tick(); + if (data->cmt->insideLoop && (tick < song->lpos() || tick >= song->rpos())) + continue; + if (isSelected(event, part)) { + newTrack = new MidiTrack(); + tl.push_back(newTrack); + break; + } + } + if (newTrack) + break; + } + } + + for (iPart p = pl->begin(); p != pl->end(); ++p) { + MidiPart* part = (MidiPart *) p->second; + MidiPart* newPart = 0; + EventList* el = part->events(); + if (copyExtract) { + // check wether we must generate a new part + for (iEvent i = el->begin(); i != el->end(); ++i) { + Event event = i->second; + unsigned tick = event.tick(); + if (data->cmt->insideLoop && (tick < song->lpos() || tick >= song->rpos())) + continue; + if (isSelected(event, part)) { + newPart = new MidiPart(newTrack); + newPart->setName(part->name()); + newPart->setColorIndex(part->colorIndex()); + newPart->setTick(part->tick()); + newPart->setLenTick(part->lenTick()); + song->addPart(newPart); + flags |= SC_PART_INSERTED; + break; + } + } + } + EventList pel; + for (iEvent i = el->begin(); i != el->end(); ++i) { + Event event = i->second; + unsigned tick = event.tick(); + if (data->cmt->insideLoop && (tick < song->lpos() || tick >= song->rpos())) + continue; + bool flag = isSelected(event, part); + if (data->cmt->funcOp == Select) + event.setSelected(flag); + else if (flag) + pel.add(event); + } + for (iEvent i = pel.begin(); i != pel.end(); ++i) { + Event event = i->second; + processEvent(event, part, newPart); + } + } + } + if (!tl.empty()) { + flags |= SC_TRACK_INSERTED; + for (iTrack t = tl.begin(); t != tl.end(); ++t) { + song->insertTrack0(*t, -1); + } + } + + switch(data->cmt->funcOp) { + case Select: + flags |= SC_SELECTION; + break; + case Quantize: + flags |= SC_EVENT_MODIFIED; + break; + case Delete: + flags |= SC_EVENT_REMOVED; + break; + case Transform: + flags |= SC_EVENT_MODIFIED; + break; + case Insert: + flags |= SC_EVENT_INSERTED; + break; + case Copy: + flags |= SC_EVENT_INSERTED; + case Extract: + break; + } + audio->msgIdle(false); + song->endUndo(flags); + } + +//--------------------------------------------------------- +// setValOp +//--------------------------------------------------------- + +void MidiTransformerDialog::setValOp(QWidget* a, QWidget* b, ValOp op) + { + switch (op) { + case Ignore: + a->setEnabled(false); + b->setEnabled(false); + break; + case Equal: + case Unequal: + case Higher: + case Lower: + a->setEnabled(true); + b->setEnabled(false); + break; + case Inside: + case Outside: + a->setEnabled(true); + b->setEnabled(true); + break; + } + } + +//--------------------------------------------------------- +// selEventOpSel +//--------------------------------------------------------- + +void MidiTransformerDialog::selEventOpSel(int val) + { + selType->setEnabled(val != All); + data->cmt->selEventOp = ValOp(val); + selVal1aChanged(data->cmt->selVal1a); + selVal1bChanged(data->cmt->selVal1b); + } + +//--------------------------------------------------------- +// selTypeSel +//--------------------------------------------------------- + +void MidiTransformerDialog::selTypeSel(int val) + { + data->cmt->selType = EventType(eventTypeTable[val]); + selVal1aChanged(data->cmt->selVal1a); + selVal1bChanged(data->cmt->selVal1b); + } + +//--------------------------------------------------------- +// selVal1OpSel +//--------------------------------------------------------- + +void MidiTransformerDialog::selVal1OpSel(int val) + { + setValOp(selVal1a, selVal1b, ValOp(val)); + data->cmt->selVal1 = ValOp(val); + } + +//--------------------------------------------------------- +// selVal2OpSel +//--------------------------------------------------------- + +void MidiTransformerDialog::selVal2OpSel(int val) + { + setValOp(selVal2a, selVal2b, ValOp(val)); + data->cmt->selVal2 = ValOp(val); + } + +//--------------------------------------------------------- +// selLenOpSel +//--------------------------------------------------------- + +void MidiTransformerDialog::selLenOpSel(int val) + { + setValOp(selLenA, selLenB, ValOp(val)); + data->cmt->selLen = ValOp(val); + } + +//--------------------------------------------------------- +// selRangeOpSel +//--------------------------------------------------------- + +void MidiTransformerDialog::selRangeOpSel(int val) + { + setValOp(selBarA, selBarB, ValOp(val)); + data->cmt->selRange = ValOp(val); + } + +//--------------------------------------------------------- +// procEventOpSel +//--------------------------------------------------------- + +void MidiTransformerDialog::procEventOpSel(int val) + { + TransformOperator op = val == 0 ? Keep : Fix; + procType->setEnabled(op == Fix); + data->cmt->procEvent = op; + } + +//--------------------------------------------------------- +// procEventTypeSel +//--------------------------------------------------------- + +void MidiTransformerDialog::procEventTypeSel(int val) + { + data->cmt->eventType = EventType(eventTypeTable[val]); + } + +//--------------------------------------------------------- +// procVal1OpSel +//--------------------------------------------------------- + +void MidiTransformerDialog::procVal1OpSel(int val) + { + data->cmt->procVal1 = TransformOperator(val); + switch(TransformOperator(val)) { + case Keep: + case Invert: + procVal1a->setEnabled(false); + procVal1b->setEnabled(false); + break; + case Multiply: + case Divide: + procVal1a->setEnabled(true); +// procVal1a->setPrecision(2); + procVal1b->setEnabled(false); + break; + case Plus: + case Minus: + case Fix: + case Value: + case Flip: +// procVal1a->setPrecision(0); + procVal1a->setEnabled(true); + procVal1b->setEnabled(false); + break; + case Random: + case ScaleMap: + case Dynamic: +// procVal1a->setPrecision(0); + procVal1a->setEnabled(true); + procVal1b->setEnabled(true); + break; + } + } + +//--------------------------------------------------------- +// procVal2OpSel +//--------------------------------------------------------- + +void MidiTransformerDialog::procVal2OpSel(int val) + { + TransformOperator op = TransformOperator(procVal2Map[val]); + data->cmt->procVal2 = op; + + switch (op) { + case Keep: + case Invert: + procVal2a->setEnabled(false); + procVal2b->setEnabled(false); + break; + case Multiply: + case Divide: + procVal2a->setEnabled(true); +// procVal2a->setPrecision(2); + procVal2b->setEnabled(false); + break; + case Plus: + case Minus: + case Fix: + case Value: +// procVal2a->setPrecision(0); + procVal2a->setEnabled(true); + procVal2b->setEnabled(false); + break; + case Random: + case Dynamic: +// procVal2a->setPrecision(0); + procVal2a->setEnabled(true); + procVal2b->setEnabled(true); + break; + default: + break; + } + } + +//--------------------------------------------------------- +// procLenOpSel +//--------------------------------------------------------- + +void MidiTransformerDialog::procLenOpSel(int val) + { + TransformOperator op = TransformOperator(val); + data->cmt->procLen = op; + + switch (op) { + case Keep: + case Invert: + procLenA->setEnabled(false); + break; + case Plus: + case Minus: + case Fix: +// procLenA->setPrecision(0); + procLenA->setEnabled(true); + break; + case Multiply: + case Divide: +// procLenA->setPrecision(2); + procLenA->setEnabled(true); + break; + default: + break; + } + } + +//--------------------------------------------------------- +// procPosOpSel +//--------------------------------------------------------- + +void MidiTransformerDialog::procPosOpSel(int val) + { + TransformOperator op = TransformOperator(val); + data->cmt->procPos = op; + + switch (op) { + case Keep: + case Invert: + procPosA->setEnabled(false); + break; + case Multiply: + case Divide: +// procPosA->setPrecision(2); + procPosA->setEnabled(true); + break; + case Plus: + case Minus: +// procPosA->setPrecision(0); + procPosA->setEnabled(true); + break; + default: + break; + } + } + +//--------------------------------------------------------- +// funcOpSel +//--------------------------------------------------------- + +void MidiTransformerDialog::funcOpSel(int val) + { + funcQuantVal->setEnabled(val == Quantize); + bool isFuncOp = val == Transform || val == Insert; + + procEventOp->setEnabled(isFuncOp); + procType->setEnabled(isFuncOp); + procVal1Op->setEnabled(isFuncOp); + procVal1a->setEnabled(isFuncOp); + procVal1b->setEnabled(isFuncOp); + procVal2Op->setEnabled(isFuncOp); + procVal2a->setEnabled(isFuncOp); + procVal2b->setEnabled(isFuncOp); + procLenOp->setEnabled(isFuncOp); + procLenA->setEnabled(isFuncOp); + procPosOp->setEnabled(isFuncOp); + procPosA->setEnabled(isFuncOp); + if (isFuncOp) { + procEventOpSel(data->cmt->procEvent); + procVal1OpSel(data->cmt->procVal1); + procVal2OpSel(data->cmt->procVal2); + procLenOpSel(data->cmt->procLen); + procPosOpSel(data->cmt->procPos); + } + data->cmt->funcOp = TransformFunction(val); + } + +//--------------------------------------------------------- +// presetNew +//--------------------------------------------------------- + +void MidiTransformerDialog::presetNew() + { + QString name; + for (int i = 0;; ++i) { + name.sprintf("New-%d", i); + iMidiTransformation imt; + for (imt = mtlist.begin(); imt != mtlist.end(); ++imt) { + if (name == (*imt)->name) + break; + } + if (imt == mtlist.end()) + break; + } + MidiTransformation* mt = new MidiTransformation(name); + Q3ListBoxText* lbi = new Q3ListBoxText(presetList, name); + mtlist.push_back(mt); + presetList->setCurrentItem(lbi); + } + +//--------------------------------------------------------- +// presetDelete +//--------------------------------------------------------- + +void MidiTransformerDialog::presetDelete() + { + if (data->cindex != -1) { + iMidiTransformation mt = mtlist.begin(); + for (int i = 0; i < data->cindex; ++i, ++mt) { + mtlist.erase(mt); + presetList->removeItem(data->cindex); + break; + } + } + } + +//--------------------------------------------------------- +// presetChanged +//--------------------------------------------------------- + +void MidiTransformerDialog::presetChanged(Q3ListBoxItem* item) + { + data->cindex = presetList->index(item); + iMidiTransformation i; + for (i = mtlist.begin(); i != mtlist.end(); ++i) { + if (item->text() == (*i)->name) { + data->cmt = *i; + break; + } + } + if (i == mtlist.end()) { + printf("MidiTransformerDialog::presetChanged: not found\n"); + return; + } + nameEntry->setText(data->cmt->name); + commentEntry->setText(data->cmt->comment); + + selEventOp->setCurrentItem(data->cmt->selEventOp); + selEventOpSel(data->cmt->selEventOp); + + for (unsigned i = 0; i < sizeof(eventTypeTable)/sizeof(*eventTypeTable); ++i) { + if (eventTypeTable[i] == data->cmt->selType) { + selType->setCurrentItem(i); + break; + } + } + + selVal1Op->setCurrentItem(data->cmt->selVal1); + selVal1OpSel(data->cmt->selVal1); + + selVal2Op->setCurrentItem(data->cmt->selVal2); + selVal2OpSel(data->cmt->selVal2); + + selLenOp->setCurrentItem(data->cmt->selLen); + selLenOpSel(data->cmt->selLen); + + selRangeOp->setCurrentItem(data->cmt->selRange); + selRangeOpSel(data->cmt->selRange); + + funcOp->setCurrentItem(data->cmt->funcOp); + funcOpSel(data->cmt->funcOp); + + // TransformOperator procEvent: Keep, Fix + procEventOp->setCurrentItem(data->cmt->procEvent == Fix); + + procEventOpSel(data->cmt->procEvent); + + procVal1Op->setCurrentItem(data->cmt->procVal1); + procVal1OpSel(data->cmt->procVal1); + + for (unsigned i = 0; i < sizeof(procVal2Map)/sizeof(*procVal2Map); ++i) { + if (procVal2Map[i] == data->cmt->procVal2) { + procVal2Op->setCurrentItem(i); + break; + } + } + procLenOp->setCurrentItem(data->cmt->procLen); + procLenOpSel(data->cmt->procLen); + + procPosOp->setCurrentItem(data->cmt->procPos); + procPosOpSel(data->cmt->procPos); + + selVal1aChanged(data->cmt->selVal1a); + selVal1bChanged(data->cmt->selVal1b); + selVal2a->setValue(data->cmt->selVal2a); + selVal2b->setValue(data->cmt->selVal2b); + selLenA->setValue(data->cmt->selLenA); + selLenB->setValue(data->cmt->selLenB); + selBarA->setValue(data->cmt->selRangeA); + selBarB->setValue(data->cmt->selRangeB); + procVal1a->setValue(data->cmt->procVal1a); + procVal1b->setValue(data->cmt->procVal1b); + procVal2a->setValue(data->cmt->procVal2a); + procVal2b->setValue(data->cmt->procVal2b); + procLenA->setValue(data->cmt->procLenA); + procPosA->setValue(data->cmt->procPosA); + funcQuantVal->setValue(data->cmt->quantVal); + + selectedTracks->setChecked(data->cmt->selectedTracks); + selectedTracksChanged(data->cmt->selectedTracks); + insideLoop->setChecked(data->cmt->insideLoop); + insideLoopChanged(data->cmt->insideLoop); + } + +//--------------------------------------------------------- +// nameChanged +//--------------------------------------------------------- + +void MidiTransformerDialog::nameChanged(const QString& s) + { + data->cmt->name = s; + Q3ListBoxItem* item = presetList->item(data->cindex); + if (s != item->text()) { + disconnect(presetList, SIGNAL(highlighted(Q3ListBoxItem*)), + this, SLOT(presetChanged(Q3ListBoxItem*))); + presetList->changeItem(s, data->cindex); + connect(presetList, SIGNAL(highlighted(Q3ListBoxItem*)), + SLOT(presetChanged(Q3ListBoxItem*))); + } + } + +//--------------------------------------------------------- +// commentChanged +//--------------------------------------------------------- + +void MidiTransformerDialog::commentChanged() + { + data->cmt->comment = commentEntry->text(); + } + +//--------------------------------------------------------- +// selVal1aChanged +//--------------------------------------------------------- + +void MidiTransformerDialog::selVal1aChanged(int val) + { + data->cmt->selVal1a = val; + if ((data->cmt->selEventOp != All) + && (data->cmt->selType == Note)) { + selVal1a->setSuffix(" - " + pitch2string(val)); + } + else + selVal1a->setSuffix(QString("")); + } + +//--------------------------------------------------------- +// selVal1bChanged +//--------------------------------------------------------- + +void MidiTransformerDialog::selVal1bChanged(int val) + { + data->cmt->selVal1b = val; + if ((data->cmt->selEventOp != All) + && (data->cmt->selType == Note)) { + selVal1b->setSuffix(" - " + pitch2string(val)); + } + else + selVal1b->setSuffix(QString("")); + } + +//--------------------------------------------------------- +// selVal2aChanged +//--------------------------------------------------------- + +void MidiTransformerDialog::selVal2aChanged(int val) + { + data->cmt->selVal2a = val; + } + +//--------------------------------------------------------- +// selVal2bChanged +//--------------------------------------------------------- + +void MidiTransformerDialog::selVal2bChanged(int val) + { + data->cmt->selVal2b = val; + } + +//--------------------------------------------------------- +// selLenAChanged +//--------------------------------------------------------- + +void MidiTransformerDialog::selLenAChanged(int val) + { + data->cmt->selLenA = val; + } + +//--------------------------------------------------------- +// selLenBChanged +//--------------------------------------------------------- + +void MidiTransformerDialog::selLenBChanged(int val) + { + data->cmt->selLenB = val; + } + +//--------------------------------------------------------- +// selBarAChanged +//--------------------------------------------------------- + +void MidiTransformerDialog::selBarAChanged(int val) + { + data->cmt->selRangeA = val; + } + +//--------------------------------------------------------- +// selBarBChanged +//--------------------------------------------------------- + +void MidiTransformerDialog::selBarBChanged(int val) + { + data->cmt->selRangeB = val; + } + +//--------------------------------------------------------- +// procVal1aChanged +//--------------------------------------------------------- + +void MidiTransformerDialog::procVal1aChanged(int val) + { + data->cmt->procVal1a = val; + } + +//--------------------------------------------------------- +// procVal1bChanged +//--------------------------------------------------------- + +void MidiTransformerDialog::procVal1bChanged(int val) + { + data->cmt->procVal1b = val; + } + +//--------------------------------------------------------- +// procVal2aChanged +//--------------------------------------------------------- + +void MidiTransformerDialog::procVal2aChanged(int val) + { + data->cmt->procVal2a = val; + } + +//--------------------------------------------------------- +// procVal2bChanged +//--------------------------------------------------------- + +void MidiTransformerDialog::procVal2bChanged(int val) + { + data->cmt->procVal2b = val; + } + +//--------------------------------------------------------- +// procLenAChanged +//--------------------------------------------------------- + +void MidiTransformerDialog::procLenAChanged(int val) + { + data->cmt->procLenA = val; + } + +//--------------------------------------------------------- +// procPosAChanged +//--------------------------------------------------------- + +void MidiTransformerDialog::procPosAChanged(int val) + { + data->cmt->procPosA = val; + } + +//--------------------------------------------------------- +// funcQuantValSel +//--------------------------------------------------------- + +void MidiTransformerDialog::funcQuantValSel(int val) + { + data->cmt->quantVal = val; + } + +//--------------------------------------------------------- +// processAllChanged +//--------------------------------------------------------- + +void MidiTransformerDialog::processAllChanged(bool val) + { + if (val == true) { + selectedTracks->setChecked(false); + insideLoop->setChecked(false); + data->cmt->selectedTracks = false; + data->cmt->insideLoop = false; + } + } + +//--------------------------------------------------------- +// selectedTracksChanged +//--------------------------------------------------------- + +void MidiTransformerDialog::selectedTracksChanged(bool val) + { + data->cmt->selectedTracks = val; + processAll->setChecked(!val && !data->cmt->insideLoop); + } + +//--------------------------------------------------------- +// insideLoopChanged +//--------------------------------------------------------- + +void MidiTransformerDialog::insideLoopChanged(bool val) + { + data->cmt->insideLoop = val; + processAll->setChecked(!data->cmt->selectedTracks && !val); + } + diff --git a/attic/muse_qt4_evolution/muse/miditransform.h b/attic/muse_qt4_evolution/muse/miditransform.h new file mode 100644 index 00000000..1931ce78 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/miditransform.h @@ -0,0 +1,113 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MIDITRANSFORM_H__ +#define __MIDITRANSFORM_H__ + +#include "widgets/transformbase.h" + +class MidiTransformation; +class MidiTransformPrivate; +class Event; +class Part; + +namespace AL { + class Xml; + }; +using AL::Xml; + +enum ValOp { + All=0, Ignore=0, Equal=1, Unequal=2, Higher=3, Lower=4, + Inside=5, Outside=6 + }; + +enum TransformFunction { + Select, Quantize, Delete, Transform, Insert, Copy, Extract + }; + +enum TransformOperator { + Keep, Plus, Minus, Multiply, Divide, Fix, Value, Invert, + ScaleMap, Flip, Dynamic, Random + }; + +//--------------------------------------------------------- +// MidiTransformDialog +//--------------------------------------------------------- + +class MidiTransformerDialog : public MidiTransformDialogBase { + Q_OBJECT + MidiTransformPrivate* data; + + virtual void accept(); +// virtual void reject(); + void setValOp(QWidget* a, QWidget* b, ValOp op); + void processEvent(Event&, Part*, Part*); + bool isSelected(Event&, Part*); + void transformEvent(Event&, Part*, Part*); + + private slots: + void apply(); + void presetNew(); + void presetDelete(); + + void selEventOpSel(int); + void selTypeSel(int); + void selVal1OpSel(int); + void selVal2OpSel(int); + void selLenOpSel(int); + void selRangeOpSel(int); + void procEventOpSel(int); + void procEventTypeSel(int); + void procVal1OpSel(int); + void procVal2OpSel(int); + void procLenOpSel(int); + void procPosOpSel(int); + void funcOpSel(int); + void presetChanged(QListWidgetItem*); + void nameChanged(const QString&); + void commentChanged(); + void selVal1aChanged(int); + void selVal1bChanged(int); + void selVal2aChanged(int); + void selVal2bChanged(int); + void selLenAChanged(int); + void selLenBChanged(int); + void selBarAChanged(int); + void selBarBChanged(int); + void procVal1aChanged(int); + void procVal1bChanged(int); + void procVal2aChanged(int); + void procVal2bChanged(int); + void procLenAChanged(int); + void procPosAChanged(int); + void funcQuantValSel(int); + void processAllChanged(bool); + void selectedTracksChanged(bool); + void insideLoopChanged(bool); + + public: + MidiTransformerDialog(QWidget* parent = 0, const char* name = 0, + bool modal = false, Qt::WFlags fl = 0); + ~MidiTransformerDialog(); + }; + +extern void writeMidiTransforms(Xml& xml); +extern void readMidiTransform(QDomNode); +#endif diff --git a/attic/muse_qt4_evolution/muse/mixer.cpp b/attic/muse_qt4_evolution/muse/mixer.cpp new file mode 100644 index 00000000..b3e5ce06 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/mixer.cpp @@ -0,0 +1,397 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "muse.h" +#include "mixer.h" +#include "song.h" +#include "icons.h" +#include "astrip.h" +#include "mstrip.h" +#include "routedialog.h" +#include "synth.h" +#include "midiinport.h" +#include "midioutport.h" + +extern void populateAddTrack(QMenu* addTrack); + +//--------------------------------------------------------- +// Mixer +// +// inputs | synthis | tracks | groups | master +//--------------------------------------------------------- + +Mixer::Mixer(QWidget* parent, MixerConfig* c) + : QMainWindow(parent) + { + mustUpdateMixer = false; + cfg = c; + routingDialog = 0; + setWindowTitle(tr("MusE: Mixer")); + setWindowIcon(*museIcon); + + QMenu* menuCreate = menuBar()->addMenu(tr("&Create")); + populateAddTrack(menuCreate); + + menuView = menuBar()->addMenu(tr("&View")); + routingAction = menuView->addAction(tr("Routing"), this, SLOT(toggleRouteDialog())); + routingAction->setCheckable(true); + + showMidiTracksId = menuView->addAction(tr("Show Midi Tracks")); + showMidiOutPortId = menuView->addAction(tr("Show Midi Out Ports")); + showMidiInPortId = menuView->addAction(tr("Show Midi In Ports")); + + menuView->addSeparator(); + + showWaveTracksId = menuView->addAction(tr("Show Wave Tracks")); + showOutputTracksId = menuView->addAction(tr("Show Output Tracks")); + showGroupTracksId = menuView->addAction(tr("Show Group Tracks")); + showInputTracksId = menuView->addAction(tr("Show Input Tracks")); + showSyntiTracksId = menuView->addAction(tr("Show Synthesizer")); + connect(menuView, SIGNAL(triggered(QAction*)), SLOT(showTracksChanged(QAction*))); + + showMidiTracksId->setCheckable(true); + showMidiInPortId->setCheckable(true); + showMidiOutPortId->setCheckable(true); + showWaveTracksId->setCheckable(true); + showOutputTracksId->setCheckable(true); + showGroupTracksId->setCheckable(true); + showInputTracksId->setCheckable(true); + showSyntiTracksId->setCheckable(true); + + QScrollArea* view = new QScrollArea; + view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setCentralWidget(view); + + central = new QWidget; + layout = new QHBoxLayout; + central->setLayout(layout); + layout->setSpacing(0); + layout->setMargin(0); + view->setWidget(central); + view->setWidgetResizable(true); + + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + connect(muse, SIGNAL(configChanged()), SLOT(configChanged())); + song->update(); // calls update mixer + } + +//--------------------------------------------------------- +// addStrip +//--------------------------------------------------------- + +void Mixer::addStrip(Track* t, int idx) + { + StripList::iterator si = stripList.begin(); + for (int i = 0; i < idx; ++i) { + if (si != stripList.end()) + ++si; + } + if (si != stripList.end() && (*si)->getTrack() == t) + return; + + StripList::iterator nsi = si; + ++nsi; + if (si != stripList.end() + && nsi != stripList.end() + && (*nsi)->getTrack() == t) { + layout->removeWidget(*si); + delete *si; + stripList.erase(si); + } + else { + Strip* strip; + switch(t->type()) { + case Track::MIDI_IN: + strip = new MidiInPortStrip(this, (MidiInPort*)t, true); + break; + case Track::MIDI_OUT: + strip = new MidiOutPortStrip(this, (MidiOutPort*)t, true); + break; + case Track::MIDI: + strip = new MidiStrip(this, (MidiTrack*)t, true); + break; + case Track::MIDI_SYNTI: + strip = new MidiSyntiStrip(this, (MidiSynti*)t, true); + break; + default: + strip = new AudioStrip(this, (AudioTrack*)t, true); + break; + } + layout->insertWidget(idx, strip); + stripList.insert(si, strip); + strip->show(); + } + } + +//--------------------------------------------------------- +// clear +//--------------------------------------------------------- + +void Mixer::clear() + { + QLayoutItem* i; + while ((i = layout->takeAt(0))) { + if (i->widget()) + delete i->widget(); + delete i; + } + stripList.clear(); + } + +//--------------------------------------------------------- +// updateMixer +//--------------------------------------------------------- + +void Mixer::updateMixer(int action) + { + showMidiTracksId->setChecked(cfg->showMidiTracks); + showMidiInPortId->setChecked(cfg->showMidiInPorts); + showMidiOutPortId->setChecked(cfg->showMidiOutPorts); + showWaveTracksId->setChecked(cfg->showWaveTracks); + showOutputTracksId->setChecked(cfg->showOutputTracks); + showGroupTracksId->setChecked(cfg->showGroupTracks); + showInputTracksId->setChecked(cfg->showInputTracks); + showSyntiTracksId->setChecked(cfg->showSyntiTracks); + + if (action == STRIP_REMOVED) { + foreach(Strip* strip, stripList) { + Track* track = strip->getTrack(); + if (song->trackExists(track)) + continue; + layout->removeWidget(strip); + delete strip; + stripList.removeAt(stripList.indexOf(strip)); + } + int idx = stripList.size(); + setMaximumWidth(STRIP_WIDTH * idx + 4); + central->setFixedWidth(STRIP_WIDTH * idx); + if (idx < 4) + setMinimumWidth(idx * STRIP_WIDTH + 4); + return; + } + + clear(); + + int idx = 0; + //--------------------------------------------------- + // generate Input Strips + //--------------------------------------------------- + + if (cfg->showInputTracks) { + InputList* itl = song->inputs(); + for (iAudioInput i = itl->begin(); i != itl->end(); ++i) + addStrip(*i, idx++); + } + + //--------------------------------------------------- + // Synthesizer Strips + //--------------------------------------------------- + + if (cfg->showSyntiTracks) { + SynthIList* sl = song->syntis(); + for (iSynthI i = sl->begin(); i != sl->end(); ++i) + addStrip(*i, idx++); + } + + //--------------------------------------------------- + // generate Wave Track Strips + //--------------------------------------------------- + + if (cfg->showWaveTracks) { + WaveTrackList* wtl = song->waves(); + for (iWaveTrack i = wtl->begin(); i != wtl->end(); ++i) + addStrip(*i, idx++); + } + + //--------------------------------------------------- + // generate Midi strips + //--------------------------------------------------- + + if (cfg->showMidiInPorts) { + MidiInPortList* mpl = song->midiInPorts(); + for (iMidiInPort i = mpl->begin(); i != mpl->end(); ++i) + addStrip(*i, idx++); + } + + if (cfg->showMidiSyntiPorts) { + MidiSyntiList* mpl = song->midiSyntis(); + for (iMidiSynti i = mpl->begin(); i != mpl->end(); ++i) + addStrip(*i, idx++); + } + + if (cfg->showMidiTracks) { + MidiTrackList* mtl = song->midis(); + for (iMidiTrack i = mtl->begin(); i != mtl->end(); ++i) + addStrip(*i, idx++); + } + + if (cfg->showMidiOutPorts) { + MidiOutPortList* mpl = song->midiOutPorts(); + for (iMidiOutPort i = mpl->begin(); i != mpl->end(); ++i) + addStrip(*i, idx++); + } + + //--------------------------------------------------- + // Groups + //--------------------------------------------------- + + if (cfg->showGroupTracks) { + GroupList* gtl = song->groups(); + for (iAudioGroup i = gtl->begin(); i != gtl->end(); ++i) + addStrip(*i, idx++); + } + + //--------------------------------------------------- + // Master + //--------------------------------------------------- + + if (cfg->showOutputTracks) { + OutputList* otl = song->outputs(); + for (iAudioOutput i = otl->begin(); i != otl->end(); ++i) + addStrip(*i, idx++); + } + setMaximumWidth(STRIP_WIDTH * idx + 4); + central->setFixedWidth(STRIP_WIDTH * idx); + if (idx < 4) + setMinimumWidth(idx * STRIP_WIDTH + 4); + layout->update(); + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void Mixer::songChanged(int flags) + { + int action = NO_UPDATE; + if (flags == -1) + action = UPDATE_ALL; + else { + if (flags & SC_TRACK_REMOVED) + action |= STRIP_REMOVED; + if (flags & SC_TRACK_INSERTED) + action |= STRIP_INSERTED; + } + if (action != NO_UPDATE) + updateMixer(action); + } + +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void Mixer::closeEvent(QCloseEvent* e) + { + emit closed(); + e->accept(); + } + +//--------------------------------------------------------- +// toggleRouteDialog +//--------------------------------------------------------- + +void Mixer::toggleRouteDialog() + { + showRouteDialog(routingAction->isChecked()); + } + +//--------------------------------------------------------- +// showRouteDialog +//--------------------------------------------------------- + +void Mixer::showRouteDialog(bool on) + { + if (on && routingDialog == 0) { + routingDialog = new RouteDialog(this); + connect(routingDialog, SIGNAL(closed()), SLOT(routingDialogClosed())); + } + if (routingDialog) + routingDialog->setShown(on); + routingAction->setChecked(on); + } + +//--------------------------------------------------------- +// routingDialogClosed +//--------------------------------------------------------- + +void Mixer::routingDialogClosed() + { + routingAction->setChecked(false); + } + +//--------------------------------------------------------- +// showTracksChanged +//--------------------------------------------------------- + +void Mixer::showTracksChanged(QAction* id) + { + bool val = id->isChecked(); + if (id == showMidiTracksId) + cfg->showMidiTracks = val; + else if (id == showOutputTracksId) + cfg->showOutputTracks = val; + else if (id == showWaveTracksId) + cfg->showWaveTracks = val; + else if (id == showGroupTracksId) + cfg->showGroupTracks = val; + else if (id == showInputTracksId) + cfg->showInputTracks = val; + else if (id == showSyntiTracksId) + cfg->showSyntiTracks = val; + else if (id == showMidiInPortId) + cfg->showMidiInPorts = val; + else if (id == showMidiOutPortId) + cfg->showMidiOutPorts = val; + updateMixer(UPDATE_ALL); + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void Mixer::write(Xml& xml, const char* name) + { + xml.stag(QString(name)); + xml.tag("geometry", geometry()); + xml.tag("showMidiTracks", cfg->showMidiTracks); + xml.tag("showOutputTracks", cfg->showOutputTracks); + xml.tag("showWaveTracks", cfg->showWaveTracks); + xml.tag("showGroupTracks", cfg->showGroupTracks); + xml.tag("showInputTracks", cfg->showInputTracks); + xml.tag("showSyntiTracks", cfg->showSyntiTracks); + xml.tag("showMidiInPorts", cfg->showMidiInPorts); + xml.tag("showMidiOutPorts", cfg->showMidiOutPorts); + xml.etag(name); + } + +//--------------------------------------------------------- +// heartBeat +//--------------------------------------------------------- + +void Mixer::heartBeat() + { + if (mustUpdateMixer) { + updateMixer(STRIP_INSERTED | STRIP_REMOVED); + mustUpdateMixer = false; + } + foreach(Strip* s, stripList) + s->heartBeat(); + } + diff --git a/attic/muse_qt4_evolution/muse/mixer.h b/attic/muse_qt4_evolution/muse/mixer.h new file mode 100644 index 00000000..62c526a6 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/mixer.h @@ -0,0 +1,95 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __AMIXER_H__ +#define __AMIXER_H__ + +#include "gconfig.h" + +class Meter; +class Track; +class Slider; +class Knob; +class RouteDialog; +class Strip; + +typedef QList StripList; + +//--------------------------------------------------------- +// Mixer +//--------------------------------------------------------- + +class Mixer : public QMainWindow { + Q_OBJECT + + MixerConfig* cfg; + StripList stripList; + QWidget* central; + QHBoxLayout* lbox; + Strip* master; + QHBoxLayout* layout; + QMenu* menuView; + RouteDialog* routingDialog; + QAction* routingAction; + + QAction* routingId; + QAction* showMidiTracksId; + QAction* showMidiInPortId; + QAction* showMidiOutPortId; + QAction* showOutputTracksId; + QAction* showWaveTracksId; + QAction* showGroupTracksId; + QAction* showInputTracksId; + QAction* showSyntiTracksId; + + bool mustUpdateMixer; + + virtual void closeEvent(QCloseEvent*); + void addStrip(Track*, int); + void showRouteDialog(bool); + + enum { + NO_UPDATE = 0, + STRIP_INSERTED = 1, + STRIP_REMOVED = 2, + UPDATE_ALL = 4 + }; + void updateMixer(int); + + signals: + void closed(); + + private slots: + void songChanged(int); + void configChanged() { songChanged(-1); } + void toggleRouteDialog(); + void routingDialogClosed(); + void showTracksChanged(QAction*); + + public: + Mixer(QWidget* parent, MixerConfig*); + void clear(); + void write(Xml&, const char* name); + void setUpdateMixer() { mustUpdateMixer = true; } + void heartBeat(); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/mstrip.cpp b/attic/muse_qt4_evolution/muse/mstrip.cpp new file mode 100644 index 00000000..64b8132c --- /dev/null +++ b/attic/muse_qt4_evolution/muse/mstrip.cpp @@ -0,0 +1,1211 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2008 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "midictrl.h" +#include "mstrip.h" +#include "audio.h" +#include "song.h" +#include "mixer.h" +#include "widgets/simplebutton.h" +#include "widgets/utils.h" +#include "audiodev.h" +#include "synth.h" +#include "midirack.h" +#include "midiplugin.h" +#include "midiinport.h" +#include "midioutport.h" + +#include "awl/midimslider.h" +#include "awl/midimeter.h" +#include "awl/midivolentry.h" +#include "awl/midipanentry.h" +#include "awl/midipanknob.h" +#include "awl/knob.h" + +enum { KNOB_PAN, KNOB_CHOR_SEND, KNOB_VAR_SEND, KNOB_REV_SEND }; + +//--------------------------------------------------------- +// addMidiTracks +// input == true +// add routes from all possible midi tracks to input +// route list of track(channel) +// input == false +// add routes to all midi tracks to output route +// list of track(channel) +// +// Note: midi tracks do not have channels +//--------------------------------------------------------- + +void addMidiTracks(QMenu* menu, Track* track, int channel, bool input) + { + RouteList* rl = input ? track->inRoutes() : track->outRoutes(); + RouteNode a(track, channel, RouteNode::TRACK); + + MidiTrackList* tl = song->midis(); + for (iMidiTrack i = tl->begin();i != tl->end(); ++i) { + MidiTrack* track = *i; + QAction* action = menu->addAction(track->name()); + action->setCheckable(true); + RouteNode b(track); + Route r = input ? Route(b, a) : Route(a, b); + action->setData(QVariant::fromValue(r)); + action->setChecked(rl->indexOf(r) != -1); + } + } + +//--------------------------------------------------------- +// addMidiInPorts +// can only be added to input route lists +//--------------------------------------------------------- + +void Strip::addMidiInPorts(QMenu* menu, Track* dtrack, int channel) + { + RouteList* rl = dtrack->inRoutes(); + RouteNode dst(dtrack, channel, RouteNode::TRACK); + + MidiInPortList* tl = song->midiInPorts(); + for (iMidiInPort i = tl->begin();i != tl->end(); ++i) { + MidiInPort* track = *i; + QMenu* m = menu->addMenu(track->name()); + for (int ch = 0; ch < MIDI_CHANNELS; ++ch) { + QAction* a = m->addAction(QString("Channel %1").arg(ch+1)); + a->setCheckable(true); + RouteNode src(track, ch, RouteNode::TRACK); + Route r = Route(src, dst); + a->setData(QVariant::fromValue(r)); + a->setChecked(rl->indexOf(r) != -1); + } + } + } + +//--------------------------------------------------------- +// addMidiOutPorts +// can only be added to output route lists +//--------------------------------------------------------- + +void Strip::addMidiOutPorts(QMenu* menu, Track* strack, int channel) + { + RouteList* rl = strack->outRoutes(); + RouteNode src(strack, channel, RouteNode::TRACK); + + MidiOutPortList* tl = song->midiOutPorts(); + for (iMidiOutPort i = tl->begin();i != tl->end(); ++i) { + MidiOutPort* op = *i; + QMenu* m = menu->addMenu(op->name()); + for (int ch = 0; ch < MIDI_CHANNELS; ++ch) { + QAction* a = m->addAction(QString("Channel %1").arg(ch+1)); + a->setCheckable(true); + RouteNode dst(op, ch, RouteNode::TRACK); + Route r = Route(src, dst); + a->setData(QVariant::fromValue(r)); + a->setChecked(rl->indexOf(r) != -1); + } + } + } + +//--------------------------------------------------------- +// addSyntiPorts +// can only be added to output route lists +//--------------------------------------------------------- + +static void addSyntiPorts(QMenu* menu, Track* strack, int channel) + { + RouteList* rl = strack->outRoutes(); + RouteNode src(strack, channel, RouteNode::TRACK); + + SynthIList* sl = song->syntis(); + for (iSynthI i = sl->begin(); i != sl->end(); ++i) { + SynthI* sy = *i; + QMenu* m = menu->addMenu(sy->name()); + for (int ch = 0; ch < MIDI_CHANNELS; ++ch) { + QAction* a = m->addAction(QString("Channel %1").arg(ch+1)); + a->setCheckable(true); + RouteNode dst(sy, ch, RouteNode::TRACK); + Route r = Route(src, dst); + a->setData(QVariant::fromValue(r)); + a->setChecked(rl->indexOf(r) != -1); + } + } + } + +//--------------------------------------------------------- +// addKnob +//--------------------------------------------------------- + +void MidiStrip::addKnob(int ctrl, int idx, const QString& tt, const QString& label, + const char* slot, bool enabled, int row) + { + Awl::FloatEntry* dl; + Awl::Knob* knob; + + if (idx == KNOB_PAN) { + dl = new Awl::MidiPanEntry(this); + knob = new Awl::MidiPanKnob(this); + } + else { + dl = new Awl::MidiVolEntry(this); + knob = new Awl::Knob(this); + knob->setRange(0.0, 127.0); + } + knob->setId(ctrl); + dl->setId(ctrl); + dl->setFrame(true); + + controller[idx].knob = knob; + knob->setToolTip(tt); + knob->setEnabled(enabled); + + controller[idx].dl = dl; + dl->setFixedSize(entrySize); + dl->setEnabled(enabled); + + QLabel* lb = new QLabel(label, this); + lb->setObjectName("knobLabel"); + controller[idx].lb = lb; + lb->setFixedSize(entrySize); + lb->setAlignment(Qt::AlignCenter); + lb->setEnabled(enabled); + + grid->addWidget(lb, row, 0); + grid->addWidget(dl, row+1, 0); + grid->addWidget(knob, row, 1, 2, 1); + + connect(knob, SIGNAL(valueChanged(double,int)), slot); + connect(dl, SIGNAL(valueChanged(double,int)), slot); + connect(knob, SIGNAL(sliderPressed(int)), SLOT(sliderPressed(int))); + connect(knob, SIGNAL(sliderReleased(int)), SLOT(sliderReleased(int))); + } + +//--------------------------------------------------------- +// MidiStrip +//--------------------------------------------------------- + +MidiStrip::MidiStrip(Mixer* m, MidiTrack* t, bool align) + : Strip(m, t, align) + { + volumeTouched = false; + panTouched = false; + reverbSendTouched = false; + variSendTouched = false; + chorusSendTouched = false; + + addKnob(CTRL_VARIATION_SEND, KNOB_VAR_SEND, tr("VariationSend"), tr("Var"), SLOT(ctrlChanged(double,int)), true, 1); + addKnob(CTRL_REVERB_SEND, KNOB_REV_SEND, tr("ReverbSend"), tr("Rev"), SLOT(ctrlChanged(double,int)), true, 3); + addKnob(CTRL_CHORUS_SEND, KNOB_CHOR_SEND, tr("ChorusSend"), tr("Cho"), SLOT(ctrlChanged(double,int)), true, 5); + + //--------------------------------------------------- + // slider, label, meter + //--------------------------------------------------- + + slider = new Awl::MidiMeterSlider(this); + slider->setId(CTRL_VOLUME); + slider->setFixedWidth(40); + grid->addWidget(slider, 7, 0, 1, 2, Qt::AlignRight); + + sl = new Awl::MidiVolEntry(this); + sl->setId(CTRL_VOLUME); + sl->setFixedHeight(entrySize.height()); + + connect(slider, SIGNAL(valueChanged(double,int)), SLOT(ctrlChanged(double, int))); + connect(slider, SIGNAL(sliderPressed(int)), SLOT(sliderPressed(int))); + connect(slider, SIGNAL(sliderReleased(int)), SLOT(sliderReleased(int))); + connect(sl, SIGNAL(valueChanged(double,int)), SLOT(ctrlChanged(double, int))); + grid->addWidget(sl, 8, 0, 1, 2); + + //--------------------------------------------------- + // pan, balance + //--------------------------------------------------- + + addKnob(CTRL_PANPOT, KNOB_PAN, tr("Pan/Balance"), tr("Pan"), SLOT(ctrlChanged(double,int)), true, 9); + + //--------------------------------------------------- + // --- record + // mute, solo + //--------------------------------------------------- + + SimpleButton* monitor = newMonitorButton(); + monitor->setFixedHeight(BUTTON_HEIGHT); + monitor->setChecked(track->monitor()); + connect(monitor, SIGNAL(clicked(bool)), SLOT(monitorToggled(bool))); + connect(t, SIGNAL(monitorChanged(bool)), monitor, SLOT(setChecked(bool))); + + SimpleButton* record = newRecordButton(); + record->setFixedHeight(BUTTON_HEIGHT); + record->setChecked(track->recordFlag()); + connect(record, SIGNAL(clicked(bool)), SLOT(recordToggled(bool))); + connect(t, SIGNAL(recordChanged(bool)), record, SLOT(setChecked(bool))); + + mute = newMuteButton(); + mute->setChecked(track->isMute()); + mute->setFixedHeight(BUTTON_HEIGHT); + connect(mute, SIGNAL(clicked(bool)), SLOT(muteToggled(bool))); + + solo = newSoloButton(); + solo->setFixedHeight(BUTTON_HEIGHT); + solo->setChecked(track->solo()); + connect(solo, SIGNAL(clicked(bool)), SLOT(soloToggled(bool))); + + grid->addWidget(monitor, 11, 0); + grid->addWidget(record, 11, 1); + grid->addWidget(mute, 12, 0); + grid->addWidget(solo, 12, 1); + + //--------------------------------------------------- + // automation mode + //--------------------------------------------------- + + addAutomationButtons(13); + + //--------------------------------------------------- + // routing + //--------------------------------------------------- + + iR = newInRouteButton(); + grid->addWidget(iR, 14, 0); + connect(iR->menu(), SIGNAL(aboutToShow()), SLOT(iRouteShow())); + connect(iR->menu(), SIGNAL(triggered(QAction*)), song, SLOT(routeChanged(QAction*))); + + oR = newOutRouteButton(); + grid->addWidget(oR, 14, 1); + connect(oR->menu(), SIGNAL(aboutToShow()), SLOT(oRouteShow())); + connect(oR->menu(), SIGNAL(triggered(QAction*)), song, SLOT(routeChanged(QAction*))); + + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + connect(track, SIGNAL(muteChanged(bool)), mute, SLOT(setChecked(bool))); + connect(track, SIGNAL(soloChanged(bool)), solo, SLOT(setChecked(bool))); + connect(track, SIGNAL(autoReadChanged(bool)), SLOT(autoChanged())); + connect(track, SIGNAL(autoWriteChanged(bool)), SLOT(autoChanged())); + connect(track, SIGNAL(controllerChanged(int)), SLOT(controllerChanged(int))); + autoChanged(); + controllerChanged(CTRL_VOLUME); + controllerChanged(CTRL_PANPOT); + controllerChanged(CTRL_VARIATION_SEND); + controllerChanged(CTRL_REVERB_SEND); + controllerChanged(CTRL_CHORUS_SEND); + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void MidiStrip::songChanged(int val) + { + if (val & SC_TRACK_MODIFIED) + updateLabel(); + } + +//--------------------------------------------------------- +// heartBeat +//--------------------------------------------------------- + +void MidiStrip::heartBeat() + { + double a = track->meter(0); // fast_log10(track->meter(0)) * .2f; + slider->setMeterVal(a * 0.008); + track->setMeter(0, a * 0.8); // hack + } + +//--------------------------------------------------------- +// controllerChanged +//--------------------------------------------------------- + +void MidiStrip::controllerChanged(int id) + { + CVal cv = track->ctrlVal(id); + double val = double(cv.i); + + switch (id) { + case CTRL_VOLUME: + if (!volumeTouched) + slider->setValue(val); + sl->setValue(val); + break; + case CTRL_PANPOT: + if (!panTouched) + controller[KNOB_PAN].knob->setValue(val); + controller[KNOB_PAN].dl->setValue(val); + break; + case CTRL_VARIATION_SEND: + if (!variSendTouched) + controller[KNOB_VAR_SEND].knob->setValue(val); + controller[KNOB_VAR_SEND].dl->setValue(val); + break; + case CTRL_REVERB_SEND: + if (!reverbSendTouched) + controller[KNOB_REV_SEND].knob->setValue(val); + controller[KNOB_REV_SEND].dl->setValue(val); + break; + case CTRL_CHORUS_SEND: + if (!chorusSendTouched) + controller[KNOB_CHOR_SEND].knob->setValue(val); + controller[KNOB_CHOR_SEND].dl->setValue(val); + break; + } + } + +//--------------------------------------------------------- +// ctrlChanged +// called when user changes controller +//--------------------------------------------------------- + +void MidiStrip::ctrlChanged(double val, int num) + { + int ival = int(val); + CVal cval; + cval.i = ival; + song->setControllerVal(track, num, cval); + } + +//--------------------------------------------------------- +// sliderPressed +//--------------------------------------------------------- + +void MidiStrip::sliderPressed(int id) + { + switch (id) { + case CTRL_VOLUME: volumeTouched = true; break; + case CTRL_PANPOT: panTouched = true; break; + case CTRL_VARIATION_SEND: variSendTouched = true; break; + case CTRL_REVERB_SEND: reverbSendTouched = true; break; + case CTRL_CHORUS_SEND: chorusSendTouched = true; break; + } + track->startAutoRecord(id); + } + +//--------------------------------------------------------- +// sliderReleased +//--------------------------------------------------------- + +void MidiStrip::sliderReleased(int id) + { + switch (id) { + case CTRL_VOLUME: volumeTouched = false; break; + case CTRL_PANPOT: panTouched = false; break; + case CTRL_VARIATION_SEND: variSendTouched = false; break; + case CTRL_REVERB_SEND: reverbSendTouched = false; break; + case CTRL_CHORUS_SEND: chorusSendTouched = false; break; + } + track->stopAutoRecord(id); + } + +//--------------------------------------------------------- +// muteToggled +//--------------------------------------------------------- + +void MidiStrip::muteToggled(bool val) + { + song->setMute(track, val); + } + +//--------------------------------------------------------- +// soloToggled +//--------------------------------------------------------- + +void MidiStrip::soloToggled(bool val) + { + song->setSolo(track, val); + } + +//--------------------------------------------------------- +// autoChanged +//--------------------------------------------------------- + +void MidiStrip::autoChanged() + { + bool ar = track->autoRead(); + bool aw = track->autoWrite(); + + // controller are enabled if + // autoRead is off + // autoRead and autoWrite are on (touch mode) + + bool ec = !ar || (ar && aw); + for (unsigned i = 0; i < sizeof(controller)/sizeof(*controller); ++i) { + controller[i].knob->setEnabled(ec); + controller[i].dl->setEnabled(ec); + } + slider->setEnabled(ec); + sl->setEnabled(ec); + } + +//--------------------------------------------------------- +// autoReadToggled +//--------------------------------------------------------- + +void MidiStrip::autoReadToggled(bool val) + { + song->setAutoRead(track, val); + } + +//--------------------------------------------------------- +// autoWriteToggled +//--------------------------------------------------------- + +void MidiStrip::autoWriteToggled(bool val) + { + song->setAutoWrite(track, val); + } + +//--------------------------------------------------------- +// iRouteShow +//--------------------------------------------------------- + +void MidiStrip::iRouteShow() + { + QMenu* pup = iR->menu(); + pup->clear(); + addMidiInPorts(pup, track, -1); // add midi inputs to menu + } + +//--------------------------------------------------------- +// oRouteShow +//--------------------------------------------------------- + +void MidiStrip::oRouteShow() + { + QMenu* pup = oR->menu(); + pup->clear(); + addMidiOutPorts(pup, track, -1); + addSyntiPorts(pup, track, -1); + } + +//--------------------------------------------------------- +// monitorToggled +//--------------------------------------------------------- + +void MidiStrip::monitorToggled(bool val) + { + song->setMonitor(track, val); + } + +//--------------------------------------------------------- +// recordToggled +//--------------------------------------------------------- + +void MidiStrip::recordToggled(bool val) + { + song->setRecordFlag(track, !val); + } + +//--------------------------------------------------------- +// MidiOutPortStrip +//--------------------------------------------------------- + +MidiOutPortStrip::MidiOutPortStrip(Mixer* m, MidiOutPort* t, bool align) + : Strip(m, t, align) + { + //--------------------------------------------------- + // plugin rack + //--------------------------------------------------- + + MidiRack* rack = new MidiRack(this, t); + rack->setFixedHeight(rack->sizeHint().height()+2); + grid->addWidget(rack, 1, 0, 1, 2); + + + if (_align) + grid->setRowMinimumHeight(2, STRIP_WIDTH/2); + + volumeTouched = false; + + //--------------------------------------------------- + // slider, label, meter + //--------------------------------------------------- + + slider = new Awl::MidiMeterSlider(this); + slider->setId(CTRL_MASTER_VOLUME); + slider->setRange(0.0, 1024*16.0); + slider->setFixedWidth(40); + grid->addWidget(slider, 3, 0, 1, 2, Qt::AlignRight); + + sl = new Awl::MidiVolEntry(this); + sl->setId(CTRL_MASTER_VOLUME); + sl->setMax(128 * 128 - 1); +// sl->setFont(config.fonts[1]); + sl->setFixedHeight(entrySize.height()); + + controllerChanged(CTRL_MASTER_VOLUME); + + connect(slider, SIGNAL(valueChanged(double,int)), SLOT(ctrlChanged(double, int))); + connect(slider, SIGNAL(sliderPressed(int)), SLOT(sliderPressed(int))); + connect(slider, SIGNAL(sliderReleased(int)), SLOT(sliderReleased(int))); + connect(sl, SIGNAL(valueChanged(double,int)), SLOT(ctrlChanged(double, int))); + grid->addWidget(sl, 4, 0, 1, 2); + + //--------------------------------------------------- + // pan, balance + //--------------------------------------------------- + + if (_align) + grid->setRowMinimumHeight(5, entrySize.height() * 2); + + //--------------------------------------------------- + // sync + // mute, solo + //--------------------------------------------------- + + sync = newSyncButton(); + sync->setFixedHeight(BUTTON_HEIGHT); + sync->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + sync->setChecked(((MidiOutPort*)track)->sendSync()); + grid->addWidget(sync, 6, 0, 1, 2); + connect(sync, SIGNAL(clicked(bool)), SLOT(syncToggled(bool))); + connect(track, SIGNAL(sendSyncChanged(bool)), sync, SLOT(setChecked(bool))); + + mute = newMuteButton(); + mute->setChecked(track->isMute()); + mute->setFixedHeight(BUTTON_HEIGHT); + connect(mute, SIGNAL(clicked(bool)), SLOT(muteToggled(bool))); + + solo = newSoloButton(); + solo->setFixedHeight(BUTTON_HEIGHT); + solo->setChecked(track->solo()); + connect(solo, SIGNAL(clicked(bool)), SLOT(soloToggled(bool))); + + grid->addWidget(mute, 7, 0); + grid->addWidget(solo, 7, 1); + + //--------------------------------------------------- + // automation mode + //--------------------------------------------------- + + addAutomationButtons(8); + + //--------------------------------------------------- + // output routing + //--------------------------------------------------- + + iR = newInRouteButton(); + grid->addWidget(iR, 9, 0); + connect(iR->menu(), SIGNAL(aboutToShow()), SLOT(iRouteShow())); + connect(iR->menu(), SIGNAL(triggered(QAction*)), song, SLOT(routeChanged(QAction*))); + + oR = newOutRouteButton(); + grid->addWidget(oR, 9, 1); + connect(oR->menu(), SIGNAL(aboutToShow()), SLOT(oRouteShow())); + connect(oR->menu(), SIGNAL(triggered(QAction*)), song, SLOT(routeChanged(QAction*))); + + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + connect(track, SIGNAL(muteChanged(bool)), mute, SLOT(setChecked(bool))); + connect(track, SIGNAL(soloChanged(bool)), solo, SLOT(setChecked(bool))); + connect(track, SIGNAL(autoReadChanged(bool)), SLOT(autoChanged())); + connect(track, SIGNAL(autoWriteChanged(bool)), SLOT(autoChanged())); + autoChanged(); + controllerChanged(CTRL_MASTER_VOLUME); + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void MidiOutPortStrip::songChanged(int val) + { + if (val & SC_TRACK_MODIFIED) + updateLabel(); + } + +//--------------------------------------------------------- +// heartBeat +//--------------------------------------------------------- + +void MidiOutPortStrip::heartBeat() + { + double a = track->meter(0); // fast_log10(track->meter(0)) * .2f; + slider->setMeterVal(a * 0.008); + track->setMeter(0, a * 0.8); // hack + } + +//--------------------------------------------------------- +// ctrlChanged +//--------------------------------------------------------- + +void MidiOutPortStrip::ctrlChanged(double val, int num) + { + int ival = int(val); + CVal cval; + cval.i = ival; + song->setControllerVal(track, num, cval); + } + +//--------------------------------------------------------- +// sliderPressed +//--------------------------------------------------------- + +void MidiOutPortStrip::sliderPressed(int id) + { + switch (id) { + case CTRL_MASTER_VOLUME: volumeTouched = true; break; + } + track->startAutoRecord(id); + } + +//--------------------------------------------------------- +// sliderReleased +//--------------------------------------------------------- + +void MidiOutPortStrip::sliderReleased(int id) + { + switch (id) { + case CTRL_MASTER_VOLUME: volumeTouched = false; break; + } + track->stopAutoRecord(id); + } + +//--------------------------------------------------------- +// muteToggled +//--------------------------------------------------------- + +void MidiOutPortStrip::muteToggled(bool val) + { + song->setMute(track, val); + } + +//--------------------------------------------------------- +// soloToggled +//--------------------------------------------------------- + +void MidiOutPortStrip::soloToggled(bool val) + { + song->setSolo(track, val); + } + +//--------------------------------------------------------- +// autoChanged +//--------------------------------------------------------- + +void MidiOutPortStrip::autoChanged() + { + bool ar = track->autoRead(); + bool aw = track->autoWrite(); + + // controller are enabled if + // autoRead is off + // autoRead and autoWrite are on (touch mode) + + bool ec = !ar || (ar && aw); + slider->setEnabled(ec); + sl->setEnabled(ec); + } + +//--------------------------------------------------------- +// autoReadToggled +//--------------------------------------------------------- + +void MidiOutPortStrip::autoReadToggled(bool val) + { + song->setAutoRead(track, val); + } + +//--------------------------------------------------------- +// autoWriteToggled +//--------------------------------------------------------- + +void MidiOutPortStrip::autoWriteToggled(bool val) + { + song->setAutoWrite(track, val); + } + +//--------------------------------------------------------- +// controllerChanged +//--------------------------------------------------------- + +void MidiOutPortStrip::controllerChanged(int id) + { + if (id == CTRL_MASTER_VOLUME) { + double val = double(track->ctrlVal(id).i); + if (!volumeTouched) + slider->setValue(val); + sl->setValue(val); + } + } + +//--------------------------------------------------------- +// iRouteShow +//--------------------------------------------------------- + +void MidiOutPortStrip::iRouteShow() + { + QMenu* pup = iR->menu(); + pup->clear(); + + for (int ch = 0; ch < MIDI_CHANNELS; ++ch) { + QMenu* m = pup->addMenu(QString("Channel %1").arg(ch+1)); + addMidiTracks(m, track, ch, true); + addMidiInPorts(m, track, ch); + } + } + +//--------------------------------------------------------- +// oRouteShow +//--------------------------------------------------------- + +void MidiOutPortStrip::oRouteShow() + { + QMenu* pup = oR->menu(); + pup->clear(); + RouteList* orl = track->outRoutes(); + + QList ol; + // + // add JACK midi ports to list + // + ol = audioDriver->inputPorts(true); + foreach (PortName ip, ol) { + QAction* oa = pup->addAction(ip.name); + oa->setCheckable(true); + RouteNode dst(ip.port, RouteNode::JACKMIDIPORT); + Route r = Route(RouteNode(track), dst); + oa->setData(QVariant::fromValue(r)); + oa->setChecked(orl->indexOf(r) != -1); + } + } + +//--------------------------------------------------------- +// syncToggled +//--------------------------------------------------------- + +void MidiOutPortStrip::syncToggled(bool val) const + { + ((MidiOutPort*)track)->setSendSync(val); + } + +//--------------------------------------------------------- +// MidiInPortStrip +//--------------------------------------------------------- + +MidiInPortStrip::MidiInPortStrip(Mixer* m, MidiInPort* t, bool align) + : Strip(m, t, align) + { + //--------------------------------------------------- + // plugin rack + //--------------------------------------------------- + + MidiRack* rack = new MidiRack(this, t); + rack->setFixedHeight(rack->sizeHint().height()+2); + grid->addWidget(rack, 1, 0, 1, 2); + + //--------------------------------------------------- + // input activity + //--------------------------------------------------- + + grid->setRowStretch(2, 100); + + QGridLayout* ag = new QGridLayout; + ag->setMargin(4); + ag->setSpacing(1); + QSvgRenderer sr; + QPainter painter; + + sr.load(QString(":/xpm/activeon.svg")); + QSize aSize(sr.defaultSize()); + activityOn = new QPixmap(aSize); + activityOn->fill(Qt::transparent); + painter.begin(activityOn); + sr.render(&painter); + painter.end(); + + sr.load(QString(":/xpm/activeoff.svg")); + activityOff = new QPixmap(aSize); + activityOff->fill(Qt::transparent); + painter.begin(activityOff); + sr.render(&painter); + painter.end(); + + for (int ch = MIDI_CHANNELS-1; ch >= 0; --ch) { + QLabel* l = new QLabel(QString("%1").arg(ch+1)); + l->setObjectName("midiChannelLabel"); + ag->addWidget(l, ch, 0, Qt::AlignCenter); + channelActivity[ch] = new QLabel; + ag->addWidget(channelActivity[ch], ch, 1, Qt::AlignCenter); + channelActivity[ch]->setPixmap(*activityOff); + activity[ch] = 0; + } + grid->addLayout(ag, 3, 0, 2, Qt::AlignHCenter); + + if (_align) + grid->setRowMinimumHeight(4, BUTTON_HEIGHT); + + //--------------------------------------------------- + // mute, solo + // or + // record, mixdownfile + //--------------------------------------------------- + + mute = newMuteButton(); + mute->setChecked(track->isMute()); + mute->setFixedHeight(BUTTON_HEIGHT); + connect(mute, SIGNAL(clicked(bool)), SLOT(muteToggled(bool))); + + solo = newSoloButton(); + solo->setFixedHeight(BUTTON_HEIGHT); + solo->setChecked(track->solo()); + connect(solo, SIGNAL(clicked(bool)), SLOT(soloToggled(bool))); + + grid->addWidget(mute, 5, 0); + grid->addWidget(solo, 5, 1); + + //--------------------------------------------------- + // output routing + //--------------------------------------------------- + + if (_align) + grid->setRowMinimumHeight(6, BUTTON_HEIGHT); + + iR = newInRouteButton(); + connect(iR->menu(), SIGNAL(aboutToShow()), SLOT(iRouteShow())); + connect(iR->menu(), SIGNAL(triggered(QAction*)), song, SLOT(routeChanged(QAction*))); + + oR = newOutRouteButton(); + connect(oR->menu(), SIGNAL(aboutToShow()), SLOT(oRouteShow())); + connect(oR->menu(), SIGNAL(triggered(QAction*)), song, SLOT(routeChanged(QAction*))); + + grid->addWidget(iR, 7, 0); + grid->addWidget(oR, 7, 1); + + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + connect(track, SIGNAL(muteChanged(bool)), mute, SLOT(setChecked(bool))); + connect(track, SIGNAL(soloChanged(bool)), solo, SLOT(setChecked(bool))); + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void MidiInPortStrip::songChanged(int val) + { + if (val & SC_TRACK_MODIFIED) + updateLabel(); + } + +//--------------------------------------------------------- +// heartBeat +//--------------------------------------------------------- + +void MidiInPortStrip::heartBeat() + { + for (int i = 0; i < MIDI_CHANNELS; ++i) { + bool isActive = inport()->checkActivity(i); + if (activity[i] != isActive) { + channelActivity[i]->setPixmap(isActive ? *activityOn : *activityOff); + activity[i] = isActive; + } + } + } + +//--------------------------------------------------------- +// muteToggled +//--------------------------------------------------------- + +void MidiInPortStrip::muteToggled(bool val) + { + song->setMute(track, val); + } + +//--------------------------------------------------------- +// soloToggled +//--------------------------------------------------------- + +void MidiInPortStrip::soloToggled(bool val) + { + song->setSolo(track, val); + } + +//--------------------------------------------------------- +// iRouteShow +//--------------------------------------------------------- + +void MidiInPortStrip::iRouteShow() + { + QMenu* pup = iR->menu(); + pup->clear(); + + RouteList* irl = track->inRoutes(); + + QList ol; + // + // add JACK midi ports to list + // + ol = audioDriver->outputPorts(true); + foreach (PortName ip, ol) { + QAction* action = pup->addAction(ip.name); + action->setCheckable(true); + RouteNode src(ip.port, RouteNode::JACKMIDIPORT); + Route r = Route(src, RouteNode(track)); + action->setData(QVariant::fromValue(r)); + action->setChecked(irl->indexOf(r) != -1); + } + } + +//--------------------------------------------------------- +// oRouteShow +//--------------------------------------------------------- + +void MidiInPortStrip::oRouteShow() + { + QMenu* pup = oR->menu(); + pup->clear(); + + for (int ch = 0; ch < MIDI_CHANNELS; ++ch) { + QMenu* m = pup->addMenu(QString("Channel %1").arg(ch+1)); + addMidiTracks(m, track, ch, false); + addSyntiPorts(m, track, ch); + addMidiOutPorts(m, track, ch); + } + } + +//--------------------------------------------------------- +// MidiSyntiStrip +//--------------------------------------------------------- + +MidiSyntiStrip::MidiSyntiStrip(Mixer* m, MidiSynti* t, bool align) + : Strip(m, t, align) + { + if (_align) + grid->setRowMinimumHeight(1, STRIP_WIDTH/2 * 3); + + volumeTouched = false; + + //--------------------------------------------------- + // slider, label, meter + //--------------------------------------------------- + + slider = new Awl::MidiMeterSlider(this); + slider->setId(CTRL_MASTER_VOLUME); + slider->setRange(0.0, 1024*16.0); + slider->setFixedWidth(40); + grid->addWidget(slider, 2, 0, 1, 2, Qt::AlignRight); + + sl = new Awl::MidiVolEntry(this); + sl->setId(CTRL_MASTER_VOLUME); +// sl->setFont(config.fonts[1]); + sl->setFixedHeight(entrySize.height()); + + connect(slider, SIGNAL(valueChanged(double,int)), SLOT(ctrlChanged(double, int))); + connect(slider, SIGNAL(sliderPressed(int)), SLOT(sliderPressed(int))); + connect(slider, SIGNAL(sliderReleased(int)), SLOT(sliderReleased(int))); + connect(sl, SIGNAL(valueChanged(double,int)), SLOT(ctrlChanged(double, int))); + grid->addWidget(sl, 3, 0, 1, 2); + + //--------------------------------------------------- + // pan, balance + //--------------------------------------------------- + + if (_align) + grid->setRowMinimumHeight(4, STRIP_WIDTH); + + //--------------------------------------------------- + // sync + // mute, solo + //--------------------------------------------------- + + mute = newMuteButton(); + mute->setChecked(track->isMute()); + mute->setFixedHeight(BUTTON_HEIGHT); + connect(mute, SIGNAL(clicked(bool)), SLOT(muteToggled(bool))); + + solo = newSoloButton(); + solo->setFixedHeight(BUTTON_HEIGHT); + solo->setChecked(track->solo()); + connect(solo, SIGNAL(clicked(bool)), SLOT(soloToggled(bool))); + + grid->addWidget(mute, 5, 0); + grid->addWidget(solo, 5, 1); + + //--------------------------------------------------- + // automation mode + //--------------------------------------------------- + + addAutomationButtons(6); + + //--------------------------------------------------- + // output routing + //--------------------------------------------------- + + iR = newInRouteButton(); + grid->addWidget(iR, 7, 0); + connect(iR->menu(), SIGNAL(aboutToShow()), SLOT(iRouteShow())); + connect(iR->menu(), SIGNAL(triggered(QAction*)), song, SLOT(routeChanged(QAction*))); + + oR = newOutRouteButton(); + grid->addWidget(oR, 7, 1); + connect(oR->menu(), SIGNAL(aboutToShow()), SLOT(oRouteShow())); + connect(oR->menu(), SIGNAL(triggered(QAction*)), song, SLOT(routeChanged(QAction*))); + + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + connect(track, SIGNAL(muteChanged(bool)), mute, SLOT(setChecked(bool))); + connect(track, SIGNAL(soloChanged(bool)), solo, SLOT(setChecked(bool))); + connect(track, SIGNAL(autoReadChanged(bool)), SLOT(autoChanged())); + connect(track, SIGNAL(autoWriteChanged(bool)), SLOT(autoChanged())); + autoChanged(); + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void MidiSyntiStrip::songChanged(int val) + { + if (val & SC_TRACK_MODIFIED) + updateLabel(); + } + +//--------------------------------------------------------- +// heartBeat +//--------------------------------------------------------- + +void MidiSyntiStrip::heartBeat() + { + double a = track->meter(0); // fast_log10(track->meter(0)) * .2f; + slider->setMeterVal(a * 0.008); + track->setMeter(0, a * 0.8); // hack + } + +//--------------------------------------------------------- +// ctrlChanged +//--------------------------------------------------------- + +void MidiSyntiStrip::ctrlChanged(double val, int num) + { + int ival = int(val); + CVal cval; + cval.i = ival; + song->setControllerVal(track, num, cval); + } + +//--------------------------------------------------------- +// sliderPressed +//--------------------------------------------------------- + +void MidiSyntiStrip::sliderPressed(int id) + { + switch (id) { + case CTRL_MASTER_VOLUME: volumeTouched = true; break; + } + track->startAutoRecord(id); + } + +//--------------------------------------------------------- +// sliderReleased +//--------------------------------------------------------- + +void MidiSyntiStrip::sliderReleased(int id) + { + switch (id) { + case CTRL_MASTER_VOLUME: volumeTouched = false; break; + } + track->stopAutoRecord(id); + } + +//--------------------------------------------------------- +// muteToggled +//--------------------------------------------------------- + +void MidiSyntiStrip::muteToggled(bool val) + { + song->setMute(track, val); + } + +//--------------------------------------------------------- +// soloToggled +//--------------------------------------------------------- + +void MidiSyntiStrip::soloToggled(bool val) + { + song->setSolo(track, val); + } + +//--------------------------------------------------------- +// autoChanged +//--------------------------------------------------------- + +void MidiSyntiStrip::autoChanged() + { + bool ar = track->autoRead(); + bool aw = track->autoWrite(); + + // controller are enabled if + // autoRead is off + // autoRead and autoWrite are on (touch mode) + + bool ec = !ar || (ar && aw); + slider->setEnabled(ec); + sl->setEnabled(ec); + } + +//--------------------------------------------------------- +// autoReadToggled +//--------------------------------------------------------- + +void MidiSyntiStrip::autoReadToggled(bool val) + { + song->setAutoRead(track, val); + } + +//--------------------------------------------------------- +// autoWriteToggled +//--------------------------------------------------------- + +void MidiSyntiStrip::autoWriteToggled(bool val) + { + song->setAutoWrite(track, val); + } + +//--------------------------------------------------------- +// controllerChanged +//--------------------------------------------------------- + +void MidiSyntiStrip::controllerChanged(int id) + { + if (id == CTRL_MASTER_VOLUME) { + double val = double(track->ctrlVal(id).i); + if (!volumeTouched) + slider->setValue(val); + sl->setValue(val); + } + } + +//--------------------------------------------------------- +// oRouteShow +//--------------------------------------------------------- + +void MidiSyntiStrip::oRouteShow() + { + QMenu* pup = oR->menu(); + pup->clear(); + addMidiOutPorts(pup, track, -1); + } + +//--------------------------------------------------------- +// iRouteShow +//--------------------------------------------------------- + +void MidiSyntiStrip::iRouteShow() + { + QMenu* pup = oR->menu(); + pup->clear(); + + MidiOutPort* t = (MidiOutPort*)track; + + for (int ch = 0; ch < MIDI_CHANNELS; ++ch) { + QMenu* m = pup->addMenu(QString("Channel %1").arg(ch+1)); + addMidiTracks(m, t, ch, false); + addMidiInPorts(m, t, ch); + } + } diff --git a/attic/muse_qt4_evolution/muse/mstrip.h b/attic/muse_qt4_evolution/muse/mstrip.h new file mode 100644 index 00000000..058884db --- /dev/null +++ b/attic/muse_qt4_evolution/muse/mstrip.h @@ -0,0 +1,191 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MSTRIP_H__ +#define __MSTRIP_H__ + +#include "strip.h" + +namespace Awl { + class MidiMeterSlider; + class MidiMeter; + class FloatEntry; + class MidiVolEntry; + class Knob; + }; + +class MidiTrack; +class MidiOutPort; +class MidiInPort; +class MidiChannel; +class MidiSynti; + +//--------------------------------------------------------- +// MidiStrip +//--------------------------------------------------------- + +class MidiStrip : public Strip { + Q_OBJECT + + Awl::MidiMeterSlider* slider; + Awl::MidiVolEntry* sl; + QToolButton* iR; + QToolButton* oR; + + struct KNOB { + Awl::Knob* knob; + Awl::FloatEntry* dl; + QLabel* lb; + } controller[4]; // pan variation reverb chorus + + bool volumeTouched; + bool panTouched; + bool reverbSendTouched; + bool variSendTouched; + bool chorusSendTouched; + + void addKnob(int ctrl, int idx, const QString&, const QString&, const char*, bool, int row); + + private slots: + virtual void controllerChanged(int id); + void ctrlChanged(double val, int num); + void muteToggled(bool); + void soloToggled(bool); + void autoChanged(); + void sliderPressed(int); + void sliderReleased(int); + void autoReadToggled(bool); + void autoWriteToggled(bool); + void iRouteShow(); + void oRouteShow(); + void recordToggled(bool); + void monitorToggled(bool); + QMenu* sendMenu() const { return static_cast(sender()); } + + public slots: + virtual void songChanged(int); + + public: + MidiStrip(Mixer*, MidiTrack*, bool align = true); + virtual void heartBeat(); + }; + +//--------------------------------------------------------- +// MidiOutPortStrip +//--------------------------------------------------------- + +class MidiOutPortStrip : public Strip { + Q_OBJECT + + Awl::MidiMeterSlider* slider; + Awl::MidiVolEntry* sl; + QToolButton* oR; + QToolButton* iR; + SimpleButton* sync; + + bool volumeTouched; + + private slots: + virtual void controllerChanged(int id); + void ctrlChanged(double val, int num); + void muteToggled(bool); + void soloToggled(bool); + void autoChanged(); + void sliderPressed(int); + void sliderReleased(int); + void autoReadToggled(bool); + void autoWriteToggled(bool); + void iRouteShow(); + void oRouteShow(); + void syncToggled(bool) const; + + public slots: + virtual void songChanged(int); + + public: + MidiOutPortStrip(Mixer*, MidiOutPort*, bool align = true); + virtual void heartBeat(); + }; + +//--------------------------------------------------------- +// MidiSyntiStrip +//--------------------------------------------------------- + +class MidiSyntiStrip : public Strip { + Q_OBJECT + + Awl::MidiMeterSlider* slider; + Awl::MidiVolEntry* sl; + QToolButton* iR; + QToolButton* oR; + + bool volumeTouched; + + private slots: + virtual void controllerChanged(int id); + void ctrlChanged(double val, int num); + void muteToggled(bool); + void soloToggled(bool); + void autoChanged(); + void sliderPressed(int); + void sliderReleased(int); + void autoReadToggled(bool); + void autoWriteToggled(bool); + void iRouteShow(); + void oRouteShow(); + + public slots: + virtual void songChanged(int); + + public: + MidiSyntiStrip(Mixer*, MidiSynti*, bool align = true); + virtual void heartBeat(); + }; + +//--------------------------------------------------------- +// MidiInPortStrip +//--------------------------------------------------------- + +class MidiInPortStrip : public Strip { + Q_OBJECT + + bool activity[MIDI_CHANNELS]; + QPixmap* activityOn; + QPixmap* activityOff; + QLabel* channelActivity[MIDI_CHANNELS]; + QToolButton* iR; + QToolButton* oR; + MidiInPort* inport() const { return (MidiInPort*)track; } + + private slots: + void muteToggled(bool); + void soloToggled(bool); + void iRouteShow(); + void oRouteShow(); + + public slots: + virtual void songChanged(int); + + public: + MidiInPortStrip(Mixer*, MidiInPort*, bool align = true); + virtual void heartBeat(); + }; + +#endif diff --git a/attic/muse_qt4_evolution/muse/mtc.cpp b/attic/muse_qt4_evolution/muse/mtc.cpp new file mode 100644 index 00000000..54ed5584 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/mtc.cpp @@ -0,0 +1,131 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "al/al.h" +#include "mtc.h" + +//--------------------------------------------------------- +// MTC::time +// converts MTC Time to seconds according to +// global mtcType +//--------------------------------------------------------- + +double MTC::time() const + { + double time = _h * 3600 + _m * 60 + _s; + double ft = 0.0; + switch (AL::mtcType) { + case 0: // 24 frames sec + ft = 1.0/24.0; + break; + case 1: // 25 + ft = 0.04; + break; + case 2: // 30 drop frame TODO + case 3: // 30 non drop frame + ft = 1.0/30.0; + break; + } + return time + ft *_f + 0.01 * ft * _sf; + } + +//--------------------------------------------------------- +// MTC +//--------------------------------------------------------- + +MTC::MTC(double t) + { + _h = int(t/3600); + t -= _h * 3600; + _m = int(t/60); + t -= _m * 60; + _s = int(t); + t -= _s; + double ft = 1.0/24.0; + switch (AL::mtcType) { + case 0: // 24 frames sec + ft = 1.0/24.0; + break; + case 1: // 25 + ft = 0.04; + break; + case 2: // 30 drop frame + case 3: // 30 non drop frame + ft = 1.0/30.0; + break; + } + double frames = t / ft; + _f = int(frames); + frames -= _f; + _sf = int(frames * 100); + } + +//--------------------------------------------------------- +// incQuarter +// increment MTC time one quarter frame time +//--------------------------------------------------------- + +void MTC::incQuarter() + { + int frames = 24; + switch (AL::mtcType) { + case 0: + frames = 24; + break; + case 1: + frames = 25; + break; + case 2: + case 3: + frames = 30; + break; + } + _sf += 25; + if (_sf >= 100) { + ++_f; + _sf -= 100; + } + if (_f == frames) { + ++_s; + _f = 0; + } + if (_s == 60) { + ++_m; + _s = 0; + } + if (_m == 60) { + ++_h; + _m = 0; + } + if (_h == 24) { + _h = 0; + } + } + +//--------------------------------------------------------- +// print +//--------------------------------------------------------- + +void MTC::print() const + { + printf("%02d:%02d:%02d:%02d:%02d", _h, _m, _s, _f, _sf); + } + + diff --git a/attic/muse_qt4_evolution/muse/mtc.h b/attic/muse_qt4_evolution/muse/mtc.h new file mode 100644 index 00000000..862bc5b1 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/mtc.h @@ -0,0 +1,68 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MTC_H__ +#define __MTC_H__ + +//--------------------------------------------------------- +// MTC +//--------------------------------------------------------- + +class MTC { + unsigned char _h, _m, _s, _f, _sf; + + public: + MTC(int h, int m, int s, int f, int sf=0) { + _h = h; + _m = m; + _s = s; + _f = f; + _sf = sf; + } + MTC() { + _h = _m = _s = _f = _sf = 0; + } + MTC(double); + void set(int h, int m, int s, int f, int sf=0) { + _h = h; + _m = m; + _s = s; + _f = f; + _sf = sf; + } + void incQuarter(); + void setH(int val) { _h = val; } + void setM(int val) { _m = val; } + void setS(int val) { _s = val; } + void setF(int val) { _f = val; } + void setSf(int val) { _sf = val; } + + int h() const { return _h; } + int m() const { return _m; } + int s() const { return _s; } + int f() const { return _f; } + int sf() const { return _sf; } + double time() const; + void print() const; + }; + + +#endif + diff --git a/attic/muse_qt4_evolution/muse/muse.cpp b/attic/muse_qt4_evolution/muse/muse.cpp new file mode 100644 index 00000000..01f0d1c4 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/muse.cpp @@ -0,0 +1,3029 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "config.h" +#include +#include "muse.h" +#include "transport.h" +#include "widgets/bigtime.h" +#include "arranger.h" +#include "midiedit/pianoroll.h" +#include "al/al.h" +#include "al/xml.h" +#include "al/dsp.h" +#include "al/tempo.h" +#include "conf.h" +#include "liste/listedit.h" +#include "master/masteredit.h" +#include "midiedit/drumedit.h" +#include "mixer.h" +#include "audiodev.h" +#include "waveedit/waveedit.h" +#include "icons.h" +#include "widgets/mixdowndialog.h" +#include "midictrl.h" +#include "widgets/filedialog.h" +#include "plugin.h" +#include "marker/markerview.h" +#include "transpose.h" +#include "preferences.h" +#include "audio.h" +#include "audioprefetch.h" +#include "audiowriteback.h" +#include "widgets/shortcutconfig.h" +#include "gconfig.h" +#include "ticksynth.h" +#include "song.h" +#include "awl/poslabel.h" +#include "shortcuts.h" +#include "midiplugin.h" +#include "midiedit/drummap.h" +#include "widgets/utils.h" +#include "instruments/editinstrument.h" +#include "part.h" +#include "projectdialog.h" +#include "templatedialog.h" +#include "midiedit/miditracker.h" +#include "projectpropsdialog.h" +#include "liste/listedit.h" +#include "strip.h" + +extern void initMidiInstruments(); + +#define PROJECT_LIST_LEN 6 +static QString* projectList[PROJECT_LIST_LEN]; + +extern void initIcons(); +extern void initMidiSynth(); +extern bool initDummyAudio(); +extern void initVST(); +extern void initDSSI(); +extern bool initJackAudio(); +extern void exitJackAudio(); + +QStyle* smallStyle; + +pthread_t splashThread; +MusE* muse; + +// +// Arranger Snap values +// + +struct RasterVal { + int val; + QString label; + }; + +static RasterVal rasterTable[] = { + { 1, QT_TR_NOOP("Off") }, + { 0, QT_TR_NOOP("Bar") }, + { 2 * config.division, "1/2" }, + { config.division, "1/4" }, + { config.division/2, "1/8" }, + { config.division/4, "1/16" } + }; + +//--------------------------------------------------------- +// seqStart +//--------------------------------------------------------- + +bool MusE::seqStart() + { + if (audioState != AUDIO_STOP) { + printf("seqStart(): already running\n"); + return true; + } + audioState = AUDIO_START1; + if (!audio->start()) { + QMessageBox::critical( muse, tr("Failed to start audio!"), + tr("Was not able to start audio, check if jack is running.\n")); + return false; + } + // + // wait for jack callback + // + for (int i = 0; i < 60; ++i) { + if (audioState == AUDIO_START2) + break; + sleep(1); + } + if (audioState != AUDIO_START2) { + QMessageBox::critical( muse, tr("Failed to start audio!"), + tr("Was not able to start audio, check if jack is running.\n")); + } + // + // now its safe to ask the driver for realtime + // priority + + realTimePriority = audioDriver->realtimePriority(); + audioState = AUDIO_RUNNING; + if (realTimePriority) { + audioPrefetch->start(realTimePriority - 5); + audioWriteback->start(realTimePriority - 5); + } + else { + audioPrefetch->start(0); + audioWriteback->start(0); + } + // + // do connections + // + TrackList* tl = song->tracks(); + for (iTrack i = tl->begin(); i != tl->end(); ++i) + (*i)->activate2(); + return true; + } + +//--------------------------------------------------------- +// stop +//--------------------------------------------------------- + +void MusE::seqStop() + { + song->setStop(true); + song->setStopPlay(false); + audio->stop(); + audioWriteback->stop(true); + audioPrefetch->stop(true); + audioState = AUDIO_STOP; + } + +//--------------------------------------------------------- +// seqRestart +//--------------------------------------------------------- + +bool MusE::seqRestart() + { + bool restartSequencer = audioState == AUDIO_RUNNING; + if (restartSequencer) { + if (audio->isPlaying()) { + audio->msgPlay(false); + while (audio->isPlaying()) + qApp->processEvents(); + } + seqStop(); + } + + if (!seqStart()) + return false; + + audioDriver->graphChanged(); + return true; + } + +//--------------------------------------------------------- +// addProject +//--------------------------------------------------------- + +void addProject(const QString& name) + { + for (int i = 0; i < PROJECT_LIST_LEN; ++i) { + if (projectList[i] == 0) + break; + if (name == *projectList[i]) { + int dst = i; + int src = i+1; + int n = PROJECT_LIST_LEN - i - 1; + delete projectList[i]; + for (int k = 0; k < n; ++k) + projectList[dst++] = projectList[src++]; + projectList[dst] = 0; + break; + } + } + QString** s = &projectList[PROJECT_LIST_LEN - 2]; + QString** d = &projectList[PROJECT_LIST_LEN - 1]; + if (*d) + delete *d; + for (int i = 0; i < PROJECT_LIST_LEN-1; ++i) + *d-- = *s--; + projectList[0] = new QString(name); + } + +//--------------------------------------------------------- +// populateAddTrack +// this is also used in "mixer" +//--------------------------------------------------------- + +void populateAddTrack(QMenu* m) + { + m->setSeparatorsCollapsible(false); + m->clear(); + QAction* a; + + a = m->addSeparator(); + a->setText(QT_TR_NOOP("Midi")); + QFont f(a->font()); + f.setBold(true); + f.setPointSize(8); + a->setFont(f); + + a = m->addAction(QIcon(*addtrack_addmiditrackIcon), QT_TR_NOOP("Add Midi Track")); + a->setData(Track::MIDI); + + a = m->addAction(QIcon(*addtrack_addmiditrackIcon), QT_TR_NOOP("Add Midi Output")); + a->setData(Track::MIDI_OUT); + + a = m->addAction(QIcon(*addtrack_addmiditrackIcon), QT_TR_NOOP("Add Midi Input")); + a->setData(Track::MIDI_IN); + + QMenu* ps = m->addMenu(QMenu::tr("Add Midi Generator...")); + + int idx = 5000; + for (iMidiPlugin i = midiPlugins.begin(); i != midiPlugins.end(); ++i) { + if ((*i)->type() != MEMPI_GENERATOR) + continue; + a = ps->addAction((*i)->name()); + a->setData(idx); + } + + if (!midiOnly) { + a = m->addSeparator(); + a->setText(QT_TR_NOOP("Audio")); + a->setFont(f); + + a = m->addAction(QIcon(*addtrack_wavetrackIcon), QT_TR_NOOP("Add Wave Track")); + a->setData(Track::WAVE); + a = m->addAction(QIcon(*addtrack_audiooutputIcon), QT_TR_NOOP("Add Audio Output")); + a->setData(Track::AUDIO_OUTPUT); + a = m->addAction(QIcon(*addtrack_audiogroupIcon), QT_TR_NOOP("Add Audio Group")); + a->setData(Track::AUDIO_GROUP); + a = m->addAction(QIcon(*addtrack_audioinputIcon), QT_TR_NOOP("Add Audio Input")); + a->setData(Track::AUDIO_INPUT); + + ps = m->addMenu(QMenu::tr("Add Soft Synth...")); + + int idx = 1000; + for (std::vector::iterator is = synthis.begin(); is != synthis.end(); ++is, ++idx) { + a = ps->addAction((*is)->name()); + a->setData(idx); + } + } + m->connect(m, SIGNAL(triggered(QAction*)), song, SLOT(addTrack(QAction*))); + } + +//--------------------------------------------------------- +// setupTransportToolbar +//--------------------------------------------------------- + +void MusE::setupTransportToolbar(QToolBar* tb) const + { + tb->addAction(loopAction); + tb->addAction(punchinAction); + tb->addAction(punchoutAction); + tb->addAction(startAction); + + // hack to implement auto repeat: + // the action auto repeat does only work for + // shortcuts but not for mouse press: + + QToolButton* rewindTb = new QToolButton; + rewindTb->setDefaultAction(rewindAction); + rewindTb->setAutoRepeat(true); + tb->addWidget(rewindTb); + connect(rewindTb, SIGNAL(clicked()), song, SLOT(rewind())); + + QToolButton* forwardTb = new QToolButton; + forwardTb->setDefaultAction(forwardAction); + forwardTb->setAutoRepeat(true); + tb->addWidget(forwardTb); + connect(forwardTb, SIGNAL(clicked()), song, SLOT(forward())); + + tb->addAction(stopAction); + tb->addAction(playAction); + tb->addAction(recordAction); + } + +//--------------------------------------------------------- +// MusE +//--------------------------------------------------------- + +MusE::MusE() + : QMainWindow() + { + setWindowIcon(*museIcon); + setIconSize(ICON_SIZE); + setFocusPolicy(Qt::WheelFocus); + + muse = this; // hack + midiSyncConfig = 0; + midiRemoteConfig = 0; + midiPortConfig = 0; + metronomeConfig = 0; + audioConfig = 0; + midiFileConfig = 0; + midiFilterConfig = 0; + midiInputTransform = 0; + midiRhythmGenerator = 0; + preferencesDialog = 0; + softSynthesizerConfig = 0; + midiTransformerDialog = 0; + shortcutConfig = 0; + editInstrument = 0; + appName = QString("MusE"); + _raster = 0; + audioState = AUDIO_STOP; + bigtime = 0; + mixer1 = 0; + mixer2 = 0; + markerView = 0; + exportMidiDialog = 0; + projectPropsDialog = 0; + listEditor = 0; + + //--------------------------------------------------- + // Transport + //--------------------------------------------------- + + loopAction = getAction("toggle_loop", this); + loopAction->setCheckable(true); + connect(loopAction, SIGNAL(triggered(bool)), song, SLOT(setLoop(bool))); + + punchinAction = getAction("punchin", this); + punchinAction->setCheckable(true); + connect(punchinAction, SIGNAL(toggled(bool)), song, SLOT(setPunchin(bool))); + + punchoutAction = getAction("punchout", this); + punchoutAction->setCheckable(true); + connect(punchoutAction, SIGNAL(toggled(bool)), song, SLOT(setPunchout(bool))); + + recordAction = getAction("toggle_rec", this); + recordAction->setCheckable(true); + connect(recordAction, SIGNAL(triggered(bool)), song, SLOT(setRecord(bool))); + + panicAction = getAction("panic", this); + connect(panicAction, SIGNAL(triggered()), song, SLOT(panic())); + + startAction = getAction("start", this); + connect(startAction, SIGNAL(triggered()), song, SLOT(rewindStart())); + + playAction = getAction("play", this); + playAction->setCheckable(true); + connect(playAction, SIGNAL(triggered(bool)), song, SLOT(setPlay(bool))); + + QAction* a = getAction("play_toggle", this); + connect(a, SIGNAL(triggered()), SLOT(playToggle())); + addAction(a); + + a = getAction("toggle_metro", this); + connect(a, SIGNAL(triggered()), song, SLOT(toggleClick())); + addAction(a); + + a = getAction("goto_left", this); + connect(a, SIGNAL(triggered()), song, SLOT(gotoLeftMarker())); + addAction(a); + + a = getAction("goto_right", this); + connect(a, SIGNAL(triggered()), song, SLOT(gotoRightMarker())); + addAction(a); + + rewindAction = getAction("rewind", this); + rewindAction->setAutoRepeat(true); + + forwardAction = getAction("forward", this); + forwardAction->setAutoRepeat(true); + + stopAction = getAction("stop", this); + stopAction->setCheckable(true); + connect(stopAction, SIGNAL(triggered(bool)), song, SLOT(setStop(bool))); + + song->blockSignals(true); + heartBeatTimer = new QTimer(this); + connect(heartBeatTimer, SIGNAL(timeout()), SLOT(beat())); + + //--------------------------------------------------- + // undo/redo + //--------------------------------------------------- + + undoAction = getAction("undo", this); + undoAction->setEnabled(false); + connect(undoAction, SIGNAL(triggered()), song, SLOT(undo())); + + redoAction = getAction("redo", this); + redoAction->setEnabled(false); + connect(redoAction, SIGNAL(triggered()), song, SLOT(redo())); + + fileOpenAction = getAction("open_project", this); + connect(fileOpenAction, SIGNAL(triggered()), SLOT(loadProject())); + + fileSaveAction = getAction("save_project", this); + connect(fileSaveAction, SIGNAL(triggered()), SLOT(save())); + + fileSaveAsAction = getAction("save_project_as", this); + connect(fileSaveAsAction, SIGNAL(triggered()), SLOT(saveAs())); + + pianoAction = getAction("open_pianoroll", this); + connect(pianoAction, SIGNAL(triggered()), SLOT(startPianoroll())); + + waveAction = getAction("open_waveedit", this); + connect(waveAction, SIGNAL(triggered()), SLOT(startWaveEditor())); + + trackerAction = getAction("open_miditracker", this); + connect(trackerAction, SIGNAL(triggered()), SLOT(startMidiTrackerEditor())); + + //-------------------------------------------------- + // Toolbar + //-------------------------------------------------- + + tools = new QToolBar(tr("Project Buttons")); + addToolBar(tools); + + tools->addAction(fileOpenAction); + tools->addAction(fileSaveAction); + tools->addAction(QWhatsThis::createAction(this)); + + tools->addSeparator(); + tools->addAction(undoAction); + tools->addAction(redoAction); + + tools1 = new EditToolBar(this, arrangerTools); + addToolBar(tools1); + + QToolBar* transportToolbar = addToolBar(tr("Transport")); + setupTransportToolbar(transportToolbar); + + QToolBar* panicToolbar = new QToolBar(tr("Panic"), this); + addToolBar(panicToolbar); + panicToolbar->addAction(panicAction); + + addToolBarBreak(); + + audio = new Audio(); + audioPrefetch = new AudioPrefetch("Prefetch"); + audioWriteback = new AudioWriteback("Writeback"); + + //--------------------------------------------------- + // MenuBar + //--------------------------------------------------- + + QMenuBar* mb = menuBar(); + + //------------------------------------------------------------- + // File + //------------------------------------------------------------- + + menu_file = mb->addMenu(tr("&Project")); + + menu_file->addAction(fileOpenAction); + + openRecent = new QMenu(tr("Open &Recent"), this); + connect(openRecent, SIGNAL(aboutToShow()), this, SLOT(openRecentMenu())); + connect(openRecent, SIGNAL(triggered(QAction*)), this, SLOT(selectProject(QAction*))); + + menu_file->addMenu(openRecent); + menu_file->addSeparator(); + menu_file->addAction(fileSaveAction); + menu_file->addAction(fileSaveAsAction); + a = getAction("save_as_template", this); + connect(a, SIGNAL(triggered()), SLOT(saveAsTemplate())); + menu_file->addAction(a); + + menu_file->addSeparator(); + a = menu_file->addAction(*openIcon, tr("Import Midifile")); + connect(a, SIGNAL(triggered()), this, SLOT(importMidi())); + a = menu_file->addAction(*saveIcon, tr("Export Midifile")); + connect(a, SIGNAL(triggered()), this, SLOT(exportMidi())); + menu_file->addSeparator(); + + a = menu_file->addAction(*openIcon, tr("Import Wave File")); + connect(a, SIGNAL(triggered()), this, SLOT(importWave())); + a->setEnabled(!midiOnly); + + menu_file->addSeparator(); + a = getAction("quit", this); + menu_file->addAction(a); + connect(a, SIGNAL(triggered()), this, SLOT(quitDoc())); + menu_file->addSeparator(); + + //------------------------------------------------------------- + // Edit + //------------------------------------------------------------- + + menuEdit = mb->addMenu(tr("&Edit")); + + menuEdit->addAction(undoAction); + menuEdit->addAction(redoAction); + menuEdit->addSeparator(); + + cutAction = getAction("cut", this); + menuEdit->addAction(cutAction); + copyAction = getAction("copy", this); + menuEdit->addAction(copyAction); + pasteAction = getAction("paste", this); + menuEdit->addAction(pasteAction); + + menuEdit->addSeparator(); + a = menuEdit->addAction(QIcon(*edit_track_delIcon), tr("Delete Selected Tracks")); + a->setData("delete_track"); + + addTrack = menuEdit->addMenu(*edit_track_addIcon, tr("Add Track")); + // delay creation of menu (at this moment the list of software + // synthesizer is empty): + connect(addTrack, SIGNAL(aboutToShow()), SLOT(aboutToShowAddTrack())); + + menuEdit->addSeparator(); + select = menuEdit->addMenu(QIcon(*selectIcon), tr("Select")); + select->addAction(getAction("sel_all", this)); + select->addAction(getAction("sel_none", this)); + select->addAction(getAction("sel_inv", this)); + select->addAction(getAction("sel_ins_loc", this)); + select->addAction(getAction("sel_out_loc", this)); + select->addAction(getAction("select_parts_on_track", this)); + + menuEdit->addSeparator(); + menuEdit->addAction(pianoAction); + menuEdit->addAction(waveAction); + menuEdit->addAction(trackerAction); + + a = getAction("open_drumedit", this); + menuEdit->addAction(a); + connect(a, SIGNAL(triggered()), SLOT(startDrumEditor())); + + a = getAction("open_master", this); + menuEdit->addAction(a); + connect(a, SIGNAL(triggered()), SLOT(startMasterEditor())); + + a = menuEdit->addAction(*saveIcon, tr("Project Properties")); + connect(a, SIGNAL(triggered()), SLOT(showProjectPropsDialog())); + + menuEdit->addSeparator(); + connect(menuEdit, SIGNAL(triggered(QAction*)), SLOT(cmd(QAction*))); + connect(select, SIGNAL(triggered(QAction*)), SLOT(cmd(QAction*))); + + midiEdit = menuEdit->addMenu(QIcon(*edit_midiIcon), tr("Midi")); + +#if 0 // TODO + midiEdit->insertItem(tr("Modify Gate Time"), this, SLOT(modifyGateTime())); + midiEdit->insertItem(tr("Modify Velocity"), this, SLOT(modifyVelocity())); + midiEdit->insertItem(tr("Crescendo"), this, SLOT(crescendo())); + midiEdit->insertItem(tr("Transpose"), this, SLOT(transpose())); + midiEdit->insertItem(tr("Thin Out"), this, SLOT(thinOut())); + midiEdit->insertItem(tr("Erase Event"), this, SLOT(eraseEvent())); + midiEdit->insertItem(tr("Note Shift"), this, SLOT(noteShift())); + midiEdit->insertItem(tr("Move Clock"), this, SLOT(moveClock())); + midiEdit->insertItem(tr("Copy Measure"), this, SLOT(copyMeasure())); + midiEdit->insertItem(tr("Erase Measure"), this, SLOT(eraseMeasure())); + midiEdit->insertItem(tr("Delete Measure"), this, SLOT(deleteMeasure())); + midiEdit->insertItem(tr("Create Measure"), this, SLOT(createMeasure())); + midiEdit->insertItem(tr("Mix Track"), this, SLOT(mixTrack())); +#endif + a = midiEdit->addAction(QIcon(*midi_transposeIcon), tr("Transpose")); + connect(a, SIGNAL(triggered()), this, SLOT(transpose())); + + //------------------------------------------------------------- + // View + //------------------------------------------------------------- + + menuView = mb->addMenu(tr("&View")); + + tr_id = getAction("toggle_transport", this); + tr_id->setCheckable(true); + menuView->addAction(tr_id); + connect(tr_id, SIGNAL(triggered(bool)), this, SLOT(showTransport(bool))); + + bt_id = getAction("toggle_bigtime", this); + bt_id->setCheckable(true); + menuView->addAction(bt_id); + connect(bt_id, SIGNAL(triggered(bool)), this, SLOT(showBigtime(bool))); + + aid1a = getAction("toggle_mixer1", this); + aid1a->setCheckable(true); + menuView->addAction(aid1a); + connect(aid1a, SIGNAL(triggered(bool)), this, SLOT(showMixer1(bool))); + + aid1b = getAction("toggle_mixer2", this); + aid1b->setCheckable(true); + menuView->addAction(aid1b); + connect(aid1b, SIGNAL(triggered(bool)), this, SLOT(showMixer2(bool))); + + mk_id = getAction("marker_window", this); + mk_id->setCheckable(true); + menuView->addAction(mk_id); + connect(mk_id , SIGNAL(triggered(bool)), this, SLOT(showMarker(bool))); + + //------------------------------------------------------------- + // Structure + //------------------------------------------------------------- + + menuStructure = mb->addMenu(tr("&Structure")); + + a = menuStructure->addAction(tr("Global Cut")); + connect(a, SIGNAL(triggered()), this, SLOT(globalCut())); + + a = menuStructure->addAction(tr("Global Insert")); + connect(a, SIGNAL(triggered()), this, SLOT(globalInsert())); + + a = menuStructure->addAction(tr("Global Split")); + connect(a, SIGNAL(triggered()), this, SLOT(globalSplit())); + + a = menuStructure->addAction(tr("Copy Range")); + connect(a, SIGNAL(triggered()), this, SLOT(copyRange())); + a->setEnabled(false); + + menuStructure->addSeparator(); + + a = menuStructure->addAction(tr("Cut Events")); + connect(a, SIGNAL(triggered()), this, SLOT(cutEvents())); + a->setEnabled(false); + + //------------------------------------------------------------- + // Midi + //------------------------------------------------------------- + + menu_functions = mb->addMenu(tr("&Midi")); + + a = menu_functions->addAction(QIcon(*midi_edit_instrumentIcon), tr("Edit Instrument")); + connect(a, SIGNAL(triggered()), this, SLOT(startEditInstrument())); + + menu_functions->addSeparator(); + a = menu_functions->addAction(QIcon(*midi_reset_instrIcon), tr("Reset Instr.")); + connect(a, SIGNAL(triggered()), this, SLOT(resetMidiDevices())); + a = menu_functions->addAction(QIcon(*midi_init_instrIcon), tr("Init Instr.")); + connect(a, SIGNAL(triggered()), this, SLOT(initMidiDevices())); + a = menu_functions->addAction(QIcon(*midi_local_offIcon), tr("local off")); + connect(a, SIGNAL(triggered()), this, SLOT(localOff())); + + //------------------------------------------------------------- + // Audio + //------------------------------------------------------------- + + menu_audio = mb->addMenu(tr("&Audio")); + + a = menu_audio->addAction(QIcon(*audio_bounce_to_trackIcon), tr("Bounce to Track")); + connect(a, SIGNAL(triggered()), this, SLOT(bounceToTrack())); + + a = menu_audio->addAction(QIcon(*audio_bounce_to_fileIcon), tr("Bounce to File")); + connect(a, SIGNAL(triggered()), this, SLOT(bounceToFile())); + menu_audio->setEnabled(!midiOnly); + a = menu_audio->addAction(QIcon(*audio_restartaudioIcon), tr("Restart Audio")); + connect(a, SIGNAL(triggered()), this, SLOT(seqRestart())); + + //------------------------------------------------------------- + // Settings + //------------------------------------------------------------- + + menuSettings = mb->addMenu(tr("Setti&ngs")); + a = menuSettings->addAction(QIcon(*settings_configureshortcutsIcon), tr("Configure shortcuts")); + connect(a, SIGNAL(triggered()), this, SLOT(configShortCuts())); + + follow = menuSettings->addMenu(QIcon(*settings_follow_songIcon), tr("follow song")); + //follow->menuAction()->setShortcut(Qt::Key_F); + fid0 = follow->addAction(tr("dont follow Song")); + fid0->setData("follow_no"); + fid0->setCheckable(true); + fid1 = follow->addAction(tr("follow page")); + fid1->setData("follow_jump"); + fid1->setCheckable(true); + fid2 = follow->addAction(tr("follow continuous")); + fid2->setData("follow_continuous"); + fid2->setCheckable(true); + fid0->setChecked(TimeCanvas::followMode == FOLLOW_NO); + fid1->setChecked(TimeCanvas::followMode == FOLLOW_JUMP); + fid2->setChecked(TimeCanvas::followMode == FOLLOW_CONTINUOUS); + connect(follow, SIGNAL(triggered(QAction*)), SLOT(cmd(QAction*))); + + menuSettings->addSeparator(); + a = menuSettings->addAction(QIcon(*settings_midisyncIcon), tr("Midi Sync")); + connect(a, SIGNAL(triggered()), this, SLOT(configMidiSync())); + a = menuSettings->addAction(QIcon(*settings_midifileexportIcon), tr("Midi File Export")); + connect(a, SIGNAL(triggered()), this, SLOT(configMidiFile())); + menuSettings->addSeparator(); + QAction* action = menuSettings->addAction(QIcon(*settings_globalsettingsIcon), tr("Preferences")); + connect(action, SIGNAL(triggered()), this, SLOT(preferences())); + + //--------------------------------------------------- + // Help + //--------------------------------------------------- + + mb->addSeparator(); + menu_help = mb->addMenu(tr("&Help")); + + a = menu_help->addAction(tr("&Manual")); + connect(a, SIGNAL(triggered()), this, SLOT(startHelpBrowser())); + a = menu_help->addAction(tr("&MusE homepage")); + connect(a, SIGNAL(triggered()), this, SLOT(startHomepageBrowser())); + menu_help->addSeparator(); + a = menu_help->addAction(tr("&Report Bug...")); + connect(a, SIGNAL(triggered()), this, SLOT(startBugBrowser())); + menu_help->addSeparator(); + a = menu_help->addAction(tr("&About MusE")); + a->setIcon(QIcon(*museIcon)); + connect(a, SIGNAL(triggered()), this, SLOT(about())); + a = menu_help->addAction(tr("About&Qt")); + connect(a, SIGNAL(triggered()), this, SLOT(aboutQt())); + menu_help->addSeparator(); + a = QWhatsThis::createAction(this); + a->setText(tr("What's &This?")); + menu_help->addAction(a); + + //--------------------------------------------------- + // ToolBar + //--------------------------------------------------- + + QToolBar* aToolBar = addToolBar(tr("Arranger")); + + QLabel* label = new QLabel(tr("Cursor")); + label->setAlignment(Qt::AlignRight | Qt::AlignVCenter); + label->setIndent(3); + aToolBar->addWidget(label); + + Awl::PosLabel* cursorPos = new Awl::PosLabel; + aToolBar->addWidget(cursorPos); + cursorPos->setFixedHeight(25); + + label = new QLabel(tr("Snap")); + label->setIndent(5); + aToolBar->addWidget(label); + + rasterCombo = new QComboBox; + rasterCombo->setFixedHeight(24); + aToolBar->addWidget(rasterCombo); + for (unsigned i = 0; i < sizeof(rasterTable)/sizeof(*rasterTable); i++) + rasterCombo->addItem(rasterTable[i].label, i); + rasterCombo->setCurrentIndex(1); + connect(rasterCombo, SIGNAL(activated(int)), SLOT(setRaster(int))); + + // Song len + label = new QLabel(tr("Len")); + label->setIndent(5); + aToolBar->addWidget(label); + + // song length is limited to 10000 bars; the real song len is limited + // by overflows in tick computations + // + QSpinBox* lenEntry = new QSpinBox; + lenEntry->setFixedHeight(24); + lenEntry->setRange(1, 10000); + aToolBar->addWidget(lenEntry); + lenEntry->setValue(song->len()); + connect(lenEntry, SIGNAL(valueChanged(int)), song, SLOT(setMeasureLen(int))); + connect(song, SIGNAL(measureLenChanged(int)), lenEntry, SLOT(setValue(int))); + + label = new QLabel(tr("Pitch")); + label->setIndent(5); + aToolBar->addWidget(label); + + QSpinBox* globalPitchSpinBox = new QSpinBox; + globalPitchSpinBox->setFixedHeight(24); + globalPitchSpinBox->setRange(-127, 127); + aToolBar->addWidget(globalPitchSpinBox); + globalPitchSpinBox->setValue(song->globalPitchShift()); + globalPitchSpinBox->setToolTip(tr("midi pitch")); + globalPitchSpinBox->setWhatsThis(tr("global midi pitch shift")); + connect(globalPitchSpinBox, SIGNAL(valueChanged(int)), SLOT(globalPitchChanged(int))); + + label = new QLabel(tr("Tempo")); + label->setIndent(5); + aToolBar->addWidget(label); + + globalTempoSpinBox = new QSpinBox; + globalTempoSpinBox->setFixedHeight(24); + globalTempoSpinBox->setRange(50, 200); + aToolBar->addWidget(globalTempoSpinBox); + globalTempoSpinBox->setSuffix(QString("%")); + globalTempoSpinBox->setValue(AL::tempomap.globalTempo()); + globalTempoSpinBox->setToolTip(tr("midi tempo")); + globalTempoSpinBox->setWhatsThis(tr("midi tempo")); + connect(globalTempoSpinBox, SIGNAL(valueChanged(int)), SLOT(globalTempoChanged(int))); + + QToolButton* tempo50 = new QToolButton; + tempo50->setFixedHeight(24); + aToolBar->addWidget(tempo50); + tempo50->setText(QString("50%")); + connect(tempo50, SIGNAL(clicked()), SLOT(setTempo50())); + + QToolButton* tempo100 = new QToolButton; + tempo100->setFixedHeight(24); + aToolBar->addWidget(tempo100); + tempo100->setText(tr("N")); + connect(tempo100, SIGNAL(clicked()), SLOT(setTempo100())); + + QToolButton* tempo200 = new QToolButton; + tempo200->setFixedHeight(24); + aToolBar->addWidget(tempo200); + tempo200->setText(QString("200%")); + connect(tempo200, SIGNAL(clicked()), SLOT(setTempo200())); + + //--------------------------------------------------- + // Central Widget + //--------------------------------------------------- + + arranger = new Arranger(this); + setCentralWidget(arranger); + + connect(tools1, SIGNAL(toolChanged(int)), SLOT(setTool(int))); + connect(arranger, SIGNAL(toolChanged(int)), SLOT(setTool(int))); + connect(arranger, SIGNAL(editPart(Part*)), SLOT(startEditor(Part*))); +//TODO1 connect(arranger, SIGNAL(dropSongFile(const QString&)), SLOT(loadProject(const QString&))); +//TODO1 connect(arranger, SIGNAL(dropMidiFile(const QString&)), SLOT(importMidi(const QString&))); + connect(arranger, SIGNAL(cursorPos(const AL::Pos&,bool)), cursorPos, SLOT(setValue(const AL::Pos&,bool))); + + //--------------------------------------------------- + // read list of "Recent Projects" + //--------------------------------------------------- + + QString prjPath(getenv("HOME")); + prjPath += QString("/.musePrj"); + FILE* f = fopen(prjPath.toLatin1().data(), "r"); + if (f == 0) { + if (debugMsg) { + fprintf(stderr, "open projectfile <%s> failed: %s", + prjPath.toLatin1().data(), strerror(errno)); + } + for (int i = 0; i < PROJECT_LIST_LEN; ++i) + projectList[i] = 0; + } + else { + for (int i = 0; i < PROJECT_LIST_LEN; ++i) { + char buffer[256]; + if (fgets(buffer, 256, f)) { + int n = strlen(buffer); + if (n && buffer[n-1] == '\n') + buffer[n-1] = 0; + projectList[i] = *buffer ? new QString(buffer) : 0; + } + else + break; + } + fclose(f); + } + + initMidiSynth(); + + transport = new Transport; + transport->hide(); + connect(transport, SIGNAL(closed()), SLOT(transportClosed())); + + QClipboard* cb = QApplication::clipboard(); + connect(cb, SIGNAL(dataChanged()), SLOT(clipboardChanged())); + connect(cb, SIGNAL(selectionChanged()), SLOT(clipboardChanged())); + song->blockSignals(false); + } + +//--------------------------------------------------------- +// aboutToShowAddTrack +//--------------------------------------------------------- + +void MusE::aboutToShowAddTrack() + { + populateAddTrack(addTrack); + } + +//--------------------------------------------------------- +// setRaster +//--------------------------------------------------------- + +void MusE::setRaster(int val) + { + _raster = rasterTable[val].val; + emit rasterChanged(_raster); + } + +//--------------------------------------------------------- +// initRaster +//--------------------------------------------------------- + +void MusE::initRaster(int val) + { + for (unsigned i = 0; i < sizeof(rasterTable)/sizeof(*rasterTable); ++i) { + if (rasterTable[i].val == val) { + _raster = val; + rasterCombo->setCurrentIndex(i); + return; + } + } + _raster = rasterTable[1].val; + rasterCombo->setCurrentIndex(1); + } + +//--------------------------------------------------------- +// setHeartBeat +//--------------------------------------------------------- + +void MusE::setHeartBeat() + { + heartBeatTimer->start(1000/config.guiRefresh); + } + +//--------------------------------------------------------- +// resetDevices +//--------------------------------------------------------- + +void MusE::resetMidiDevices() + { + audio->msgResetMidiDevices(); + } + +//--------------------------------------------------------- +// initMidiDevices +//--------------------------------------------------------- + +void MusE::initMidiDevices() + { + audio->msgInitMidiDevices(); + } + +//--------------------------------------------------------- +// localOff +//--------------------------------------------------------- + +void MusE::localOff() + { + audio->msgLocalOff(); + } + +//--------------------------------------------------------- +// loadProject +//--------------------------------------------------------- + +void MusE::loadProject(const QString& path) + { + // + // stop audio threads if running + // + bool restartSequencer = audioState == AUDIO_RUNNING; + if (restartSequencer) { + if (audio->isPlaying()) { + audio->msgPlay(false); + while (audio->isPlaying()) + qApp->processEvents(); + } + seqStop(); + } + loadProject1(path); + if (restartSequencer) + seqStart(); + audio->msgSeek(song->cPos()); + } + +//--------------------------------------------------------- +// loadProject1 +//--------------------------------------------------------- + +void MusE::loadProject1(const QString& path) + { + QFileInfo file(path); + QString header = tr("MusE: new project"); + + if (leaveProject()) + return; + + if (mixer1) + mixer1->clear(); + if (mixer2) + mixer2->clear(); + + QString name(file.fileName()); + QDir pd(QDir::homePath() + "/" + config.projectPath + "/" + path); + + addProject(path); // add to history + + bool newProject = false; + if (!pd.exists()) { + newProject = true; + if (!pd.mkdir(pd.path())) { + QString s(tr("Cannot create project folder <%1>")); + QMessageBox::critical(this, header, s.arg(pd.path())); + return; + } + } + // + // close all toplevel windows + // + foreach(QWidget* w, QApplication::topLevelWidgets()) { + if (!w->isVisible()) + continue; + static const char* const top[] = { + "DrumEdit", "PianoRoll", "MasterEdit", "WaveEdit", + "ListEdit", "PluginGui" + }; + for (unsigned i = 0; i < sizeof(top)/sizeof(*top); ++i) { + if (strcmp(top[i], w->metaObject()->className()) == 0) { + w->close(); + break; + } + } + } + emit startLoadSong(); + + song->setProjectPath(path); + song->clear(false); + song->setCreated(newProject); + + QString s = pd.absoluteFilePath(name + ".med"); + + QFile f(s); + + song->blockSignals(true); + + bool rv = true; + if (f.open(QIODevice::ReadOnly)) { + rv = song->read(&f); + f.close(); + } + else { + TemplateDialog templateDialog; + if (templateDialog.exec() == 1) { + s = templateDialog.templatePath(); + if (!s.isEmpty()) { + QFile f(s); + if (f.open(QIODevice::ReadOnly)) { + rv = song->read(&f); + f.close(); + } + else { + QString msg(tr("Cannot open template file\n%1")); + QMessageBox::critical(this, header, msg.arg(s)); + } + } + } + } + if (!rv) { + QString msg(tr("File <%1> read error")); + QMessageBox::critical(this, header, msg.arg(s)); + } + tr_id->setChecked(config.transportVisible); + bt_id->setChecked(config.bigTimeVisible); + + showBigtime(config.bigTimeVisible); + showMixer1(config.mixer1Visible); + showMixer2(config.mixer2Visible); + if (mixer1 && config.mixer1Visible) + mixer1->setUpdateMixer(); + if (mixer2 && config.mixer2Visible) + mixer2->setUpdateMixer(); +// resize(config.geometryMain.size()); +// move(config.geometryMain.topLeft()); + if (config.transportVisible) + transport->show(); + transport->move(config.geometryTransport.topLeft()); + showTransport(config.transportVisible); + song->blockSignals(false); + transport->setMasterFlag(song->masterFlag()); + punchinAction->setChecked(song->punchin()); + punchoutAction->setChecked(song->punchout()); + loopAction->setChecked(song->loop()); + clipboardChanged(); // enable/disable "Paste" + song->setLen(song->len()); // emit song->lenChanged() signal + + selectionChanged(); // enable/disable "Copy" & "Paste" + arranger->endLoadSong(); + song->updatePos(); + song->updateCurrentMarker(); + // + // send "cur" controller values to devices + // + + TrackList* tl = song->tracks(); + for (iTrack i = tl->begin(); i != tl->end(); ++i) { + Track* track = *i; +// track->blockSignals(true); + CtrlList* cl = track->controller(); + for (iCtrl ic = cl->begin(); ic != cl->end(); ++ic) { + Ctrl* ctrl = ic->second; + if (ctrl->type() & Ctrl::INT) { + CVal val; + val = ctrl->curVal(); + if (track->isMidiTrack() && val.i == CTRL_VAL_UNKNOWN) + continue; + ctrl->setCurVal(CTRL_VAL_UNKNOWN); + song->setControllerVal(track, ctrl, val); + } + } +// track->blockSignals(false); + } + setWindowTitle(QString("MusE: Song: ") + name); + } + +//--------------------------------------------------------- +// MusE::loadProject +//--------------------------------------------------------- + +void MusE::loadProject() + { + ProjectDialog projectDialog; + int rv = projectDialog.exec(); + if (rv == 0) + return; + QString path = projectDialog.projectPath(); + if (path.isEmpty()) + return; + loadProject(path); + } + +//--------------------------------------------------------- +// save +//--------------------------------------------------------- + +bool MusE::save() + { + QString backupCommand; + + QString name(song->projectName() + ".med"); + QFileInfo fi(song->absoluteProjectPath() + "/" + name); + + QTemporaryFile tmp(fi.path() + "/MusEXXXXXX"); + tmp.setAutoRemove(false); + + if (!tmp.open()) { + QString s("Creating temp file failed: "); + s += strerror(errno); + QMessageBox::critical(this, + tr("MusE: Create tmp file failed"), s); + return false; + } + Xml xml(&tmp); + write(xml); + if (tmp.error()) { + QString s = QString("Write File\n") + tmp.fileName() + QString("\nfailed: ") + + tmp.errorString(); + QMessageBox::critical(this, tr("MusE: Write File failed"), s); + return false; + } + if (!song->backupWritten()) { + // + // remove old backup file + // + QDir dir(fi.path()); + QString backupName = QString(".") + fi.fileName() + QString(","); + dir.remove(backupName); + + // + // rename old file to backup + // + QString n(fi.filePath()); + dir.rename(n, backupName); + } + // + // rename temp name to file name + // + tmp.rename(fi.filePath()); + + song->dirty = false; + SndFile::updateRecFiles(); + return true; + } + +//--------------------------------------------------------- +// saveAs +//--------------------------------------------------------- + +bool MusE::saveAs() + { + printf("SAVEAS\n"); + ProjectDialog projectDialog; + int rv = projectDialog.exec(); + if (rv == 0) + return false; + QString path = projectDialog.projectPath(); + if (path.isEmpty()) + return false; + + QDir pd(QDir::homePath() + "/" + config.projectPath + "/" + path); + QString header = tr("MusE: new project"); + if (!pd.exists()) { + if (!pd.mkdir(pd.path())) { + QString s(tr("Cannot create project folder <%1>")); + QMessageBox::critical(this, header, s.arg(pd.path())); + return false; + } + } + addProject(path); + song->setProjectPath(path); + QString name = song->projectName(); + setWindowTitle(QString("MusE: Song: ") + name); + return save(); + } + + +//--------------------------------------------------------- +// saveAsTemplate +//--------------------------------------------------------- + +void MusE::saveAsTemplate() + { + printf("Not implemented: save as template\n"); + } + +//--------------------------------------------------------- +// quitDoc +//--------------------------------------------------------- + +void MusE::quitDoc() + { + close(); + } + +//--------------------------------------------------------- +// leaveProject +// return false if user aborts operation +//--------------------------------------------------------- + +bool MusE::leaveProject() + { + if (song->dirty) { + int n = 0; + n = QMessageBox::warning(this, appName, + tr("The current Project contains unsaved data\n" + "Save Current Project?"), + tr("&Save"), tr("&Nosave"), tr("&Abort"), 0, 2); + if (n == 0) + return !save(); + else if (n == 2) + return true; + // + // delete all wave files created in this session and not + // referenced any more + // delete all if we drop the song + // + SndFile::cleanupRecFiles(n == 1); + } + else + SndFile::cleanupRecFiles(true); + // + // if this is a new created project, + // delete project directory + // + if (song->created()) { + // delete project directory + QDir pp; + if (!pp.rmdir(song->absoluteProjectPath())) + printf("cannot remove dir <%s>\n", song->absoluteProjectPath().toLatin1().data()); + } + return false; + } + +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void MusE::closeEvent(QCloseEvent* event) + { + song->setStop(true); + // + // wait for sequencer + // + while (audio->isPlaying()) { + qApp->processEvents(); + } + + if (leaveProject()) { + event->ignore(); + return; + } + + seqStop(); + + // save "Open Recent" list + QString prjPath(getenv("HOME")); + prjPath += "/.musePrj"; + FILE* f = fopen(prjPath.toLatin1().data(), "w"); + if (f) { + for (int i = 0; i < PROJECT_LIST_LEN; ++i) { + fprintf(f, "%s\n", projectList[i] ? projectList[i]->toLatin1().data() : ""); + } + fclose(f); + } + exitJackAudio(); + SynthIList* sl = song->syntis(); + for (iSynthI i = sl->begin(); i != sl->end(); ++i) + delete *i; + + // Cleanup temporary wavefiles + peakfiles used for undo + for (std::list::iterator i = temporaryWavFiles.begin(); i != temporaryWavFiles.end(); i++) { + QString filename = *i; + QFileInfo f(filename); + QDir d = f.dir(); + d.remove(filename); + d.remove(f.baseName() + ".wca"); + } + writeSettings(); + qApp->quit(); + } + +//--------------------------------------------------------- +// showTransport +//--------------------------------------------------------- + +void MusE::showTransport(bool flag) + { + transport->setShown(flag); + tr_id->setChecked(flag); + if (flag) + transport->setValues(); + } + +//--------------------------------------------------------- +// printVersion +//--------------------------------------------------------- + +static void printVersion(const char* prog) + { + fprintf(stderr, "%s: Linux Music Editor; Version %s\n", prog, VERSION); + } + +//--------------------------------------------------------- +// startEditor +//--------------------------------------------------------- + +void MusE::startEditor(PartList* pl, int type) + { + switch (type) { + case 0: startPianoroll(pl); break; + case 1: startListEditor(pl); break; + case 2: startMidiTrackerEditor(pl); break; + case 3: startDrumEditor(pl); break; + case 4: startWaveEditor(pl); break; + } + } + +//--------------------------------------------------------- +// startEditor +//--------------------------------------------------------- + +void MusE::startEditor(Part* part, int type) + { + PartList* pl = new PartList(); + pl->add(part); + startEditor(pl, type); + } + +//--------------------------------------------------------- +// startEditor +//--------------------------------------------------------- + +void MusE::startEditor(Part* part) + { + PartList* pl = new PartList(); + pl->add(part); + Track* track = part->track(); + switch (track->type()) { + case Track::MIDI: + { + MidiTrack* t = (MidiTrack*)track; + if (t->useDrumMap()) + startDrumEditor(pl); + else + startPianoroll(pl); + } + break; + case Track::WAVE: + startWaveEditor(pl); + break; + default: + break; + } + } + +//--------------------------------------------------------- +// getMidiPartsToEdit +//--------------------------------------------------------- + +PartList* MusE::getMidiPartsToEdit() + { + PartList* pl = song->getSelectedMidiParts(); + if (pl->empty()) { + QMessageBox::critical(this, QString("MusE"), tr("Nothing to edit")); + delete pl; + return 0; + } + return pl; + } + +//--------------------------------------------------------- +// startPianoroll +//--------------------------------------------------------- + +void MusE::startPianoroll() + { + PartList* pl = getMidiPartsToEdit(); + if (pl == 0) + return; + startPianoroll(pl); + } + +void MusE::startPianoroll(PartList* pl) + { + PianoRoll* pianoroll = new PianoRoll(pl, false); + pianoroll->show(); +// connect(muse, SIGNAL(configChanged()), pianoroll, SLOT(configChanged())); + } + +//--------------------------------------------------------- +// startListEditor +//--------------------------------------------------------- + +void MusE::startListEditor() + { +// PartList* pl = getMidiPartsToEdit(); +// if (pl == 0) +// return; +// startListEditor(pl); + startListEditor(0); + } + +void MusE::startListEditor(PartList* pl) + { + Part* part = 0; + if (pl && !pl->empty()) { + part = pl->begin()->second; + showListEditor(Pos(), part->track(), part, 0); + } + else + showListEditor(Pos(), 0, 0, 0); + } + +void MusE::showListEditor(const Pos& pos, Track* track, Part* part, Ctrl* ctrl) + { + if (listEditor == 0) + listEditor = new ListEdit(this); + listEditor->selectItem(pos, track, part, ctrl); + listEditor->show(); + } + +//--------------------------------------------------------- +// startMidiTrackerEditor +//--------------------------------------------------------- + +void MusE::startMidiTrackerEditor() + { + PartList* pl = getMidiPartsToEdit(); + if (pl == 0) + return; + startMidiTrackerEditor(pl); + } + +void MusE::startMidiTrackerEditor(PartList* pl) + { + MidiTrackerEditor* miditracker = new MidiTrackerEditor(pl, false); + miditracker->show(); + connect(muse, SIGNAL(configChanged()), miditracker, SLOT(configChanged())); + } + +//--------------------------------------------------------- +// startMasterEditor +//--------------------------------------------------------- + +void MusE::startMasterEditor() + { + MasterEdit* masterEditor = new MasterEdit(); + masterEditor->show(); + } + +//--------------------------------------------------------- +// showProjectPropsDialog +//--------------------------------------------------------- + +void MusE::showProjectPropsDialog() + { + if (projectPropsDialog == 0) + projectPropsDialog = new ProjectPropsDialog(this); + projectPropsDialog->show(); + } + +//--------------------------------------------------------- +// startDrumEditor +//--------------------------------------------------------- + +void MusE::startDrumEditor() + { + PartList* pl = getMidiPartsToEdit(); + if (pl == 0) + return; + startDrumEditor(pl); + } + +void MusE::startDrumEditor(PartList* pl) + { + DrumEdit* drumEditor = new DrumEdit(pl, false); + drumEditor->show(); +// connect(muse, SIGNAL(configChanged()), drumEditor, SLOT(configChanged())); + } + +//--------------------------------------------------------- +// startWaveEditor +//--------------------------------------------------------- + +void MusE::startWaveEditor() + { + PartList* pl = song->getSelectedWaveParts(); + if (pl->empty()) { + QMessageBox::critical(this, QString("MusE"), tr("Nothing to edit")); + delete pl; + return; + } + startWaveEditor(pl); + } + +void MusE::startWaveEditor(PartList* pl) + { + WaveEdit* waveEditor = new WaveEdit(pl, false); + waveEditor->show(); + connect(muse, SIGNAL(configChanged()), waveEditor, SLOT(configChanged())); + } + +//--------------------------------------------------------- +// fileMenu +//--------------------------------------------------------- + +void MusE::openRecentMenu() + { + openRecent->clear(); + for (int i = 0; i < PROJECT_LIST_LEN; ++i) { + if (projectList[i] == 0) + break; + const char* path = projectList[i]->toLatin1().data(); + const char* p = strrchr(path, '/'); + if (p == 0) + p = path; + else + ++p; + QAction* a = openRecent->addAction(QString(p)); + a->setData(i); + } + } + +//--------------------------------------------------------- +// selectProject +//--------------------------------------------------------- + +void MusE::selectProject(QAction* a) + { + if (a == 0) + return; + int id = a->data().toInt(); + if (id < 0) + return; + assert(id < PROJECT_LIST_LEN); + QString* name = projectList[id]; + if (name == 0) + return; + loadProject(*name); + } + +//--------------------------------------------------------- +// playToggle +//--------------------------------------------------------- + +void MusE::playToggle() + { + if (audio->isPlaying()) + song->setStop(true); + else + song->setPlay(true); +// else if (song->cpos() != song->lpos()) +// song->setPos(0, song->lPos()); +// else { +// Pos p(0, AL::TICKS); +// song->setPos(0, p); +// } + } + +//--------------------------------------------------------- +// MuseApplication +//--------------------------------------------------------- + +MuseApplication::MuseApplication(int& argc, char** argv) + : QApplication(argc, argv) + { + muse = 0; + for (unsigned i = 0;; ++i) { + if (sc[i].xml == 0) + break; + shortcuts[sc[i].xml] = &sc[i]; + } + } + +//--------------------------------------------------------- +// usage +//--------------------------------------------------------- + +static void usage(const char* prog, const char* txt) + { + fprintf(stderr, "%s: %s\nusage: %s flags midifile\n Flags:", + prog, txt, prog); + fprintf(stderr, " -v print version\n"); + fprintf(stderr, " -m MIDI only mode\n"); + fprintf(stderr, " -d debug mode: no threads, no RT\n"); + fprintf(stderr, " -D debug mode: enable some debug messages\n"); + fprintf(stderr, " -i debug mode: trace midi Input\n"); + fprintf(stderr, " -o debug mode: trace midi Output\n"); + fprintf(stderr, " -s debug mode: trace sync\n"); + fprintf(stderr, " -p don't load LADSPA plugins\n"); +#ifdef VST_SUPPORT + fprintf(stderr, " -V don't load VST plugins\n"); +#endif +#ifdef DSSI_SUPPORT + fprintf(stderr, " -I don't load DSSI plugins\n"); +#endif + } + +//--------------------------------------------------------- +// catchSignal +// only for debugging +//--------------------------------------------------------- + +#if 0 +static void catchSignal(int sig) + { + if (debugMsg) + fprintf(stderr, "MusE: signal %d catched\n", sig); + if (sig == SIGSEGV) { + fprintf(stderr, "MusE: segmentation fault\n"); + abort(); + } + if (sig == SIGCHLD) { + M_DEBUG("caught SIGCHLD - child died\n"); + int status; + int n = waitpid (-1, &status, WNOHANG); + if (n > 0) { + fprintf(stderr, "SIGCHLD for unknown process %d received\n", n); + } + } + } +#endif + +//--------------------------------------------------------- +// setFollow +//--------------------------------------------------------- + +void MusE::setFollow(FollowMode fm) + { + TimeCanvas::followMode = fm; + fid0->setChecked(fm == FOLLOW_NO); + fid1->setChecked(fm == FOLLOW_JUMP); + fid2->setChecked(fm == FOLLOW_CONTINUOUS); + changeConfig(true); // save settings + } + +//--------------------------------------------------------- +// copyParts +// copy all selected Parts of type MIDI or WAVE to +// clipboard whatever first found +//--------------------------------------------------------- + +void MusE::copyParts(bool cutFlag) + { + QBuffer buffer; + buffer.open(QIODevice::WriteOnly); + AL::Xml xml(&buffer); + + if (cutFlag) + song->startUndo(); + int midiType = -1; + TrackList* tl = song->tracks(); + for (iTrack i = tl->begin(); i != tl->end(); ++i) { + Track* track = *i; + if (midiType == 1 && !track->isMidiTrack()) + continue; + PartList* pl = track->parts(); + for (iPart ip = pl->begin(); ip != pl->end(); ++ip) { + Part* part = ip->second; + if (part->selected()) { + if (midiType == -1) + midiType = track->isMidiTrack(); + part->write(xml); + if (cutFlag) + song->removePart(part); + } + } + } + buffer.close(); + QMimeData* mimeData = new QMimeData; + const char* t = midiType ? "application/muse/part/midi" : "application/muse/part/audio"; + mimeData->setData(t, buffer.buffer()); + QApplication::clipboard()->setMimeData(mimeData); + if (cutFlag) + song->endUndo(0); + } + +//--------------------------------------------------------- +// cmd +// some cmd's from pulldown menu +//--------------------------------------------------------- + +void MusE::cmd(QAction* a) + { + QString cmd = a->data().toString(); + TrackList* tracks = song->tracks(); + int l = song->lpos(); + int r = song->rpos(); + + if (cmd == "cut") + copyParts(true); + else if (cmd == "copy") + copyParts(false); + else if (cmd == "paste") { + const QMimeData* s = QApplication::clipboard()->mimeData(); + int isMidi = -1; + QByteArray data; + if (s->hasFormat("application/muse/part/midi")) { + isMidi = 1; + data = s->data("application/muse/part/midi"); + } + else if (s->hasFormat("application/muse/part/audio")) { + isMidi = 0; + data = s->data("application/muse/part/audio"); + } + // exit if unknown format + if (isMidi == -1) { + printf("paste: unknown format\n"); + return; + } + + // search target track + TrackList* tl = song->tracks(); + Track* track = 0; + for (iTrack i = tl->begin(); i != tl->end(); ++i) { + Track* t = *i; + if ((isMidi == 1 && t->type() == Track::MIDI) + || (isMidi == 0 && t->type() == Track::WAVE)) { + track = t; + break; + } + } + if (track == 0) { + printf("no destination track selected\n"); + return; + } + + QDomDocument doc; + int line, column; + QString err; + PartList pl; + if (!doc.setContent(data, false, &err, &line, &column)) { + QString col, ln, error; + col.setNum(column); + ln.setNum(line); + error = err + "\n at line: " + ln + " col: " + col; + printf("error parsing part: %s\n", error.toLatin1().data()); + return; + } + int tick = -1; + for (QDomNode node = doc.documentElement(); !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + if (e.isNull()) + continue; + if (e.tagName() == "part") { + Part* p = new Part(0); + p->ref(); + p->read(node, true); + pl.add(p); + if (tick == -1 || p->tick() < unsigned(tick)) + tick = int(p->tick()); + } + else + printf("MusE: %s not supported\n", e.tagName().toLatin1().data()); + } + + unsigned cpos = song->cpos(); + song->startUndo(); + for (iPart ip = pl.begin(); ip != pl.end(); ++ip) { + Part* part = ip->second; + part->setTick(part->tick() - tick + cpos); + part->setTrack(track); + song->addPart(part); + cpos += part->lenTick(); + } + song->endUndo(0); + track->partListChanged(); + } + + else if (cmd == "delete") { + TrackList* tl = song->tracks(); + bool partsMarked = false; + for (iTrack it = tl->begin(); it != tl->end(); ++it) { + PartList* pl2 = (*it)->parts(); + for (iPart ip = pl2->begin(); ip != pl2->end(); ++ip) { + if (ip->second->selected()) { + partsMarked = true; + break; + } + } + } + if (partsMarked) + song->cmdRemoveParts(); + else + audio->msgRemoveTracks(); + } + else if (cmd == "delete_track") + audio->msgRemoveTracks(); + else if (cmd == "sel_all" || cmd == "sel_none" || cmd == "sel_inv" + || cmd == "sel_ins_loc" || cmd == "sel_out_loc") { + for (iTrack i = tracks->begin(); i != tracks->end(); ++i) { + PartList* parts = (*i)->parts(); + for (iPart p = parts->begin(); p != parts->end(); ++p) { + bool f = false; + int t1 = p->second->tick(); + int t2 = t1 + p->second->lenTick(); + bool inside = + ((t1 >= l) && (t1 < r)) + || ((t2 > l) && (t2 < r)) + || ((t1 <= l) && (t2 > r)); + if (cmd == "sel_inv") + f = !p->second->selected(); + else if (cmd == "sel_none") + f = false; + else if (cmd == "sel_all") + f = true; + else if (cmd == "sel_ins_loc") + f = inside; + else if (cmd == "sel_out_loc") + f = !inside; + p->second->setSelected(f); + } + (*i)->partListChanged(); // repaints canvaswidget + } + song->update(); + } + else if (cmd == "select_parts_on_track") { + for (iTrack i = tracks->begin(); i != tracks->end(); ++i) { + if (!(*i)->selected()) + continue; + PartList* parts = (*i)->parts(); + for (iPart p = parts->begin(); p != parts->end(); ++p) + p->second->setSelected(true); + } + song->update(); + } + + else if (cmd == "follow_no") + setFollow(FOLLOW_NO); + else if (cmd == "follow_jump") + setFollow(FOLLOW_JUMP); + else if (cmd == "follow_continuous") + setFollow(FOLLOW_CONTINUOUS); + } + +//--------------------------------------------------------- +// clipboardChanged +//--------------------------------------------------------- + +void MusE::clipboardChanged() + { +// QString subtype("partlist"); + const QMimeData* ms = QApplication::clipboard()->mimeData(); + if (ms == 0) + return; + bool flag = ms->hasFormat("application/muse/part/midi") + || ms->hasFormat("application/muse/part/audio"); + pasteAction->setEnabled(flag); + } + +//--------------------------------------------------------- +// selectionChanged +//--------------------------------------------------------- + +void MusE::selectionChanged() + { + int k = 0; + TrackList* tl = song->tracks(); + for (iTrack t = tl->begin(); t != tl->end(); ++t) + k += (*t)->selected(); + cutAction->setEnabled(k == 1); + copyAction->setEnabled(k == 1); + song->updateSelectedTrack(); + } + +//--------------------------------------------------------- +// transpose +//--------------------------------------------------------- + +void MusE::transpose() + { + Transpose *w = new Transpose(); + w->show(); + } + +//--------------------------------------------------------- +// modifyGateTime +//--------------------------------------------------------- + +void MusE::modifyGateTime() + { +//TODO GateTime* w = new GateTime(this); +// w->show(); + } + +//--------------------------------------------------------- +// modifyVelocity +//--------------------------------------------------------- + +void MusE::modifyVelocity() + { + printf("not implemented\n"); + } + +//--------------------------------------------------------- +// crescendo +//--------------------------------------------------------- + +void MusE::crescendo() + { + printf("not implemented\n"); + } + +//--------------------------------------------------------- +// thinOut +//--------------------------------------------------------- + +void MusE::thinOut() + { + printf("not implemented\n"); + } + +//--------------------------------------------------------- +// eraseEvent +//--------------------------------------------------------- + +void MusE::eraseEvent() + { + printf("not implemented\n"); + } + +//--------------------------------------------------------- +// noteShift +//--------------------------------------------------------- + +void MusE::noteShift() + { + printf("not implemented\n"); + } + +//--------------------------------------------------------- +// moveClock +//--------------------------------------------------------- + +void MusE::moveClock() + { + printf("not implemented\n"); + } + +//--------------------------------------------------------- +// copyMeasure +//--------------------------------------------------------- + +void MusE::copyMeasure() + { + printf("not implemented\n"); + } + +//--------------------------------------------------------- +// eraseMeasure +//--------------------------------------------------------- + +void MusE::eraseMeasure() + { + printf("not implemented\n"); + } + +//--------------------------------------------------------- +// deleteMeasure +//--------------------------------------------------------- + +void MusE::deleteMeasure() + { + printf("not implemented\n"); + } + +//--------------------------------------------------------- +// createMeasure +//--------------------------------------------------------- + +void MusE::createMeasure() + { + printf("not implemented\n"); + } + +//--------------------------------------------------------- +// mixTrack +//--------------------------------------------------------- + +void MusE::mixTrack() + { + printf("not implemented\n"); + } + +//--------------------------------------------------------- +// configAppearance +//--------------------------------------------------------- +// +//void MusE::configAppearance() +// { +// if (!appearance) +// appearance = new Appearance(arranger); +// appearance->resetValues(); +// appearance->show(); +// } + +//--------------------------------------------------------- +// preferences +//--------------------------------------------------------- + +void MusE::preferences() + { + if (!preferencesDialog) + preferencesDialog = new PreferencesDialog(arranger); + preferencesDialog->resetValues(); + preferencesDialog->show(); + } + +//--------------------------------------------------------- +// configChanged +// - called whenever configuration has changed +// - when configuration has changed by user, call with +// writeFlag=true to save configuration in ~/.MusE +//--------------------------------------------------------- + +void MusE::changeConfig(bool writeFlag) + { + if (writeFlag) + writeGlobalConfiguration(); + updateConfiguration(); + emit configChanged(); + } + +//--------------------------------------------------------- +// configShortCuts +//--------------------------------------------------------- + +void MusE::configShortCuts() + { + if (!shortcutConfig) + shortcutConfig = new ShortcutConfig(this); + shortcutConfig->_config_changed = false; + if (shortcutConfig->exec()) + 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(); + MidiTrackList* tracks = song->midis(); + for (iMidiTrack it = tracks->begin(); it != tracks->end(); ++it) { + MidiTrack* track = *it; + if (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)) { + song->removePart(part); + } + else if ((t < lpos) && ((t+l) > lpos) && ((t+l) <= rpos)) { + // remove part tail + int len = lpos - t; + Part* nPart = new Part(*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; + audio->msgDeleteEvent(i->second, nPart, false); + } + song->changePart(part, nPart); + } + else if ((t < lpos) && ((t+l) > lpos) && ((t+l) > rpos)) { + //---------------------- + // remove part middle + //---------------------- + + Part* nPart = new Part(*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; + audio->msgDeleteEvent(ii->second, nPart, 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)); + audio->msgChangeEvent(event, nEvent, nPart, false); + } + nPart->setLenTick(l - (rpos-lpos)); + song->changePart(part, nPart); + } + else if ((t >= lpos) && (t < rpos) && (t+l) > rpos) { + // TODO: remove part head + } + else if (t >= rpos) { + Part* nPart = new Part(*part); + int nt = part->tick(); + nPart->setTick(nt - (rpos -lpos)); + song->changePart(part, nPart); + } + } + } + // 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(); + MidiTrackList* tracks = song->midis(); + for (iMidiTrack it = tracks->begin(); it != tracks->end(); ++it) { + MidiTrack* track = *it; + // + // process only non muted midi tracks + // + if (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)) { + Part* nPart = new Part(*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)); + audio->msgChangeEvent(event, nEvent, nPart, false); + } + song->changePart(part, nPart); + } + else if (t > lpos) { + Part* nPart = new Part(*part); + nPart->setTick(t + (rpos -lpos)); + song->changePart(part, nPart); + } + } + } + // 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); + song->changePart(part, p1); + song->addPart(p2); + 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; + } + +//--------------------------------------------------------- +// resetAllRecordFlags +//--------------------------------------------------------- + +static void resetAllRecordFlags() + { + WaveTrackList* wtl = song->waves(); + for (iWaveTrack i = wtl->begin(); i != wtl->end(); ++i) { + if((*i)->recordFlag()) + song->setRecordFlag(*i, false); + } + MidiTrackList* mtl = song->midis(); + for (iMidiTrack i = mtl->begin(); i != mtl->end(); ++i) { + if((*i)->recordFlag()) + song->setRecordFlag(*i, false); + } + } + +//--------------------------------------------------------- +// bounceToTrack +//--------------------------------------------------------- + +void MusE::bounceToTrack() + { + if (checkRegionNotNull()) + return; + // search target track + TrackList* tl = song->tracks(); + WaveTrack* track = 0; + for (iTrack it = tl->begin(); it != tl->end(); ++it) { + Track* t = *it; + if (t->selected()) { + if (track) { + QMessageBox::critical(this, + tr("MusE: Bounce to Track"), + tr("more than one target track selected") + ); + return; + } + if (t->type() != Track::WAVE) { + QMessageBox::critical(this, + tr("MusE: Bounce to Track"), + tr("wrong target track type,\nselect wave track as target") + ); + return; + } + track = (WaveTrack*)t; + } + } + if (track == 0) { + QMessageBox::critical(this, + tr("MusE: Bounce to Track"), + tr("no target track selected") + ); + return; + } + song->bounceTrack = track; + song->setRecord(true); + resetAllRecordFlags(); + song->setRecordFlag(track, true); + audio->msgBounce(); + } + +//--------------------------------------------------------- +// bounceToFile +//--------------------------------------------------------- + +void MusE::bounceToFile() + { + if (checkRegionNotNull()) + return; + SndFile* sf = getSndFile(0, this); + if (sf == 0) + return; + OutputList* ol = song->outputs(); + AudioOutput* ao = ol->front(); + if (ao == 0) { + QMessageBox::critical(this, + tr("MusE: Bounce to File"), + tr("no output track found") + ); + return; + } + ao->setRecFile(sf); + song->setRecord(true); + resetAllRecordFlags(); + song->setRecordFlag(ao, true); + audio->msgBounce(); + } + +//--------------------------------------------------------- +// startEditInstrument +//--------------------------------------------------------- + +void MusE::startEditInstrument() + { + if (editInstrument == 0) + editInstrument = new EditInstrument(this); + editInstrument->show(); + } + +//--------------------------------------------------------- +// updateConfiguration +// called whenever the configuration has changed +//--------------------------------------------------------- + +void MusE::updateConfiguration() + { + } + +//--------------------------------------------------------- +// showBigtime +//--------------------------------------------------------- + +void MusE::showBigtime(bool on) + { + if (on && bigtime == 0) { + bigtime = new BigTime(0); + bigtime->setPos(0, song->cpos(), false); + connect(song, SIGNAL(posChanged(int,const AL::Pos&, bool)), bigtime, SLOT(setPos(int,const AL::Pos&, bool))); + connect(muse, SIGNAL(configChanged()), bigtime, SLOT(configChanged())); + connect(bigtime, SIGNAL(closed()), SLOT(bigtimeClosed())); + bigtime->resize(config.geometryBigTime.size()); + bigtime->move(config.geometryBigTime.topLeft()); + } + if (bigtime) + bigtime->setShown(on); + bt_id->setChecked(on); + } + +//--------------------------------------------------------- +// showMarker +//--------------------------------------------------------- + +void MusE::showMarker(bool on) + { + if (on && markerView == 0) { + markerView = new MarkerView; + connect(markerView, SIGNAL(closed()), SLOT(markerClosed())); + } + if (markerView) + markerView->setShown(on); + mk_id->setChecked(on); + } + +//--------------------------------------------------------- +// markerClosed +//--------------------------------------------------------- + +void MusE::markerClosed() + { + mk_id->setChecked(false); + markerView = 0; + } + +//--------------------------------------------------------- +// bigtimeClosed +//--------------------------------------------------------- + +void MusE::bigtimeClosed() + { + bt_id->setChecked(false); + } + +//--------------------------------------------------------- +// transportClosed +//--------------------------------------------------------- + +void MusE::transportClosed() + { + tr_id->setChecked(false); + } + +//--------------------------------------------------------- +// showMixer1 +//--------------------------------------------------------- + +void MusE::showMixer1(bool on) + { + if (on && mixer1 == 0) { + mixer1 = new Mixer(this, &(config.mixer1)); + connect(mixer1, SIGNAL(closed()), SLOT(mixer1Closed())); + mixer1->resize(config.mixer1.geometry.size()); + mixer1->move(config.mixer1.geometry.topLeft()); + } + if (mixer1) + mixer1->setShown(on); + aid1a->setChecked(on); + } + +//--------------------------------------------------------- +// showMixer2 +//--------------------------------------------------------- + +void MusE::showMixer2(bool on) + { + if (on && mixer2 == 0) { + mixer2 = new Mixer(this, &(config.mixer2)); + connect(mixer2, SIGNAL(closed()), SLOT(mixer2Closed())); + mixer2->resize(config.mixer2.geometry.size()); + mixer2->move(config.mixer2.geometry.topLeft()); + } + if (mixer2) + mixer2->setShown(on); + aid1b->setChecked(on); + } + +//--------------------------------------------------------- +// mixer1Closed +//--------------------------------------------------------- + +void MusE::mixer1Closed() + { + aid1a->setChecked(false); + } + +//--------------------------------------------------------- +// mixer2Closed +//--------------------------------------------------------- + +void MusE::mixer2Closed() + { + aid1b->setChecked(false); + } + +//--------------------------------------------------------- +// transportWindow +//--------------------------------------------------------- + +QWidget* MusE::transportWindow() + { + return transport; + } + +//--------------------------------------------------------- +// bigtimeWindow +//--------------------------------------------------------- + +QWidget* MusE::bigtimeWindow() + { + return bigtime; + } + +//--------------------------------------------------------- +// mixer1Window +//--------------------------------------------------------- + +QWidget* MusE::mixer1Window() + { + return mixer1; + } + +//--------------------------------------------------------- +// mixer2Window +//--------------------------------------------------------- + +QWidget* MusE::mixer2Window() + { + return mixer2; + } + +//--------------------------------------------------------- +// focusInEvent +//--------------------------------------------------------- + +void MusE::focusInEvent(QFocusEvent* ev) + { + if (mixer1) + mixer1->raise(); + if (mixer2) + mixer2->raise(); + raise(); + QMainWindow::focusInEvent(ev); + } + +//--------------------------------------------------------- +// setTool +//--------------------------------------------------------- + +void MusE::setTool(int tool) + { + tools1->set(tool); + arranger->setTool(tool); + } + +void MusE::setTool(const QString& s) + { + int id = 0; + for (int i = 0; i < TOOLS; ++i) { + if (toolList[i] == s) { + id = i; + break; + } + } + id = 1 << id; + tools1->set(id); + arranger->setTool(id); + } + +//--------------------------------------------------------- +// globalPitchChanged +//--------------------------------------------------------- + +void MusE::globalPitchChanged(int val) + { + song->setGlobalPitchShift(val); + } + +//--------------------------------------------------------- +// globalTempoChanged +//--------------------------------------------------------- + +void MusE::globalTempoChanged(int val) + { + audio->msgSetGlobalTempo(val); + song->update(SC_TEMPO); + } + +//--------------------------------------------------------- +// setTempo50 +//--------------------------------------------------------- + +void MusE::setTempo50() + { + setGlobalTempo(50); + } + +//--------------------------------------------------------- +// setTempo100 +//--------------------------------------------------------- + +void MusE::setTempo100() + { + setGlobalTempo(100); + } + +//--------------------------------------------------------- +// setTempo200 +//--------------------------------------------------------- + +void MusE::setTempo200() + { + setGlobalTempo(200); + } + +//--------------------------------------------------------- +// setGlobalTempo +//--------------------------------------------------------- + +void MusE::setGlobalTempo(int val) + { + globalTempoSpinBox->setValue(val); + } + +//--------------------------------------------------------- +// main +//--------------------------------------------------------- + +int main(int argc, char* argv[]) + { + char c; + QString opts("mvdDiosP:p"); + +#ifdef VST_SUPPORT + opts += "V"; +#endif +#ifdef DSSI_SUPPORT + opts += "I"; +#endif + while ((c = getopt(argc, argv, opts.toLatin1().data())) != EOF) { + switch (c) { + case 'v': printVersion(argv[0]); return 0; + case 'd': + debugMode = true; + realTimePriority = false; + break; + case 'm': midiOnly = true; break; + case 'D': debugMsg = true; break; + case 'i': midiInputTrace = true; break; + case 'o': midiOutputTrace = true; break; + case 's': debugSync = true; break; + case 'p': loadPlugins = false; break; + case 'V': loadVST = false; break; + case 'I': loadDSSI = false; break; + default: usage(argv[0], "bad argument"); return -1; + } + } + AL::debugMsg = debugMsg; + if (midiOnly) { + loadDSSI = false; + loadPlugins = false; + loadVST = false; + } + AL::initDsp(); + + museUser = QString(getenv("MUSEHOME")); + if (museUser.isEmpty()) + museUser = QDir::homePath(); + QString museGlobal; + const char* p = getenv("MUSE"); + museGlobal = p ? p : INSTPREFIX; + + museGlobalLib = museGlobal + "/lib/" INSTALL_NAME; + museGlobalShare = museGlobal + "/share/" INSTALL_NAME; + configName = museUser + QString("/." INSTALL_NAME); + lastMidiPath = museUser + "/" + ::config.importMidiPath; + lastWavePath = museUser + "/" + ::config.importWavePath; + + srand(time(0)); // initialize random number generator + initMidiController(); + initMidiInstruments(); + MuseApplication app(argc, argv); + QCoreApplication::setOrganizationName("MusE"); + QCoreApplication::setOrganizationDomain("muse.org"); + QCoreApplication::setApplicationName("MusE"); + + gmDrumMap.initGm(); // init default drum map + readConfiguration(); + + // this style is used for scrollbars in mixer plugin racks: + smallStyle = new QWindowsStyle(); + + // SHOW MUSE SPLASH SCREEN + if (config.showSplashScreen) { + QPixmap splsh(":/xpm/splash.png"); + + if (!splsh.isNull()) { + QSplashScreen* muse_splash = new QSplashScreen(splsh, + Qt::WindowStaysOnTopHint); + muse_splash->show(); + QTimer* stimer = new QTimer(0); + muse_splash->connect(stimer, SIGNAL(timeout()), muse_splash, SLOT(close())); + stimer->start(6000); + } + } + + QFile cf(config.styleSheetFile); + if (cf.open(QIODevice::ReadOnly)) { + QByteArray ss = cf.readAll(); + QString sheet(QString::fromUtf8(ss.data())); + app.setStyleSheet(sheet); + cf.close(); + } + else + printf("loading style sheet <%s> failed\n", qPrintable(config.styleSheetFile)); + + bool useJACK = !(debugMode || midiOnly); + if (useJACK) { + if (initJackAudio()) { + if (!debugMode) + { + QMessageBox::critical(NULL, "MusE fatal error", + "MusE failed to find a Jack audio server.\n" + "Check that Jack was started.\n" + "If Jack was started check that it was\n" + "started as the same user as MusE."); + // fatalError("cannot start JACK"); + } + else + { + fprintf(stderr, "fatal error: no JACK audio server found\n"); + fprintf(stderr, "no audio functions available\n"); + fprintf(stderr, "*** experimental mode -- no play possible ***\n"); + } + useJACK = false; + debugMode = true; + } + } + if (!useJACK) + initDummyAudio(); + + argc -= optind; + ++argc; + + if (debugMsg) { + printf("global lib: <%s>\n", museGlobalLib.toLatin1().data()); + printf("global share: <%s>\n", museGlobalShare.toLatin1().data()); + printf("muse home: <%s>\n", museUser.toLatin1().data()); + printf("project dir: <%s>\n", config.projectPath.toLatin1().data()); + printf("config file: <%s>\n", configName.toLatin1().data()); + } + + static QTranslator translator; + QFile f(":/muse.qm"); + if (f.exists()) { + if (debugMsg) + printf("locale file found\n"); + if (translator.load(":/muse.qm")) { + if (debugMsg) + printf("locale file loaded\n"); + } + qApp->installTranslator(&translator); + } + else { + if (debugMsg) { + printf("locale file not found for locale <%s>\n", + QLocale::system().name().toLatin1().data()); + } + } + + if (loadPlugins) { + initPlugins(); + initMidiPlugins(); + } + if (loadVST) + initVST(); + + if (loadDSSI) + initDSSI(); + + initIcons(); + if (!midiOnly) + initMetronome(); + + if (debugMsg) { + QStringList list = app.libraryPaths(); + QStringList::Iterator it = list.begin(); + printf("QtLibraryPath:\n"); + while(it != list.end()) { + printf(" <%s>\n", (*it).toLatin1().data()); + ++it; + } + } + + song = new Song(); + muse = new MusE(); + muse->readSettings(); + app.setMuse(muse); + + //--------------------------------------------------- + // load project + //--------------------------------------------------- + + // check for project directory: + + QDir pd(QDir::homePath() + "/" + config.projectPath); + if (!pd.exists()) { + // ask user to create a new project directory + QString title(QT_TR_NOOP("MusE: create project directory")); + + QString s; + s = "The MusE project directory\n%1\ndoes not exists"; + s = s.arg(pd.path()); + + int rv = QMessageBox::question(0, + title, + s, + "Create", + "Abort", + QString(), + 0, 1); + if (rv == 1) + exit(0); + if (!pd.mkpath(pd.path())) { + // TODO: tell user why this has happened + QMessageBox::critical(0, + title, + "Creating project directory failed"); + exit(-1); + } + } + + // check for template directory: + + pd.setPath(QDir::homePath() + "/" + config.templatePath); + if (!pd.exists()) { + // ask user to create a new template directory + QString title(QT_TR_NOOP("MusE: create template directory")); + + QString s; + s = "The MusE template directory\n%1\ndoes not exists"; + s = s.arg(pd.path()); + + int rv = QMessageBox::question(0, + title, + s, + "Create", + "Abort", + QString(), + 0, 1); + if (rv == 0) { + if (!pd.mkpath(pd.path())) { + // TODO: tell user why this has happened + QMessageBox::critical(0, + title, + "Creating template directory failed"); + } + } + } + + // check for instruments directory: + + pd.setPath(QDir::homePath() + "/" + config.instrumentPath); + if (!pd.exists()) { + // ask user to create a new instruments directory + QString title(QT_TR_NOOP("MusE: create instruments directory")); + + QString s; + s = "The MusE instruments directory\n%1\ndoes not exists"; + s = s.arg(pd.path()); + + int rv = QMessageBox::question(0, + title, + s, + "Create", + "Abort", + QString(), + 0, 1); + if (rv == 0) { + if (!pd.mkpath(pd.path())) { + // TODO: tell user why this has happened + QMessageBox::critical(0, + title, + "Creating instruments directory failed"); + } + } + } + + QString path; // project path relativ to config.projectPath + if (argc >= 2) + path = argv[optind]; // start with first name on command line + else if (config.startMode == START_LAST_PROJECT) { + if (projectList[0]) + path = *projectList[0]; + } + else if (config.startMode == START_START_PROJECT) + path = config.startProject; + + QString name = path.split("/").last(); + if (!path.isEmpty()) { + QFile f(QDir::homePath() +"/"+config.projectPath+"/"+path+"/"+name+".med"); + if (!f.exists()) { + QString s(QT_TR_NOOP("Cannot find project <%1>")); + QString header(QT_TR_NOOP("MusE: load Project")); + QMessageBox::critical(0, header, s.arg(f.fileName())); + path = ""; + } + } + if (path.isEmpty()) { + // + // ask user for a project + // + for (;;) { + ProjectDialog projectDialog; + projectDialog.setProjectName(name); + int rv = projectDialog.exec(); + if (rv == 1) { + path = projectDialog.projectPath(); + if (!path.isEmpty()) + break; + } + // the user did not select/create a project + rv = QMessageBox::question(0, + "MusE: create/select project", + "before MusE starts, you must select a project\n" + "or create a new one", + "Go Back", + "Abort", + QString(), + 0, 1); + if (rv == 1) + exit(0); + } + } + + muse->loadProject(path); + muse->changeConfig(false); + if (!debugMode) { + if (mlockall(MCL_CURRENT | MCL_FUTURE)) + perror("WARNING: Cannot lock memory:"); + } + muse->show(); + muse->seqStart(); + int n = app.exec(); + if (n) + fprintf(stderr, "app end %d\n", n); + return n; + } + +//--------------------------------------------------------- +// beat +// heart beat +//--------------------------------------------------------- + +void MusE::beat() + { + song->beat(); + if (mixer1 && mixer1->isVisible()) + mixer1->heartBeat(); + if (mixer2 && mixer2->isVisible()) + mixer2->heartBeat(); + if (arranger && arranger->getStrip() && arranger->getStrip()->isVisible()) + arranger->getStrip()->heartBeat(); + } + +//--------------------------------------------------------- +// writeSettings +//--------------------------------------------------------- + +void MusE::writeSettings() + { + QSettings settings; + settings.beginGroup("MainWindow"); + settings.setValue("size", size()); + settings.setValue("pos", pos()); + settings.endGroup(); + } + +//--------------------------------------------------------- +// readSettings +//--------------------------------------------------------- + +void MusE::readSettings() + { + QSettings settings; + settings.beginGroup("MainWindow"); + resize(settings.value("size", QSize(950, 500)).toSize()); + move(settings.value("pos", QPoint(10, 10)).toPoint()); + settings.endGroup(); + } + + diff --git a/attic/muse_qt4_evolution/muse/muse.h b/attic/muse_qt4_evolution/muse/muse.h new file mode 100644 index 00000000..8a9d4f68 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/muse.h @@ -0,0 +1,318 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __APP_H__ +#define __APP_H__ + +#include "shortcuts.h" +#include "cobject.h" +#include "widgets/tools.h" + +namespace AL { + class Xml; + class Pos; + }; +using AL::Xml; +using AL::Pos; + +class Part; +class PartList; +class Transport; +class BigTime; +class Arranger; +class Track; +class MidiSyncConfig; +class MRConfig; +class MetronomeConfig; +class AudioConf; +class MidiFileConfig; +class MidiFilterConfig; +class MarkerView; +class MidiInputTransformDialog; +class MidiTransformerDialog; +class RhythmGen; +class MidiTrack; +class ShortcutConfig; +class PreferencesDialog; +class EditInstrument; +class Mixer; +class ExportMidiDialog; +class ListEdit; +class Ctrl; + +extern void configMidiController(); + +//--------------------------------------------------------- +// MusE +//--------------------------------------------------------- + +class MusE : public QMainWindow // , public Ui::MuseBase + { + Q_OBJECT + + QAction* fileSaveAction; + QAction* fileSaveAsAction; + QAction* fileOpenAction; + QAction* pianoAction; + QAction* waveAction; + QAction* trackerAction; + QAction* fileNewAction; + + QString appName; + + QToolBar *tools; + EditToolBar *tools1; + int _raster; + + Transport* transport; + QAction* tr_id; + BigTime* bigtime; + QAction* bt_id; + MarkerView* markerView; + QAction* mk_id; + Mixer* mixer1; + QAction* aid1a; + Mixer* mixer2; + QAction* aid1b; + ListEdit* listEditor; + + EditInstrument* editInstrument; + + QMenu *menu_file, *menuView, *menuSettings, *menu_help; + QMenu *menuEdit, *menuStructure; + QMenu* menu_audio; + QMenu* menu_functions; + QMenu* select, *master, *midiEdit, *addTrack; + QMenu* follow; + QMenu* midiInputPlugins; + + QAction* aid2; + QAction* aid3; + QAction* fid0; + QAction* fid1; + QAction* fid2; + QAction* cutAction; + QAction* copyAction; + QAction* pasteAction; + + QWidget* midiPortConfig; + QWidget* softSynthesizerConfig; + MidiSyncConfig* midiSyncConfig; + MRConfig* midiRemoteConfig; + RhythmGen* midiRhythmGenerator; + MetronomeConfig* metronomeConfig; + AudioConf* audioConfig; + MidiFileConfig* midiFileConfig; + MidiFilterConfig* midiFilterConfig; + MidiInputTransformDialog* midiInputTransform; + ShortcutConfig* shortcutConfig; + PreferencesDialog* preferencesDialog; + ExportMidiDialog* exportMidiDialog; + + MidiTransformerDialog* midiTransformerDialog; + QMenu* openRecent; + QSpinBox* globalTempoSpinBox; + QComboBox* rasterCombo; + + QDialog* projectPropsDialog; + + //------------------------------------------ + + bool readMidi(FILE*); + void processTrack(MidiTrack* track); + + void write(Xml& xml) const; + + void setFollow(FollowMode); + void readConfigParts(QDomNode); + void readCtrl(QDomNode, int port, int channel); + PartList* getMidiPartsToEdit(); + Part* readPart(QDomNode); + bool checkRegionNotNull(); + void loadProject1(const QString&); + void writeGlobalConfiguration(Xml&) const; + void writeConfiguration(Xml&) const; + void updateConfiguration(); + + bool leaveProject(); + + virtual void focusInEvent(QFocusEvent*); + void addMidiFile(const QString name); + void copyParts(bool); + void writeSettings(); + + signals: + void configChanged(); + void rasterChanged(int); + void startLoadSong(); + + private slots: + void beat(); + void loadProject(); + void quitDoc(); + void about(); + void aboutQt(); + void startHelpBrowser(); + void startHomepageBrowser(); + void startBugBrowser(); + void importMidi(); + void importWave(); + bool importWave(const QString&); + void exportMidi(); + + void configMidiSync(); + void configMidiFile(); + void configShortCuts(); + + void startMasterEditor(); + + void startDrumEditor(); + void startDrumEditor(PartList* pl); + void startEditor(Part*); + void startEditor(PartList*, int); + void startPianoroll(); + void startPianoroll(PartList* pl); + void startMidiTrackerEditor(); + void startMidiTrackerEditor(PartList* pl); + void startWaveEditor(); + void startWaveEditor(PartList*); + void writeGlobalConfiguration() const; + void startEditInstrument(); + + void startListEditor(); + void startListEditor(PartList*); + + void showProjectPropsDialog(); + + void openRecentMenu(); + void selectProject(QAction*); + void cmd(QAction*); + void clipboardChanged(); + void transpose(); + void modifyGateTime(); + void modifyVelocity(); + void crescendo(); + void thinOut(); + void eraseEvent(); + void noteShift(); + void moveClock(); + void copyMeasure(); + void eraseMeasure(); + void deleteMeasure(); + void createMeasure(); + void mixTrack(); + void globalCut(); + void globalInsert(); + void globalSplit(); + void copyRange(); + void cutEvents(); + void bounceToTrack(); + void resetMidiDevices(); + void initMidiDevices(); + void localOff(); + void bigtimeClosed(); + void transportClosed(); + void markerClosed(); + void mixer1Closed(); + void mixer2Closed(); + void syncChanged(); + void preferences(); + void aboutToShowAddTrack(); + void setRaster(int); + void playToggle(); + void saveAsTemplate(); + + public slots: + void bounceToFile(); + void closeEvent(QCloseEvent*e); + void loadProject(const QString&); + bool seqStart(); + void showTransport(bool flag); + void showBigtime(bool); + void showMixer1(bool); + void showMixer2(bool); + void showMarker(bool on); + void importMidi(const QString &file); + void globalPitchChanged(int val); + void globalTempoChanged(int val); + bool seqRestart(); + void setTempo50(); + void setTempo100(); + void setTempo200(); + void setGlobalTempo(int val); + void setTool(int); + void setTool(const QString&); + void startEditor(Part*, int); + bool save(); + bool saveAs(); + + public: + MusE(); + Arranger* arranger; + QRect configGeometryMain; + void kbAccel(int); + void changeConfig(bool writeFlag); + + void seqStop(); + void setHeartBeat(); + QWidget* transportWindow(); + QWidget* bigtimeWindow(); + QWidget* mixer1Window(); + QWidget* mixer2Window(); + bool importWaveToTrack(const QString& name, Track* track, const Pos&); + + void selectionChanged(); + + int version; // last *.med file version + // 0xaabb aa - major version, bb minor version + int raster() const { return _raster; } + void setupTransportToolbar(QToolBar* tb) const; + void readToplevels(QDomNode); + void initRaster(int); + + QAction* startAction; + QAction* rewindAction; + QAction* forwardAction; + QAction* stopAction; + QAction* playAction; + + void showListEditor(const Pos&, Track*, Part*, Ctrl*); + void readSettings(); + }; + +//--------------------------------------------------------- +// MuseApplication +//--------------------------------------------------------- + +class MuseApplication : public QApplication { + MusE* muse; + + public: + MuseApplication(int& argc, char** argv); + void setMuse(MusE* m) { muse = m; } + static Shortcut sc[]; + }; + +extern MusE* muse; +extern QStyle* smallStyle; +extern void addProject(const QString& name); + +#endif + diff --git a/attic/muse_qt4_evolution/muse/muse.qrc b/attic/muse_qt4_evolution/muse/muse.qrc new file mode 100644 index 00000000..b15b64da --- /dev/null +++ b/attic/muse_qt4_evolution/muse/muse.qrc @@ -0,0 +1,85 @@ + + + + style.qss + xpm/muse_icon_64x64.png + xpm/splash.png + xpm/filenew.png + xpm/fileopen.png + xpm/filesave.png + xpm/punchin.xpm + xpm/punchout.xpm + xpm/loop.xpm + xpm/start.xpm + xpm/stop.xpm + xpm/play.xpm + xpm/frewind.xpm + xpm/fforward.xpm + xpm/folder_new.png + xpm/recordOn.svg + xpm/recordOff.svg + xpm/greendot.svg + xpm/darkgreendot.svg + xpm/activeon.svg + xpm/activeoff.svg + xpm/on.svg + xpm/off.svg + xpm/mono.svg + xpm/stereo.svg + xpm/loop.xpm + xpm/punchin.xpm + xpm/punchout.xpm + xpm/undo.xpm + xpm/redo.xpm + xpm/panic.xpm + xpm/piano.xpm + xpm/view_transport_window.xpm + xpm/view_bigtime_window.xpm + xpm/view_cliplist.xpm + xpm/view_marker.xpm + xpm/view_mixer.xpm + xpm/pointer.xpm + xpm/pencil.xpm + xpm/delete.xpm + xpm/cut.xpm + xpm/glue.xpm + xpm/quant.xpm + xpm/draw.xpm + xpm/editmute.xpm + + xpm/select_all.xpm + xpm/select_deselect_all.xpm + xpm/select_invert_selection.xpm + xpm/select_inside_loop.xpm + xpm/select_outside_loop.xpm + xpm/editcut.xpm + xpm/editcopy.xpm + xpm/editpaste.xpm + xpm/edit_drumms.xpm + xpm/edit_mastertrack.xpm + xpm/edit_list.xpm + xpm/wave.xpm + + + + + ../share/locale/muse_de.qm + + + + ../share/locale/muse_es.qm + + + + ../share/locale/muse_fr.qm + + + + ../share/locale/muse_ru.qm + + + + ../share/locale/muse_sv_SE.qm + + + diff --git a/attic/muse_qt4_evolution/muse/part.cpp b/attic/muse_qt4_evolution/muse/part.cpp new file mode 100644 index 00000000..61ba561d --- /dev/null +++ b/attic/muse_qt4_evolution/muse/part.cpp @@ -0,0 +1,361 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "song.h" +#include "part.h" +#include "track.h" +#include "globals.h" +#include "event.h" +#include "audio.h" +#include "al/tempo.h" + +const char* partColorNames[] = { + QT_TR_NOOP("Default"), + QT_TR_NOOP("Refrain"), + QT_TR_NOOP("Bridge"), + QT_TR_NOOP("Intro"), + QT_TR_NOOP("Coda"), + QT_TR_NOOP("Chorus"), + QT_TR_NOOP("Solo"), + QT_TR_NOOP("Brass"), + QT_TR_NOOP("Percussion"), + QT_TR_NOOP("Drums"), + QT_TR_NOOP("Guitar"), + QT_TR_NOOP("Bass"), + QT_TR_NOOP("Flute"), + QT_TR_NOOP("Strings"), + QT_TR_NOOP("Keyboard"), + QT_TR_NOOP("Piano"), + QT_TR_NOOP("Saxophon"), + }; + +CloneList cloneList; + +//--------------------------------------------------------- +// Part +//--------------------------------------------------------- + +Part::Part(Track* t) + { + _selected = false; + _mute = false; + _colorIndex = 0; + _raster = -1; // invalid + _quant = -1; + _xmag = -1.0; + _fillLen = 0; + _track = t; + _events = 0; + if (_track && _track->type() == Track::WAVE) + setType(AL::FRAMES); + } + +//--------------------------------------------------------- +// clone +//--------------------------------------------------------- + +void Part::clone(EventList* e) + { + _events = e; + ref(); + } + +//--------------------------------------------------------- +// addEvent +//--------------------------------------------------------- + +iEvent Part::addEvent(Event& p) + { + return _events->add(p); + } + +iEvent Part::addEvent(Event& p, unsigned t) + { + return _events->add(p, t); + } + +//--------------------------------------------------------- +// index +//--------------------------------------------------------- + +int PartList::index(Part* part) + { + int index = 0; + for (iPart i = begin(); i != end(); ++i, ++index) + if (i->second == part) { + return index; + } + printf("PartList::index(): not found!\n"); + abort(); +// return 0; + } + +//--------------------------------------------------------- +// find +//--------------------------------------------------------- + +Part* PartList::find(int idx) + { + int index = 0; + for (iPart i = begin(); i != end(); ++i, ++index) + if (index == idx) + return i->second; + return 0; + } + +//--------------------------------------------------------- +// findPart +// search for part which contains tick +//--------------------------------------------------------- + +Part* PartList::findPart(unsigned tick) + { + iPart i = lower_bound(tick); + if (i != begin()) + --i; + for (; i != end(); ++i) { + unsigned tick1 = i->second->tick(); + unsigned tick2 = tick1 + i->second->lenTick(); + + if (tick >= tick2) + continue; + if (tick >= tick1) + return i->second; + if (tick < tick1) + break; + } + return 0; + } + +//--------------------------------------------------------- +// add +//--------------------------------------------------------- + +iPart PartList::add(Part* part) + { + return insert(std::pair (part->tick(), part)); + } + +//--------------------------------------------------------- +// remove +//--------------------------------------------------------- + +void PartList::remove(Part* part) + { + iPart i; + for (i = begin(); i != end(); ++i) { + if (i->second == part) { + erase(i); + return; + } + } +printf("remove part: not found\n"); + assert(i != end()); + } + +//--------------------------------------------------------- +// dump +//--------------------------------------------------------- + +void Part::dump(int n) const + { + for (int i = 0; i < n; ++i) + putchar(' '); + printf("Part: <%s> ", _name.toLatin1().data()); + for (int i = 0; i < n; ++i) + putchar(' '); + PosLen::dump(); + } + +//--------------------------------------------------------- +// Part::write +//--------------------------------------------------------- + +void Part::write(Xml& xml) + { + int id = -1; + bool dumpEvents = true; + + + if (isClone()) { + // we have to dump the event list only on first + // incarnation of clone + + for (iClone i = cloneList.begin(); i != cloneList.end(); ++i) { + if (i->el == _events) { + id = i->id; + dumpEvents = false; + break; + } + } + if (id == -1) + cloneList.push_back(ClonePart(_events, cloneList.size())); + } + + if (id != -1) + xml.stag(QString("part cloneId=\"%1\"").arg(id)); + else + xml.stag("part"); + if (!_name.isEmpty()) + xml.tag("name", _name); + + PosLen::write(xml, "poslen"); + if (_selected) + xml.tag("selected", _selected); + xml.tag("color", _colorIndex); + if (_raster != -1) + xml.tag("raster", _raster); + if (_quant != -1) + xml.tag("quant", _quant); + if (_xmag != -1.0) + xml.tag("xmag", _xmag); + for (ciCtrlCanvas i = ctrlCanvasList.begin(); i != ctrlCanvasList.end(); ++i) + xml.tagE(QString("CtrlCanvas h=\"%1\" id=\"%2\"").arg(i->height).arg(i->ctrlId)); + if (_fillLen) + xml.tag("fillLen", _fillLen); + if (_mute) + xml.tag("mute", _mute); + if (dumpEvents) { + for (ciEvent e = _events->begin(); e != _events->end(); ++e) + e->second.write(xml, *this); + } + xml.etag("part"); + } + +//--------------------------------------------------------- +// Part::read +//--------------------------------------------------------- + +void Part::read(QDomNode node, bool isMidiPart) + { + QDomElement e = node.toElement(); + int id = e.attribute("cloneId", "-1").toInt(); + + ctrlCanvasList.clear(); + for (node = node.firstChild(); !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + QString tag(e.tagName()); + QString s(e.text()); + int i = s.toInt(); + if (tag == "name") + _name = s; + else if (tag == "poslen") + PosLen::read(node); + else if (tag == "selected") + _selected = i; + else if (tag == "color") + _colorIndex = i; + else if (tag == "raster") + _raster = i; + else if (tag == "quant") + _quant = i; + else if (tag == "xmag") + _xmag = s.toDouble(); + else if (tag == "CtrlCanvas") { + CtrlCanvas c; + c.ctrlId = e.attribute("id","0").toInt(); + c.height = e.attribute("h","50").toInt(); + ctrlCanvasList.push_back(c); + } + else if (tag == "mute") + _mute = i; + else if (tag == "fillLen") + _fillLen = i; + else if (tag == "event") { + EventType type = isMidiPart ? Note : Wave; + Event e(type); + e.read(node); + // tickpos is relative to start of part + // TODO: better handling for wave event + e.move(-tick()); + int tick = e.tick(); + if ((tick < 0) || (tick >= int(lenTick()))) { + printf("ReadEvent: warning: event not in part: %d - %d - %d, discarded\n", + 0, tick, lenTick()); + } + else { +#if 0 + if (e.type() == Controller) { + MidiChannel* mc = ((MidiTrack*)_track)->channel(); + if (mc) { + CVal v; + v.i = e.dataB(); + mc->addControllerVal(e.dataA(), tick, v); + } + else + _events.add(e); + } + else +#endif + _events->add(e); + } + } + else + printf("MusE:read: unknown tag %s\n", e.tagName().toLatin1().data()); + } + + if (id != -1) { + bool found = false; + for (iClone i = cloneList.begin(); i != cloneList.end(); ++i) { + if (i->id == id) { + if (_events->size()) + printf("MusE::internal error: clone part contains events\n"); + clone(i->el); + found = true; + break; + } + } + if (!found) { + // add to cloneList: + ClonePart cp(_events, id); + cloneList.push_back(cp); + } + } + } + +//--------------------------------------------------------- +// isClone +//--------------------------------------------------------- + +bool Part::isClone() const + { + return _events->cloneCount > 1; + } + +//--------------------------------------------------------- +// ref +//--------------------------------------------------------- + +void Part::ref() + { + if (_events == 0) + _events = new EventList; + ++(_events->cloneCount); + } + +//--------------------------------------------------------- +// deref +//--------------------------------------------------------- + +void Part::deref() + { + --(_events->cloneCount); + } + diff --git a/attic/muse_qt4_evolution/muse/part.h b/attic/muse_qt4_evolution/muse/part.h new file mode 100644 index 00000000..fd5fdd52 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/part.h @@ -0,0 +1,151 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __PART_H__ +#define __PART_H__ + +#include "event.h" + +class Track; +class MidiTrack; +class WaveTrack; + +namespace AL { + class Xml; + }; + +using AL::Xml; + +//--------------------------------------------------------- +// ClonePart +//--------------------------------------------------------- + +struct ClonePart { + EventList* el; + int id; + ClonePart(EventList* e, int i) : el(e), id(i) {} + }; + +typedef std::list CloneList; +typedef CloneList::iterator iClone; +extern CloneList cloneList; + +//--------------------------------------------------------- +// CtrlCanvas +//--------------------------------------------------------- + +struct CtrlCanvas { + int ctrlId; + int height; + }; + +typedef std::list CtrlCanvasList; +typedef CtrlCanvasList::iterator iCtrlCanvas; +typedef CtrlCanvasList::const_iterator ciCtrlCanvas; + +//--------------------------------------------------------- +// Part +//--------------------------------------------------------- + +class Part : public AL::PosLen { + QString _name; + bool _selected; + bool _mute; + int _colorIndex; + + // editor presets: + int _raster, _quant; + double _xmag; + CtrlCanvasList ctrlCanvasList; + + // auto fill: + int _fillLen; // = 0 if no auto fill + + protected: + Track* _track; + EventList* _events; + + public: + Part(Track*); + + CtrlCanvasList* getCtrlCanvasList() { return &ctrlCanvasList; } + + const QString& name() const { return _name; } + void setName(const QString& s) { _name = s; } + + bool selected() const { return _selected; } + void setSelected(bool f) { _selected = f; } + + bool mute() const { return _mute; } + void setMute(bool b) { _mute = b; } + + Track* track() const { return _track; } + void setTrack(Track*t) { _track = t; } + + int colorIndex() const { return _colorIndex; } + void setColorIndex(int idx) { _colorIndex = idx; } + + int raster() const { return _raster; } + void setRaster(int val) { _raster = val; } + + int quant() const { return _quant; } + void setQuant(int val) { _quant = val; } + + double xmag() const { return _xmag; } + void setXmag(double val) { _xmag = val; } + + EventList* events() const { return _events; } + + void clone(EventList* e); + iEvent addEvent(Event& p); + iEvent addEvent(Event& p, unsigned); + + int fillLen() const { return _fillLen; } + void setFillLen(int val) { _fillLen = val; } + + void read(QDomNode, bool isMidiPart); + void write(Xml&); + void dump(int n = 0) const; + + bool isClone() const; + void deref(); + void ref(); + }; + +//--------------------------------------------------------- +// PartList +//--------------------------------------------------------- + +typedef std::multimap > PL; +typedef PL::iterator iPart; +typedef PL::const_iterator ciPart; + +class PartList : public PL { + public: + Part* findPart(unsigned tick); + iPart add(Part*); + void remove(Part* part); + int index(Part*); + Part* find(int idx); + }; + +extern const char* partColorNames[]; +#endif + diff --git a/attic/muse_qt4_evolution/muse/partdrag.cpp b/attic/muse_qt4_evolution/muse/partdrag.cpp new file mode 100644 index 00000000..c47d3c11 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/partdrag.cpp @@ -0,0 +1,199 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "partdrag.h" +#include "al/xml.h" +#include "part.h" + +const char MidiPartDrag::type[] = "application/muse/part/midi"; +const char AudioPartDrag::type[] = "application/muse/part/audio"; +const char WavUriDrag::type[] = "text/uri-list"; + +//--------------------------------------------------------- +// MidiPartDrag +//--------------------------------------------------------- + +MidiPartDrag::MidiPartDrag(Part* part, QWidget* src) + : QDrag(src) + { + QBuffer buffer; + buffer.open(QIODevice::WriteOnly); + AL::Xml xml(&buffer); + part->write(xml); + buffer.close(); + QMimeData* mimeData = new QMimeData; + mimeData->setData(type, buffer.buffer()); + setMimeData(mimeData); + } + +//--------------------------------------------------------- +// canDecode +//--------------------------------------------------------- + +bool MidiPartDrag::canDecode(const QMimeData* s) + { + return s->hasFormat(type); + } + +//--------------------------------------------------------- +// decode +//--------------------------------------------------------- + +bool MidiPartDrag::decode(const QMimeData* s, Part*& p) + { + p = 0; + QDomDocument doc; + int line, column; + QString err; + if (!doc.setContent(s->data(type), false, &err, &line, &column)) { + QString col, ln, error; + col.setNum(column); + ln.setNum(line); + error = err + "\n at line: " + ln + " col: " + col; + printf("error parsing part: %s\n", error.toLatin1().data()); + return false; + } + for (QDomNode node = doc.documentElement(); !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + if (e.isNull()) + continue; + if (e.tagName() == "part") { + p = new Part(0); + p->ref(); + p->read(node, true); + } + else + printf("MusE: %s not supported\n", e.tagName().toLatin1().data()); + } + return (p != 0); + } + +//--------------------------------------------------------- +// PartDrag +// does only transfer reference to part, this does +// not allow for transfers between different apps +// TODO: transfer content (xml representation) +//--------------------------------------------------------- + +AudioPartDrag::AudioPartDrag(Part* part, QWidget* src) + : QDrag(src) + { + QBuffer buffer; + buffer.open(QIODevice::WriteOnly); + Xml xml(&buffer); + part->write(xml); + buffer.close(); + + QMimeData* mimeData = new QMimeData; + mimeData->setData(type, buffer.buffer()); + setMimeData(mimeData); + } + +//--------------------------------------------------------- +// canDecode +//--------------------------------------------------------- + +bool AudioPartDrag::canDecode(const QMimeData* s) + { + return s->hasFormat(type); + } + +//--------------------------------------------------------- +// decode +//--------------------------------------------------------- + +bool AudioPartDrag::decode(const QMimeData* s, Part*& p) + { + p = 0; + QDomDocument doc; + int line, column; + QString err; + if (!doc.setContent(s->data(type), false, &err, &line, &column)) { + QString col, ln, error; + col.setNum(column); + ln.setNum(line); + error = err + "\n at line: " + ln + " col: " + col; + printf("error parsing part: %s\n", error.toLatin1().data()); + return false; + } + for (QDomNode node = doc.documentElement(); !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + if (e.isNull()) + continue; + if (e.tagName() == "part") { + p = new Part(0); + p->ref(); + p->read(node, false); + } + else + printf("MusE: %s not supported\n", e.tagName().toLatin1().data()); + } + return (p != 0); + } + +//--------------------------------------------------------- +// WavUriDrag +//--------------------------------------------------------- + +WavUriDrag::WavUriDrag(const QString& s, QWidget* src) + : QDrag(src) + { + QByteArray a(s.toAscii()); + QMimeData* mimeData = new QMimeData; + mimeData->setData(type, a); + setMimeData(mimeData); + } + +//--------------------------------------------------------- +// canDecode +//--------------------------------------------------------- + +bool WavUriDrag::canDecode(const QMimeData* s) + { + if (!s->hasFormat(type)) + return false; + QByteArray data = s->data(type); + QUrl url(data); + if (url.scheme() != "file") + return false; + QFileInfo fi(url.toLocalFile().trimmed()); + if (!fi.exists()) { + printf("drag file <%s> does not exist\n", fi.filePath().toLatin1().data()); + return false; + } + if (fi.suffix() != "wav") { + printf("drag file <%s> has no wav suffix\n", fi.filePath().toLatin1().data()); + return false; + } + return true; + } + +//--------------------------------------------------------- +// decode +//--------------------------------------------------------- + +bool WavUriDrag::decode(const QMimeData* s, QString* uri) + { + QByteArray data = s->data(type); + QUrl url(data); + *uri = url.toLocalFile().trimmed(); + return true; + } + diff --git a/attic/muse_qt4_evolution/muse/partdrag.h b/attic/muse_qt4_evolution/muse/partdrag.h new file mode 100644 index 00000000..d8c2e978 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/partdrag.h @@ -0,0 +1,69 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __PARTDRAG_H__ +#define __PARTDRAG_H__ + +class Part; + +//--------------------------------------------------------- +// MidiPartDrag +//--------------------------------------------------------- + +class MidiPartDrag : public QDrag { + Q_OBJECT + + public: + static const char type[]; + MidiPartDrag(Part*, QWidget* src); + static bool canDecode(const QMimeData*); + static bool decode(const QMimeData* s, Part*& p); + }; + +//--------------------------------------------------------- +// AudioPartDrag +//--------------------------------------------------------- + +class AudioPartDrag : public QDrag { + Q_OBJECT + + public: + static const char type[]; + AudioPartDrag(Part*, QWidget* src); + static bool canDecode(const QMimeData*); + static bool decode(const QMimeData* s, Part*& p); + }; + +//--------------------------------------------------------- +// WavUriDrag +//--------------------------------------------------------- + +class WavUriDrag : public QDrag { + Q_OBJECT + + public: + static const char type[]; + WavUriDrag(const QString&, QWidget* src); + static bool canDecode(const QMimeData*); + static bool decode(const QMimeData* s, QString* p); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/pipeline.cpp b/attic/muse_qt4_evolution/muse/pipeline.cpp new file mode 100644 index 00000000..ae5b9d25 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/pipeline.cpp @@ -0,0 +1,221 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "pipeline.h" +#include "plugin.h" +#include "plugingui.h" +#include "al/dsp.h" + +//--------------------------------------------------------- +// Pipeline +//--------------------------------------------------------- + +Pipeline::Pipeline() + { + for (int i = 0; i < MAX_CHANNELS; ++i) + posix_memalign((void**)(buffer + i), 16, sizeof(float) * segmentSize); + } + +Pipeline::Pipeline(const Pipeline& p) + : QList(p) + { + for (int i = 0; i < MAX_CHANNELS; ++i) + posix_memalign((void**)(buffer + i), 16, sizeof(float) * segmentSize); + } + +//--------------------------------------------------------- +// Pipeline +//--------------------------------------------------------- + +Pipeline::~Pipeline() + { + for (int i = 0; i < MAX_CHANNELS; ++i) + ::free(buffer[i]); + } + +//--------------------------------------------------------- +// setChannels +//--------------------------------------------------------- + +void Pipeline::setChannels(int n) + { + foreach(PluginI* plugin, *this) + plugin->setChannels(n); + } + +//--------------------------------------------------------- +// isOn +//--------------------------------------------------------- + +bool Pipeline::isOn(int idx) const + { + PluginI* p = value(idx); + if (p) + return p->on(); + return false; + } + +//--------------------------------------------------------- +// setOn +//--------------------------------------------------------- + +void Pipeline::setOn(int idx, bool flag) + { + PluginI* p = value(idx); + if (p) { + p->setOn(flag); + if (p->gui()) + p->gui()->setOn(flag); + } + } + +//--------------------------------------------------------- +// label +//--------------------------------------------------------- + +QString Pipeline::label(int idx) const + { + PluginI* p = value(idx); + if (p) + return p->label(); + return QString(""); + } + +//--------------------------------------------------------- +// name +//--------------------------------------------------------- + +QString Pipeline::name(int idx) const + { + PluginI* p = value(idx); + if (p) + return p->name(); + return QString("empty"); + } + +//--------------------------------------------------------- +// hasNativeGui +//--------------------------------------------------------- + +bool Pipeline::hasNativeGui(int idx) const + { + PluginI* p = value(idx); + if (p) + return p->hasNativeGui(); + return false; + } + +//--------------------------------------------------------- +// move +//--------------------------------------------------------- + +void Pipeline::move(int idx, bool up) + { + PluginI* p1 = (*this)[idx]; + if (up) { + (*this)[idx] = (*this)[idx-1]; + (*this)[idx-1] = p1; + } + else { + (*this)[idx] = (*this)[idx+1]; + (*this)[idx+1] = p1; + } + } + +//--------------------------------------------------------- +// showGui +//--------------------------------------------------------- + +void Pipeline::showGui(int idx, bool flag) + { + PluginI* p = (*this)[idx]; + if (p) + p->showGui(flag); + } + +//--------------------------------------------------------- +// showNativeGui +//--------------------------------------------------------- + +void Pipeline::showNativeGui(int idx, bool flag) + { + PluginI* p = (*this)[idx]; + if (p) + p->showNativeGui(flag); + } + +//--------------------------------------------------------- +// guiVisible +//--------------------------------------------------------- + +bool Pipeline::guiVisible(int idx) + { + PluginI* p = (*this)[idx]; + if (p) + return p->guiVisible(); + return false; + } + +//--------------------------------------------------------- +// nativeGuiVisible +//--------------------------------------------------------- + +bool Pipeline::nativeGuiVisible(int idx) + { + PluginI* p = (*this)[idx]; + if (p) + return p->nativeGuiVisible(); + return false; + } + +//--------------------------------------------------------- +// apply +//--------------------------------------------------------- + +void Pipeline::apply(int ports, unsigned long nframes, float** buffer1) + { + // prepare a second set of buffers in case a plugin is not + // capable of inPlace processing + + bool swap = false; + + foreach (PluginI* p, *this) { + if (p->on()) { + if (p->inPlaceCapable()) { + if (swap) + p->apply(nframes, ports, buffer, buffer); + else + p->apply(nframes, ports, buffer1, buffer1); + } + else { + if (swap) + p->apply(nframes, ports, buffer, buffer1); + else + p->apply(nframes, ports, buffer1, buffer); + swap = !swap; + } + } + } + if (swap) { + for (int i = 0; i < ports; ++i) + AL::dsp->cpy(buffer1[i], buffer[i], nframes); + } + } + diff --git a/attic/muse_qt4_evolution/muse/pipeline.h b/attic/muse_qt4_evolution/muse/pipeline.h new file mode 100644 index 00000000..a6e34678 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/pipeline.h @@ -0,0 +1,59 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __PIPELINE_H__ +#define __PIPELINE_H__ + +#include "globaldefs.h" + +class PluginI; + +//--------------------------------------------------------- +// Pipeline +// chain of connected efx inserts +//--------------------------------------------------------- + +class Pipeline : public QList { + float* buffer[MAX_CHANNELS]; + + public: + Pipeline(); + ~Pipeline(); + + Pipeline(const Pipeline&); + Pipeline& operator=(const Pipeline&); // disable copies + + bool isOn(int idx) const; + void setOn(int, bool); + QString label(int idx) const; + QString name(int idx) const; + bool hasNativeGui(int idx) const; + void showGui(int, bool); + bool guiVisible(int); + bool nativeGuiVisible(int); + void showNativeGui(int, bool); + void apply(int ports, unsigned long nframes, float** buffer); + void move(int idx, bool up); + void setChannels(int); + PluginI* plugin(int idx) { return value(idx); } + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/plugin.cpp b/attic/muse_qt4_evolution/muse/plugin.cpp new file mode 100644 index 00000000..a661b08e --- /dev/null +++ b/attic/muse_qt4_evolution/muse/plugin.cpp @@ -0,0 +1,466 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include + +#include "al/al.h" +#include "plugin.h" +#include "ladspaplugin.h" +#include "auxplugin.h" +#include "plugingui.h" +#include "al/xml.h" +#include "fastlog.h" +#include "ctrl.h" + +PluginList plugins; + +//--------------------------------------------------------- +// Plugin +//--------------------------------------------------------- + +Plugin::Plugin(const QFileInfo* f) + : fi(*f) + { + _instances = 0; + } + +//--------------------------------------------------------- +// loadPluginLib +//--------------------------------------------------------- + +static void loadPluginLib(QFileInfo* fi) + { + void* handle = dlopen(fi->filePath().toLatin1().data(), RTLD_NOW); + if (handle == 0) { + fprintf(stderr, "dlopen(%s) failed: %s\n", + fi->filePath().toLatin1().data(), dlerror()); + return; + } + LADSPA_Descriptor_Function ladspa = (LADSPA_Descriptor_Function)dlsym(handle, "ladspa_descriptor"); + + if (!ladspa) { + const char *txt = dlerror(); + if (txt) { + fprintf(stderr, + "Unable to find ladspa_descriptor() function in plugin " + "library file \"%s\": %s.\n" + "Are you sure this is a LADSPA plugin file?\n", + fi->filePath().toLatin1().data(), + txt); + return; + } + } + const LADSPA_Descriptor* descr; + for (int i = 0;; ++i) { + descr = ladspa(i); + if (descr == NULL) + break; + plugins.push_back(new LadspaPlugin(fi, ladspa, descr)); + } + } + +//--------------------------------------------------------- +// loadPluginDir +//--------------------------------------------------------- + +static void loadPluginDir(const QString& s) + { + if (debugMsg) + printf("scan ladspa plugin dir <%s>\n", s.toLatin1().data()); +#ifdef __APPLE__ + QDir pluginDir(s, QString("*.dylib"), 0, QDir::Files); +#else + QDir pluginDir(s, QString("*.so"), 0, QDir::Files); +#endif + if (pluginDir.exists()) { + QFileInfoList list = pluginDir.entryInfoList(); + for (int i = 0; i < list.size(); ++i) { + QFileInfo fi = list.at(i); + loadPluginLib(&fi); + } + } + } + +//--------------------------------------------------------- +// initPlugins +// search for LADSPA plugins +//--------------------------------------------------------- + +void initPlugins() + { + loadPluginDir(museGlobalLib + QString("/plugins")); + + const char* ladspaPath = getenv("LADSPA_PATH"); + if (ladspaPath == 0) + ladspaPath = "/usr/lib/ladspa:/usr/local/lib/ladspa"; + + const char* p = ladspaPath; + while (*p != '\0') { + const char* pe = p; + while (*pe != ':' && *pe != '\0') + pe++; + + int n = pe - p; + if (n) { + char* buffer = new char[n + 1]; + strncpy(buffer, p, n); + buffer[n] = '\0'; + loadPluginDir(QString(buffer)); + delete[] buffer; + } + p = pe; + if (*p == ':') + p++; + } + auxPlugin = new AuxPlugin; + } + +//--------------------------------------------------------- +// find +//--------------------------------------------------------- + +Plugin* PluginList::find(const QString& file, const QString& name) + { + for (iPlugin i = begin(); i != end(); ++i) { + if ((file == (*i)->lib()) && (name == (*i)->label())) + return *i; + } + printf("MusE: Plugin <%s> not found\n", name.toAscii().data()); + return 0; + } + +//--------------------------------------------------------- +// PluginI +//--------------------------------------------------------- + +PluginI::PluginI(AudioTrack* t) + { + _track = t; + _plugin = 0; + instances = 0; + _gui = 0; + _on = true; + pif = 0; + initControlValues = false; + } + +//--------------------------------------------------------- +// PluginI +//--------------------------------------------------------- + +PluginI::~PluginI() + { + if (_plugin) { + deactivate(); + _plugin->incInstances(-1); + } + if (_gui) + delete _gui; + if (pif) { + for (int i = 0; i < instances; ++i) { + delete pif[i]; + } + delete[] pif; + } + } + +//--------------------------------------------------------- +// apply +//--------------------------------------------------------- + +void PluginI::apply(unsigned nframes, int ports, float** src, float** dst) + { + int oports = _plugin->outports(); + int iports = _plugin->inports(); + + float* sp[iports * instances]; + float* dp[oports * instances]; + + for (int i = 0; i < iports * instances; ++i) + sp[i] = src[i % ports]; + for (int i = 0; i < oports * instances; ++i) + dp[i] = dst[i % ports]; + + float** spp = sp; + float** dpp = dp; + for (int i = 0; i < instances; ++i) { + pif[i]->apply(nframes, spp, dpp); + spp += iports; + dpp += oports; + } + } + +//--------------------------------------------------------- +// setChannel +//--------------------------------------------------------- + +void PluginI::setChannels(int c) + { + if (_channel == c) + return; + int ni = c / _plugin->outports(); + if (ni == 0) + ni = 1; + _channel = c; + if (ni == instances) + return; + _channel = c; + + // remove old instances: + deactivate(); + for (int i = 0; i < instances; ++i) + delete pif[i]; + delete pif; + + instances = ni; + pif = new PluginIF*[instances]; + for (int i = 0; i < instances; ++i) { + pif[i] = _plugin->createPIF(this); + if (pif[i] == 0) + return; + } + activate(); + } + +//--------------------------------------------------------- +// initPluginInstance +// return true on error +//--------------------------------------------------------- + +bool PluginI::initPluginInstance(Plugin* plug, int c) + { + if (plug == 0) { + printf("initPluginInstance: zero plugin\n"); + return true; + } + _channel = c; + _plugin = plug; + _plugin->incInstances(1); + QString inst("-" + QString::number(_plugin->instances())); + _name = _plugin->name() + inst; + _label = _plugin->label() + inst; + + instances = _channel / plug->outports(); + if (instances < 1) + instances = 1; + pif = new PluginIF*[instances]; + for (int i = 0; i < instances; ++i) { + pif[i] = _plugin->createPIF(this); + if (pif[i] == 0) + return true; + } + activate(); + return false; + } + +//--------------------------------------------------------- +// setParameter +// set plugin instance controller value by name +// return true on error +//--------------------------------------------------------- + +bool PluginI::setParameter(const QString& s, double val) + { + if (_plugin == 0) + return true; + int n = _plugin->parameter(); + for (int i = 0; i < n; ++i) { + if (getParameterName(i) == s) { + setParam(i, val); + return false; + } + } + printf("PluginI:setControl(%s, %f) controller not found\n", + s.toLatin1().data(), val); + return true; + } + +//--------------------------------------------------------- +// saveConfiguration +//--------------------------------------------------------- + +void PluginI::writeConfiguration(Xml& xml, bool prefader) + { + writeConfiguration1(xml, prefader); + xml.etag("plugin"); // append endtag + } + +//--------------------------------------------------------- +// saveConfiguration +//--------------------------------------------------------- + +void PluginI::writeConfiguration1(Xml& xml, bool prefader) + { + xml.stag(QString("plugin pre=\"%1\" file=\"%2\" label=\"%3\" channel=\"%4\"") + .arg(prefader) + .arg(_plugin->lib()) + .arg(_plugin->label()) + .arg(_channel)); +// instances * _plugin->inports()); + if (_on == false) + xml.tag("on", _on); + if (guiVisible()) { + xml.tag("gui", 1); + xml.tag("geometry", _gui); + } + if (hasNativeGui() && nativeGuiVisible()) + xml.tag("nativeGui", 1); + } + +//--------------------------------------------------------- +// readConfiguration +// return true on error +//--------------------------------------------------------- + +bool PluginI::readConfiguration(QDomNode node, bool* prefader) + { + QDomElement e = node.toElement(); + QString file = e.attribute("file"); + QString label = e.attribute("label"); + _channel = e.attribute("channel").toInt(); + *prefader = e.attribute("pre", "1").toInt(); + + if (_plugin == 0) { + // special case: internal plugin Aux + if (file.isEmpty() && label == "Aux") + _plugin = auxPlugin; + else + _plugin = plugins.find(file, label); + if (_plugin == 0) + return true; + if (initPluginInstance(_plugin, _channel)) + return true; + } + node = node.firstChild(); + while (!node.isNull()) { + e = node.toElement(); + int i = e.text().toInt(); + QString tag(e.tagName()); + if (tag == "on") { + bool flag = i; + _on = flag; + } + else if (tag == "gui") { + bool flag = i; + showGui(flag); + } + else if (tag == "nativeGui") { + bool flag = i; + showNativeGui(flag); + } + else if (tag == "geometry") { + QRect r(AL::readGeometry(node)); + if (_gui) { + _gui->resize(r.size()); + _gui->move(r.topLeft()); + } + } + else + printf("MusE:PluginI: unknown tag %s\n", e.tagName().toLatin1().data()); + node = node.nextSibling(); + } + if (_gui) + _gui->updateValues(); + return false; + } + +//--------------------------------------------------------- +// showGui +//--------------------------------------------------------- + +void PluginI::showGui() + { + if (_plugin) { + if (_gui == 0) + makeGui(); + if (_gui->isVisible()) + _gui->hide(); + else + _gui->show(); + } + } + +void PluginI::showGui(bool flag) + { + if (_plugin) { + if (flag) { + if (_gui == 0) + makeGui(); + _gui->show(); + } + else { + if (_gui) + _gui->hide(); + } + } + } + +//--------------------------------------------------------- +// guiVisible +//--------------------------------------------------------- + +bool PluginI::guiVisible() const + { + return _gui && _gui->isVisible(); + } + +//--------------------------------------------------------- +// makeGui +//--------------------------------------------------------- + +void PluginI::makeGui() + { + _gui = new PluginGui(this); + } + +//--------------------------------------------------------- +// deactivate +//--------------------------------------------------------- + +void PluginI::deactivate() + { + for (int i = 0; i < instances; ++i) { + pif[i]->deactivate(); + pif[i]->cleanup(); + } + } + +//--------------------------------------------------------- +// setParam +//--------------------------------------------------------- + +void PluginI::setParam(int idx, double val) + { + if (_gui) + _gui->updateValue(idx, val); + for (int i = 0; i < instances; ++i) + pif[i]->setParam(idx, val); + } + +//--------------------------------------------------------- +// activate +//--------------------------------------------------------- + +void PluginI::activate() + { + for (int i = 0; i < instances; ++i) + pif[i]->activate(); + } + diff --git a/attic/muse_qt4_evolution/muse/plugin.h b/attic/muse_qt4_evolution/muse/plugin.h new file mode 100644 index 00000000..c01a1f18 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/plugin.h @@ -0,0 +1,218 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __PLUGIN_H__ +#define __PLUGIN_H__ + +#include "ladspa.h" +#include "globals.h" + +namespace AL { + class Xml; + }; +using AL::Xml; + +class PluginIF; +class PluginGui; +class PluginI; +class LadspaPluginIF; +class AudioTrack; +class Ctrl; + +#define AUDIO_IN (LADSPA_PORT_AUDIO | LADSPA_PORT_INPUT) +#define AUDIO_OUT (LADSPA_PORT_AUDIO | LADSPA_PORT_OUTPUT) + +//--------------------------------------------------------- +// Plugin +//--------------------------------------------------------- + +class Plugin { + + protected: + int _instances; + QFileInfo fi; + + public: + Plugin(const QFileInfo* f); + virtual ~Plugin() {} + + int instances() const { return _instances; } + virtual void incInstances(int val) { _instances += val; } + + QString lib() const { return fi.baseName(); } + QString path() const { return fi.absolutePath(); } + + virtual QString label() const { return QString(); } + virtual QString name() const { return QString(); } + virtual unsigned long id() const { return 0; } + virtual QString maker() const { return QString(); } + virtual QString copyright() const { return QString(); } + + virtual PluginIF* createPIF(PluginI*) = 0; + + virtual void range(int, double* min, double* max) const { + *min = 0.0f; + *max = 1.0f; + } + + virtual int parameter() const { return 0; } + virtual int inports() const { return 0; } + virtual int outports() const { return 0; } + + virtual bool inPlaceCapable() const { return false; } + + virtual bool isLog(int) const { return false; } + virtual bool isBool(int) const { return false; } + virtual bool isInt(int) const { return false; } + virtual double defaultValue(int) const { return 0.0f; } + }; + +//--------------------------------------------------------- +// PluginList +//--------------------------------------------------------- + +typedef std::list::iterator iPlugin; + +class PluginList : public std::list { + public: + Plugin* find(const QString&, const QString&); + PluginList() {} + }; + +//--------------------------------------------------------- +// PluginIF +// plugin instance interface +//--------------------------------------------------------- + +class PluginIF { + protected: + PluginI* pluginI; + + public: + PluginIF(PluginI* pi) { pluginI = pi; } + virtual ~PluginIF() {} + + PluginI* pluginInstance() { return pluginI; } + const PluginI* pluginInstance() const { return pluginI; } + + virtual void apply(unsigned nframes, float** src, float** dst) = 0; + virtual void activate() = 0; + virtual void deactivate() = 0; + virtual void cleanup() = 0; + virtual void setParam(int i, double val) = 0; + virtual float param(int i) const = 0; + virtual const char* getParameterName(int) const { return ""; } + virtual const char* getParameterLabel(int) const { return 0; } + virtual const char* getParameterDisplay(int, float) const { return 0; } + virtual bool hasGui() const { return false; } + virtual bool guiVisible() const { return false; } + virtual void showGui(bool) {} + }; + +//--------------------------------------------------------- +// PluginI +// plugin instance +//--------------------------------------------------------- + +class PluginI { + Plugin* _plugin; + AudioTrack* _track; + + int instances; + PluginIF** pif; + + int _channel; + + PluginGui* _gui; + bool _on; + + QString _name; + QString _label; + + std::vector controllerList; + + void makeGui(); + + protected: + bool initControlValues; + friend class LadspaPluginIF; + + public: + PluginI(AudioTrack*); + ~PluginI(); + + Plugin* plugin() const { return _plugin; } + bool on() const { return _on; } + void setOn(bool val) { _on = val; } + PluginGui* gui() const { return _gui; } + + bool initPluginInstance(Plugin*, int channels); + void setChannels(int); + int channel() const { return _channel; } + void apply(unsigned nframes, int ports, float** b1, float** b2); + + void activate(); + void deactivate(); + QString label() const { return _label; } + QString name() const { return _name; } + QString lib() const { return _plugin->lib(); } + + AudioTrack* track() const { return _track; } + + void writeConfiguration(Xml&, bool); + void writeConfiguration1(Xml&, bool); // without end tag! + bool readConfiguration(QDomNode, bool*); + + void showGui(); + void showGui(bool); + bool guiVisible() const; + + bool hasNativeGui() const { return pif[0]->hasGui(); } + void showNativeGui(bool f) { return pif[0]->showGui(f); } + bool nativeGuiVisible() const { return pif[0]->guiVisible(); } + + void setControllerList(Ctrl* cl) { controllerList.push_back(cl); } + Ctrl* controller(int idx) const { return controllerList[idx]; } + bool setParameter(const QString& s, double val); + void setParam(int i, double val); + double param(int i) const { return pif[0]->param(i); } + + const char* getParameterName(int i) const { return pif[0]->getParameterName(i); } + const char* getParameterLabel(int i) const { return pif[0]->getParameterLabel(i); } + const char* getParameterDisplay(int i, float v) const { return pif[0]->getParameterDisplay(i, v); } + + void range(int i, double* min, double* max) const { + _plugin->range(i, min, max); + } + double defaultValue(int i) const { return _plugin->defaultValue(i); } + bool inPlaceCapable() const { return _plugin->inPlaceCapable(); } + + bool isLog(int k) const { return _plugin->isLog(k); } + bool isBool(int k) const { return _plugin->isBool(k); } + bool isInt(int k) const { return _plugin->isInt(k); } + + PluginIF* pluginIF(int idx) { return pif[idx]; } + }; + +extern void initPlugins(); +extern PluginList plugins; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/plugingui.cpp b/attic/muse_qt4_evolution/muse/plugingui.cpp new file mode 100644 index 00000000..9f0d1d32 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/plugingui.cpp @@ -0,0 +1,770 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "song.h" +#include "fastlog.h" +#include "widgets/filedialog.h" +#include "plugin.h" +#include "plugingui.h" +#include "icons.h" +#include "al/xml.h" +#include "gui.h" + +#include "awl/floatentry.h" +#include "awl/slider.h" +#include "awl/checkbox.h" +#include "awl/combobox.h" + +using Awl::FloatEntry; +using Awl::Slider; +using Awl::CheckBox; +using Awl::ComboBox; + +static const char* preset_file_pattern[] = { + QT_TR_NOOP("presets (*.pre *.pre.gz *.pre.bz2)"), + QT_TR_NOOP("All Files (*)"), + 0 + }; + +int PluginDialog::selectedPlugType = SEL_SM; +QStringList PluginDialog::sortItems = QStringList(); + +//--------------------------------------------------------- +// PluginDialog +// select Plugin dialog +//--------------------------------------------------------- + +PluginDialog::PluginDialog(QWidget* parent) + : QDialog(parent) + { + setWindowTitle(tr("MusE: select plugin")); + QVBoxLayout* layout = new QVBoxLayout(this); + + pList = new QTreeWidget(this); + pList->setColumnCount(11); + pList->setSortingEnabled(true); + QStringList headerLabels; + headerLabels << tr("Lib"); + headerLabels << tr("Label"); + headerLabels << tr("Name"); + headerLabels << tr("AI"); + headerLabels << tr("AO"); + headerLabels << tr("CI"); + headerLabels << tr("CO"); + headerLabels << tr("IP"); + headerLabels << tr("id"); + headerLabels << tr("Maker"); + headerLabels << tr("Copyright"); + + int sizes[] = { 110, 110, 0, 30, 30, 30, 30, 30, 40, 110, 110 }; + for (int i = 0; i < 11; ++i) { + if (sizes[i] == 0) { + pList->header()->setResizeMode(i, QHeaderView::Stretch); + } + else { + if (sizes[i] <= 40) // hack alert! + pList->header()->setResizeMode(i, QHeaderView::Custom); + pList->header()->resizeSection(i, sizes[i]); + } + } + + pList->setHeaderLabels(headerLabels); + + pList->setSelectionBehavior(QAbstractItemView::SelectRows); + pList->setSelectionMode(QAbstractItemView::SingleSelection); + pList->setAlternatingRowColors(true); + + fillPlugs(selectedPlugType); + layout->addWidget(pList); + + //--------------------------------------------------- + // Ok/Cancel Buttons + //--------------------------------------------------- + + QBoxLayout* w5 = new QHBoxLayout; + layout->addLayout(w5); + + QPushButton* okB = new QPushButton(tr("Ok"), this); + okB->setDefault(true); + QPushButton* cancelB = new QPushButton(tr("Cancel"), this); + okB->setFixedWidth(80); + cancelB->setFixedWidth(80); + w5->addWidget(okB); + w5->addSpacing(12); + w5->addWidget(cancelB); + + QGroupBox* plugSelGroup = new QGroupBox; + plugSelGroup->setTitle("Show plugs:"); + QHBoxLayout* psl = new QHBoxLayout; + plugSelGroup->setLayout(psl); + + QButtonGroup* plugSel = new QButtonGroup(plugSelGroup); + onlySM = new QRadioButton; + onlySM->setText(tr("Mono and Stereo")); + onlySM->setCheckable(true); + plugSel->addButton(onlySM); + psl->addWidget(onlySM); + onlyS = new QRadioButton; + onlyS->setText(tr("Stereo")); + onlyS->setCheckable(true); + plugSel->addButton(onlyS); + psl->addWidget(onlyS); + onlyM = new QRadioButton; + onlyM->setText(tr("Mono")); + onlyM->setCheckable(true); + plugSel->addButton(onlyM); + psl->addWidget(onlyM); + allPlug = new QRadioButton; + allPlug->setText(tr("Show All")); + allPlug->setCheckable(true); + plugSel->addButton(allPlug); + psl->addWidget(allPlug); + plugSel->setExclusive(true); + + switch(selectedPlugType) { + case SEL_SM: onlySM->setChecked(true); break; + case SEL_S: onlyS->setChecked(true); break; + case SEL_M: onlyM->setChecked(true); break; + case SEL_ALL: allPlug->setChecked(true); break; + } + + plugSelGroup->setToolTip(tr("Select which types of plugins should be visible in the list.
" + "Note that using mono plugins on stereo tracks is not a problem, two will be used in parallell.
" + "Also beware that the 'all' alternative includes plugins that probably not are usable by MusE.")); + + w5->addSpacing(12); + w5->addWidget(plugSelGroup); + w5->addSpacing(12); + + QLabel *sortLabel = new QLabel; + sortLabel->setText(tr("Search in 'Label' and 'Name':")); + w5->addWidget(sortLabel); + w5->addSpacing(2); + + sortBox = new QComboBox(this); + sortBox->setEditable(true); + if (!sortItems.empty()) + sortBox->addItems(sortItems); + + sortBox->setMinimumSize(100, 10); + w5->addWidget(sortBox); + w5->addStretch(-1); + + if (!sortBox->currentText().isEmpty()) + fillPlugs(sortBox->currentText()); + else + fillPlugs(selectedPlugType); + + + connect(pList, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), SLOT(accept())); + connect(cancelB, SIGNAL(clicked()), SLOT(reject())); + connect(okB, SIGNAL(clicked()), SLOT(accept())); + connect(plugSel, SIGNAL(buttonClicked(QAbstractButton*)), SLOT(fillPlugs(QAbstractButton*))); + connect(sortBox, SIGNAL(editTextChanged(const QString&)),SLOT(fillPlugs(const QString&))); + } + +//--------------------------------------------------------- +// accept +//--------------------------------------------------------- + +void PluginDialog::accept() + { + if (!sortBox->currentText().isEmpty()) { + foreach (QString item, sortItems) + if(item == sortBox->currentText()) { + QDialog::accept(); + return; + } + sortItems.push_front(sortBox->currentText()); + } + QDialog::accept(); + } + +//--------------------------------------------------------- +// value +//--------------------------------------------------------- + +Plugin* PluginDialog::value() + { + QTreeWidgetItem* item = pList->selectedItems().at(0); + if (item) + return plugins.find(item->text(0), item->text(1)); +printf("plugin not found\n"); + return 0; + } + +//--------------------------------------------------------- +// fillPlugs +//--------------------------------------------------------- + +void PluginDialog::fillPlugs(QAbstractButton* ab) + { + if (ab == allPlug) + fillPlugs(SEL_ALL); + else if (ab == onlyM) + fillPlugs(SEL_M); + else if (ab == onlyS) + fillPlugs(SEL_S); + else if (ab == onlySM) + fillPlugs(SEL_SM); + } + +//--------------------------------------------------------- +// fillPlugs int +//--------------------------------------------------------- + +void PluginDialog::fillPlugs(int nbr) + { + pList->clear(); + for (iPlugin i = plugins.begin(); i != plugins.end(); ++i) { + int ai = (*i)->inports(); + int ao = (*i)->outports(); + int ci = (*i)->parameter(); + int co = 0; + bool addFlag = false; + switch (nbr) { + case SEL_SM: // stereo & mono + if ((ai == 1 || ai == 2) && (ao == 1 || ao ==2)) { + addFlag = true; + } + break; + case SEL_S: // stereo + if ((ai == 1 || ai == 2) && ao ==2) { + addFlag = true; + } + break; + case SEL_M: // mono + if (ai == 1 && ao == 1) { + addFlag = true; + } + break; + case SEL_ALL: // all + addFlag = true; + break; + } + if (addFlag) { + QTreeWidgetItem* item = new QTreeWidgetItem; + item->setText(0, (*i)->lib()); + item->setText(1, (*i)->label()); + item->setText(2, (*i)->name()); + item->setText(3, QString().setNum(ai)); + item->setText(4, QString().setNum(ao)); + item->setText(5, QString().setNum(ci)); + item->setText(6, QString().setNum(co)); + item->setText(7, QString().setNum((*i)->inPlaceCapable())); + item->setText(8, QString().setNum((*i)->id())); + item->setText(9, (*i)->maker()); + item->setText(10, (*i)->copyright()); + pList->addTopLevelItem(item); + } + } + selectedPlugType = nbr; + } + +//--------------------------------------------------------- +// fillPlugs QString +//--------------------------------------------------------- + +void PluginDialog::fillPlugs(const QString &sortValue) + { + pList->clear(); + for (iPlugin i = plugins.begin(); i != plugins.end(); ++i) { + int ai = (*i)->inports(); + int ao = (*i)->outports(); + int ci = (*i)->parameter(); + int co = 0; + + bool addFlag = false; + + if ((*i)->label().toLower().contains(sortValue.toLower())) + addFlag = true; + else if ((*i)->name().toLower().contains(sortValue.toLower())) + addFlag = true; + if (addFlag) { + QTreeWidgetItem* item = new QTreeWidgetItem; + item->setText(0, (*i)->lib()); + item->setText(1, (*i)->label()); + item->setText(2, (*i)->name()); + item->setText(3, QString().setNum(ai)); + item->setText(4, QString().setNum(ao)); + item->setText(5, QString().setNum(ci)); + item->setText(6, QString().setNum(co)); + item->setText(7, QString().setNum((*i)->inPlaceCapable())); + item->setText(8, QString().setNum((*i)->id())); + item->setText(9, (*i)->maker()); + item->setText(10, (*i)->copyright()); + pList->addTopLevelItem(item); + } + } + } + +//--------------------------------------------------------- +// getPlugin +//--------------------------------------------------------- + +Plugin* PluginDialog::getPlugin(QWidget* parent) + { + PluginDialog* dialog = new PluginDialog(parent); + if (dialog->exec()) + return dialog->value(); + return 0; + } + +static const char* presetOpenText = " " + "Click this button to load a saved preset."; +static const char* presetSaveText = "Click this button to save curent parameter " + "settings as a preset. You will be prompted for a file name."; +static const char* presetBypassText = "Click this button to bypass effect unit"; + +//--------------------------------------------------------- +// PluginGui +//--------------------------------------------------------- + +PluginGui::PluginGui(PluginI* p) + : QMainWindow(0) + { + setIconSize(ICON_SIZE); + plugin = p; + setWindowTitle(plugin->name()); + + QToolBar* tools = addToolBar(tr("File Buttons")); + + QAction* fileOpen = tools->addAction(QIcon(*openIcon), tr("Load Preset"), + this, SLOT(load())); + fileOpen->setWhatsThis(tr(presetOpenText)); + QAction* fileSave = tools->addAction(QIcon(*saveIcon), tr("Save Preset"), + this, SLOT(save())); + fileSave->setWhatsThis(tr(presetSaveText)); + + tools->addAction(QWhatsThis::createAction(this)); + + onOff = tools->addAction(*onOffIcon, tr("bypass plugin")); + onOff->setCheckable(true); + onOff->setChecked(plugin->on()); + onOff->setWhatsThis(tr(presetBypassText)); + connect(onOff, SIGNAL(triggered(bool)), SLOT(bypassToggled(bool))); + + QString id; + id.setNum(plugin->plugin()->id()); + QString name(museGlobalShare + QString("/plugins/") + id + QString(".ui")); + + QWidget* mw; // main widget + QFile uifile(name); + if (uifile.exists()) { + // + // construct GUI from *.ui file + // + QFormBuilder builder; + // + // HACK: + // + QString path(museGlobalLib + "/designer"); +printf("build gui from ui <%s>\n", path.toLatin1().data()); + builder.addPluginPath(path); + + uifile.open(QFile::ReadOnly); + mw = builder.load(&uifile, this); + uifile.close(); + + setCentralWidget(mw); + connectPrebuiltGui(mw); + } + else { + mw = new QWidget(this); + setCentralWidget(mw); + QGridLayout* grid = new QGridLayout; + mw->setLayout(grid); + grid->setSpacing(2); + + int n = plugin->plugin()->parameter(); + resize(280, n*20+30); + + QFontMetrics fm = fontMetrics(); + int h = fm.height() + 4; + + for (int i = 0; i < n; ++i) { + double lower; + double upper; + double dlower; + double dupper; + double val = plugin->param(i); + double dval = val; + + plugin->range(i, &lower, &upper); + dlower = lower; + dupper = upper; + + if (plugin->isLog(i)) { + if (lower == 0.0) + lower = 0.001; + dlower = fast_log10(lower)*20.0; + dupper = fast_log10(upper)*20.0; + if (val == 0.0f) + dval = dlower; + else + dval = fast_log10(val) * 20.0; + } + if (plugin->isBool(i)) { + CheckBox* cb = new CheckBox(mw); + cb->setId(i); + cb->setText(QString(plugin->getParameterName(i))); + cb->setChecked(plugin->param(i) > 0.0); + cb->setFixedHeight(h); + cb->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum)); + + GuiWidget w; + w.widget = cb; + w.parameter = i; + w.type = GuiWidget::CHECKBOX; + gw.push_back(w); + grid->addWidget(cb, i, 0, 1, 3); + connect(cb, SIGNAL(valueChanged(double,int)), SLOT(setController(double, int))); + } + else { + QLabel* label = new QLabel(QString(plugin->getParameterName(i)), mw); + label->setFixedHeight(20); + label->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum)); + FloatEntry* e = new FloatEntry(mw); + e->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum)); + e->setRange(lower, upper); + e->setId(i); + e->setFixedHeight(h); + e->setFrame(true); + GuiWidget w; + w.widget = e; + w.parameter = i; + w.type = GuiWidget::FLOAT_ENTRY; + gw.push_back(w); + + Slider* s = new Slider(mw); + s->setId(i); + s->setLog(plugin->isLog(i)); + s->setOrientation(Qt::Horizontal); + s->setFixedHeight(h); + s->setRange(dlower, dupper); + s->setLineStep((dupper-dlower)/100.0); + s->setPageStep((dupper-dlower)/10.0); + s->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum)); + w.widget = s; + w.parameter = i; + w.type = GuiWidget::SLIDER; + gw.push_back(w); + grid->addWidget(label, i, 0); + grid->addWidget(e, i, 1); + const char* p = plugin->getParameterLabel(i); + if (p) { + QLabel* l = new QLabel(mw); + l->setFixedHeight(h); + l->setText(p); + grid->addWidget(l, i, 2); + } + grid->addWidget(s, i, 3); + connect(s, SIGNAL(valueChanged(double,int)), SLOT(setController(double,int))); + connect(e, SIGNAL(valueChanged(double,int)), SLOT(setController(double,int))); + } + updateValue(i, val); + } + grid->setColumnStretch(3, 10); + } + connect(plugin->track(), SIGNAL(autoReadChanged(bool)), SLOT(autoChanged())); + connect(plugin->track(), SIGNAL(autoWriteChanged(bool)), SLOT(autoChanged())); + connect(plugin->track(), SIGNAL(controllerChanged(int)), SLOT(controllerChanged(int))); + autoChanged(); + } + + + +void PluginGui::connectPrebuiltGui(QWidget* wContainer) + { + QObjectList l = wContainer->children(); + for (int i = 0; i < l.size(); ++i) { + + QObject* obj = l.at(i); + + const char* name = obj->objectName().toLatin1().data(); + + if (strcmp(obj->metaObject()->className(), "QFrame") == 0) { + connectPrebuiltGui((QWidget *)obj); + } + if (*name !='P') + continue; + GuiWidget w; + w.widget = (QWidget*)obj; + if (strcmp(obj->metaObject()->className(), "Awl::Slider") == 0) { + connect((Slider*)obj, SIGNAL(valueChanged(double,int)), SLOT(setController(double,int))); + w.type = GuiWidget::SLIDER; + w.parameter = ((Slider*)obj)->id(); + } + else if (strcmp(obj->metaObject()->className(), "Awl::FloatEntry") == 0) { + connect((FloatEntry*)obj, SIGNAL(valueChanged(double,int)), SLOT(setController(double,int))); + w.type = GuiWidget::FLOAT_ENTRY; + w.parameter = ((FloatEntry*)obj)->id(); + } + else if (strcmp(obj->metaObject()->className(), "Awl::CheckBox") == 0) { + w.type = GuiWidget::CHECKBOX; + w.parameter = ((CheckBox*)obj)->id(); + connect(obj, SIGNAL(valueChanged(double, int)), SLOT(setController(double, int))); + } + else if (strcmp(obj->metaObject()->className(), "Awl::ComboBox") == 0) { + w.type = GuiWidget::COMBOBOX; + w.parameter = ((ComboBox*)obj)->id(); + connect(obj, SIGNAL(valueChanged(double, int)), SLOT(setController(double,int))); + } + else { + printf("PluginGui::unknown widget class %s\n", obj->metaObject()->className()); + continue; + } + gw.push_back(w); + } +} + + +//--------------------------------------------------------- +// PluginGui +//--------------------------------------------------------- + +PluginGui::~PluginGui() + { + } + +//--------------------------------------------------------- +// setController +//--------------------------------------------------------- + +void PluginGui::setController(double val, int param) + { + if (plugin->isInt(param)) + val = rint(val); + CVal cval; + cval.f = val; + song->setControllerVal(plugin->track(), plugin->controller(param), cval); + } + +//--------------------------------------------------------- +// load +//--------------------------------------------------------- + +void PluginGui::load() + { + QString s("presets/plugins/"); + s += plugin->plugin()->label(); + s += "/"; + + QStringList pattern; + const char** p = preset_file_pattern; + while (*p) + pattern << *p++; + QString fn = getOpenFileName(s, pattern, this, tr("MusE: load preset")); + if (fn.isEmpty()) + return; + QFile* qf = fileOpen(this, fn, QString(".pre"), QIODevice::ReadOnly, true); + if (qf == 0) + return; + + QDomDocument doc; + int line, column; + QString err; + if (!doc.setContent(qf, false, &err, &line, &column)) { + QString col, ln, error; + col.setNum(column); + ln.setNum(line); + error = err + "\n at line: " + ln + " col: " + col; + printf("error reading med file: %s\n", error.toLatin1().data()); + delete qf; + return; + } + QDomNode node = doc.documentElement(); + + while (!node.isNull()) { + QDomElement e = node.toElement(); + if (e.isNull()) + continue; + if (e.tagName() == "muse") { + // QString version = e.attribute(QString("version")); + node = node.firstChild(); + while (!node.isNull()) { + QDomElement e = node.toElement(); + bool prefader; + if (e.tagName() == "plugin") + plugin->readConfiguration(node.firstChild(), &prefader); + else + printf("MusE:PluginGui: unknown tag %s\n", e.tagName().toLatin1().data()); + node = node.nextSibling(); + } + } + else + printf("MusE: %s not supported\n", e.tagName().toLatin1().data()); + node = node.nextSibling(); + } + qf->close(); + delete qf; + } + +//--------------------------------------------------------- +// save +//--------------------------------------------------------- + +void PluginGui::save() + { + QString s("presets/plugins/"); + s += plugin->plugin()->label(); + s += "/"; + + QStringList pattern; + const char** p = preset_file_pattern; + while (*p) + pattern << *p++; + QString fn = getSaveFileName(s, pattern, this, + tr("MusE: save preset")); + if (fn.isEmpty()) + return; + QFile* f = fileOpen(this, fn, QString(".pre"), QIODevice::WriteOnly, true); + if (f == 0) + return; + Xml xml(f); + xml.header(); + xml.stag("muse version=\"1.0\""); + plugin->writeConfiguration(xml, true); + xml.etag("muse"); + f->close(); + delete f; + } + +//--------------------------------------------------------- +// bypassToggled +//--------------------------------------------------------- + +void PluginGui::bypassToggled(bool val) + { + plugin->setOn(val); + song->update(SC_ROUTE); + } + +//--------------------------------------------------------- +// setOn +//--------------------------------------------------------- + +void PluginGui::setOn(bool val) + { +// onOff->blockSignals(true); + onOff->setChecked(val); +// onOff->blockSignals(false); + } + +//--------------------------------------------------------- +// updateValue +//--------------------------------------------------------- + +void PluginGui::updateValue(int parameter, double value) + { + for (std::vector::iterator i = gw.begin(); i != gw.end(); ++i) { + int idx = i->parameter; + if (idx != parameter) + continue; + switch (i->type) { + case GuiWidget::SLIDER: + ((Slider*)(i->widget))->setValue(value); + break; + case GuiWidget::FLOAT_ENTRY: + { + const char* p = plugin->getParameterDisplay(idx, value); + if (p) + ((FloatEntry*)(i->widget))->setText(QString(p)); + else + ((FloatEntry*)(i->widget))->setValue(value); + } + break; + case GuiWidget::CHECKBOX: + ((CheckBox*)(i->widget))->setValue(value); + break; + case GuiWidget::COMBOBOX: + ((ComboBox*)(i->widget))->setValue(value); + break; + } + } + } + +//--------------------------------------------------------- +// updateValues +//--------------------------------------------------------- + +void PluginGui::updateValues() + { + int n = plugin->plugin()->parameter(); + for (int i = 0; i < n; ++i) { + double val = plugin->param(i); + updateValue(i, val); + } + } + +//--------------------------------------------------------- +// controllerChanged +//--------------------------------------------------------- + +void PluginGui::controllerChanged(int id) + { + double value = plugin->track()->ctrlVal(id).f; + for (std::vector::iterator i = gw.begin(); i != gw.end(); ++i) { + int idx = i->parameter; + if (plugin->controller(idx)->id() != id) + continue; + switch (i->type) { + case GuiWidget::SLIDER: + ((Slider*)(i->widget))->setValue(value); + break; + case GuiWidget::FLOAT_ENTRY: + { + const char* p = plugin->getParameterDisplay(idx, value); + if (p) + ((FloatEntry*)(i->widget))->setText(QString(p)); + else + ((FloatEntry*)(i->widget))->setValue(value); + } + break; + case GuiWidget::CHECKBOX: + ((CheckBox*)(i->widget))->setValue(value); + break; + case GuiWidget::COMBOBOX: + ((ComboBox*)(i->widget))->setValue(value); + break; + } + } + } + +//--------------------------------------------------------- +// autoChanged +//--------------------------------------------------------- + +void PluginGui::autoChanged() + { + bool ar = plugin->track()->autoRead(); + bool aw = plugin->track()->autoWrite(); + + // controller are enabled if + // autoRead is off + // autoRead and autoWrite are on (touch mode) + + bool ec = !ar || (ar && aw); + + for (std::vector::iterator i = gw.begin(); i != gw.end(); ++i) + i->widget->setEnabled(ec); + } + + diff --git a/attic/muse_qt4_evolution/muse/plugingui.h b/attic/muse_qt4_evolution/muse/plugingui.h new file mode 100644 index 00000000..e54e683a --- /dev/null +++ b/attic/muse_qt4_evolution/muse/plugingui.h @@ -0,0 +1,122 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __PLUGINGUI_H__ +#define __PLUGINGUI_H__ + +namespace Awl { + class FloatEntry; + }; +using Awl::FloatEntry; + +class Plugin; +class PluginI; + +//--------------------------------------------------------- +// GuiParam +//--------------------------------------------------------- + +struct GuiParam { + enum { + GUI_SLIDER, GUI_SWITCH + }; + int type; + FloatEntry* label; + QWidget* actuator; // Slider or Toggle Button (SWITCH) + }; + +//--------------------------------------------------------- +// GuiWidget +//--------------------------------------------------------- + +struct GuiWidget { + enum { + SLIDER, FLOAT_ENTRY, CHECKBOX, COMBOBOX + } type; + QWidget* widget; + int parameter; + }; + +//--------------------------------------------------------- +// PluginGui +//--------------------------------------------------------- + +class PluginGui : public QMainWindow { + Q_OBJECT + + PluginI* plugin; // plugin instance + std::vector gw; + + QAction* onOff; + void connectPrebuiltGui(QWidget* wContainer); + + private slots: + void load(); + void save(); + void bypassToggled(bool); + + void setController(double, int); + void autoChanged(); + + public: + PluginGui(PluginI*); + ~PluginGui(); + void setOn(bool); + void updateValue(int, double); + void updateValues(); + + public slots: + void controllerChanged(int id); + }; + +//--------------------------------------------------------- +// PluginDialog +//--------------------------------------------------------- + +enum { SEL_SM, SEL_S, SEL_M, SEL_ALL }; + +class PluginDialog : public QDialog { + QTreeWidget* pList; + QRadioButton* allPlug; + QRadioButton* onlyM; + QRadioButton* onlyS; + QRadioButton* onlySM; + + Q_OBJECT + + public: + PluginDialog(QWidget* parent=0); + static Plugin* getPlugin(QWidget* parent); + Plugin* value(); + void accept(); + + public slots: + void fillPlugs(QAbstractButton*); + void fillPlugs(int i); + void fillPlugs(const QString& sortValue); + + private: + QComboBox *sortBox; + static int selectedPlugType; + static QStringList sortItems; + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/port.h b/attic/muse_qt4_evolution/muse/port.h new file mode 100644 index 00000000..d2f83de9 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/port.h @@ -0,0 +1,76 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __PORT_H__ +#define __PORT_H__ + +#include + +//--------------------------------------------------------- +// Port +//--------------------------------------------------------- + +class Port { + enum { JACK_TYPE, ALSA_TYPE, ZERO_TYPE } type; + union { + jack_port_t* _jackPort; + struct { + unsigned char _alsaPort; + unsigned char _alsaClient; + }; + }; + public: + Port() { + type = ZERO_TYPE; + } + Port(jack_port_t* p) { + _jackPort = p; + type = JACK_TYPE; + } + Port(unsigned char client, unsigned char port) { + _alsaPort = port; + _alsaClient = client; + type = ALSA_TYPE; + } + void setZero() { type = ZERO_TYPE; } + bool isZero() const { return type == ZERO_TYPE; } + bool operator==(const Port& p) const { + if (type == JACK_TYPE) + return _jackPort == p._jackPort; + else if (type == ALSA_TYPE) + return _alsaPort == p._alsaPort && _alsaClient == p._alsaClient; + else + return true; + } + bool operator<(const Port& p) const { + if (type == ALSA_TYPE) { + if (_alsaPort != p._alsaPort) + return _alsaPort < p._alsaPort; + return _alsaClient < p._alsaClient; + } + return false; + } + unsigned char alsaPort() const { return _alsaPort; } + unsigned char alsaClient() const { return _alsaClient; } + jack_port_t* jackPort() const { return _jackPort; } + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/preferences.cpp b/attic/muse_qt4_evolution/muse/preferences.cpp new file mode 100644 index 00000000..022a24da --- /dev/null +++ b/attic/muse_qt4_evolution/muse/preferences.cpp @@ -0,0 +1,932 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "icons.h" +#include "preferences.h" +#include "track.h" +#include "muse.h" +#include "song.h" +#include "event.h" +#include "arranger.h" +#include "widgets/filedialog.h" +#include "waveedit/waveedit.h" +#include "globals.h" +#include "conf.h" +#include "gconfig.h" + +#include "audio.h" +#include "mixer.h" +#include "midirc.h" +#include "instruments/minstrument.h" +#include "midiedit/pianoroll.h" +#include "midiedit/drumedit.h" + +static int rtcResolutions[] = { + 1024, 2048, 4096, 8192 + }; +static int divisions[] = { + 48, 96, 192, 384, 768, 1536, 3072, 6144, 12288 + }; + +//--------------------------------------------------------- +// twi +//--------------------------------------------------------- + +static QTreeWidgetItem* twi(QTreeWidget* tw, const char* txt, int data) + { + QTreeWidgetItem* i = new QTreeWidgetItem(tw); + i->setText(0, txt); + i->setData(0, 1, data); + return i; + } + +static QTreeWidgetItem* twi(QTreeWidgetItem* tw, const char* txt, int data) + { + QTreeWidgetItem* i = new QTreeWidgetItem(tw); + i->setText(0, txt); + i->setData(0, 1, data); + return i; + } + +//--------------------------------------------------------- +// PreferencesDialog +//--------------------------------------------------------- + +PreferencesDialog::PreferencesDialog(Arranger* a, QWidget* parent) + : QDialog(parent) + { + setupUi(this); + colorframe->setAutoFillBackground(true); + palette0->setAutoFillBackground(true); + palette1->setAutoFillBackground(true); + palette2->setAutoFillBackground(true); + palette3->setAutoFillBackground(true); + arr = a; + color = 0; + config = new GlobalConfigValues; + resetValues(); + + // ARRANGER + + usePixmap->setChecked(config->canvasUseBgPixmap); + useColor->setChecked(!config->canvasUseBgPixmap); + connect(usePixmap, SIGNAL(toggled(bool)), SLOT(usePixmapToggled(bool))); + connect(useColor, SIGNAL(toggled(bool)), SLOT(useColorToggled(bool))); + + + styleSheetPath->setText(config->styleSheetFile); + currentBg = config->canvasBgPixmap; + if (currentBg.isEmpty()) + currentBg = ""; + else { + QBrush b; + b.setTexture(QPixmap(currentBg)); + QPalette p; + p.setBrush(QPalette::Window, b); + currentBgLabel->setPalette(p); + } + QPalette p; + canvasBackgroundColor->setAutoFillBackground(true); + p.setColor(QPalette::Window, config->canvasBgColor); + canvasBackgroundColor->setPalette(p); + + currentBgLabel->setAutoFillBackground(true); + currentBgLabel->setText(currentBg); + + partShownames->setChecked(config->canvasShowPartType & 1); + partShowevents->setChecked(config->canvasShowPartType & 2); + partShowCakes->setChecked(!(config->canvasShowPartType & 2)); + + eventNoteon->setChecked(config->canvasShowPartEvent & (1 << 0)); + eventPolypressure->setChecked(config->canvasShowPartEvent & (1 << 1)); + eventController->setChecked(config->canvasShowPartEvent & (1 << 2)); + eventProgramchange->setChecked(config->canvasShowPartEvent & (1 << 3)); + eventAftertouch->setChecked(config->canvasShowPartEvent & (1 << 4)); + eventPitchbend->setChecked(config->canvasShowPartEvent & (1 << 5)); + eventSpecial->setChecked(config->canvasShowPartEvent & (1 << 6)); + eventButtonGroup->setEnabled(config->canvasShowPartType == 2); + arrGrid->setChecked(config->canvasShowGrid); + + // COLORS + QTreeWidgetItem* id; + QTreeWidgetItem* aid; + itemList->setSortingEnabled(false); + itemList->clear(); + + aid = twi(itemList, "Arranger", 0); + id = twi(aid, "PartColors", 0); + twi(id, "Selected", 0x41d); + + twi(id, "Default", 0x400); + twi(id, "Refrain", 0x401); + twi(id, "Bridge", 0x402); + twi(id, "Intro", 0x403); + twi(id, "Coda", 0x404); + twi(id, "Chorus", 0x405); + twi(id, "Solo", 0x406); + twi(id, "Brass", 0x407); + twi(id, "Percussion", 0x408); + twi(id, "Drums", 0x409); + twi(id, "Guitar", 0x40a); + twi(id, "Bass", 0x40b); + twi(id, "Flute", 0x40c); + twi(id, "Strings", 0x40d); + twi(id, "Keyboard", 0x40e); + twi(id, "Piano", 0x40f); + twi(id, "Saxophon", 0x410); + + twi(id, "part canvas background", 0x41c); + + id = twi(aid, "Track List", 0); + twi(id, "Audio Output", 0x500 + Track::AUDIO_OUTPUT); + twi(id, "Audio Group", 0x500 + Track::AUDIO_GROUP); + twi(id, "Wave Track", 0x500 + Track::WAVE); + twi(id, "Audio Input", 0x500 + Track::AUDIO_INPUT); + twi(id, "Synthesizer", 0x500 + Track::AUDIO_SOFTSYNTH); + twi(id, "Midi Track", 0x500 + Track::MIDI); + twi(id, "Midi Output", 0x500 + Track::MIDI_OUT); + twi(id, "Midi Input", 0x500 + Track::MIDI_IN); +// twi(id, "Midi Channel", 0x500 + Track::MIDI_CHANNEL); + twi(id, "Midi Synti", 0x500 + Track::MIDI_SYNTI); + + id = twi(itemList, "BigTime", 0); + twi(id, "background", 0x100); + twi(id, "foreground", 0x101); + + id = twi(itemList, "Transport", 0); + twi(id, "handle", 0x200); + + id = twi(itemList, "Editor", 0); + twi(id, "background", 0x300); + + colorGroup = new QButtonGroup(this); + colorGroup->setExclusive(true); + colorGroup->addButton(palette0, 0); + colorGroup->addButton(palette1, 1); + colorGroup->addButton(palette2, 2); + colorGroup->addButton(palette3, 3); + colorGroup->addButton(palette4, 4); + colorGroup->addButton(palette5, 5); + colorGroup->addButton(palette6, 6); + colorGroup->addButton(palette7, 7); + colorGroup->addButton(palette8, 8); + colorGroup->addButton(palette9, 9); + colorGroup->addButton(palette10, 10); + colorGroup->addButton(palette11, 11); + colorGroup->addButton(palette12, 12); + colorGroup->addButton(palette13, 13); + colorGroup->addButton(palette14, 14); + colorGroup->addButton(palette15, 15); + connect(itemList, SIGNAL(itemSelectionChanged()), SLOT(colorItemSelectionChanged())); + connect(colorGroup, SIGNAL(buttonClicked(QAbstractButton*)), SLOT(paletteClicked(QAbstractButton*))); + connect(hslider, SIGNAL(valueChanged(int)), SLOT(hsliderChanged(int))); + connect(sslider, SIGNAL(valueChanged(int)), SLOT(ssliderChanged(int))); + connect(vslider, SIGNAL(valueChanged(int)), SLOT(vsliderChanged(int))); + + connect(addToPalette, SIGNAL(clicked()), SLOT(addToPaletteClicked())); + + connect(applyButton, SIGNAL(clicked()), SLOT(apply())); + connect(okButton, SIGNAL(clicked()), SLOT(ok())); + connect(cancelButton, SIGNAL(clicked()), SLOT(cancel())); + connect(selectCanvasBgPixmap, SIGNAL(clicked()), SLOT(configCanvasBgPixmap())); + connect(selectCanvasBgColor, SIGNAL(clicked()), SLOT(configCanvasBgColor())); + connect(partShowevents, SIGNAL(toggled(bool)), eventButtonGroup, SLOT(setEnabled(bool))); + updateColor(); + + for (unsigned i = 0; i < sizeof(rtcResolutions)/sizeof(*rtcResolutions); ++i) { + if (rtcResolutions[i] == config->rtcTicks) { + rtcResolutionSelect->setCurrentIndex(i); + break; + } + } + for (unsigned i = 0; i < sizeof(divisions)/sizeof(*divisions); ++i) { + if (divisions[i] == config->division) { + midiDivisionSelect->setCurrentIndex(i); + break; + } + } + int i = 0; + for (iMidiInstrument mi = midiInstruments.begin(); mi != midiInstruments.end(); ++mi, ++i) { + preferredInstrument->addItem((*mi)->iname()); + if ((*mi)->iname() == config->defaultMidiInstrument) + preferredInstrument->setCurrentIndex(i); + } + + connectToAllDevices->setChecked(config->connectToAllMidiDevices); + connectToAllTracks->setChecked(config->connectToAllMidiTracks); + createDefaultInput->setChecked(config->createDefaultMidiInput); + + guiRefreshSelect->setValue(config->guiRefresh); + minSliderSelect->setValue(int(config->minSlider)); + maxSliderSelect->setValue(int(config->maxSlider)); + minMeterSelect->setValue(int(config->minMeter)); + maxMeterSelect->setValue(int(config->maxMeter)); + peakHoldTime->setValue(config->peakHoldTime); + helpBrowser->setText(config->helpBrowser); + startProjectEntry->setText(config->startProject); + + startProjectGroup = new QButtonGroup(this); + startProjectGroup->addButton(alwaysAsk); + startProjectGroup->addButton(startWithLastProject); + startProjectGroup->addButton(startWithProject); + + switch(config->startMode) { + case START_ASK_FOR_PROJECT: + alwaysAsk->setChecked(true); + break; + case START_LAST_PROJECT: + startWithLastProject->setChecked(true); + break; + case START_START_PROJECT: + startWithProject->setChecked(true); + break; + } + + showTransport->setChecked(config->transportVisible); + showBigtime->setChecked(config->bigTimeVisible); + showMixer1->setChecked(config->mixer1Visible); + showMixer2->setChecked(config->mixer2Visible); + + transportX->setValue(config->geometryTransport.x()); + transportY->setValue(config->geometryTransport.y()); + + bigtimeX->setValue(config->geometryBigTime.x()); + bigtimeY->setValue(config->geometryBigTime.y()); + bigtimeW->setValue(config->geometryBigTime.width()); + bigtimeH->setValue(config->geometryBigTime.height()); + + mixerX1->setValue(config->mixer1.geometry.x()); + mixerY1->setValue(config->mixer1.geometry.y()); + mixerW1->setValue(config->mixer1.geometry.width()); + mixerH1->setValue(config->mixer1.geometry.height()); + + mixerX2->setValue(config->mixer2.geometry.x()); + mixerY2->setValue(config->mixer2.geometry.y()); + mixerW2->setValue(config->mixer2.geometry.width()); + mixerH2->setValue(config->mixer2.geometry.height()); + + setMixerCurrent1->setEnabled(muse->mixer1Window()); + setMixerCurrent1->setEnabled(muse->mixer2Window()); + + setBigtimeCurrent->setEnabled(muse->bigtimeWindow()); + setTransportCurrent->setEnabled(muse->transportWindow()); + freewheelMode->setChecked(config->useJackFreewheelMode); + showSplash->setChecked(config->showSplashScreen); + projectPath->setText(config->projectPath); + templatePath->setText(config->templatePath); + instrumentPath->setText(config->instrumentPath); + midiImportPath->setText(config->importMidiPath); + waveImportPath->setText(config->importWavePath); + + stopActive->setChecked(midiRCList.isActive(RC_STOP)); + playActive->setChecked(midiRCList.isActive(RC_PLAY)); + gotoLeftMarkActive->setChecked(midiRCList.isActive(RC_GOTO_LEFT_MARK)); + recordActive->setChecked(midiRCList.isActive(RC_RECORD)); + + connect(applyButton, SIGNAL(clicked()), SLOT(apply())); + connect(okButton, SIGNAL(clicked()), SLOT(ok())); + connect(cancelButton, SIGNAL(clicked()), SLOT(cancel())); + connect(setMixerCurrent1, SIGNAL(clicked()), SLOT(mixerCurrent1())); + connect(setMixerCurrent2, SIGNAL(clicked()), SLOT(mixerCurrent2())); + connect(setBigtimeCurrent, SIGNAL(clicked()), SLOT(bigtimeCurrent())); + connect(setArrangerCurrent, SIGNAL(clicked()), SLOT(arrangerCurrent())); + connect(setTransportCurrent, SIGNAL(clicked()), SLOT(transportCurrent())); + + recordStop->setChecked(false); + recordRecord->setChecked(false); + recordGotoLeftMark->setChecked(false); + recordPlay->setChecked(false); + rcGroup->setChecked(rcEnable); + + pianorollWidth->setValue(PianoRoll::initWidth); + pianorollHeight->setValue(PianoRoll::initHeight); + pianorollRaster->setRaster(PianoRoll::initRaster); + pianorollQuant->setQuant(PianoRoll::initQuant); + + drumEditorWidth->setValue(DrumEdit::initWidth); + drumEditorHeight->setValue(DrumEdit::initHeight); + + waveEditorWidth->setValue(WaveEdit::initWidth); + waveEditorHeight->setValue(WaveEdit::initHeight); + + connect(recordStop, SIGNAL(clicked(bool)), SLOT(recordStopToggled(bool))); + connect(recordRecord, SIGNAL(clicked(bool)), SLOT(recordRecordToggled(bool))); + connect(recordGotoLeftMark, SIGNAL(clicked(bool)), SLOT(recordGotoLeftMarkToggled(bool))); + connect(recordPlay, SIGNAL(clicked(bool)), SLOT(recordPlayToggled(bool))); + + } + +//--------------------------------------------------------- +// setButtonColor +//--------------------------------------------------------- + +static void setButtonColor(QAbstractButton* b, const QRgb c) + { + QPalette p(b->palette()); + p.setColor(QPalette::Button, QColor(c)); + p.setColor(b->backgroundRole(), QColor(c)); + b->setPalette(p); + } + +//--------------------------------------------------------- +// resetValues +//--------------------------------------------------------- + +void PreferencesDialog::resetValues() + { + *config = ::config; // init with global config values + + setButtonColor(palette0, QColorDialog::customColor(0)); + setButtonColor(palette1, QColorDialog::customColor(1)); + setButtonColor(palette2, QColorDialog::customColor(2)); + setButtonColor(palette3, QColorDialog::customColor(3)); + setButtonColor(palette4, QColorDialog::customColor(4)); + setButtonColor(palette5, QColorDialog::customColor(5)); + setButtonColor(palette6, QColorDialog::customColor(6)); + setButtonColor(palette7, QColorDialog::customColor(7)); + setButtonColor(palette8, QColorDialog::customColor(8)); + setButtonColor(palette9, QColorDialog::customColor(9)); + setButtonColor(palette10, QColorDialog::customColor(10)); + setButtonColor(palette11, QColorDialog::customColor(11)); + setButtonColor(palette12, QColorDialog::customColor(12)); + setButtonColor(palette13, QColorDialog::customColor(13)); + setButtonColor(palette14, QColorDialog::customColor(14)); + } + +//--------------------------------------------------------- +// PreferencesDialog +//--------------------------------------------------------- + +PreferencesDialog::~PreferencesDialog() + { + delete config; + } + +//--------------------------------------------------------- +// apply +//--------------------------------------------------------- + +void PreferencesDialog::apply() + { + ::config.styleSheetFile = styleSheetPath->text(); + int showPartEvent = 0; + int showPartType = 0; + + if (partShownames->isChecked()) + showPartType |= 1; + if (partShowevents->isChecked()) + showPartType |= 2; + if (partShowCakes->isChecked()) + showPartType |= 4; + + if (eventNoteon->isChecked()) + showPartEvent |= (1 << 0); + if (eventPolypressure->isChecked()) + showPartEvent |= (1 << 1); + if (eventController->isChecked()) + showPartEvent |= (1 << 2); + if (eventProgramchange->isChecked()) + showPartEvent |= (1 << 3); + if (eventAftertouch->isChecked()) + showPartEvent |= (1 << 4); + if (eventPitchbend->isChecked()) + showPartEvent |= (1 << 5); + if (eventSpecial->isChecked()) + showPartEvent |= (1 << 6); + + config->canvasUseBgPixmap = usePixmap->isChecked(); + if (currentBg != "") + config->canvasBgPixmap = currentBg; + + config->canvasShowGrid = arrGrid->isChecked(); + // set colors... + ::config = *config; + + rcEnable = rcGroup->isChecked(); + int rtcticks = rtcResolutionSelect->currentIndex(); + int div = midiDivisionSelect->currentIndex(); + + ::config.connectToAllMidiDevices = connectToAllDevices->isChecked(); + ::config.connectToAllMidiTracks = connectToAllTracks->isChecked(); + ::config.createDefaultMidiInput = createDefaultInput->isChecked(); + ::config.defaultMidiInputDevice = preferredInput->currentText(); + ::config.defaultMidiOutputDevice = preferredOutput->currentText(); + ::config.defaultMidiInstrument = preferredInstrument->currentText(); + + ::config.guiRefresh = guiRefreshSelect->value(); + ::config.minSlider = minSliderSelect->value(); + ::config.maxSlider = maxSliderSelect->value(); + ::config.minMeter = minMeterSelect->value(); + ::config.maxMeter = maxMeterSelect->value(); + ::config.peakHoldTime = peakHoldTime->value(); + ::config.rtcTicks = rtcResolutions[rtcticks]; + ::config.guiDivision = divisions[div]; + ::config.helpBrowser = helpBrowser->text(); + ::config.startProject = startProjectEntry->text(); + + if (alwaysAsk->isChecked()) + ::config.startMode = START_ASK_FOR_PROJECT; + else if (startWithLastProject->isChecked()) + ::config.startMode = START_LAST_PROJECT; + else if (startWithProject->isChecked()) + ::config.startMode = START_START_PROJECT; + + ::config.transportVisible = showTransport->isChecked(); + ::config.bigTimeVisible = showBigtime->isChecked(); + ::config.mixer1Visible = showMixer1->isChecked(); + ::config.mixer2Visible = showMixer2->isChecked(); + + ::config.geometryTransport.setX(transportX->value()); + ::config.geometryTransport.setY(transportY->value()); + ::config.geometryTransport.setWidth(0); + ::config.geometryTransport.setHeight(0); + + ::config.geometryBigTime.setX(bigtimeX->value()); + ::config.geometryBigTime.setY(bigtimeY->value()); + ::config.geometryBigTime.setWidth(bigtimeW->value()); + ::config.geometryBigTime.setHeight(bigtimeH->value()); + + ::config.mixer1.geometry.setX(mixerX1->value()); + ::config.mixer1.geometry.setY(mixerY1->value()); + ::config.mixer1.geometry.setWidth(mixerW1->value()); + ::config.mixer1.geometry.setHeight(mixerH1->value()); + + ::config.mixer2.geometry.setX(mixerX2->value()); + ::config.mixer2.geometry.setY(mixerY2->value()); + ::config.mixer2.geometry.setWidth(mixerW2->value()); + ::config.mixer2.geometry.setHeight(mixerH2->value()); + + ::config.useJackFreewheelMode = freewheelMode->isChecked(); + ::config.showSplashScreen = showSplash->isChecked(); + + ::config.projectPath = projectPath->text(); + ::config.templatePath = templatePath->text(); + ::config.instrumentPath = instrumentPath->text(); + ::config.importMidiPath = midiImportPath->text(); + ::config.importWavePath = waveImportPath->text(); + + lastMidiPath = museUser + "/" + ::config.importMidiPath; + lastWavePath = museUser + "/" + ::config.importWavePath; + + PianoRoll::initWidth = pianorollWidth->value(); + PianoRoll::initHeight = pianorollHeight->value(); + PianoRoll::initRaster = pianorollRaster->raster(); + PianoRoll::initQuant = pianorollQuant->quant(); + + DrumEdit::initWidth = drumEditorWidth->value(); + DrumEdit::initHeight = drumEditorHeight->value(); + + muse->showMixer1(::config.mixer1Visible); + muse->showMixer2(::config.mixer2Visible); + muse->showBigtime(::config.bigTimeVisible); + muse->showTransport(::config.transportVisible); + QWidget* w = muse->transportWindow(); + if (w) { + w->resize(::config.geometryTransport.size()); + w->move(::config.geometryTransport.topLeft()); + } + w = muse->mixer1Window(); + if (w) { + w->resize(::config.mixer1.geometry.size()); + w->move(::config.mixer1.geometry.topLeft()); + } + w = muse->mixer2Window(); + if (w) { + w->resize(::config.mixer2.geometry.size()); + w->move(::config.mixer2.geometry.topLeft()); + } + w = muse->bigtimeWindow(); + if (w) { + w->resize(::config.geometryBigTime.size()); + w->move(::config.geometryBigTime.topLeft()); + } + + muse->setHeartBeat(); // set guiRefresh + audio->msgSetRtc(); // set midi tick rate + muse->changeConfig(true); // save settings + } + +//--------------------------------------------------------- +// ok +//--------------------------------------------------------- + +void PreferencesDialog::ok() + { + apply(); + close(); + } + +//--------------------------------------------------------- +// cancel +//--------------------------------------------------------- + +void PreferencesDialog::cancel() + { + close(); + } + +//--------------------------------------------------------- +// configCanvasBgPixmap +//--------------------------------------------------------- + +void PreferencesDialog::configCanvasBgPixmap() + { + QString cur(currentBg); + if (cur == "") + cur = museGlobalShare + "/wallpapers"; + + QStringList pattern; + const char** p = image_file_pattern; + while(*p) + pattern << *p++; + QString s = getImageFileName(cur, pattern, this, tr("MusE: load image")); + if (!s.isEmpty()) { + QBrush b; + currentBg = s; + b.setTexture(QPixmap(s)); + QPalette p; + p.setBrush(QPalette::Window, b); + currentBgLabel->setPalette(p); + currentBgLabel->setText(currentBg); + } + } + +//--------------------------------------------------------- +// configCanvasBgColor +//--------------------------------------------------------- + +void PreferencesDialog::configCanvasBgColor() + { + QColor color = QColorDialog::getColor(config->canvasBgColor, this); + if (color.isValid()) { + config->canvasBgColor = color; + QPalette p; + p.setColor(QPalette::Window, color); + canvasBackgroundColor->setPalette(p); + } + } + +//--------------------------------------------------------- +// selectionChanged +//--------------------------------------------------------- + +void PreferencesDialog::colorItemSelectionChanged() + { + QTreeWidgetItem* item = (QTreeWidgetItem*)itemList->selectedItems().at(0); + QString txt = item->text(0); + int id = item->data(0, 1).toInt(); + if (id == 0) { + color = 0; + return; + } + switch(id) { + case 0x400 ... 0x410: // "Default" + color = &config->partColors[id & 0xff]; + break; + case 0x100: + color = &config->bigTimeBackgroundColor; + break; + case 0x101: + color = &config->bigTimeForegroundColor; + break; + case 0x200: + color = &config->transportHandleColor; + break; + case 0x300: + color = &config->waveEditBackgroundColor; + break; + case 0x500 ... 0x5ff: + color = &config->trackBg[id & 0xff]; + break; + case 0x41c: + color = &config->selectPartBg; + break; + default: + color = 0; + break; + } + updateColor(); + } + +//--------------------------------------------------------- +// updateColor +//--------------------------------------------------------- + +void PreferencesDialog::updateColor() + { + hslider->setEnabled(color); + sslider->setEnabled(color); + vslider->setEnabled(color); + if (color == 0) + return; + QPalette p(colorframe->palette()); + p.setColor(QPalette::Window, *color); + colorframe->setPalette(p); + int r, g, b, h, s, v; + color->getRgb(&r, &g, &b); + color->getHsv(&h, &s, &v); + + hslider->blockSignals(true); + sslider->blockSignals(true); + vslider->blockSignals(true); + + hslider->setValue(h); + sslider->setValue(s); + vslider->setValue(v); + + hslider->blockSignals(false); + sslider->blockSignals(false); + vslider->blockSignals(false); + } + +void PreferencesDialog::hsliderChanged(int val) + { + int h, s, v; + if (color) { + color->getHsv(&h, &s, &v); + color->setHsv(val, s, v); + } + updateColor(); + } + +void PreferencesDialog::ssliderChanged(int val) + { + int h, s, v; + if (color) { + color->getHsv(&h, &s, &v); + color->setHsv(h, val, v); + } + updateColor(); + } + +void PreferencesDialog::vsliderChanged(int val) + { + int h, s, v; + if (color) { + color->getHsv(&h, &s, &v); + color->setHsv(h, s, val); + } + updateColor(); + } + +//--------------------------------------------------------- +// addToPaletteClicked +//--------------------------------------------------------- + +void PreferencesDialog::addToPaletteClicked() + { + if (!color) + return; + QAbstractButton* button = colorGroup->checkedButton(); + int r, g, b; + QColor c; + if (button) { + c = button->palette().color(QPalette::Button); + c.getRgb(&r, &g, &b); + } + if (button == 0 || r != 0xff || g != 0xff || b != 0xff) { + for (int i = 0; i < 16; ++i) { + button = colorGroup->button(i); + c = button->palette().color(QPalette::Button); + c.getRgb(&r, &g, &b); + if (r == 0xff && g == 0xff && b == 0xff) { + // found empty slot + button->setChecked(true); + break; + } + } + } + if (button) { + int id = colorGroup->checkedId(); + QColorDialog::setCustomColor(id, color->rgb()); + setButtonColor(button, color->rgb()); + } + } + +//--------------------------------------------------------- +// paletteClicked +//--------------------------------------------------------- + +void PreferencesDialog::paletteClicked(QAbstractButton* button) + { + if (color == 0) + return; + QColor c = button->palette().color(QPalette::Button); + int r, g, b; + c.getRgb(&r, &g, &b); + if (r == 0xff && g == 0xff && b == 0xff) + return; // interpret palette slot as empty + *color = c; + updateColor(); + } + +//--------------------------------------------------------- +// usePixmapToggled +//--------------------------------------------------------- + +void PreferencesDialog::usePixmapToggled(bool val) + { + useColor->setChecked(!val); + } + +//--------------------------------------------------------- +// useColorToggled +//--------------------------------------------------------- + +void PreferencesDialog::useColorToggled(bool val) + { + usePixmap->setChecked(!val); + } + +//--------------------------------------------------------- +// mixerCurrent1 +//--------------------------------------------------------- + +void PreferencesDialog::mixerCurrent1() + { + QWidget* w = muse->mixer1Window(); + if (!w) + return; + QRect r(w->frameGeometry()); + mixerX1->setValue(r.x()); + mixerY1->setValue(r.y()); + mixerW1->setValue(r.width()); + mixerH1->setValue(r.height()); + } + +//--------------------------------------------------------- +// mixerCurrent2 +//--------------------------------------------------------- + +void PreferencesDialog::mixerCurrent2() + { + QWidget* w = muse->mixer2Window(); + if (!w) + return; + QRect r(w->frameGeometry()); + mixerX2->setValue(r.x()); + mixerY2->setValue(r.y()); + mixerW2->setValue(r.width()); + mixerH2->setValue(r.height()); + } + +//--------------------------------------------------------- +// bigtimeCurrent +//--------------------------------------------------------- + +void PreferencesDialog::bigtimeCurrent() + { + QWidget* w = muse->bigtimeWindow(); + if (!w) + return; + QRect r(w->frameGeometry()); + bigtimeX->setValue(r.x()); + bigtimeY->setValue(r.y()); + bigtimeW->setValue(r.width()); + bigtimeH->setValue(r.height()); + } + +//--------------------------------------------------------- +// arrangerCurrent +//--------------------------------------------------------- + +void PreferencesDialog::arrangerCurrent() + { + QRect r(muse->frameGeometry()); + arrangerX->setValue(r.x()); + arrangerY->setValue(r.y()); + arrangerW->setValue(r.width()); + arrangerH->setValue(r.height()); + } + +//--------------------------------------------------------- +// transportCurrent +//--------------------------------------------------------- + +void PreferencesDialog::transportCurrent() + { + QWidget* w = muse->transportWindow(); + if (!w) + return; + QRect r(w->frameGeometry()); + transportX->setValue(r.x()); + transportY->setValue(r.y()); + } + +//--------------------------------------------------------- +// recordStopToggled +//--------------------------------------------------------- + +void PreferencesDialog::recordStopToggled(bool f) + { + recordStop->setChecked(!f); + if (!f) { + recordRecord->setChecked(false); + recordGotoLeftMark->setChecked(false); + recordPlay->setChecked(false); + connect(song, SIGNAL(midiEvent(MidiEvent)), SLOT(midiEventReceived(MidiEvent))); + } + else + disconnect(song, SIGNAL(midiEvent(MidiEvent)), this, SLOT(midiEventReceived(MidiEvent))); + } + +//--------------------------------------------------------- +// recordRecordToggled +//--------------------------------------------------------- + +void PreferencesDialog::recordRecordToggled(bool f) + { + recordRecord->setChecked(!f); + if (!f) { + recordStop->setChecked(false); + recordGotoLeftMark->setChecked(false); + recordPlay->setChecked(false); + connect(song, SIGNAL(midiEvent(MidiEvent)), SLOT(midiEventReceived(MidiEvent))); + } + else + disconnect(song, SIGNAL(midiEvent(MidiEvent)), this, SLOT(midiEventReceived(MidiEvent))); + } + +//--------------------------------------------------------- +// recordGotoLeftMarkToggled +//--------------------------------------------------------- + +void PreferencesDialog::recordGotoLeftMarkToggled(bool f) + { + recordGotoLeftMark->setChecked(!f); + if (!f) { + recordStop->setChecked(false); + recordRecord->setChecked(false); + recordPlay->setChecked(false); + connect(song, SIGNAL(midiEvent(MidiEvent)), SLOT(midiEventReceived(MidiEvent))); + } + else + disconnect(song, SIGNAL(midiEvent(MidiEvent)), this, SLOT(midiEventReceived(MidiEvent))); + } + +//--------------------------------------------------------- +// recordPlayToggled +//--------------------------------------------------------- + +void PreferencesDialog::recordPlayToggled(bool f) + { + recordPlay->setChecked(!f); + if (!f) { + recordStop->setChecked(false); + recordRecord->setChecked(false); + recordGotoLeftMark->setChecked(false); + connect(song, SIGNAL(midiEvent(MidiEvent)), SLOT(midiEventReceived(MidiEvent))); + } + else + disconnect(song, SIGNAL(midiEvent(MidiEvent)), this, SLOT(midiEventReceived(MidiEvent))); + } + +//--------------------------------------------------------- +// midiEventReceived +//--------------------------------------------------------- + +void PreferencesDialog::midiEventReceived(MidiEvent event) + { + printf("event received\n"); + if (recordPlay->isChecked()) { + recordPlay->setChecked(false); + playActive->setChecked(true); + midiRCList.setAction(event, RC_PLAY); + } + else if (recordStop->isChecked()) { + recordStop->setChecked(false); + stopActive->setChecked(true); + midiRCList.setAction(event, RC_STOP); + } + else if (recordRecord->isChecked()) { + recordRecord->setChecked(false); + recordActive->setChecked(true); + midiRCList.setAction(event, RC_RECORD); + } + else if (recordGotoLeftMark->isChecked()) { + recordGotoLeftMark->setChecked(false); + gotoLeftMarkActive->setChecked(true); + midiRCList.setAction(event, RC_GOTO_LEFT_MARK); + } + // only one shot + disconnect(song, SIGNAL(midiEvent(MidiEvent)), this, SLOT(midiEventReceived(MidiEvent))); + } + + diff --git a/attic/muse_qt4_evolution/muse/preferences.h b/attic/muse_qt4_evolution/muse/preferences.h new file mode 100644 index 00000000..75cb5754 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/preferences.h @@ -0,0 +1,79 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __PREFERENCES_H__ +#define __PREFERENCES_H__ + +#include "ui_preferences.h" +#include "midievent.h" + +class MusE; +class Arranger; +class GlobalConfigValues; + +//--------------------------------------------------------- +// PreferencesDialog +//--------------------------------------------------------- + +class PreferencesDialog : public QDialog, public Ui::PreferencesDialogBase { + Q_OBJECT + + Arranger* arr; + QColor* color; + QString currentBg; + GlobalConfigValues* config; + QButtonGroup* colorGroup; + QButtonGroup* startProjectGroup; + + void updateColor(); + + private slots: + void apply(); + void ok(); + void cancel(); + void configCanvasBgColor(); + void configCanvasBgPixmap(); + void colorItemSelectionChanged(); + void hsliderChanged(int); + void ssliderChanged(int); + void vsliderChanged(int); + void addToPaletteClicked(); + void paletteClicked(QAbstractButton*); + void useColorToggled(bool); + void usePixmapToggled(bool); + + void mixerCurrent1(); + void mixerCurrent2(); + void bigtimeCurrent(); + void arrangerCurrent(); + void transportCurrent(); + void recordStopToggled(bool); + void recordRecordToggled(bool); + void recordGotoLeftMarkToggled(bool); + void recordPlayToggled(bool); + void midiEventReceived(MidiEvent); + + public: + PreferencesDialog(Arranger*, QWidget* parent=0); + ~PreferencesDialog(); + void resetValues(); + }; + +#endif diff --git a/attic/muse_qt4_evolution/muse/preferences.ui b/attic/muse_qt4_evolution/muse/preferences.ui new file mode 100644 index 00000000..5417c33c --- /dev/null +++ b/attic/muse_qt4_evolution/muse/preferences.ui @@ -0,0 +1,2400 @@ + + PreferencesDialogBase + + + + 0 + 0 + 665 + 631 + + + + Dialog + + + + 6 + + + 9 + + + 9 + + + 9 + + + 9 + + + + + 0 + + + + Application + + + + 6 + + + 9 + + + 9 + + + 9 + + + 9 + + + + + Style + + + + + + Style Sheet: + + + + + + + + + + ... + + + :/xpm/fileopen.png + + + + + + + + + + Start MusE + + + true + + + + 3 + + + 9 + + + 9 + + + 9 + + + 9 + + + + + 3 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + always ask + + + + + + + start with last project + + + + + + + start with project: + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + show splash screen + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + Local Paths + + + true + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + + 0 + 0 + + + + Projects + + + + + + + + + + + 0 + 0 + + + + Midi Import + + + + + + + + + + + 0 + 0 + + + + Templates + + + + + + + + + + Wave Import + + + + + + + + + + + 0 + 0 + + + + Instruments + + + + + + + + + + + + + Views + + + true + + + + 9 + + + 9 + + + 9 + + + 9 + + + 3 + + + 3 + + + + + Cur + + + + + + + show + + + + + + + Mixer 1 + + + + + + + Big Time + + + + + + + Cur + + + + + + + Cur + + + + + + + Cur + + + + + + + 9999 + + + + + + + 9999 + + + 0 + + + + + + + 9999 + + + + + + + 9999 + + + + + + + 9999 + + + + + + + 9999 + + + + + + + 9999 + + + + + + + 9999 + + + + + + + 9999 + + + + + + + 9999 + + + + + + + 9999 + + + + + + + 9999 + + + + + + + 9999 + + + + + + + 9999 + + + + + + + 9999 + + + + + + + 9999 + + + + + + + 9999 + + + + + + + 9999 + + + + + + + show + + + + + + + show + + + + + + + Mixer 2 + + + + + + + Transport + + + + + + + Arranger + + + + + + + show + + + + + + + Cur + + + + + + + + + + + Editors + + + + 6 + + + 9 + + + 9 + + + 9 + + + 9 + + + + + 4 + + + + Arranger + + + + 6 + + + 9 + + + 9 + + + 9 + + + 9 + + + + + Parts + + + true + + + + 6 + + + 11 + + + 11 + + + 11 + + + 11 + + + + + show names + + + + + + + show events + + + + + + + show Cakewalk Style + + + + + + + + + + Events + + + true + + + + 11 + + + 11 + + + 11 + + + 11 + + + 6 + + + 6 + + + + + note on + + + + + + + poly pressure + + + + + + + controller + + + + + + + aftertouch + + + + + + + pitch bend + + + + + + + program change + + + + + + + special + + + + + + + + + + Background + + + true + + + false + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + + 0 + 0 + + + + bg + + + Qt::AlignCenter + + + -1 + + + + + + + Pixmap + + + + + + + Color + + + Qt::AlignCenter + + + + + + + Color + + + + + + + select... + + + + + + + select... + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + show snap grid + + + + + + + + Pianoroll + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + Qt::Vertical + + + + 20 + 211 + + + + + + + + <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-size:10pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">Quant</p></body></html> + + + + + + + <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-size:10pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">Raster</p></body></html> + + + + + + + <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-size:10pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">Geometry</p></body></html> + + + + + + + height: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + width: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 50 + + + 9999 + + + + + + + 50 + + + 9999 + + + + + + + + + + + + + + DrumEditor + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + Qt::Vertical + + + + 20 + 351 + + + + + + + + <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-size:10pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">Geometry</p></body></html> + + + + + + + 50 + + + 9999 + + + + + + + width: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 50 + + + 9999 + + + + + + + height: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + MasterEditor + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + Qt::Vertical + + + + 20 + 331 + + + + + + + + 50 + + + 9999 + + + + + + + height: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 50 + + + 9999 + + + + + + + width: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-size:10pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">Geometry</p></body></html> + + + + + + + + WaveEditor + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + 50 + + + 9999 + + + + + + + height: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + width: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-size:10pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">Geometry</p></body></html> + + + + + + + 50 + + + 9999 + + + + + + + Qt::Vertical + + + + 20 + 351 + + + + + + + + + + + + + Audio + + + + 6 + + + 9 + + + 9 + + + 9 + + + 9 + + + + + Mixer + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + Slider Val, Min: + + + + + + + + 0 + 0 + + + + dB + + + -100 + + + 0 + + + -60 + + + + + + + Max: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + dB + + + 10 + + + + + + + Peak Hold Time: + + + + + + + ms + + + 20 + + + 5000 + + + + + + + Meter Val, Min: + + + + + + + + 0 + 0 + + + + dB + + + -100 + + + 0 + + + 10 + + + -60 + + + + + + + Max: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + dB + + + 40 + + + 10 + + + + + + + + + + use JACK freewheel mode if possible + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + Midi + + + + 6 + + + 8 + + + 8 + + + 8 + + + 8 + + + + + Ticks + + + true + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + Displayed Resolution +(Ticks/Quarternote) + + + + + + + RTC Resolution +(Ticks/Sec) + + + + + + + + 1024 + + + + + 2048 + + + + + 4096 + + + + + 8172 + + + + + + + + 3 + + + + 48 + + + + + 96 + + + + + 192 + + + + + 384 + + + + + 768 + + + + + 1536 + + + + + 3072 + + + + + 6144 + + + + + 12288 + + + + + + + + + + + Input Routing + + + true + + + + 8 + + + 8 + + + 8 + + + 8 + + + 6 + + + 6 + + + + + Connect to all Tracks + + + + + + + Connect to all Input Devices + + + + + + + <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Preferred Input Device:</p></body></html> + + + + + + + + + + Create Default Input Strip + + + + + + + + + + Output Routing + + + true + + + + 8 + + + 8 + + + 8 + + + 8 + + + 8 + + + 8 + + + + + <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Preferred Output Device:</p></body></html> + + + + + + + + + + <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Preferred Instrument:</p></body></html> + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 20 + + + + + + + + + GUI + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + Help Browser + + + + + + + /sec + + + 2 + + + 100 + + + 20 + + + + + + + GUI Refresh Rate: + + + + + + + + RemoteControl + + + + 6 + + + 9 + + + 9 + + + 9 + + + 9 + + + + + enable midi remote control + + + Midi Remote Control + + + true + + + true + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + Record + + + + + + + Goto Left Mark + + + + + + + Stop + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Play + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + Colors + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + Qt::NoFocus + + + Palette + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + true + + + + + + + + + + true + + + + + + + + + + true + + + + + + + + + + true + + + + + + + + + + true + + + + + + + + + + true + + + + + + + + + + true + + + + + + + + + + true + + + + + + + + + + true + + + + + + + + + + true + + + + + + + + + + true + + + + + + + + + + true + + + + + + + + + + true + + + + + + + + + + true + + + + + + + + + + true + + + + + + + + + + true + + + + + + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + V + + + Qt::AlignCenter + + + + + + + 255 + + + Qt::Horizontal + + + + + + + + + + 0 + 0 + + + + true + + + + Items + + + + + + + + add to palette + + + + + + + + 0 + 0 + + + + QFrame::StyledPanel + + + QFrame::Sunken + + + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + H + + + Qt::AlignCenter + + + + + + + 255 + + + Qt::Horizontal + + + + + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + S + + + Qt::AlignCenter + + + + + + + 255 + + + Qt::Horizontal + + + + + + + + + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 131 + 31 + + + + + + + + Apply + + + + + + + OK + + + + + + + Cancel + + + + + + + + + + RecordButton + QToolButton +
recordbutton.h
+
+ + RasterCombo + QComboBox +
rastercombo.h
+
+ + QuantCombo + QComboBox +
quantcombo.h
+
+ + GreendotButton + QToolButton +
greendotbutton.h
+
+
+ + + + + + okButton + clicked() + PreferencesDialogBase + accept() + + + 278 + 253 + + + 96 + 254 + + + + + cancelButton + clicked() + PreferencesDialogBase + reject() + + + 369 + 253 + + + 179 + 282 + + + + +
diff --git a/attic/muse_qt4_evolution/muse/projectdialog.cpp b/attic/muse_qt4_evolution/muse/projectdialog.cpp new file mode 100644 index 00000000..c85b3446 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/projectdialog.cpp @@ -0,0 +1,471 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "projectdialog.h" +#include "gconfig.h" +#include "song.h" +#include "icons.h" + +// +// entry types for projectTree tree widget: +// +enum { DIR_TYPE, PROJECT_TYPE }; + +//--------------------------------------------------------- +// ProjectTree +//--------------------------------------------------------- + +ProjectTree::ProjectTree(QWidget* parent) + : QTreeWidget(parent) + { + setAcceptDrops(true); + } + +//--------------------------------------------------------- +// itemPath +//--------------------------------------------------------- + +QString ProjectTree::itemPath(QTreeWidgetItem* item) const + { + QString path; + QTreeWidgetItem* ti = item; + QStringList dirComponent; + do { + dirComponent.prepend(ti->text(0)); + ti = ti->parent(); + } while (ti); + foreach (QString s, dirComponent) { + if (!path.isEmpty()) + path += "/"; + path += s; + } + return path; + } + +//--------------------------------------------------------- +// mousePressEvent +//--------------------------------------------------------- + +void ProjectTree::mousePressEvent(QMouseEvent* event) + { + dragStartPosition = event->pos(); + QTreeWidget::mousePressEvent(event); + } + +//--------------------------------------------------------- +// mouseMoveEvent +//--------------------------------------------------------- + +void ProjectTree::mouseMoveEvent(QMouseEvent* ev) + { + QTreeWidgetItem* item = itemAt(ev->pos()); + if (item == 0 || item->type() != PROJECT_TYPE) // || ev->button() != Qt::LeftButton) + return; + if ((ev->pos() - dragStartPosition).manhattanLength() + < QApplication::startDragDistance()) + return; + QDrag* drag = new QDrag(this); + QMimeData* mimeData = new QMimeData; + mimeData->setText(itemPath(item)); + drag->setMimeData(mimeData); + drag->setPixmap(style()->standardPixmap(QStyle::SP_FileIcon)); + Qt::DropAction dropAction = drag->start(Qt::MoveAction); + if (dropAction == Qt::IgnoreAction) + return; + printf("drop action\n"); + if (dropAction == Qt::MoveAction) { + printf("move action\n"); + } + } + +//--------------------------------------------------------- +// dragEnterEvent +//--------------------------------------------------------- + +void ProjectTree::dragEnterEvent(QDragEnterEvent* event) + { + if (event->mimeData()->hasFormat("text/plain")) { + event->acceptProposedAction(); + } + } + +//--------------------------------------------------------- +// dragMoveEvent +//--------------------------------------------------------- + +void ProjectTree::dragMoveEvent(QDragMoveEvent* event) + { + QTreeWidgetItem* item = itemAt(event->pos()); + event->setAccepted(item && item->type() == DIR_TYPE); + } + +//--------------------------------------------------------- +// searchItem +//--------------------------------------------------------- + +QTreeWidgetItem* ProjectTree::searchItem(const QString& s, QTreeWidgetItem* p) + { + int n = p->childCount(); + for (int i = 0; i < n; ++i) { + QTreeWidgetItem* item = p->child(i); + if (s == itemPath(item)) + return p->takeChild(i); + item = searchItem(s, item); + if (item) + return item; + } + return 0; + } + +//--------------------------------------------------------- +// dropEvent +//--------------------------------------------------------- + +void ProjectTree::dropEvent(QDropEvent* event) + { + QTreeWidgetItem* dstItem = itemAt(event->pos()); + if (dstItem && dstItem->type() == DIR_TYPE) { + QString src = event->mimeData()->text(); + QTreeWidgetItem* srcItem = 0; + int n = topLevelItemCount(); + for (int i = 0; i < n; ++i) { + QTreeWidgetItem* item = topLevelItem(i); + if (src == itemPath(item)) { + srcItem = takeTopLevelItem(i); + break; + } + srcItem = searchItem(src, item); + if (srcItem) + break; + } + if (srcItem == 0) { + printf("src item not found\n"); + return; + } + QString dst = itemPath(dstItem); + dstItem->addChild(srcItem); + // + // TODO: - actual move project + // - look for name conflicts + // - do nothing if src==dst + // + src = QDir::homePath() + "/" + config.projectPath + "/" + src; + dst = QDir::homePath() + "/" + config.projectPath + "/" + dst + + "/" + srcItem->text(0); + if (src != dst) { + QDir dir; + if (!dir.rename(src, dst)) { +printf("Rename <%s> -> <%s> failed\n", src.toLatin1().data(), dst.toLatin1().data()); + event->acceptProposedAction(); + } + } + } + } + +//--------------------------------------------------------- +// processSubdirectories +//--------------------------------------------------------- + +void ProjectDialog::processSubdir(QTreeWidgetItem* item, const QString& p, + const QString& subdir, QTreeWidgetItem** current) + { + QString path(p + "/" + subdir); + QFile pf(path + "/" + subdir + ".med"); + if (pf.exists()) { + QTreeWidgetItem* pi = new QTreeWidgetItem(item, PROJECT_TYPE); + pi->setText(0, subdir); + pi->setIcon(0, style()->standardIcon(QStyle::SP_FileIcon)); + if (path == song->absoluteProjectPath()) + *current = pi; + } + else { + QDir sd(path); + QStringList dl = sd.entryList(QDir::AllDirs | QDir::NoDotAndDotDot); + QTreeWidgetItem* pi = new QTreeWidgetItem(item, DIR_TYPE); + pi->setText(0, subdir); + itemCollapsed(pi); + foreach (QString s, dl) + processSubdir(pi, path, s, current); + } + } + +//--------------------------------------------------------- +// ProjectDialog +//--------------------------------------------------------- + +ProjectDialog::ProjectDialog(QWidget* parent) + : QDialog(parent) + { + setupUi(this); + projectTree->setSelectionBehavior(QAbstractItemView::SelectRows); + projectTree->setSelectionMode(QAbstractItemView::SingleSelection); + QDir pd(QDir::homePath() + "/" + config.projectPath); + QStringList el = pd.entryList(QDir::AllDirs | QDir::NoDotAndDotDot); + QTreeWidgetItem* current = 0; + foreach (QString s, el) { + QString path(QDir::homePath() + "/" + config.projectPath + "/" + s); + QFile pf(path + "/" + s + ".med"); + if (pf.exists()) { + QTreeWidgetItem* pi = new QTreeWidgetItem(projectTree, PROJECT_TYPE); + pi->setText(0, s); + pi->setIcon(0, style()->standardIcon(QStyle::SP_FileIcon)); + if (path == song->absoluteProjectPath()) + current = pi; + } + else { + QDir sd(path); + QStringList dl = sd.entryList(QDir::AllDirs | QDir::NoDotAndDotDot); + if (!dl.isEmpty()) { + QTreeWidgetItem* pi = new QTreeWidgetItem(projectTree, DIR_TYPE); + pi->setText(0, s); + itemCollapsed(pi); + foreach (QString s, dl) { + processSubdir(pi, path, s, ¤t); + } + } + } + } + connect(projectTree, + SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), + SLOT(currentChanged(QTreeWidgetItem*, QTreeWidgetItem*))); + connect(projectTree, + SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), + SLOT(itemDoubleClicked(QTreeWidgetItem*, int))); + connect(projectTree, + SIGNAL(itemCollapsed(QTreeWidgetItem*)), + SLOT(itemCollapsed(QTreeWidgetItem*))); + connect(projectTree, + SIGNAL(itemExpanded(QTreeWidgetItem*)), + SLOT(itemExpanded(QTreeWidgetItem*))); + connect(projectNameEntry, + SIGNAL(textEdited(const QString&)), + SLOT(projectNameEdited(const QString&))); + connect(newFolder, + SIGNAL(clicked()), + SLOT(newFolderClicked())); + + if (current) + projectTree->setCurrentItem(current); + else + currentChanged(0, 0); + } + +//--------------------------------------------------------- +// itemCollapsed +//--------------------------------------------------------- + +void ProjectDialog::itemCollapsed(QTreeWidgetItem* item) + { + item->setIcon(0, style()->standardIcon(QStyle::SP_DirClosedIcon)); + } + +//--------------------------------------------------------- +// itemExpanded +//--------------------------------------------------------- + +void ProjectDialog::itemExpanded(QTreeWidgetItem* item) + { + item->setIcon(0, style()->standardIcon(QStyle::SP_DirOpenIcon)); + } + +//--------------------------------------------------------- +// currentChanged +//--------------------------------------------------------- + +void ProjectDialog::currentChanged(QTreeWidgetItem* item, QTreeWidgetItem*) + { + bool enable = (item != 0) && (item->type() == PROJECT_TYPE); + createdDate->setEnabled(enable); + modifiedDate->setEnabled(enable); + comment->setEnabled(enable); + length->setEnabled(enable); + + // newFolder->setEnabled(item == 0 || item->type() == DIR_TYPE); + if (!enable) + return; + + projectNameEntry->setText(item->text(0)); + QString pd(QDir::homePath() + "/" + config.projectPath + "/"); + + pd += "/" + projectTree->itemPath(item); + + QFileInfo pf(pd + "/" + item->text(0) + ".med"); + modifiedDate->setDateTime(pf.lastModified()); + + QTime time(0, 0, 0); + QDateTime date; + + QFile f(pf.filePath()); + QDomDocument doc; + int line, column; + QString err; + if (!doc.setContent(&f, false, &err, &line, &column)) { + QString col, ln, error; + col.setNum(column); + ln.setNum(line); + error = err + "\n at line: " + ln + " col: " + col; + printf("error reading med file: %s\n", error.toLatin1().data()); + return; + } + for (QDomNode node = doc.documentElement(); !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + if (e.isNull()) + continue; + if (e.tagName() == "muse") { + QString sversion = e.attribute("version", "1.0"); + int major=0, minor=0; + sscanf(sversion.toLatin1().data(), "%d.%d", &major, &minor); + int version = major << 8 + minor; + if (version >= 0x200) { + for (QDomNode n1 = node.firstChild(); !n1.isNull(); n1 = n1.nextSibling()) { + QDomElement e = n1.toElement(); + if (e.tagName() == "song") { + for (QDomNode n2 = n1.firstChild(); !n2.isNull(); n2 = n2.nextSibling()) { + QDomElement e = n2.toElement(); + QString tag(e.tagName()); + QString s(e.text()); + if (tag == "comment") + comment->setPlainText(s); + else if (tag == "createDate") + date = QDateTime::fromString(e.text(), Qt::ISODate); + else if (tag == "LenInSec") { + int sec = s.toInt(); + time = time.addSecs(sec); + break; + } + } + } + } + } + break; + } + } + length->setTime(time); + createdDate->setDateTime(date); + } + +//--------------------------------------------------------- +// projectNameEdited +//--------------------------------------------------------- + +void ProjectDialog::projectNameEdited(const QString&) + { + QTreeWidgetItem* item = projectTree->currentItem(); + if (item && item->type() == PROJECT_TYPE) { + projectTree->setItemSelected(item, false); + projectTree->setCurrentItem(0); + } + } + +//--------------------------------------------------------- +// projectPath +//--------------------------------------------------------- + +QString ProjectDialog::projectPath() const + { + QTreeWidgetItem* item = projectTree->currentItem(); + QString s; + if (item) { + if (item->type() == PROJECT_TYPE) + s = projectTree->itemPath(item); + else + s = projectTree->itemPath(item) + "/" + projectNameEntry->text(); + } + else + s = projectNameEntry->text(); + return s; + } + +//--------------------------------------------------------- +// projectName +//--------------------------------------------------------- + +QString ProjectDialog::projectName() const + { + return projectNameEntry->text(); + } + +//--------------------------------------------------------- +// setProjectName +//--------------------------------------------------------- + +void ProjectDialog::setProjectName(const QString& name) + { + projectNameEntry->setText(name); + } + +//--------------------------------------------------------- +// newFolderClicked +//--------------------------------------------------------- + +void ProjectDialog::newFolderClicked() + { + QString title(tr("MusE: create new folder")); + QString folder = QInputDialog::getText(this, title, tr("new folder:")); + if (folder.isEmpty()) + return; + QString path; + QTreeWidgetItem* item = projectTree->currentItem(); + if (item) { + QStringList sl = projectTree->itemPath(item).split("/"); + int n = sl.size() - 1; + for (int i = 0; i < n; ++i) { + if (!path.isEmpty()) + path += "/"; + path += sl[i]; + } + if (!path.isEmpty()) + path += "/"; + } + path += folder; + + QDir d; + if (!d.mkpath(QDir::homePath() + "/" + config.projectPath + "/" + path)) { + QString s("Creating new project folder <%1> failed"); + QMessageBox::critical(this, title, s.arg(path)); + } + else { + if (item) + item = item->parent(); + QStringList pathElements = folder.split("/"); + foreach(QString s, pathElements) { + QTreeWidgetItem* pi; + if (item == 0) + pi = new QTreeWidgetItem(projectTree, DIR_TYPE); + else + pi = new QTreeWidgetItem(item, DIR_TYPE); + pi->setText(0, s); + itemCollapsed(pi); + item = pi; + } + projectTree->setCurrentItem(item); + } + } + +//--------------------------------------------------------- +// itemDoubleClicked +//--------------------------------------------------------- + +void ProjectDialog::itemDoubleClicked(QTreeWidgetItem* item, int) + { + if (item->type() == PROJECT_TYPE) + accept(); + } + diff --git a/attic/muse_qt4_evolution/muse/projectdialog.h b/attic/muse_qt4_evolution/muse/projectdialog.h new file mode 100644 index 00000000..867ae385 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/projectdialog.h @@ -0,0 +1,73 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __PROJECT_DIALOG_H__ +#define __PROJECT_DIALOG_H__ + +//--------------------------------------------------------- +// ProjectTree +//--------------------------------------------------------- + +class ProjectTree : public QTreeWidget { + Q_OBJECT + + QPoint dragStartPosition; + virtual void mousePressEvent(QMouseEvent*); + virtual void mouseMoveEvent(QMouseEvent*); + virtual void dragEnterEvent(QDragEnterEvent*); + virtual void dragMoveEvent(QDragMoveEvent*); + virtual void dropEvent(QDropEvent*); + + QTreeWidgetItem* searchItem(const QString&, QTreeWidgetItem*); + + public: + ProjectTree(QWidget* parent = 0); + QString itemPath(QTreeWidgetItem*) const; + }; + +#include "ui_projectdialog.h" + +//--------------------------------------------------------- +// ProjectDialog +//--------------------------------------------------------- + +class ProjectDialog : public QDialog, public Ui_ProjectDialogBase { + Q_OBJECT + + void processSubdir(QTreeWidgetItem*, const QString&, + const QString&, QTreeWidgetItem**); + + private slots: + void currentChanged(QTreeWidgetItem*, QTreeWidgetItem*); + void projectNameEdited(const QString&); + void itemCollapsed(QTreeWidgetItem*); + void itemExpanded(QTreeWidgetItem*); + void newFolderClicked(); + void itemDoubleClicked(QTreeWidgetItem*, int); + + public: + ProjectDialog(QWidget* parent = 0); + QString projectPath() const; + QString projectName() const; + void setProjectName(const QString&); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/projectdialog.ui b/attic/muse_qt4_evolution/muse/projectdialog.ui new file mode 100644 index 00000000..37c08f28 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/projectdialog.ui @@ -0,0 +1,269 @@ + + ProjectDialogBase + + + + 0 + 0 + 574 + 385 + + + + MusE: Select Project + + + + 9 + + + 6 + + + + + Qt::Horizontal + + + + 221 + 20 + + + + + + + + create new project folder + + + ... + + + :/xpm/folder_new.png + + + + + + + Properties + + + + 9 + + + 3 + + + + + Qt::NoFocus + + + true + + + + + + + Qt::NoFocus + + + true + + + + + + + Qt::NoFocus + + + true + + + + + + + Length: + + + + + + + Comment: + + + + + + + Modified: + + + + + + + Created: + + + + + + + Qt::NoFocus + + + true + + + + + + + + + + 0 + + + 6 + + + + + Qt::Horizontal + + + + 131 + 31 + + + + + + + + OK + + + true + + + + + + + Cancel + + + + + + + + + 0 + + + 6 + + + + + Project: + + + + + + + project name + + + + + + + + + false + + + true + + + true + + + 1 + + + + Projectlist + + + + + + + + + ProjectTree + QTreeWidget +
projectdialog.h
+
+
+ + projectNameEntry + okButton + cancelButton + newFolder + projectTree + + + + + + + okButton + clicked() + ProjectDialogBase + accept() + + + 278 + 253 + + + 96 + 254 + + + + + cancelButton + clicked() + ProjectDialogBase + reject() + + + 369 + 253 + + + 179 + 282 + + + + +
diff --git a/attic/muse_qt4_evolution/muse/projectpropsdialog.cpp b/attic/muse_qt4_evolution/muse/projectpropsdialog.cpp new file mode 100644 index 00000000..eb983801 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/projectpropsdialog.cpp @@ -0,0 +1,64 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "projectpropsdialog.h" +#include "song.h" + +#include "al/al.h" +#include "al/tempo.h" + +//--------------------------------------------------------- +// ProjectPropsDialog +//--------------------------------------------------------- + +ProjectPropsDialog::ProjectPropsDialog(QWidget* parent) + : QDialog(parent) + { + setupUi(this); + comment->setPlainText(song->comment()); + projectName->setText(song->projectName()); + createdDate->setDateTime(song->createDate()); + int n = AL::tempomap.tick2frame(song->len()) / AL::sampleRate; + QTime time; + time = time.addSecs(n); + length->setTime(time); + } + +//--------------------------------------------------------- +// accept +//--------------------------------------------------------- + +void ProjectPropsDialog::accept() + { + song->setComment(comment->toPlainText()); + song->dirty = true; + QDialog::accept(); + } + +//--------------------------------------------------------- +// reject +//--------------------------------------------------------- + +void ProjectPropsDialog::reject() + { + comment->setPlainText(song->comment()); + QDialog::reject(); + } + diff --git a/attic/muse_qt4_evolution/muse/projectpropsdialog.h b/attic/muse_qt4_evolution/muse/projectpropsdialog.h new file mode 100644 index 00000000..83b7a511 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/projectpropsdialog.h @@ -0,0 +1,46 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __PROJECTPROPS_DIALOG_H__ +#define __PROJECTPROPS_DIALOG_H__ + +#include "ui_projectpropsdialog.h" + +//--------------------------------------------------------- +// ProjectPropsDialog +//--------------------------------------------------------- + +class ProjectPropsDialog : public QDialog, public Ui_ProjectPropsDialogBase { + Q_OBJECT + + QString projectComment; + + public slots: + virtual void accept(); + virtual void reject(); + + public: + ProjectPropsDialog(QWidget* parent = 0); + }; + +#endif + + + diff --git a/attic/muse_qt4_evolution/muse/projectpropsdialog.ui b/attic/muse_qt4_evolution/muse/projectpropsdialog.ui new file mode 100644 index 00000000..f431b602 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/projectpropsdialog.ui @@ -0,0 +1,188 @@ + + + + + ProjectPropsDialogBase + + + + 0 + 0 + 456 + 382 + + + + MusE: Project Properties + + + + 9 + + + 6 + + + + + + + + Comment: + + + + + + + true + + + Hz + + + 100000 + + + 48000 + + + + + + + Samplerate: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Length: + + + + + + + Qt::NoFocus + + + true + + + + + + + Qt::NoFocus + + + true + + + + + + + 0 + + + 6 + + + + + Qt::Horizontal + + + + 131 + 31 + + + + + + + + OK + + + + + + + Cancel + + + + + + + + + Created: + + + + + + + + 0 + 0 + 0 + 0 + + + + Project: + + + + + + + + + + + + + okButton + clicked() + ProjectPropsDialogBase + accept() + + + 278 + 253 + + + 96 + 254 + + + + + cancelButton + clicked() + ProjectPropsDialogBase + reject() + + + 369 + 253 + + + 179 + 282 + + + + + diff --git a/attic/muse_qt4_evolution/muse/rack.cpp b/attic/muse_qt4_evolution/muse/rack.cpp new file mode 100644 index 00000000..dbd76804 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/rack.cpp @@ -0,0 +1,445 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "rack.h" +#include "song.h" +#include "audio.h" +#include "icons.h" +#include "gconfig.h" +#include "pipeline.h" +#include "auxplugin.h" +#include "plugingui.h" +#include "widgets/filedialog.h" +#include "muse.h" +#include "gui.h" + +static const int PipelineDepth = 4; + +//--------------------------------------------------------- +// EffectRack +//--------------------------------------------------------- + +EffectRack::EffectRack(QWidget* parent, AudioTrack* t, bool flag) + : QListWidget(parent) + { + setUniformItemSizes(true); + setAlternatingRowColors(true); + prefader = flag; + setAttribute(Qt::WA_DeleteOnClose, true); + verticalScrollBar()->setStyle(smallStyle); + + track = t; +// setFont(config.fonts[1]); + + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + + setSelectionMode(QAbstractItemView::SingleSelection); + songChanged(SC_RACK); // force update + connect(this, SIGNAL(itemDoubleClicked(QListWidgetItem*)), + this, SLOT(doubleClicked(QListWidgetItem*))); + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + setToolTip(tr("effect rack")); + setAcceptDrops(true); + } + +//--------------------------------------------------------- +// sizeHint +//--------------------------------------------------------- + +QSize EffectRack::sizeHint() const + { + QFontMetrics fm(font()); + int h = fm.lineSpacing() * PipelineDepth + 1; + return QSize(STRIP_WIDTH, h); + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void EffectRack::songChanged(int typ) + { + if (!(typ & (SC_ROUTE | SC_RACK))) + return; + + clear(); + Pipeline* pipe = prefader ? track->prePipe() : track->postPipe(); + foreach (PluginI* plugin, *pipe) { + QListWidgetItem* item = new QListWidgetItem(this); + item->setText(plugin->name()); + // tooltip should only be set if name does not fit + // (is elided) + item->setToolTip(plugin->name()); + item->setBackgroundColor(plugin->on() ? Qt::white : Qt::gray); + } + } + +//--------------------------------------------------------- +// menuRequested +//--------------------------------------------------------- + +void EffectRack::contextMenuEvent(QContextMenuEvent* ev) + { + QPoint pt(ev->pos()); + QListWidgetItem* item = itemAt(pt); + + int idx = -1; + QString name; + Pipeline* pipe = prefader ? track->prePipe() : track->postPipe(); + + QMenu* menu = new QMenu; + QAction* upAction = menu->addAction(QIcon(*upIcon), tr("move up")); + QAction* downAction = menu->addAction(QIcon(*downIcon), tr("move down")); + QAction* removeAction = menu->addAction(tr("remove")); + menu->addSeparator(); + QAction* bypassAction = menu->addAction(tr("bypass")); + QAction* showAction = menu->addAction(tr("show gui")); + QAction* showCustomAction = menu->addAction(tr("show native gui")); + menu->addSeparator(); + QAction* newAction = menu->addAction(tr("New Plugin")); + QAction* auxAction = menu->addAction(tr("New Aux Send")); + + bypassAction->setCheckable(true); + showAction->setCheckable(true); + showCustomAction->setCheckable(true); + + if (!item) { + upAction->setEnabled(false); + downAction->setEnabled(false); + removeAction->setEnabled(false); + bypassAction->setEnabled(false); + showAction->setEnabled(false); + showCustomAction->setEnabled(false); + } + else { + idx = row(item); + upAction->setEnabled(idx != 0); + downAction->setEnabled(idx < pipe->size()-1); + idx = item->type(); + showCustomAction->setEnabled(pipe->hasNativeGui(idx)); + bypassAction->setEnabled(true); + showAction->setEnabled(true); + + bypassAction->setChecked(!pipe->isOn(idx)); + showAction->setChecked(pipe->guiVisible(idx)); + showCustomAction->setChecked(pipe->nativeGuiVisible(idx)); + } + if (track->type() != Track::WAVE && track->type() != Track::AUDIO_INPUT) + auxAction->setEnabled(false); + + QAction* sel = menu->exec(mapToGlobal(pt), newAction); + delete menu; + if (sel == 0) + return; + + if (sel == newAction) { + selectNew(); + return; + } + if (sel == removeAction) { + audio->msgAddPlugin(track, idx, 0, prefader); + } + else if (sel == bypassAction) { + bool flag = !pipe->isOn(idx); + pipe->setOn(idx, flag); + } + else if (sel == showAction) { + bool flag = !pipe->guiVisible(idx); + pipe->showGui(idx, flag); + } + else if (sel == showCustomAction) { + bool flag = !pipe->nativeGuiVisible(idx); + pipe->showNativeGui(idx, flag); + } + else if (sel == upAction) { + if (idx > 0) { + setCurrentRow(idx-1); + pipe->move(idx, true); + } + } + else if (sel == downAction) { + if (idx < (PipelineDepth-1)) { + setCurrentRow(idx+1); + pipe->move(idx, false); + } + } + else if (sel == auxAction) + addPlugin(auxPlugin); + song->update(SC_RACK); + } + +//--------------------------------------------------------- +// doubleClicked +// toggle gui and open requester if needed. +//--------------------------------------------------------- + +void EffectRack::doubleClicked(QListWidgetItem* it) + { + if (track == 0) + return; + int idx = row(it); + Pipeline* pipe = prefader ? track->prePipe() : track->postPipe(); + bool flag = !pipe->guiVisible(idx); + pipe->showGui(idx, flag); + } + +//--------------------------------------------------------- +// startDrag +//--------------------------------------------------------- + +void EffectRack::startDrag(int idx) + { + QString buffer; + AL::Xml xml(NULL); + xml.setString(&buffer); + Pipeline* pipe = prefader ? track->prePipe() : track->postPipe(); + if (pipe) { + if ((*pipe)[idx] != NULL) { + PluginI *plug = (*pipe)[idx]; + xml.header(); + xml.stag("muse version=\"1.0\""); + // header info + plug->writeConfiguration1(xml, prefader); // wC1 does not append endtag + // parameters + int noParams = plug->plugin()->parameter(); + for (int i=0;igetParameterName(i)); + fval.setNum(plug->param(i)); // wierd stuff to avoid localization + QString str=""; + xml.put(str.toLatin1().data()); + printf("%s\n",str.toLatin1().data()); + } + xml.etag("plugin"); + + xml.etag("muse"); + } + else { + //printf("no plugin!\n"); + return; + } + } + else { + //printf("no pipe!\n"); + return; + } + //printf("and i wish you were here: %s\n", xml.readAll().toLatin1().data()); + QByteArray xmldump = xml.readAll().toLatin1(); + //printf("xmldump=%s\n",xmldump.data()); + QDrag *drag = new QDrag(this); + QMimeData *mime = new QMimeData(); + mime->setData("text/x-muse-plugin", xmldump); + drag->setMimeData(mime); +/* Qt::DropAction dropAction =*/ drag->start(); + } + +//--------------------------------------------------------- +// startDrag +//--------------------------------------------------------- + +void EffectRack::dropEvent(QDropEvent *event) + { + // printf("drop!\n"); + QString text; + QListWidgetItem* i = itemAt( (event->pos()) ); + int idx = -1; + if (i) + idx = row(i); + + Pipeline* pipe = prefader ? track->prePipe() : track->postPipe(); + if (pipe) { + if (i) { + if(!QMessageBox::question(this, tr("Replace effect"),tr("Do you really want to replace the effect %1?").arg(pipe->name(idx)), + tr("&Yes"), tr("&No"), + QString::null, 0, 1 )) + { + audio->msgAddPlugin(track, idx, 0, prefader); + song->update(SC_RACK); + } + else { + printf("nothing here\n"); + return; + } + } + if(event->mimeData()->hasText()) + { + //printf("has text\n"); + text = event->mimeData()->text().trimmed(); + if (QString(text).endsWith(".pre")) + { + QUrl url(text); + QString newPath = url.path(); + + QFile xmlfile(newPath); + xmlfile.open(QIODevice::ReadOnly); + QDomDocument doc; + doc.setContent(&xmlfile); + QDomNode node = doc.documentElement().firstChild(); + initPlugin(node, idx); + } + } + else if (event->mimeData()->hasFormat("text/x-muse-plugin")) + { + QByteArray outxml = event->mimeData()->data("text/x-muse-plugin"); + //printf("DATA:%s\n",outxml.data()); + QDomDocument doc; + doc.setContent(outxml); + QDomNode node = doc.documentElement().firstChild(); + + initPlugin(node, idx); + } + } + } + +//--------------------------------------------------------- +// dragEnterEvent +//--------------------------------------------------------- +void EffectRack::dragEnterEvent(QDragEnterEvent *event) + { + //printf("dragEnterEvent\n"); + //if (event->mimeData()->hasFormat("text/x-muse-plugin")) + event->acceptProposedAction(); + } + +//--------------------------------------------------------- +// dragMoveEvent +//--------------------------------------------------------- +void EffectRack::dragMoveEvent(QDragMoveEvent *event) + { + //printf("dragMoveEvent\n"); + //if (event->mimeData()->hasFormat("text/x-muse-plugin")) + event->acceptProposedAction(); + } + +//--------------------------------------------------------- +// contentsMousePressEvent +//--------------------------------------------------------- +void EffectRack::mousePressEvent(QMouseEvent *event) + { + //printf("mousePressEvent\n"); + if(event->button() & Qt::LeftButton) { + dragPos = event->pos(); + } + QListWidget::mousePressEvent(event); + } + +//--------------------------------------------------------- +// contentsMouseMoveEvent +//--------------------------------------------------------- +void EffectRack::mouseMoveEvent(QMouseEvent *event) + { + if (event->buttons() & Qt::LeftButton) { + int distance = (dragPos-event->pos()).manhattanLength(); + if (distance > QApplication::startDragDistance()) { + QListWidgetItem *i = itemAt( event->pos() ); + int idx = row(i); + startDrag(idx); + } + } + QListWidget::mouseMoveEvent(event); + } + + +//--------------------------------------------------------- +// initPlugin +//--------------------------------------------------------- + +void EffectRack::initPlugin(QDomNode &node, int idx) + { + QDomElement e = node.toElement(); + //QString version = e.attribute("version"); + QString file = e.attribute("file"); + QString label = e.attribute("label"); + + //printf("version=%s file=%s label=%s channel=%d\n",version.toLatin1().data(),file.toLatin1().data(), label.toLatin1().data(), channel); + + //Plugin* plugin = PluginDialog::getPlugin(this); + Plugin* plugin = plugins.find(file, label); + if (plugin) { + PluginI* plugi = new PluginI(track); + if (plugi->initPluginInstance(plugin, track->channels())) { + printf("cannot instantiate plugin <%s>\n", + plugin->name().toLatin1().data()); + delete plugi; + } + else { + audio->msgAddPlugin(track, idx, plugi, prefader); + song->update(SC_RACK); + int i = 0; + for (QDomNode n = node.firstChild(); !n.isNull(); n = n.nextSibling()) { + QDomElement e = n.toElement(); + if (e.nodeName() == "control") { + //QString name = e.attribute("name"); // currently this value is just thrown. + QString value = e.attribute("val"); + QLocale::setDefault(QLocale::C); + double val = value.toFloat(); + CVal cval; + cval.f = val; + song->setControllerVal(plugi->track(), plugi->controller(i), cval); + i++; + } + } + } + } + } + +//--------------------------------------------------------- +// mouseDoubleClickEvent +//--------------------------------------------------------- + +void EffectRack::mouseDoubleClickEvent(QMouseEvent* event) + { + QListWidgetItem* it = itemAt(event->pos()); + if (it || (track == 0)) { + QListWidget::mouseDoubleClickEvent(event); + return; + } + selectNew(); + } + +//--------------------------------------------------------- +// selectNew +//--------------------------------------------------------- + +void EffectRack::selectNew() + { + Plugin* plugin = PluginDialog::getPlugin(this); + addPlugin(plugin); + song->update(SC_RACK); + } + +//--------------------------------------------------------- +// addPlugin +//--------------------------------------------------------- + +void EffectRack::addPlugin(Plugin* plugin) + { + if (plugin == 0) + return; + PluginI* plugi = new PluginI(track); + if (plugi->initPluginInstance(plugin, track->channels())) { + printf("cannot instantiate plugin <%s>\n", + plugin->name().toLatin1().data()); + delete plugi; + } + else + audio->msgAddPlugin(track, -1, plugi, prefader); + } + diff --git a/attic/muse_qt4_evolution/muse/rack.h b/attic/muse_qt4_evolution/muse/rack.h new file mode 100644 index 00000000..c468d8b9 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/rack.h @@ -0,0 +1,66 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __RACK_H__ +#define __RACK_H__ + +#include + +class AudioTrack; +class Plugin; + +//--------------------------------------------------------- +// EffectRack +//--------------------------------------------------------- + +class EffectRack : public QListWidget { + Q_OBJECT + + bool prefader; + AudioTrack* track; + + QPoint dragPos; + + virtual void contextMenuEvent(QContextMenuEvent*); + virtual void mouseDoubleClickEvent(QMouseEvent*); + void selectNew(); + + void startDrag(int idx); + void initPlugin(QDomNode &node, int idx); + void addPlugin(Plugin* plugin); + + private slots: + void doubleClicked(QListWidgetItem*); + void songChanged(int); + + protected: + void dropEvent(QDropEvent *event); + void dragEnterEvent(QDragEnterEvent *event); + void mousePressEvent(QMouseEvent *event); + void mouseMoveEvent(QMouseEvent *event); + void dragMoveEvent(QDragMoveEvent *event); + + public: + EffectRack(QWidget*, AudioTrack*, bool); + QSize sizeHint() const; + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/revision.cpp b/attic/muse_qt4_evolution/muse/revision.cpp new file mode 100644 index 00000000..a1a32dca --- /dev/null +++ b/attic/muse_qt4_evolution/muse/revision.cpp @@ -0,0 +1,27 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2008 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + + +int revision = + +#include "revision.h" + +; + diff --git a/attic/muse_qt4_evolution/muse/revision.h b/attic/muse_qt4_evolution/muse/revision.h new file mode 100644 index 00000000..51b40081 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/revision.h @@ -0,0 +1 @@ +345 diff --git a/attic/muse_qt4_evolution/muse/route.cpp b/attic/muse_qt4_evolution/muse/route.cpp new file mode 100644 index 00000000..a529eb9c --- /dev/null +++ b/attic/muse_qt4_evolution/muse/route.cpp @@ -0,0 +1,417 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "song.h" +#include "route.h" +#include "audio.h" +#include "track.h" +#include "synth.h" +#include "audiodev.h" +#include "al/xml.h" +#include "auxplugin.h" + +//--------------------------------------------------------- +// RouteNode +//--------------------------------------------------------- + +RouteNode::RouteNode() + { + track = 0; + channel = -1; + type = TRACK; + } + +RouteNode::RouteNode(Port p, int ch, RouteNodeType t) + { + port = p; + channel = ch; + type = t; + } + +RouteNode::RouteNode(Port p, RouteNodeType t) + { + port = p; + channel = -1; + type = t; + } + +RouteNode::RouteNode(Track* tr) + { + track = tr; + channel = -1; + type = TRACK; + } + +RouteNode::RouteNode(AuxPluginIF* p) + { + plugin = p; + channel = -1; + type = AUXPLUGIN; + } + +RouteNode::RouteNode(Track* tr, int ch, RouteNodeType t) + { + track = tr; + channel = ch; + type = t; + } + +//--------------------------------------------------------- +// addRoute +// return false, if route invalid or cannot be found +//--------------------------------------------------------- + +bool addRoute(const Route& r) + { +// printf("addRoute %s.%d:<%s> %s.%d:<%s>\n", +// r.src.tname(), r.src.channel, r.src.name().toLatin1().data(), +// r.dst.tname(), r.dst.channel, r.dst.name().toLatin1().data()); + + if (r.src.type == RouteNode::AUDIOPORT || r.src.type == RouteNode::JACKMIDIPORT) { + if (r.dst.type != RouteNode::TRACK) { + fprintf(stderr, "addRoute: bad route 1\n"); + return false; + } + if (r.dst.track->type() != Track::AUDIO_INPUT && r.dst.track->type() != Track::MIDI_IN) { + fprintf(stderr, "addRoute: bad route 2\n"); + return false; + } + RouteList* inRoutes = r.dst.track->inRoutes(); + if (inRoutes->indexOf(r) != -1) { + printf(" route already there 1\n"); + return true; + } + inRoutes->push_back(r); + } + else if (r.dst.type == RouteNode::AUDIOPORT || r.dst.type == RouteNode::JACKMIDIPORT) { + if (r.src.type != RouteNode::TRACK) { + fprintf(stderr, "addRoute: bad route 3\n"); + return false; + } + if (r.src.track->type() != Track::AUDIO_OUTPUT && r.src.track->type() != Track::MIDI_OUT) { + fprintf(stderr, "addRoute: bad route 4, tracktype %s\n", r.src.track->cname().toLatin1().data()); + return false; + } + RouteList* outRoutes = r.src.track->outRoutes(); + if (outRoutes->indexOf(r) != -1) { + printf(" route already there 2\n"); + return true; + } + outRoutes->push_back(r); + } + else if (r.src.type == RouteNode::AUXPLUGIN) { + RouteList* inRoutes = r.dst.track->inRoutes(); + inRoutes->insert(inRoutes->begin(), r); + } + else { + if (r.src.track->outRoutes()->indexOf(r) != -1) { + printf(" route already there 3\n"); + return true; + } + r.src.track->outRoutes()->push_back(r); + r.dst.track->inRoutes()->push_back(r); + } + return true; + } + +//--------------------------------------------------------- +// removeRoute +//--------------------------------------------------------- + +void removeRoute(const Route& r) + { +// printf("removeRoute %s.%d:<%s> %s.%d:<%s>\n", +// r.src.tname(), r.src.channel, r.src.name().toLatin1().data(), +// r.dst.tname(), r.dst.channel, r.dst.name().toLatin1().data()); + if (r.src.type == RouteNode::AUDIOPORT || r.src.type == RouteNode::JACKMIDIPORT) { + if (r.dst.type != RouteNode::TRACK) { + fprintf(stderr, "removeRoute: bad route 1\n"); + goto error; + } + if (r.dst.track->type() != Track::AUDIO_INPUT + && r.dst.track->type() != Track::AUDIO_SOFTSYNTH + && r.dst.track->type() != Track::MIDI_IN) { + fprintf(stderr, "removeRoute: bad route 2\n"); + goto error; + } + RouteList* inRoutes = r.dst.track->inRoutes(); + iRoute i; + for (i = inRoutes->begin(); i != inRoutes->end(); ++i) { + if (*i == r) { + inRoutes->erase(i); + break; + } + } + } + else if (r.dst.type == RouteNode::AUDIOPORT || r.dst.type == RouteNode::JACKMIDIPORT) { + if (r.src.type != RouteNode::TRACK) { + fprintf(stderr, "removeRoute: bad route 3\n"); + goto error; + } + if (r.src.track->type() != Track::AUDIO_OUTPUT && r.src.track->type() != Track::MIDI_OUT) { + fprintf(stderr, "removeRoute: bad route 4\n"); + goto error; + } + RouteList* outRoutes = r.src.track->outRoutes(); + iRoute i; + for (i = outRoutes->begin(); i != outRoutes->end(); ++i) { + if (*i == r) { + outRoutes->erase(i); + break; + } + } + } + else if (r.src.type == RouteNode::AUXPLUGIN) { + if (r.dst.type != RouteNode::TRACK) { + fprintf(stderr, "removeRoute: bad route 5\n"); + goto error; + } + RouteList* inRoutes = r.dst.track->inRoutes(); + for (iRoute i = inRoutes->begin(); i != inRoutes->end(); ++i) { + if (*i == r) { + inRoutes->erase(i); + break; + } + } + } + else { + RouteList* outRoutes = r.src.track->outRoutes(); + for (iRoute i = outRoutes->begin(); i != outRoutes->end(); ++i) { + if (*i == r) { + outRoutes->erase(i); + break; + } + } + RouteList* inRoutes = r.dst.track->inRoutes(); + for (iRoute i = inRoutes->begin(); i != inRoutes->end(); ++i) { + if (*i == r) { + inRoutes->erase(i); + break; + } + } + } + return; +error: + printf("removeRoute %s.%d:<%s> %s.%d:<%s>\n", + r.src.tname(), r.src.channel, r.src.name().toLatin1().data(), + r.dst.tname(), r.dst.channel, r.dst.name().toLatin1().data()); + abort(); + } + +//--------------------------------------------------------- +// track2name +// create string name representation for audio node +//--------------------------------------------------------- + +static QString track2name(const Track* n) + { + return n ? n->name() : "None"; + } + +//--------------------------------------------------------- +// name +// create string name representation for audio node +//--------------------------------------------------------- + +QString RouteNode::name() const + { + switch (type) { + case TRACK: + return track2name(track); + case AUDIOPORT: + case JACKMIDIPORT: + if (port.isZero()) + return QString("0"); + return audioDriver->portName(port); + case AUXPLUGIN: + return plugin->pluginInstance()->name(); + } + return QString("?"); + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void Song::readRoute(QDomNode n) + { + RouteNode s, d; + for (QDomNode node = n.firstChild(); !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + if (e.tagName() == "src") + s.read(node); + else if (e.tagName() == "dst") + d.read(node); + else + printf("MusE:readRoute: unknown tag %s\n", e.tagName().toLatin1().data()); + } + if (!s.isValid()) { // source port not found? + printf("Song::readRoute(): invalid source port: %s.%d:<%s> - %s.%d:<%s>\n", + s.tname(), s.channel, s.name().toLatin1().data(), + d.tname(), d.channel, d.name().toLatin1().data()); + return; + } + if (!d.isValid()) { // destination port not found? + printf("Song::readRoute(): invalid destination port: %s.%d:<%s> - %s.%d:<%s>\n", + s.tname(), s.channel, s.name().toLatin1().data(), + d.tname(), d.channel, d.name().toLatin1().data()); + return; + } + Route r(s, d); + r.disconnected = true; + addRoute(r); + } + +//--------------------------------------------------------- +// dump +//--------------------------------------------------------- + +void RouteNode::dump() const + { + printf("RouteNode %p dump: <%s> channel %d, type %s\n", + track, name().toLatin1().data(), channel, tname()); + } + +//--------------------------------------------------------- +// operator== +//--------------------------------------------------------- + +bool RouteNode::operator==(const RouteNode& a) const + { + if (type != a.type) + return false; + switch(type) { + case TRACK: + return (channel == a.channel) && (track == a.track); + case JACKMIDIPORT: + case AUDIOPORT: + return port == a.port; + case AUXPLUGIN: + return plugin == a.plugin; + } + return false; + } + +//--------------------------------------------------------- +// tname +//--------------------------------------------------------- + +const char* RouteNode::tname(RouteNodeType t) + { + static const char* names[] = { + "TRACK", "AUDIOPORT", "JACKMIDIPORT", "AUX" + }; + if (t > (int)(sizeof(names)/sizeof(*names))) + return "???"; + return names[t]; + } + +const char* RouteNode::tname() const + { + return tname(type); + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void RouteNode::write(Xml& xml, const char* label) const + { + if (channel != -1) + xml.tagE(QString("%1 type=\"%2\" channel=\"%3\" name=\"%4\"") + .arg(label).arg(tname()).arg(channel + 1).arg(name())); + else + xml.tagE(QString("%1 type=\"%2\" name=\"%3\"") + .arg(label).arg(tname()).arg(name())); + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void RouteNode::read(QDomNode node) + { + QDomElement e = node.toElement(); + channel = e.attribute("channel","0").toInt() - 1; + QString s = e.attribute("name"); + QString st = e.attribute("type", "TRACK"); + + if (st == "TRACK") { + type = RouteNode::TRACK; + track = 0; + TrackList* tl = song->tracks(); + for (iTrack i = tl->begin(); i != tl->end(); ++i) { + Track* t = *i; + if (t->name() == s) { + track = t; + break; + } + } + if (track == 0) + printf("Route::read(): track <%s> not found\n", s.toLatin1().data()); + } + else if (st == "AUDIOPORT") { + type = RouteNode::AUDIOPORT; + port = audioDriver->findPort(s); + if (port.isZero()) + printf("Route::read(): audioport <%s> not found\n", s.toLatin1().data()); + } + else if (st == "JACKMIDIPORT") { + type = RouteNode::JACKMIDIPORT; + port = audioDriver->findPort(s); + if (port.isZero()) + printf("Route::read(): jack midiport <%s> not found\n", s.toLatin1().data()); + } + else if (st == "AUX") { + type = RouteNode::AUXPLUGIN; + plugin = 0; + TrackList* tl = song->tracks(); + for (iTrack i = tl->begin(); i != tl->end(); ++i) { + if ((*i)->type() == Track::WAVE || (*i)->type() == Track::AUDIO_INPUT) { + AudioTrack* t = (AudioTrack*)*i; + QList pl = t->preAux(); + foreach(AuxPluginIF* p, pl) { + if (p->pluginInstance()->name() == s) { + plugin = p; + break; + } + } + if (plugin) + break; + pl = t->postAux(); + foreach(AuxPluginIF* p, pl) { + if (p->pluginInstance()->name() == s) { + plugin = p; + break; + } + } + if (plugin) + break; + } + } + if (plugin == 0) + printf("Route::read(): plugin <%s> not found\n", s.toLatin1().data()); + } + else { + printf("Route::read(): unknown type <%s>\n", st.toLatin1().data()); + type = RouteNode::TRACK; + } + } + diff --git a/attic/muse_qt4_evolution/muse/route.h b/attic/muse_qt4_evolution/muse/route.h new file mode 100644 index 00000000..386ea636 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/route.h @@ -0,0 +1,108 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __ROUTE_H__ +#define __ROUTE_H__ + +class Track; +class AuxPluginIF; + +namespace AL { + class Xml; + }; +using AL::Xml; + +#include "driver.h" + +//--------------------------------------------------------- +// RouteNode +// this describes one endpoint of a route +// Track +// Track/Channel +// AuxPlugin +// Port +//--------------------------------------------------------- + +struct RouteNode { + enum RouteNodeType { + TRACK, AUDIOPORT, JACKMIDIPORT, AUXPLUGIN + }; + + Port port; + union { + Track* track; + AuxPluginIF* plugin; + }; + int channel; + RouteNodeType type; + + RouteNode(); + RouteNode(Port, int, RouteNodeType); + RouteNode(Port, RouteNodeType); + RouteNode(Track*); + RouteNode(Track*, int, RouteNodeType t = TRACK); + RouteNode(AuxPluginIF*); + + bool isPortType() const { + return type==AUDIOPORT || type == JACKMIDIPORT; + } + bool isValid() const { + return (isPortType() && !port.isZero()) + || ((type == TRACK) && track) + || ((type == AUXPLUGIN) && plugin); + } + QString name() const; + void read(QDomNode node); + void write(Xml&, const char* name) const; + + bool operator==(const RouteNode& a) const; + void dump() const; + const char* tname() const; + static const char* tname(RouteNodeType); + }; + +//--------------------------------------------------------- +// Route +//--------------------------------------------------------- + +struct Route { + RouteNode src; + RouteNode dst; + bool disconnected; // if true, do not remove route in graphChanged() + // or removeConnection() + + Route() { disconnected = false;} + Route(const RouteNode& s, const RouteNode& d) : src(s), dst(d) { disconnected = false;} + bool operator==(const Route& a) const { + return (src==a.src) && (dst==a.dst); + } + }; + +Q_DECLARE_METATYPE(struct Route); + +typedef QList RouteList; +typedef RouteList::iterator iRoute; +typedef RouteList::const_iterator ciRoute; + +extern bool addRoute(const Route&); +extern void removeRoute(const Route&); + +#endif + diff --git a/attic/muse_qt4_evolution/muse/routedialog.cpp b/attic/muse_qt4_evolution/muse/routedialog.cpp new file mode 100644 index 00000000..a2f3b584 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/routedialog.cpp @@ -0,0 +1,196 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "routedialog.h" +#include "track.h" +#include "song.h" +#include "audio.h" +#include "jackaudio.h" + +//--------------------------------------------------------- +// RouteDialog +//--------------------------------------------------------- + +RouteDialog::RouteDialog(QWidget* parent) + : QDialog(parent) + { + setupUi(this); + connect(routeList, SIGNAL(selectionChanged()), SLOT(routeSelectionChanged())); + connect(newSrcList, SIGNAL(selectionChanged()), SLOT(srcSelectionChanged())); + connect(newDstList, SIGNAL(selectionChanged()), SLOT(dstSelectionChanged())); + connect(removeButton, SIGNAL(clicked()), SLOT(removeRoute())); + connect(connectButton, SIGNAL(clicked()), SLOT(addRoute())); + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + routingChanged(); + } + +//--------------------------------------------------------- +// routingChanged +//--------------------------------------------------------- + +void RouteDialog::routingChanged() + { + //--------------------------------------------------- + // populate lists + //--------------------------------------------------- + + routeList->clear(); + newSrcList->clear(); + newDstList->clear(); + +#if 0 //TODO3 + TrackList* tl = song->tracks(); + for (ciTrack i = tl->begin(); i != tl->end(); ++i) { + if ((*i)->isMidiTrack()) + continue; + Track* track = *i; + if (track->type() == Track::AUDIO_INPUT) { + for (int channel = 0; channel < track->channels(); ++channel) + newDstList->insertItem(Route(track, channel).name()); + const RouteList* rl = track->inRoutes(); + for (ciRoute r = rl->begin(); r != rl->end(); ++r) { + Route dst(track->name(), r->channel, Route::AUDIOPORT); + new QListWidgetItem(routeList, r->name(), dst.name()); + } + } + else + newDstList->insertItem(Route(track, -1).name()); + if (track->type() == Track::AUDIO_OUTPUT) { + for (int channel = 0; channel < track->channels(); ++channel) { + Route r(track, channel); + newSrcList->insertItem(r.name()); + } + } + else + newSrcList->insertItem(Route(track, -1).name()); + + const RouteList* rl = track->outRoutes(); + for (ciRoute r = rl->begin(); r != rl->end(); ++r) { + QString src(track->name()); + if (track->type() == Track::AUDIO_OUTPUT) { + Route s(src, r->channel, Route::AUDIOPORT); + src = s.name(); + } + new QListWidgetItem(routeList, src, r->name()); + } + } + + std::list sl = audioDriver->outputPorts(); + for (std::list::iterator i = sl.begin(); i != sl.end(); ++i) + newSrcList->insertItem(*i); + sl = audioDriver->inputPorts(); + for (std::list::iterator i = sl.begin(); i != sl.end(); ++i) + newDstList->insertItem(*i); +#endif + routeSelectionChanged(); // init remove button + srcSelectionChanged(); // init select button + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void RouteDialog::songChanged(int v) + { + if (v & (SC_TRACK_INSERTED | SC_TRACK_REMOVED | SC_ROUTE)) { + routingChanged(); + } + } + +//--------------------------------------------------------- +// routeSelectionChanged +//--------------------------------------------------------- + +void RouteDialog::routeSelectionChanged() + { +//TD QListWidgetItem* item = routeList->selectedItem(); +// removeButton->setEnabled(item != 0); + } + +//--------------------------------------------------------- +// removeRoute +//--------------------------------------------------------- + +void RouteDialog::removeRoute() + { +#if 0 //TD + QListWidgetItem* item = routeList->selectedItem(); + if (item == 0) + return; + audio->msgRemoveRoute(Route(item->text(0), -1, Route::TRACK), Route(item->text(1), -1, Route::AUDIOPORT)); + delete item; +#endif + } + +//--------------------------------------------------------- +// addRoute +//--------------------------------------------------------- + +void RouteDialog::addRoute() + { +#if 0 //TD + QListWidgetItem* srcItem = newSrcList->selectedItem(); + QListWidgetItem* dstItem = newDstList->selectedItem(); + if (srcItem == 0 || dstItem == 0) + return; + audio->msgAddRoute(Route(srcItem->text(), -1, Route::TRACK), Route(dstItem->text(), -1, Route::AUDIOPORT)); + new QListWidgetItem(routeList, srcItem->text(), dstItem->text()); +#endif + } + +//--------------------------------------------------------- +// srcSelectionChanged +//--------------------------------------------------------- + +void RouteDialog::srcSelectionChanged() + { +#if 0 //TD + QListWidgetItem* srcItem = newSrcList->selectedItem(); + QListWidgetItem* dstItem = newDstList->selectedItem(); + connectButton->setEnabled((srcItem != 0) + && (dstItem != 0) + && checkRoute(srcItem->text(), dstItem->text())); +#endif + } + +//--------------------------------------------------------- +// dstSelectionChanged +//--------------------------------------------------------- + +void RouteDialog::dstSelectionChanged() + { +#if 0 //TD + QListWidgetItem* dstItem = newDstList->selectedItem(); + QListWidgetItem* srcItem = newSrcList->selectedItem(); + connectButton->setEnabled((srcItem != 0) + && (dstItem != 0) + && checkRoute(srcItem->text(), dstItem->text())); +#endif + } + +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void RouteDialog::closeEvent(QCloseEvent* e) + { + emit closed(); + e->accept(); + } diff --git a/attic/muse_qt4_evolution/muse/routedialog.h b/attic/muse_qt4_evolution/muse/routedialog.h new file mode 100644 index 00000000..2bcbf471 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/routedialog.h @@ -0,0 +1,53 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __ROUTEDIALOG_H__ +#define __ROUTEDIALOG_H__ + +#include "ui_routedialog.h" + +//--------------------------------------------------------- +// RouteDialog +//--------------------------------------------------------- + +class RouteDialog : public QDialog, public Ui::RouteDialogBase { + Q_OBJECT + + virtual void closeEvent(QCloseEvent*); + void routingChanged(); + + private slots: + void routeSelectionChanged(); + void removeRoute(); + void addRoute(); + void srcSelectionChanged(); + void dstSelectionChanged(); + void songChanged(int); + + signals: + void closed(); + + public: + RouteDialog(QWidget* parent); + }; + + +#endif + diff --git a/attic/muse_qt4_evolution/muse/routedialog.ui b/attic/muse_qt4_evolution/muse/routedialog.ui new file mode 100644 index 00000000..be34c451 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/routedialog.ui @@ -0,0 +1,170 @@ + + + + + RouteDialogBase + + + + 0 + 0 + 316 + 383 + + + + + 5 + 7 + 0 + 0 + + + + MusE: Routing + + + + 4 + + + 4 + + + + + Add Route + + + + 4 + + + 4 + + + + + 0 + + + 6 + + + + + + 7 + 7 + 0 + 0 + + + + Source: + + + + 2 + + + 0 + + + + + + + + + + + + 7 + 7 + 0 + 0 + + + + Destination: + + + + 2 + + + 0 + + + + + + + + + + + + + + 4 + 1 + 0 + 0 + + + + connect source to destination + + + Connect + + + + + + + + + + Current Routes + + + + 4 + + + 4 + + + + + + + + + 4 + 1 + 0 + 0 + + + + remove selected route + + + Remove + + + + + + + + + + qPixmapFromMimeSource + + + diff --git a/attic/muse_qt4_evolution/muse/selectfilter.h b/attic/muse_qt4_evolution/muse/selectfilter.h new file mode 100644 index 00000000..a28e6947 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/selectfilter.h @@ -0,0 +1,51 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __SELECTFILTER_H__ +#define __SELECTFILTER_H__ + +//--------------------------------------------------------- +// SelectFilter +//--------------------------------------------------------- + +class SelectFilter :public QObject + { + QWidget* w; + Track* t; + + protected: + bool eventFilter(QObject*, QEvent* ev) + { + if (ev->type() == QEvent::MouseButtonPress) { + w->setFocus(); + song->selectTrack(t); + } + return false; + } + public: + SelectFilter(QObject* parent, QWidget* widget, Track* track) + : QObject(parent) { + w = widget; + t = track; + } + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/seqmsg.cpp b/attic/muse_qt4_evolution/muse/seqmsg.cpp new file mode 100644 index 00000000..cbd0d0dd --- /dev/null +++ b/attic/muse_qt4_evolution/muse/seqmsg.cpp @@ -0,0 +1,621 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "song.h" +#include "instruments/minstrument.h" +#include "muse.h" +#include "mixer.h" +#include "al/tempo.h" +#include "al/sig.h" +#include "audio.h" +#include "audiodev.h" +#include "audio.h" +#include "arranger.h" +#include "plugin.h" +#include "midi.h" +#include "midictrl.h" +#include "midiplugin.h" +#include "part.h" +#include "midioutport.h" +#include "midiinport.h" + +//--------------------------------------------------------- +// sendMsg +//--------------------------------------------------------- + +void Audio::sendMsg(AudioMsg* m) + { + if (audioState == AUDIO_RUNNING) { + msg = m; + char c; + int rv = read(fromThreadFdr, &c, 1); + if (rv != 1) + perror("Audio: read pipe failed"); + } + else { + // if audio is not running (during initialization) + // process commands immediatly + msg = m; + processMsg(); + } + } + +//--------------------------------------------------------- +// sendMessage +// send request from gui to sequencer +// wait until request is processed +//--------------------------------------------------------- + +bool Audio::sendMessage(AudioMsg* m, bool doUndo) + { + if (doUndo) + song->startUndo(); + sendMsg(m); + if (doUndo) + song->endUndo(0); // song->endMsgCmd(); + return false; + } + +//--------------------------------------------------------- +// msgRoute +//--------------------------------------------------------- + +extern bool mops; + +void Audio::msgRoute(bool add, Route r) + { + if (add) + msgAddRoute(r); + else + msgRemoveRoute(r); + song->update(SC_ROUTE); + } + +//--------------------------------------------------------- +// msgRemoveRoute +//--------------------------------------------------------- + +void Audio::msgRemoveRoute(Route r) + { + if (r.src.type == RouteNode::AUDIOPORT) { + AudioInput* ai = (AudioInput*)(r.dst.track); + audioDriver->disconnect(r.src.port, ai->jackPort(r.dst.channel)); + } + else if (r.src.type == RouteNode::JACKMIDIPORT) { + audioDriver->disconnect(r.src.port, ((MidiInPort*)r.dst.track)->jackPort()); + } + else if (r.dst.type == RouteNode::AUDIOPORT) { + AudioOutput* ai = (AudioOutput*)(r.src.track); + audioDriver->disconnect(ai->jackPort(r.src.channel), r.dst.port); + } + else if (r.dst.type == RouteNode::JACKMIDIPORT) { + audioDriver->disconnect(((MidiOutPort*)r.src.track)->jackPort(), r.dst.port); + } + msgRemoveRoute1(r); + } + +//--------------------------------------------------------- +// msgRemoveRoute1 +//--------------------------------------------------------- + +void Audio::msgRemoveRoute1(Route r) + { + AudioMsg msg; + msg.id = AUDIO_ROUTEREMOVE; + msg.route = r; + sendMsg(&msg); + } + +//--------------------------------------------------------- +// msgAddRoute +//--------------------------------------------------------- + +void Audio::msgAddRoute(Route r) + { + msgAddRoute1(r); + if (r.src.type == RouteNode::AUDIOPORT) { + AudioInput* ai = (AudioInput*)r.dst.track; + audioDriver->connect(r.src.port, ai->jackPort(r.dst.channel)); + } + else if (r.src.type == RouteNode::JACKMIDIPORT) { + audioDriver->connect(r.src.port, ((MidiInPort*)r.dst.track)->jackPort()); + } + else if (r.dst.type == RouteNode::AUDIOPORT) { + AudioOutput* ao = (AudioOutput*)r.src.track; +printf("msgAddRoute to AUDIPORT %p\n", ao); + audioDriver->connect(ao->jackPort(r.src.channel), r.dst.port); + } + else if (r.dst.type == RouteNode::JACKMIDIPORT) { + audioDriver->connect(((MidiOutPort*)r.src.track)->jackPort(), r.dst.port); + } + } + +//--------------------------------------------------------- +// msgAddRoute1 +//--------------------------------------------------------- + +void Audio::msgAddRoute1(Route r) + { + AudioMsg msg; + msg.id = AUDIO_ROUTEADD; + msg.route = r; + sendMsg(&msg); + } + +//--------------------------------------------------------- +// msgAddMidiPlugin +//--------------------------------------------------------- + +void Audio::msgAddMidiPlugin(MidiTrackBase* track, int idx, MidiPluginI* plugin) + { + AudioMsg msg; + msg.id = AUDIO_ADDMIDIPLUGIN; + msg.track = track; + msg.ival = idx; + msg.mplugin = plugin; + MidiPluginI* oldPlugin = plugin ? 0 : track->plugin(idx); + sendMsg(&msg); + if (oldPlugin) + delete oldPlugin; + } + +//--------------------------------------------------------- +// msgAddPlugin +//--------------------------------------------------------- + +void Audio::msgAddPlugin(AudioTrack* track, int idx, PluginI* plugin, + bool prefader) + { + AudioMsg msg; + msg.id = AUDIO_ADDPLUGIN; + msg.track = track; + msg.ival = idx; + msg.iival = prefader; + msg.plugin = plugin; + sendMsg(&msg); + } + +//--------------------------------------------------------- +// msgSetChannels +//--------------------------------------------------------- + +void Audio::msgSetChannels(AudioTrack* node, int n) + { + if (n == node->channels()) + return; + QString name = node->name(); + int mc = std::max(n, node->channels()); + + if (!name.isEmpty()) { + if (node->type() == Track::AUDIO_INPUT) { + AudioInput* ai = (AudioInput*)node; + for (int i = 0; i < mc; ++i) { + if (i < n && ai->jackPort(i).isZero()) { + char buffer[128]; + snprintf(buffer, 128, "%s-%d", name.toLatin1().data(), i); + ai->setJackPort(audioDriver->registerInPort(QString(buffer), false), i); + } + else if ((i >= n) && ai->jackPort(i).isZero()) { + RouteList* ir = node->inRoutes(); + for (iRoute ii = ir->begin(); ii != ir->end(); ++ii) { + Route r = *ii; + if ((r.src.type == RouteNode::AUDIOPORT) && (r.src.channel == i)) { + msgRemoveRoute(r); + break; + } + } + audioDriver->unregisterPort(ai->jackPort(i)); + ai->setJackPort(Port(), i); + } + } + } + else if (node->type() == Track::AUDIO_OUTPUT) { + AudioOutput* ao = (AudioOutput*)node; + for (int i = 0; i < mc; ++i) { + Port port = ao->jackPort(i); + if (i < n && port.isZero()) { + char buffer[128]; + snprintf(buffer, 128, "%s-%d", name.toLatin1().data(), i); + ao->setJackPort(audioDriver->registerOutPort(QString(buffer), false), i); + } + else if (i >= n && !port.isZero()) { + RouteList* ir = node->outRoutes(); + for (iRoute ii = ir->begin(); ii != ir->end(); ++ii) { + Route r = *ii; + if ((r.src.type == RouteNode::AUDIOPORT) && (r.src.channel == i)) { + msgRemoveRoute(r); + break; + } + } + audioDriver->unregisterPort(ao->jackPort(i)); + ao->setJackPort(Port(), i); + } + } + } + } + AudioMsg msg; + msg.id = AUDIO_SET_CHANNELS; + msg.track = node; + msg.ival = n; + sendMsg(&msg); + } + +//--------------------------------------------------------- +// msgSetSegSize +//--------------------------------------------------------- + +void Audio::msgSetSegSize(int bs, int sr) + { + AudioMsg msg; + msg.id = AUDIO_SET_SEG_SIZE; + msg.ival = bs; + msg.iival = sr; + sendMsg(&msg); + } + +//--------------------------------------------------------- +// msgSeek +//--------------------------------------------------------- + +void Audio::msgSeek(const Pos& pos) + { + audioDriver->seekTransport(pos.frame()); + } + +//--------------------------------------------------------- +// msgUndo +//--------------------------------------------------------- + +void Audio::msgUndo() + { + AudioMsg msg; + msg.id = SEQM_UNDO; + sendMsg(&msg); + } + +//--------------------------------------------------------- +// msgRedo +//--------------------------------------------------------- + +void Audio::msgRedo() + { + AudioMsg msg; + msg.id = SEQM_REDO; + sendMsg(&msg); + } + +//--------------------------------------------------------- +// msgPlay +//--------------------------------------------------------- + +void Audio::msgPlay(bool val) + { + if (val) { + if (audioDriver) + audioDriver->startTransport(); + } + else + if (audioDriver) + audioDriver->stopTransport(); + } + +//--------------------------------------------------------- +// msgRemoveTrack +//--------------------------------------------------------- + +void Audio::msgRemoveTrack(Track* track) + { + AudioMsg msg; + msg.id = SEQM_REMOVE_TRACK; + msg.track = track; + sendMessage(&msg, true); + } + +//--------------------------------------------------------- +// msgRemoveTracks +// remove all selected tracks +//--------------------------------------------------------- + +void Audio::msgRemoveTracks() + { + TrackList tl; + TrackList* tl2 = song->tracks(); + for (iTrack t = tl2->begin(); t != tl2->end(); ++t) { + if ((*t)->selected()) + tl.push_back(*t); + } + for (iTrack t = tl.begin(); t != tl.end(); ++t) { + Track* track = *t; + int idx = song->tracks()->indexOf(track); + song->undoOp(UndoOp::DeleteTrack, idx, track); + song->removeTrack1(track); + msgRemoveTrack(track); + song->removeTrack3(track); + } + } + +//--------------------------------------------------------- +// msgMoveTrack +//--------------------------------------------------------- + +void Audio::msgMoveTrack(Track* src, Track* dst) + { + AudioMsg msg; + msg.id = SEQM_MOVE_TRACK; + msg.p1 = src; + msg.p2 = dst; + sendMessage(&msg, false); + } + +//--------------------------------------------------------- +// msgAddEvent +//--------------------------------------------------------- + +void Audio::msgAddEvent(const Event& event, Part* part, bool doUndoFlag) + { + AudioMsg msg; + msg.id = SEQM_ADD_EVENT; + msg.ev1 = event; + msg.p2 = part; + sendMessage(&msg, doUndoFlag); + } + +//--------------------------------------------------------- +// msgAddEvents +//--------------------------------------------------------- + +void Audio::msgAddEvents(QList* el, Part* part) + { + AudioMsg msg; + msg.id = SEQM_ADD_EVENTS; + msg.el = el; + msg.p2 = part; + sendMessage(&msg, false); + } + +//--------------------------------------------------------- +// msgDeleteEvent +//--------------------------------------------------------- + +void Audio::msgDeleteEvent(const Event& event, Part* part, bool doUndoFlag) + { + AudioMsg msg; + msg.id = SEQM_REMOVE_EVENT; + msg.ev1 = event; + msg.p2 = part; + sendMessage(&msg, doUndoFlag); + } + +//--------------------------------------------------------- +// msgChangeEvent +//--------------------------------------------------------- + +void Audio::msgChangeEvent(const Event& oe, const Event& ne, Part* part, bool doUndoFlag) + { + AudioMsg msg; + msg.id = SEQM_CHANGE_EVENT; + msg.ev1 = oe; + msg.ev2 = ne; + msg.p3 = part; + sendMessage(&msg, doUndoFlag); + } + +//--------------------------------------------------------- +// msgAddTempo +//--------------------------------------------------------- + +void Audio::msgAddTempo(int tick, int tempo, bool doUndoFlag) + { + AudioMsg msg; + msg.id = SEQM_ADD_TEMPO; + msg.a = tick; + msg.b = tempo; + sendMessage(&msg, doUndoFlag); + } + +//--------------------------------------------------------- +// msgSetTempo +//--------------------------------------------------------- + +void Audio::msgSetTempo(int tick, int tempo, bool doUndoFlag) + { + AudioMsg msg; + msg.id = SEQM_SET_TEMPO; + msg.a = tick; + msg.b = tempo; + sendMessage(&msg, doUndoFlag); + } + +//--------------------------------------------------------- +// msgSetGlobalTempo +//--------------------------------------------------------- + +void Audio::msgSetGlobalTempo(int val) + { + AudioMsg msg; + msg.id = SEQM_SET_GLOBAL_TEMPO; + msg.a = val; + sendMessage(&msg, false); + } + +//--------------------------------------------------------- +// msgDeleteTempo +//--------------------------------------------------------- + +void Audio::msgDeleteTempo(int tick, int tempo, bool doUndoFlag) + { + AudioMsg msg; + msg.id = SEQM_REMOVE_TEMPO; + msg.a = tick; + msg.b = tempo; + sendMessage(&msg, doUndoFlag); + } + +//--------------------------------------------------------- +// msgAddSig +//--------------------------------------------------------- + +void Audio::msgAddSig(int tick, const AL::TimeSignature& sig, bool doUndoFlag) + { + AudioMsg msg; + msg.id = SEQM_ADD_SIG; + msg.a = tick; + msg.b = sig.z; + msg.c = sig.n; + sendMessage(&msg, doUndoFlag); + } + +//--------------------------------------------------------- +// msgRemoveSig +//! sends remove tempo signature message +//--------------------------------------------------------- + +void Audio::msgRemoveSig(int tick, int z, int n, bool doUndoFlag) + { + AudioMsg msg; + msg.id = SEQM_REMOVE_SIG; + msg.a = tick; + msg.b = z; + msg.c = n; + sendMessage(&msg, doUndoFlag); + } + +//--------------------------------------------------------- +// msgResetMidiDevices +//--------------------------------------------------------- + +void Audio::msgResetMidiDevices() + { + AudioMsg msg; + msg.id = SEQM_RESET_DEVICES; + sendMessage(&msg, false); + } + +//--------------------------------------------------------- +// msgInitMidiDevices +//--------------------------------------------------------- + +void Audio::msgInitMidiDevices() + { + AudioMsg msg; + msg.id = SEQM_INIT_DEVICES; + sendMessage(&msg, false); + } + +//--------------------------------------------------------- +// panic +//--------------------------------------------------------- + +void Audio::msgPanic() + { + MidiEvent ev1(0, 0, ME_CONTROLLER, CTRL_ALL_SOUNDS_OFF, 0); + MidiEvent ev2(0, 0, ME_CONTROLLER, CTRL_RESET_ALL_CTRL, 0); + + MidiTrackList* cl = song->midis(); + for (iMidiTrack i = cl->begin(); i != cl->end(); ++i) { + (*i)->playMidiEvent(&ev1); + (*i)->playMidiEvent(&ev2); + } + } + +//--------------------------------------------------------- +// localOff +//--------------------------------------------------------- + +void Audio::msgLocalOff() + { + MidiEvent ev1(0, 0, ME_CONTROLLER, CTRL_LOCAL_OFF, 0); + + MidiTrackList* cl = song->midis(); + for (iMidiTrack i = cl->begin(); i != cl->end(); ++i) + (*i)->playMidiEvent(&ev1); + } + +//--------------------------------------------------------- +// msgBounce +// start bounce operation +//--------------------------------------------------------- + +void Audio::msgBounce() + { + _bounce = true; + audioDriver->seekTransport(song->lPos().frame()); + } + +//--------------------------------------------------------- +// msgIdle +//--------------------------------------------------------- + +void Audio::msgIdle(bool on) + { + AudioMsg msg; + msg.id = SEQM_IDLE; + msg.a = on; + sendMessage(&msg, false); + } + +//--------------------------------------------------------- +// msgAddController +// add controller value +//--------------------------------------------------------- + +void Audio::msgAddController(Track* track, int id, unsigned time, CVal val) + { + AudioMsg msg; + msg.id = SEQM_ADD_CTRL; + msg.track = track; + msg.a = id; + msg.time = time; + msg.cval1 = val; + song->startUndo(); + song->undoOp(UndoOp::AddCtrl, track, id, time, val, CVal()); + sendMessage(&msg, false); + song->endUndo(0); + } + +//--------------------------------------------------------- +// msgRemoveController +//--------------------------------------------------------- + +void Audio::msgRemoveController(Track* track, int id, unsigned time) + { + AudioMsg msg; + msg.id = SEQM_REMOVE_CTRL; + msg.track = track; + msg.a = id; + msg.time = time; + song->startUndo(); + CVal a, b; + song->undoOp(UndoOp::RemoveCtrl, track, id, time, a, b); + sendMessage(&msg, false); + song->endUndo(0); + } + +//--------------------------------------------------------- +// msgSetRtc +//--------------------------------------------------------- + +void Audio::msgSetRtc() + { + AudioMsg msg; + msg.id = MS_SET_RTC; + sendMsg(&msg); + } + diff --git a/attic/muse_qt4_evolution/muse/shortcuts.cpp b/attic/muse_qt4_evolution/muse/shortcuts.cpp new file mode 100644 index 00000000..9a0d6a7f --- /dev/null +++ b/attic/muse_qt4_evolution/muse/shortcuts.cpp @@ -0,0 +1,1169 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Description: +// Definition of shortcuts used in the application +// +// Copyright (C) 2003 Mathias Lundgren +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "shortcuts.h" +#include "widgets/shortcutconfig.h" +#include "al/xml.h" +#include "muse.h" +#include "gui.h" + +//--------------------------------------------------------- +// shortcut_category +// These need to be members of ShortcutConfig, otherwise +// tr() won't play: +//--------------------------------------------------------- + +const shortcut_cg ShortcutConfig::shortcut_category[] = { + { GLOBAL_SHRT, QT_TR_NOOP("Global") }, + { ARRANG_SHRT, QT_TR_NOOP("Arranger") }, + { PROLL_SHRT, QT_TR_NOOP("Pianoroll") }, + { DEDIT_SHRT, QT_TR_NOOP("Drumeditor") }, + { LEDIT_SHRT, QT_TR_NOOP("List editor") }, + { LMEDIT_SHRT, QT_TR_NOOP("List Mastertrack") }, + { WAVE_SHRT, QT_TR_NOOP("Wave editor") }, + { ALL_SHRT , QT_TR_NOOP("All categories") } + }; + +QMap shortcuts; + +Shortcut MuseApplication::sc[] = { + Shortcut( + "start", + QT_TR_NOOP("Transport: Goto Start"), + GLOBAL_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("Goto Start"), + QT_TR_NOOP("rewind to start position"), + ":/xpm/start.xpm" + ), + Shortcut( + "toggle_loop", + QT_TR_NOOP("Transport: Toggle Loop section"), + GLOBAL_SHRT, + 0, // QKeySequence(Qt::Key_Slash), + Qt::WindowShortcut, + QT_TR_NOOP("Loop"), + QT_TR_NOOP("loop between left mark and right mark"), + ":/xpm/loop.xpm" + ), + Shortcut( + "play", + QT_TR_NOOP("Transport: Start playback from current location"), + GLOBAL_SHRT, + QKeySequence(Qt::Key_Enter), + Qt::WindowShortcut, + QT_TR_NOOP("Play"), + QT_TR_NOOP("start sequencer play"), + ":/xpm/play.xpm" + ), + Shortcut( + "play_toggle", + QT_TR_NOOP("Transport: Play, Stop"), + GLOBAL_SHRT, + Qt::Key_Space, + Qt::ApplicationShortcut + ), + Shortcut( + "stop", + QT_TR_NOOP("Transport: Stop Playback"), + GLOBAL_SHRT, + Qt::Key_Insert, + Qt::WindowShortcut, + QT_TR_NOOP("Stop"), + QT_TR_NOOP("stop sequencer"), + ":/xpm/stop.xpm" + ), + Shortcut( + "goto_left", + QT_TR_NOOP("Transport: Goto left marker"), + GLOBAL_SHRT, + Qt::Key_End + ), + Shortcut( + "goto_right", + QT_TR_NOOP("Transport: Goto right marker"), + GLOBAL_SHRT, + Qt::Key_PageDown + ), + Shortcut( + "toggle_metro", + QT_TR_NOOP("Transport: Toggle metronome"), + GLOBAL_SHRT, + QKeySequence(Qt::Key_C) + ), + Shortcut( + "toggle_rec", + QT_TR_NOOP("Transport: Toggle Record"), + GLOBAL_SHRT, + Qt::Key_Asterisk, + Qt::WindowShortcut, + QT_TR_NOOP("Record"), + QT_TR_NOOP("to record press record and then play"), + ":/xpm/recordOn.svg", + ":/xpm/recordOff.svg" + ), + Shortcut( + "punchin", + QT_TR_NOOP("Transport: Punch In"), + GLOBAL_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("Punchin"), + QT_TR_NOOP("record starts at left mark"), + ":/xpm/punchin.xpm" + ), + Shortcut( + "punchout", + QT_TR_NOOP("Transport: Punch Out"), + GLOBAL_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("Punchout"), + QT_TR_NOOP("record stops at right mark"), + ":/xpm/punchout.xpm" + ), + Shortcut( + "rewind", + QT_TR_NOOP("Transport: Rewind"), + GLOBAL_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("rewind"), + QT_TR_NOOP("rewind current position"), + ":/xpm/frewind.xpm" + ), + Shortcut( + "forward", + QT_TR_NOOP("Transport: Forward"), + GLOBAL_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("forward"), + QT_TR_NOOP("move current position"), + ":/xpm/fforward.xpm" + ), + Shortcut( + "panic", + QT_TR_NOOP("Panic"), + GLOBAL_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("Panic"), + QT_TR_NOOP("send note off to all midi channels"), + ":/xpm/panic.xpm" + ), + Shortcut( + "undo", + QT_TR_NOOP("Edit: Undo"), + INVIS_SHRT, + Qt::CTRL + Qt::Key_Z, + Qt::WindowShortcut, + QT_TR_NOOP("undo"), + QT_TR_NOOP("undo last change to song"), + ":/xpm/undo.xpm" + ), + Shortcut( + "redo", + QT_TR_NOOP("Edit: Redo"), + INVIS_SHRT, + Qt::CTRL + Qt::Key_Y, + Qt::WindowShortcut, + QT_TR_NOOP("redo"), + QT_TR_NOOP("redo last undo"), + ":/xpm/redo.xpm" + ), + Shortcut( + "cut", + QT_TR_NOOP("Edit: Cut" ), + INVIS_SHRT, + Qt::CTRL + Qt::Key_X, + Qt::WindowShortcut, + QT_TR_NOOP("Cut"), + QT_TR_NOOP("Cut"), + ":/xpm/editcut.xpm" + ), + Shortcut( + "copy", + QT_TR_NOOP("Edit: Copy"), + INVIS_SHRT, + Qt::CTRL + Qt::Key_C, + Qt::WindowShortcut, + QT_TR_NOOP("Copy"), + QT_TR_NOOP("Copy"), + ":/xpm/editcopy.xpm" + ), + Shortcut( + "paste", + QT_TR_NOOP("Edit: Paste,"), + INVIS_SHRT, + Qt::CTRL + Qt::Key_V, + Qt::WindowShortcut, + QT_TR_NOOP("Paste"), + QT_TR_NOOP("Paste"), + ":/xpm/editpaste.xpm" + ), + Shortcut( + "delete", + QT_TR_NOOP("Edit: Delete" ), + INVIS_SHRT, + Qt::Key_Delete, + Qt::WindowShortcut, + QT_TR_NOOP("Delete"), + QT_TR_NOOP("Delete"), + ":/xpm/delete.png" + ), + Shortcut( + "open_project", + QT_TR_NOOP("Open"), + ARRANG_SHRT + DEDIT_SHRT, + Qt::CTRL + Qt::Key_O, + Qt::WindowShortcut, + QT_TR_NOOP("open project"), + QT_TR_NOOP("Click this button to select a new project\n" + "You can also select the Open command from the Project menu."), + ":/xpm/fileopen.png" + ), + Shortcut( + "save_project", + QT_TR_NOOP("Save"), + ARRANG_SHRT + DEDIT_SHRT, + Qt::CTRL + Qt::Key_S, + Qt::WindowShortcut, + QT_TR_NOOP("save project"), + QT_TR_NOOP("Click this button to save the project you are editing.\n" + "You can also select the Save command from the Project menu."), + ":/xpm/filesave.png" + ), + Shortcut( + "save_project_as", + QT_TR_NOOP("File: Save as"), + ARRANG_SHRT + DEDIT_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("save project as..."), + QT_TR_NOOP("Click this button to save a new copy of the project.\n" + ), ":/xpm/filesave.png" + ), + Shortcut( + "save_as_template", + QT_TR_NOOP("File: Save as Template"), + ARRANG_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("save project as template"), + QT_TR_NOOP("Click this button to save the project you are editing\n" + "for later use as a template."), + ":/xpm/filesave.png" + ), + Shortcut( + "open_recent", + QT_TR_NOOP("File: Open recent file"), + ARRANG_SHRT, + Qt::CTRL + Qt::Key_1 + ), + Shortcut( + "import_midi", + QT_TR_NOOP("File: Import midi file"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "export_midi", + QT_TR_NOOP("File: Export midi file"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "import_audio", + QT_TR_NOOP("File: Import audio file"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "quit", + QT_TR_NOOP("File: Quit MusE"), + ARRANG_SHRT, + Qt::CTRL + Qt::Key_Q, + Qt::WindowShortcut, + QT_TR_NOOP("Quit MusE"), + QT_TR_NOOP("Quit MusE"), + ":/xpm/on.svg", + ":/xpm/off.svg" + ), + Shortcut( + "select_parts_on_track", + QT_TR_NOOP("Edit: Select parts on track"), + ARRANG_SHRT, + Qt::CTRL+ Qt::ALT + Qt::Key_P, + Qt::WindowShortcut, + QT_TR_NOOP("All &Parts on Track"), + QT_TR_NOOP("All &Parts on Track"), + ":/xpm/select_all_parts_on_track.xpm" + ), + Shortcut( + "open_pianoroll", + QT_TR_NOOP("Open Pianoroll"), + ARRANG_SHRT, + Qt::CTRL + Qt::Key_E, + Qt::WindowShortcut, + QT_TR_NOOP("Pianoroll"), + QT_TR_NOOP("Start Pianoroll Editor"), + ":/xpm/piano.xpm" + ), + Shortcut( + "open_miditracker", + QT_TR_NOOP("Open MidiTracker"), + ARRANG_SHRT, + Qt::CTRL + Qt::Key_K, + Qt::WindowShortcut, + QT_TR_NOOP("MidiTracker"), + QT_TR_NOOP("Start Midi Tracker"), + ":/xpm/piano.xpm" + ), + Shortcut( + "open_drumedit", + QT_TR_NOOP("Open drumeditor"), + ARRANG_SHRT, + Qt::CTRL + Qt::Key_D, + Qt::WindowShortcut, + QT_TR_NOOP("Drum Editor"), + QT_TR_NOOP("Start Drum Editor"), + ":/xpm/edit_drumms.xpm" + ), + Shortcut( + "open_waveedit", + QT_TR_NOOP("Open wave editor"), + ARRANG_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("Wave Editor"), + QT_TR_NOOP("Wave Editor"), + ":/xpm/wave.xpm" + ), + Shortcut( + "listedit", + QT_TR_NOOP("Open listeditor"), + ARRANG_SHRT, + Qt::CTRL + Qt::Key_L, + Qt::WindowShortcut, + QT_TR_NOOP("Properties"), + QT_TR_NOOP("open Properties Editor"), + ":/xmp/edit_list.xpm" + ), + Shortcut( + "open_master", + QT_TR_NOOP("Open mastertrack editor"), + ARRANG_SHRT, + Qt::CTRL + Qt::Key_M, + Qt::WindowShortcut, + QT_TR_NOOP("Mastertrack (Tempo) Editor"), + QT_TR_NOOP("Start Mastertrack (Tempo) Editor"), + ":/xpm/edit_mastertrack.xpm" + ), + Shortcut( + "add_midi_track", + QT_TR_NOOP("Add midi track"), + ARRANG_SHRT, + Qt::CTRL + Qt::Key_J + ), + Shortcut( + "add_drum_track", + QT_TR_NOOP("Add drum track"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "add_wave_track", + QT_TR_NOOP("Add wave track"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "add_audio_output", + QT_TR_NOOP("Add audio output"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "add_audio_group", + QT_TR_NOOP("Add audio group"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "add_audio_input", + QT_TR_NOOP("Add audio input"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "global_cut", + QT_TR_NOOP("Structure: Global cut"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "global_insert", + QT_TR_NOOP("Structure: Global insert"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "global_split", + QT_TR_NOOP("Structure: Global split"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "copy_range", + QT_TR_NOOP("Structure: Copy range"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "cut_events", + QT_TR_NOOP("Structure: Cut events"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "toggle_mixer1", + QT_TR_NOOP("View: Open mixer 1 window"), + ARRANG_SHRT, + Qt::Key_F10, + Qt::ApplicationShortcut, + QT_TR_NOOP("Mixer1"), + QT_TR_NOOP("Show Mixer 1"), + ":/xpm/view_mixer.xpm" + ), + Shortcut( + "toggle_mixer2", + QT_TR_NOOP("View: Open mixer 2 window"), + ARRANG_SHRT, + 0, + Qt::ApplicationShortcut, + QT_TR_NOOP("Mixer2"), + QT_TR_NOOP("Show Mixer 2"), + ":/xpm/view_mixer.xpm" + ), + Shortcut( + "toggle_transport", + QT_TR_NOOP("View: Toggle transport window"), + ARRANG_SHRT, + Qt::Key_F11, + Qt::ApplicationShortcut, + QT_TR_NOOP("Transport"), + QT_TR_NOOP("Show Transport Window"), + ":/xpm/view_transport_window.xpm" + ), + Shortcut( + "toggle_bigtime", + QT_TR_NOOP("View: Toggle bigtime window"), + ARRANG_SHRT, + Qt::Key_F12, + Qt::ApplicationShortcut, + QT_TR_NOOP("BigTime"), + QT_TR_NOOP("Show BigTime Window"), + ":/xpm/view_bigtime_window.xpm" + ), + Shortcut( + "marker_window", + QT_TR_NOOP("View: Open marker window"), + ARRANG_SHRT, + Qt::Key_F9, + Qt::ApplicationShortcut, + QT_TR_NOOP("Marker"), + QT_TR_NOOP("Show Marker List"), + ":/xpm/view_marker.xpm" + ), + Shortcut( + "follow_jump", + QT_TR_NOOP("Settings: Follow song by page"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "follow_no", + QT_TR_NOOP("Settings: Follow song off"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "follow_continuous", + QT_TR_NOOP("Settings: Follow song continuous"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "configure_shortcuts", + QT_TR_NOOP("Settings: Configure shortcuts"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "configure_metronome", + QT_TR_NOOP("Settings: Configure metronome"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "configure_midi_sync", + QT_TR_NOOP("Settings: Midi sync configuration"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "configure_midi_file", + QT_TR_NOOP("Settings: Midi file export configuration"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "configure_midi_ports", + QT_TR_NOOP("Settings: Midi ports / Soft Synth"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "configure_audio_ports", + QT_TR_NOOP("Settings: Audio subsystem configuration"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "midi_edit_instruments", + QT_TR_NOOP("Midi: Edit midi instruments"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "midi_remote_control", + QT_TR_NOOP("Midi: Midi remote control"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "midi_reset", + QT_TR_NOOP("Midi: Reset midi"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "midi_init", + QT_TR_NOOP("Midi: Init midi"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "midi_local_off", + QT_TR_NOOP("Midi: Midi local off"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "audio_bounce_to_track", + QT_TR_NOOP("Audio: Bounce audio to track"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "audio_bounce_to_file", + QT_TR_NOOP("Audio: Bounce audio to file"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "audio_restart", + QT_TR_NOOP("Audio: Restart audio"), + ARRANG_SHRT, + 0 + ), + Shortcut( + "open_help", + QT_TR_NOOP("Help: Open Manual"), + ARRANG_SHRT, + Qt::Key_F1 + ), + Shortcut( + "toggle_whatsthis", + QT_TR_NOOP("Help: Toggle whatsthis mode"), + ARRANG_SHRT, + Qt::SHIFT + Qt::Key_F1 + ), + Shortcut( + "edit_selected_part", + QT_TR_NOOP("Edit: Edit selected part"), + ARRANG_SHRT, + Qt::Key_Return + ), + Shortcut( + "sel_part_above", + QT_TR_NOOP("Edit: Select nearest part on track above"), + ARRANG_SHRT, + Qt::Key_Up + ), + Shortcut( + "sel_part_above_add", + QT_TR_NOOP("Edit: Add nearest part on track above"), + ARRANG_SHRT, + Qt::SHIFT + Qt::Key_Up + ), + Shortcut( + "sel_part_below", + QT_TR_NOOP("Edit: Select nearest part on track below"), + ARRANG_SHRT, + Qt::Key_Down + ), + Shortcut( + "sel_part_below_add", + QT_TR_NOOP("Edit: Add nearest part on track below"), + ARRANG_SHRT, + Qt::SHIFT + Qt::Key_Down + ), + Shortcut( + "midi_transpose", + QT_TR_NOOP("Midi: Transpose"), + ARRANG_SHRT + PROLL_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("Transpose") + ), + Shortcut( + "sel_all", + QT_TR_NOOP("Edit: Select all"), + ARRANG_SHRT + PROLL_SHRT + DEDIT_SHRT, + Qt::CTRL + Qt::Key_A, + Qt::WindowShortcut, + QT_TR_NOOP("Select All"), + QT_TR_NOOP("Select All"), + ":/xpm/select_all.xpm" + ), + Shortcut( + "sel_none", + QT_TR_NOOP("Edit: Select none"), + ARRANG_SHRT + PROLL_SHRT + DEDIT_SHRT, + Qt::CTRL + Qt::SHIFT + Qt::Key_A, + Qt::WindowShortcut, + QT_TR_NOOP("Deselect All"), + QT_TR_NOOP("Deselect All"), + ":/xpm/select_deselect_all.xpm" + ), + Shortcut( + "sel_inv", + QT_TR_NOOP("Edit: Invert selection"), + ARRANG_SHRT + PROLL_SHRT + DEDIT_SHRT, + Qt::CTRL + Qt::Key_I, + Qt::WindowShortcut, + QT_TR_NOOP("Invert Selection"), + QT_TR_NOOP("Invert Selection"), + ":/xpm/select_invert_selection.xpm" + ), + Shortcut( + "sel_ins_loc", + QT_TR_NOOP("Edit: Select events/parts inside locators"), + ARRANG_SHRT + PROLL_SHRT + DEDIT_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("Select Inside Loop"), + QT_TR_NOOP("Select Inside Loop"), + ":/xpm/select_inside_loop.xpm" + ), + Shortcut( + "sel_out_loc", + QT_TR_NOOP("Edit: Select events/parts outside locators"), + ARRANG_SHRT + PROLL_SHRT + DEDIT_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("Select Outside Loop"), + QT_TR_NOOP("Select Outside Loop"), + ":/xpm/select_outside_loop.xpm" + ), + Shortcut( + "sel_left", + QT_TR_NOOP("Edit: Select nearest part/event to the left"), + ARRANG_SHRT + PROLL_SHRT + DEDIT_SHRT, + Qt::Key_Left + ), + Shortcut( + "sel_left_add", + QT_TR_NOOP("Edit: Add nearest part/event to the left to selection"), + PROLL_SHRT + DEDIT_SHRT, + Qt::Key_Left + Qt::SHIFT + ), + Shortcut( + "sel_right", + QT_TR_NOOP("Edit: Select nearest part/event to the left"), + ARRANG_SHRT + PROLL_SHRT + DEDIT_SHRT, + Qt::Key_Right + ), + Shortcut( + "sel_right_add", + QT_TR_NOOP("Edit: Add nearest part/event to the right to selection"), + PROLL_SHRT + DEDIT_SHRT, + Qt::Key_Right + Qt::SHIFT + ), + Shortcut( + "loc_to_sel", + QT_TR_NOOP("Edit: Set locators to selection"), + ARRANG_SHRT + PROLL_SHRT + DEDIT_SHRT, + Qt::ALT + Qt::Key_P + ), + Shortcut( + "sel_inc_pitch", + QT_TR_NOOP("Edit: Increase pitch"), + PROLL_SHRT + DEDIT_SHRT, + Qt::CTRL + Qt::Key_Up + ), + Shortcut( + "sel_dec_pitch", + QT_TR_NOOP("Edit: Decrease pitch"), + PROLL_SHRT + DEDIT_SHRT, + Qt::CTRL + Qt::Key_Down + ), + Shortcut( + "midi_fixed_len", + QT_TR_NOOP("Edit: Set fixed length on midi events"), + DEDIT_SHRT, + Qt::ALT + Qt::Key_L, + Qt::WindowShortcut, + QT_TR_NOOP("Set fixed length") + ), + Shortcut( + "midi_over_quant", + QT_TR_NOOP("Quantize: Over Quantize"), + PROLL_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("Over Quantize") + ), + Shortcut( + "midi_quant_noteon", + QT_TR_NOOP("Quantize: Note On Quantize"), + PROLL_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("Note On Quantize") + ), + Shortcut( + "midi_quant_noteoff", + QT_TR_NOOP("Quantize: Note On/Off Quantize"), + PROLL_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("Note On/Off Quantize") + ), + Shortcut( + "midi_quant_iterative", + QT_TR_NOOP("Quantize: Iterative Quantize"), + PROLL_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("Iterative Quantize") + ), + Shortcut( + "config_quant", + QT_TR_NOOP("Quantize: Configure quant"), + PROLL_SHRT, + Qt::CTRL + Qt::ALT + Qt::Key_Q + ), + Shortcut( + "midi_mod_gate_time", + QT_TR_NOOP("Quantize: Modify Gate Time"), + PROLL_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("Modify Gate Time") + ), + Shortcut( + "midi_mod_velo", + QT_TR_NOOP("Quantize: Modify Velocity"), + PROLL_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("Modify Velocity") + ), + Shortcut( + "midi_crescendo", + QT_TR_NOOP("Edit: Crescendo"), + PROLL_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("Crescendo") + ), + Shortcut( + "midi_thin_out", + QT_TR_NOOP("Edit: Thin Out"), + PROLL_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("Thin Out") + ), + Shortcut( + "midi_erase_event", + QT_TR_NOOP("Edit: Erase Event"), + PROLL_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("Erase Event") + ), + Shortcut( + "midi_note_shift", + QT_TR_NOOP("Edit: Note Shift"), + PROLL_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("Note Shift") + ), + Shortcut( + "midi_move_clock", + QT_TR_NOOP("Edit: Move Clock"), + PROLL_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("Move Clock") + ), + Shortcut( + "midi_copy_measure", + QT_TR_NOOP("Edit: Copy Measure"), + PROLL_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("Copy Measure") + ), + Shortcut( + "midi_erase_measure", + QT_TR_NOOP("Edit: Erase Measure"), + PROLL_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("Erase Measure") + ), + Shortcut( + "midi_delete_measure", + QT_TR_NOOP("Edit: Delete Measure"), + PROLL_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("Delete Measure") + ), + Shortcut( + "midi_create_measure", + QT_TR_NOOP("Edit: Create Measure"), + PROLL_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("Create Measure") + ), + Shortcut( + "change_event_color", + QT_TR_NOOP("Edit: Change event color"), + PROLL_SHRT, + Qt::Key_E + ), + Shortcut( + "pointer", + QT_TR_NOOP("Tool: Pointer"), + ARRANG_SHRT + PROLL_SHRT + DEDIT_SHRT, + Qt::Key_A, + Qt::WindowShortcut, + QT_TR_NOOP("Pointer"), + QT_TR_NOOP("select Pointer Tool:\n" + "with the pointer tool you can:\n" + " select parts\n" + " move parts\n" + " copy parts"), + ":/xpm/pointer.xpm" + ), + Shortcut( + "pencil", + QT_TR_NOOP("Tool: Pencil"), + ARRANG_SHRT + PROLL_SHRT + DEDIT_SHRT, + Qt::Key_D, + Qt::WindowShortcut, + QT_TR_NOOP("Pencil"), + QT_TR_NOOP("select Pencil Tool:\n" + "with the pencil tool you can:\n" + " create new parts\n" + " modify length of parts"), + ":/xpm/pencil.xpm" + ), + Shortcut( + "eraser", + QT_TR_NOOP("Tool: Eraser"), + ARRANG_SHRT + PROLL_SHRT + DEDIT_SHRT, + Qt::Key_R, + Qt::WindowShortcut, + QT_TR_NOOP("Eraser"), + QT_TR_NOOP("select Delete Tool:\n" + "with the delete tool you can delete parts"), + ":/xpm/delete.xpm" + ), + Shortcut( + "scissor", + QT_TR_NOOP("Tool: Scissor"), + ARRANG_SHRT, + Qt::Key_S, + Qt::WindowShortcut, + QT_TR_NOOP("Scissor"), + QT_TR_NOOP("select Cut Tool:\n" + "with the cut tool you can split a part"), + ":/xpm/cut.xpm" + ), + Shortcut( + "glue", + QT_TR_NOOP("Tool: Glue"), + ARRANG_SHRT, + Qt::Key_G, + Qt::WindowShortcut, + QT_TR_NOOP("Glue"), + QT_TR_NOOP("select Glue Tool:\n" + "with the glue tool you can glue two parts"), + ":/xpm/glue.xpm" + ), + Shortcut( + "declone", + QT_TR_NOOP("Declone"), + ARRANG_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("Declone") + ), + Shortcut( + "quantize", + QT_TR_NOOP("Tool: Quantize"), + ARRANG_SHRT, + Qt::Key_G, + Qt::WindowShortcut, + QT_TR_NOOP("Quantize"), + QT_TR_NOOP("select Quantize Tool:\n" + "insert display quantize event"), + ":/xpm/quant.xpm" + ), + Shortcut( + "draw", + QT_TR_NOOP("Tool: Line Draw"), + PROLL_SHRT + DEDIT_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("Draw"), + QT_TR_NOOP("select Drawing Tool"), + ":/xpm/draw.xpm" + ), + Shortcut( + "mute_parts", + QT_TR_NOOP("Tool: Mute Parts"), + ARRANG_SHRT, + 0, + Qt::WindowShortcut, + QT_TR_NOOP("Mute"), + QT_TR_NOOP("select Muting Tool:\n" + "click on part to mute/unmute"), + ":/xpm/editmute.xpm" + ), + + Shortcut( + "curpos_increase", + QT_TR_NOOP("Transport: Increase current position"), + GLOBAL_SHRT, + Qt::Key_Plus + ), + Shortcut( + "curpos_decrease", + QT_TR_NOOP("Transport: Decrease current position"), + GLOBAL_SHRT, + Qt::Key_Minus + ), + Shortcut( + "midi_quant_1", + QT_TR_NOOP("Quantize: Set quantize to 1/1 note"), + PROLL_SHRT, + Qt::Key_1 + ), + Shortcut( + "midi_quant_2", + QT_TR_NOOP("Quantize: Set quantize to 1/2 note"), + PROLL_SHRT, + Qt::Key_2 + ), + Shortcut( + "midi_quant_3", + QT_TR_NOOP("Quantize: Set quantize to 1/4 note"), + PROLL_SHRT, + Qt::Key_3 + ), + Shortcut( + "midi_quant_4", + QT_TR_NOOP("Quantize: Set quantize to 1/8 note"), + PROLL_SHRT, + Qt::Key_4 + ), + Shortcut( + "midi_quant_5", + QT_TR_NOOP("Quantize: Set quantize to 1/16 note"), + PROLL_SHRT, + Qt::Key_5 + ), + Shortcut( + "midi_quant_6", + QT_TR_NOOP("Quantize: Set quantize to 1/32 note"), + PROLL_SHRT, + Qt::Key_6 + ), + Shortcut( + "midi_quant_7", + QT_TR_NOOP("Quantize: Set quantize to 1/64 note"), + PROLL_SHRT, + Qt::Key_7 + ), + Shortcut( + "midi_quant_triol", + QT_TR_NOOP("Quantize: Toggle triol quantization"), + PROLL_SHRT, + Qt::Key_T + ), + Shortcut( + "midi_quant_punct", + QT_TR_NOOP("Quantize: Toggle punctuation quantization"), + PROLL_SHRT, + Qt::Key_Period + ), + Shortcut( + "midi_quant_punct2", + QT_TR_NOOP("Quantize: Toggle punctuation quantization (2)"), + PROLL_SHRT, + Qt::Key_Comma + ), + Shortcut( + "midi_insert_at_loc", + QT_TR_NOOP("Insert"), + PROLL_SHRT, + Qt::SHIFT + Qt::Key_Right + ), + Shortcut( + "lm_ins_tempo", + QT_TR_NOOP("Insert Tempo"), + LMEDIT_SHRT, + Qt::CTRL + Qt::Key_T + ), + Shortcut( + "lm_ins_sig", + QT_TR_NOOP("Insert Signature"), + LMEDIT_SHRT, + Qt::CTRL + Qt::Key_R + ), + Shortcut( + "lm_edit_beat", + QT_TR_NOOP("Change Event Position"), + LMEDIT_SHRT, + Qt::CTRL + Qt::SHIFT + Qt::Key_E + ), + Shortcut( + "lm_edit_val", + QT_TR_NOOP("Edit Event Value"), + LMEDIT_SHRT, + Qt::CTRL + Qt::Key_E + ), + Shortcut(0, 0, 0, 0 ), + }; + +KeyboardMovementIndicator shortcutsKbdMovement; //for keeping track of active part selected by kbd + +//--------------------------------------------------------- +// writeShortCuts +//--------------------------------------------------------- + +void writeShortCuts(Xml& xml) + { + xml.stag("shortcuts"); + foreach(Shortcut* s, shortcuts) { + // + // save only if different from default + // + for (unsigned i = 0;; ++i) { + if (MuseApplication::sc[i].xml == s->xml) { + if (MuseApplication::sc[i].key != s->key) + xml.tag(s->xml, s->key.toString(QKeySequence::PortableText)); + break; + } + } + } + xml.etag("shortcuts"); + } + +//--------------------------------------------------------- +// readShortCuts +//--------------------------------------------------------- + +void readShortCuts(QDomNode node) + { + for (;!node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + Shortcut* s = shortcuts.value(e.tagName()); + if (s) + s->key = QKeySequence::fromString(e.text(), QKeySequence::PortableText); + else + printf("MusE:readShortCuts: unknown tag <%s>\n", e.tagName().toLatin1().data()); + } + } + +//--------------------------------------------------------- +// getAction +// returns action for shortcut +//--------------------------------------------------------- + +QAction* getAction(const char* id, QObject* parent) + { + Shortcut* s = shortcuts.value(id); + if (s == 0) { + printf("interanl error: shortcut <%s> not found\n", id); + return 0; + } + if (s->action == 0 || (s->action->parent() != parent)) { + s->action = new QAction(s->xml, parent); + s->action->setData(s->xml); + s->action->setShortcut(s->key); + s->action->setShortcutContext(s->context); + if (s->help) { + s->action->setToolTip(s->help); + s->action->setWhatsThis(s->help); + } + else { + s->action->setToolTip(s->descr); + s->action->setWhatsThis(s->descr); + } + if (s->text) + s->action->setText(s->text); + if (s->iconOn) { + QIcon icon; + icon.addFile(s->iconOn, ICON_SIZE, QIcon::Normal, QIcon::On); + if (s->iconOff) + icon.addFile(s->iconOff, ICON_SIZE, QIcon::Normal, QIcon::Off); + s->action->setIcon(icon); + } + } +// else +// printf("action <%s> already initialized\n", s->xml); + return s->action; + } + diff --git a/attic/muse_qt4_evolution/muse/shortcuts.h b/attic/muse_qt4_evolution/muse/shortcuts.h new file mode 100644 index 00000000..d66650e8 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/shortcuts.h @@ -0,0 +1,135 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2003 Mathias Lundgren +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __SHORTCUTS_H__ +#define __SHORTCUTS_H__ + +class Part; +class Track; +namespace AL { + class Xml; + }; +using AL::Xml; + +// +// Shortcut categories +// +#define PROLL_SHRT 1 // Pianoroll shortcut +#define DEDIT_SHRT 2 // Drumedit shortcut +#define LEDIT_SHRT 4 // Listedit shortcut +#define SCORE_SHRT 8 // Score shortcut +#define ARRANG_SHRT 16 // Arrenger shortcut +#define TRANSP_SHRT 32 // Transport shortcut +#define WAVE_SHRT 64 // Waveedit shortcut +#define GLOBAL_SHRT 128 // Global shortcuts +#define LMEDIT_SHRT 256 // List masteredit +#define MEDIT_SHRT 512 // Master editor +#define ALL_SHRT 1023 // All shortcuts +#define INVIS_SHRT 1024 // Shortcuts not shown in the config-dialog. Hard-coded. To avoid conflicts + +#define SHRT_NUM_OF_CATEGORIES 7 //Number of shortcut categories + +//--------------------------------------------------------- +// shortcut +//! Holds the basic values for a configurable shortcut +//--------------------------------------------------------- + +struct Shortcut + { + const char* xml; /*! xml tag name for configuration file */ + const char* descr; /*! Description of the shortcut, shown in editor */ + int type; /*! Bitmask category value mapped against + PROLL_SHRT, DEDIT_SHRT etc. One shortcut can + be a member of many categories */ + QKeySequence key; /*! shortcut key */ + Qt::ShortcutContext context; + const char* text; /*! action help */ + const char* help; + const char* iconOn; + const char* iconOff; + QAction* action; /*! cached action, can be updated if user changes + shortcut key sequence */ + + Shortcut() { + xml = 0; + descr = 0; + type = 0; + key = 0; + context = Qt::WindowShortcut; + text = 0; + help = 0; + iconOn = 0; + iconOff = 0; + action = 0; + } + Shortcut(const char* name, const char* d, int t, const QKeySequence& k, + Qt::ShortcutContext cont = Qt::WindowShortcut, + const char* txt=0, const char* h=0, const char* ic1=0, const char* ic2=0) + : xml(name), descr(d), type(t), key(k), context(cont), text(txt), help(h), + iconOn(ic1), iconOff(ic2) { + action = 0; + } + }; + +//! Describes a shortcut category +struct shortcut_cg + { + int id_flag; /*! The category (one of PROLL_SHRT, DEDIT_SHRT etc) */ + const char* name; /*! Name (shown in editor) */ + }; + +//------------------------------------------------------------------------------------------------ +// KeyboardMovementIndicator +//! Used by Arranger to keep track of which Part is currently active when navigating with keys +//------------------------------------------------------------------------------------------------ + +class KeyboardMovementIndicator { + //! Left position of the active part, in ticks + unsigned lpos; + //! Right position of the active part, in ticks + unsigned rpos; + //! Last selected part (the active part) + Part* lastSelectedPart; + //! Track the last selected part belongs to + Track* lastSelectedTrack; + + public: + KeyboardMovementIndicator() + { reset(); } + + void setPos(int l, int r) { lpos = l; rpos = r; } + void setPart(Part* p) { lastSelectedPart = p; } + void setTrack(Track* t) { lastSelectedTrack = t; } + unsigned getLpos() { return lpos; } + unsigned getRpos() { return rpos; } + Part* part() { return lastSelectedPart; } + Track* track() { return lastSelectedTrack; } + //! Resets the values (equals to no active part) + void reset() { lpos = 0; rpos = 0; lastSelectedPart = 0; lastSelectedTrack = 0; } + //! Checks if there is any active part + bool isValid() { return (lastSelectedPart && lastSelectedTrack); } + }; + +extern KeyboardMovementIndicator shortcutsKbdMovement; +extern void writeShortCuts(Xml& xml); +extern void readShortCuts(QDomNode); +extern QAction* getAction(const char*, QObject* parent); +extern QMap shortcuts; +#endif diff --git a/attic/muse_qt4_evolution/muse/song.cpp b/attic/muse_qt4_evolution/muse/song.cpp new file mode 100644 index 00000000..a1f3bff0 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/song.cpp @@ -0,0 +1,1552 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "muse.h" +#include "song.h" +#include "track.h" +#include "undo.h" +#include "globals.h" +#include "event.h" +#include "midiedit/drummap.h" +#include "audio.h" +#include "mixer.h" +#include "audiodev.h" +#include "gconfig.h" +#include "al/marker.h" +#include "al/sig.h" +#include "al/tempo.h" +#include "midi.h" +#include "plugin.h" +#include "pipeline.h" +#include "synth.h" +#include "midiplugin.h" +#include "midirc.h" +#include "part.h" +#include "conf.h" +#include "midioutport.h" +#include "midiinport.h" +#include "instruments/minstrument.h" + +Song* song; + +//--------------------------------------------------------- +// Song +//--------------------------------------------------------- + +Song::Song() + :QObject(0) + { + undoList = new UndoList; + redoList = new UndoList; + _markerList = new AL::MarkerList; + _globalPitchShift = 0; + clear(false); + } + +//--------------------------------------------------------- +// Song +//--------------------------------------------------------- + +Song::~Song() + { + delete undoList; + delete redoList; + delete _markerList; +// delete esettingsList; + } + +//--------------------------------------------------------- +// putEvent +//--------------------------------------------------------- + +void Song::putEvent(const MidiEvent& event) + { + eventFifo.put(event); + } + +//--------------------------------------------------------- +// setTempo +// public slot +//--------------------------------------------------------- + +void Song::setTempo(int newTempo) + { + audio->msgSetTempo(pos[0].tick(), newTempo, true); + } + +//--------------------------------------------------------- +// setSig +// called from transport window +//--------------------------------------------------------- + +void Song::setSig(const AL::TimeSignature& sig) + { + if (_masterFlag) { + audio->msgAddSig(pos[0].tick(), sig); + } + } + +//--------------------------------------------------------- +// addEvent +// return true if event was added +//--------------------------------------------------------- + +bool Song::addEvent(const Event& event, Part* part) + { + if (event.type() == Controller) { + MidiTrack* track = (MidiTrack*)part->track(); + int tick = event.tick() + part->tick(); + int cntrl = event.dataA(); + CVal val; + val.i = event.dataB(); + if (!track->addControllerVal(cntrl, tick, val)) { + track->addMidiController(track->instrument(), cntrl); + if (!track->addControllerVal(cntrl, tick, val)) { + return false; + } + } + } + else { + part->events()->add(event); + } + return true; + } + +//--------------------------------------------------------- +// changeEvent +//--------------------------------------------------------- + +void Song::changeEvent(const Event& oldEvent, const Event& newEvent, Part* part) + { + iEvent i = part->events()->find(oldEvent); + if (i == part->events()->end()) { + printf("Song::changeEvent(): EVENT not found !! %ld\n", long(part->events()->size())); + // abort(); + return; + } + part->events()->erase(i); + part->events()->add(newEvent); + + if (newEvent.type() == Controller) { + MidiTrack* track = (MidiTrack*)part->track(); + int tick = newEvent.tick() + part->tick(); + int cntrl = newEvent.dataA(); + CVal val; + val.i = newEvent.dataB(); + track->addControllerVal(cntrl, tick, val); + } + } + +//--------------------------------------------------------- +// deleteEvent +//--------------------------------------------------------- + +void Song::deleteEvent(const Event& event, Part* part) + { +#if 0 //TODO3 + if (event.type() == Controller) { + MidiTrack* track = (MidiTrack*)part->track(); + int ch = track->outChannel(); + int tick = event.tick() + part->tick(); + int cntrl = event.dataA(); + midiPorts[track->outPort()].deleteController(ch, tick, cntrl); + } +#endif + iEvent ev = part->events()->find(event); + if (ev == part->events()->end()) { + printf("event not found in part\n"); + return; + } + part->events()->erase(ev); + } + +//--------------------------------------------------------- +// setLoop +// set transport loop flag +//--------------------------------------------------------- + +void Song::setLoop(bool f) + { + if (loopFlag != f) { + loopFlag = f; + loopAction->setChecked(loopFlag); + emit loopChanged(loopFlag); + } + } + +//--------------------------------------------------------- +// setRecord +// set record flag +//--------------------------------------------------------- + +void Song::setRecord(bool f) + { + if (recordFlag == f) + return; + if (muse->playAction->isChecked()) { + // + // dont allow record state changes when rolling + // + recordAction->setChecked(!f); + return; + } + + if (f) { + bool alreadyRecEnabled = false; + Track *selectedTrack = 0; + + // loop through list and check if any track is rec enabled + // if not then rec enable the selected track + + WaveTrackList* wtl = waves(); + for (iWaveTrack i = wtl->begin(); i != wtl->end(); ++i) { + if ((*i)->recordFlag()) { + alreadyRecEnabled = true; + break; + } + if ((*i)->selected()) + selectedTrack = (*i); + } + if (!alreadyRecEnabled) { + MidiTrackList* mtl = midis(); + for (iMidiTrack it = mtl->begin(); it != mtl->end(); ++it) { + if ((*it)->recordFlag()) { + alreadyRecEnabled = true; + break; + } + if ((*it)->selected()) + selectedTrack = (*it); + } + } + if (!alreadyRecEnabled && selectedTrack) { + // enable recording on selected track: + setRecordFlag(selectedTrack, true); + } + else { + if (!alreadyRecEnabled) { + // If there are no tracks, do not enable record. + // TODO: This forces the user to first enable record on a track + // which probably is a bad thing. Maybe we should warn + // only when the user actually starts recording by pressing + // play. + + QMessageBox::critical(0, "MusE: Record", + "No track(s) enabled for recording"); + f = false; + } + } + } + if (!f) + bounceTrack = 0; + recordAction->setChecked(f); + if (f != recordFlag) { + recordFlag = f; + emit recordChanged(recordFlag); + } + } + +//--------------------------------------------------------- +// setPunchin +// set punchin flag +//--------------------------------------------------------- + +void Song::setPunchin(bool f) + { + if (punchinFlag != f) { + punchinFlag = f; + punchinAction->setChecked(punchinFlag); + emit punchinChanged(punchinFlag); + } + } + +//--------------------------------------------------------- +// setPunchout +// set punchout flag +//--------------------------------------------------------- + +void Song::setPunchout(bool f) + { + if (punchoutFlag != f) { + punchoutFlag = f; + punchoutAction->setChecked(punchoutFlag); + emit punchoutChanged(punchoutFlag); + } + } + +//--------------------------------------------------------- +// setClick +//--------------------------------------------------------- + +void Song::setClick(bool val) + { + if (_click != val) { + _click = val; + emit clickChanged(_click); + } + } + +//--------------------------------------------------------- +// setQuantize +//--------------------------------------------------------- + +void Song::setQuantize(bool val) + { + if (_quantize != val) { + _quantize = val; + emit quantizeChanged(_quantize); + } + } + +//--------------------------------------------------------- +// setMasterFlag +//--------------------------------------------------------- + +void Song::setMasterFlag(bool val) + { + _masterFlag = val; + if (AL::tempomap.setMasterFlag(cpos(), val)) { + emit songChanged(SC_MASTER); + emit tempoChanged(); + } + } + +//--------------------------------------------------------- +// setPlay +// set transport play flag +//--------------------------------------------------------- + +void Song::setPlay(bool f) + { + // only allow the user to set the button "on" + if (!f) { + printf(" setPlay checked\n"); + muse->playAction->setChecked(true); + } + else { + if (recordAction->isChecked()) { + startUndo(); + MidiTrackList* ml = midis(); + for (iMidiTrack it = ml->begin(); it != ml->end(); ++it) { + if ((*it)->recordFlag()) + (*it)->startRecording(); + } + WaveTrackList* wl = waves(); + for (iWaveTrack wt = wl->begin(); wt != wl->end(); ++wt) { + if ((*wt)->recordFlag()) + (*wt)->startRecording(); + } + OutputList* ol = outputs(); + for (iAudioOutput o = ol->begin(); o != ol->end(); ++o) { + if ((*o)->recordFlag()) + (*o)->startRecording(); + } + } + audio->msgPlay(true); + } + } + +//--------------------------------------------------------- +// setStop +//--------------------------------------------------------- + +void Song::setStop(bool f) + { + // only allow the user to set the button "on" + if (f) + audio->msgPlay(false); + else + muse->stopAction->setChecked(true); + } + +//--------------------------------------------------------- +// setStopPlay +//--------------------------------------------------------- + +void Song::setStopPlay(bool f) + { + emit playChanged(f); // signal transport window + muse->playAction->setChecked(f); + muse->stopAction->setChecked(!f); + } + +//--------------------------------------------------------- +// swapTracks +//--------------------------------------------------------- + +void Song::swapTracks(int i1, int i2) + { + undoOp(UndoOp::SwapTrack, i1, i2); + Track* track = _tracks[i1]; + _tracks[i1] = _tracks[i2]; + _tracks[i2] = track; + } + +//--------------------------------------------------------- +// setTickPos +//--------------------------------------------------------- +/* +void Song::setTickPos(int idx, unsigned int tick) + { + Pos pos(tick); + setPos(idx, pos); + } +*/ +//--------------------------------------------------------- +// setPos +// song->setPos(Song::CPOS, pos, true, true, true); +//--------------------------------------------------------- + +void Song::setPos(int idx, const AL::Pos& val) + { + setPos(idx, val, true, true, false); + } + +void Song::setPos(int idx, const Pos& val, bool sig, bool isSeek, bool follow) + { +// printf("setPos %d sig=%d,seek=%d,scroll=%d\n", +// idx, sig, isSeek, follow); +// val.dump(0); +// printf("\n"); + + if (pos[idx] == val) + return; + if (idx == CPOS) { +// _vcpos = val; + if (isSeek) { + seekInProgress = true; + audio->msgSeek(val); + return; + } + } + pos[idx] = val; + bool swap = pos[LPOS] > pos[RPOS]; + if (swap) { // swap lpos/rpos if lpos > rpos + Pos tmp = pos[LPOS]; + pos[LPOS] = pos[RPOS]; + pos[RPOS] = tmp; + } + if (sig) { + if (swap) { + emit posChanged(LPOS, pos[LPOS], follow); + emit posChanged(RPOS, pos[RPOS], follow); + if (idx != LPOS && idx != RPOS) + emit posChanged(idx, pos[idx], follow); + } + else + emit posChanged(idx, pos[idx], follow); + } + + if (idx == CPOS) + updateCurrentMarker(); + } + +//--------------------------------------------------------- +// updateCurrentMarker +//--------------------------------------------------------- + +void Song::updateCurrentMarker() + { + AL::iMarker i1 = _markerList->begin(); + AL::iMarker i2 = i1; + bool currentChanged = false; + Pos& val = pos[CPOS]; + for (; i1 != _markerList->end(); ++i1) { + ++i2; + if (val.tick() >= i1->first && (i2==_markerList->end() || val.tick() < i2->first)) { + if (i1->second.current()) + return; + i1->second.setCurrent(true); + if (currentChanged) { + emit markerChanged(MARKER_CUR); + return; + } + ++i1; + for (; i1 != _markerList->end(); ++i1) { + if (i1->second.current()) + i1->second.setCurrent(false); + } + emit markerChanged(MARKER_CUR); + return; + } + else { + if (i1->second.current()) { + currentChanged = true; + i1->second.setCurrent(false); + } + } + } + if (currentChanged) + emit markerChanged(MARKER_CUR); + } + +//--------------------------------------------------------- +// forward +// roll forward config.division ticks +//--------------------------------------------------------- + +void Song::forward() + { + unsigned newPos = pos[0].tick() + config.division; + audio->msgSeek(Pos(newPos, AL::TICKS)); + } + +//--------------------------------------------------------- +// rewind +// roll back config.division ticks +//--------------------------------------------------------- + +void Song::rewind() + { + unsigned newPos; + if (unsigned(config.division) > pos[0].tick()) + newPos = 0; + else + newPos = pos[0].tick() - config.division; + audio->msgSeek(Pos(newPos, AL::TICKS)); + } + +//--------------------------------------------------------- +// rewindStart +//--------------------------------------------------------- + +void Song::rewindStart() + { + audio->msgSeek(Pos(0, AL::TICKS)); + } + +//--------------------------------------------------------- +// update +//--------------------------------------------------------- + +void Song::update(int flags) + { + if (flags == 0) + return; + emit songChanged(flags); + if (flags & SC_TEMPO) + emit tempoChanged(); + } + +//--------------------------------------------------------- +// updatePos +//--------------------------------------------------------- + +void Song::updatePos() + { + emit posChanged(0, pos[0], false); + emit posChanged(1, pos[1], false); + emit posChanged(2, pos[2], false); + } + +//--------------------------------------------------------- +// roundUpBar +//--------------------------------------------------------- + +int Song::roundUpBar(int t) const + { + int bar, beat; + unsigned tick; + AL::sigmap.tickValues(t, &bar, &beat, &tick); + if (beat || tick) + return AL::sigmap.bar2tick(bar+1, 0, 0); + return t; + } + +//--------------------------------------------------------- +// roundUpBeat +//--------------------------------------------------------- + +int Song::roundUpBeat(int t) const + { + int bar, beat; + unsigned tick; + AL::sigmap.tickValues(t, &bar, &beat, &tick); + if (tick) + return AL::sigmap.bar2tick(bar, beat+1, 0); + return t; + } + +//--------------------------------------------------------- +// roundDownBar +//--------------------------------------------------------- + +int Song::roundDownBar(int t) const + { + int bar, beat; + unsigned tick; + AL::sigmap.tickValues(t, &bar, &beat, &tick); + return AL::sigmap.bar2tick(bar, 0, 0); + } + +//--------------------------------------------------------- +// dumpMaster +//--------------------------------------------------------- + +void Song::dumpMaster() + { + AL::tempomap.dump(); + AL::sigmap.dump(); + } + +//--------------------------------------------------------- +// getSelectedParts +//--------------------------------------------------------- + +PartList* Song::getSelectedMidiParts() const + { + PartList* parts = new PartList(); + + //------------------------------------------------------ + // wenn ein Part selektiert ist, diesen editieren + // wenn ein Track selektiert ist, den Ersten + // Part des Tracks editieren, die restlichen sind + // 'ghostparts' + // wenn mehrere Parts selektiert sind, dann Ersten + // editieren, die restlichen sind 'ghostparts' + // + + // collect marked parts + for (ciMidiTrack t = _midis.begin(); t != _midis.end(); ++t) { + MidiTrack* track = *t; + PartList* pl = track->parts(); + for (iPart p = pl->begin(); p != pl->end(); ++p) { + if (p->second->selected()) { + parts->add(p->second); + } + } + } + // if no part is selected, then search for selected track + // and collect all parts of this track + + if (parts->empty()) { + for (ciMidiTrack t = _midis.begin(); t != _midis.end(); ++t) { + if ((*t)->selected()) { + MidiTrack* track = *t; + PartList* pl = track->parts(); + for (iPart p = pl->begin(); p != pl->end(); ++p) + parts->add(p->second); + break; + } + } + } + return parts; + } + +PartList* Song::getSelectedWaveParts() const + { + PartList* parts = new PartList(); + + //------------------------------------------------------ + // wenn ein Part selektiert ist, diesen editieren + // wenn ein Track selektiert ist, den Ersten + // Part des Tracks editieren, die restlichen sind + // 'ghostparts' + // wenn mehrere Parts selektiert sind, dann Ersten + // editieren, die restlichen sind 'ghostparts' + // + + // markierte Parts sammeln + for (ciWaveTrack t = _waves.begin(); t != _waves.end(); ++t) { + WaveTrack* track = *t; + PartList* pl = track->parts(); + for (iPart p = pl->begin(); p != pl->end(); ++p) { + if (p->second->selected()) { + parts->add(p->second); + } + } + } + // wenn keine Parts selektiert, dann markierten Track suchen + // und alle Parts dieses Tracks zusammensuchen + + if (parts->empty()) { + for (ciWaveTrack t = _waves.begin(); t != _waves.end(); ++t) { + if ((*t)->selected()) { + WaveTrack* track = *t; + PartList* pl = track->parts(); + for (iPart p = pl->begin(); p != pl->end(); ++p) + parts->add(p->second); + break; + } + } + } + return parts; + } + +//--------------------------------------------------------- +// beat +// update gui +//--------------------------------------------------------- + +void Song::beat() + { + updateFlags = 0; + if (audio->isPlaying()) { + int tick = audio->seqTime()->curTickPos; + setPos(0, tick, true, false, true); + } + if (audio->isRecording()) { + MidiTrackList* ml = midis(); + for (iMidiTrack it = ml->begin(); it != ml->end(); ++it) { + MidiTrack* mt = *it; + if (mt->recordFlag()) + mt->recordBeat(); + } + WaveTrackList* wl = waves(); + for (iWaveTrack wt = wl->begin(); wt != wl->end(); ++wt) { + WaveTrack* mt = *wt; + if (mt->recordFlag()) + mt->recordBeat(); + } + } + while (!eventFifo.isEmpty()) { + MidiEvent event(eventFifo.get()); + if (rcEnable) + midiRCList.doAction(event); + emit midiEvent(event); + } + // + // update controller guis + // + TrackList* tl = tracks(); + for (iTrack it = tl->begin(); it != tl->end(); ++it) { + Track* track = *it; + if (!track->autoRead()) + continue; + track->updateController(); + } + update(updateFlags); + } + +//--------------------------------------------------------- +// setLen +//--------------------------------------------------------- + +void Song::setLen(int l) + { + _len = roundUpBar(l); + AL::Pos pos(_len); + int bar, beat; + unsigned tick; + AL::sigmap.tickValues(_len, &bar, &beat, &tick); + emit measureLenChanged(bar); + emit lenChanged(pos); + } + +//--------------------------------------------------------- +// setMeasureLen +//--------------------------------------------------------- + +void Song::setMeasureLen(int b) + { + setLen(AL::sigmap.bar2tick(b, 0, 0)); + } + +//--------------------------------------------------------- +// addMarker +//--------------------------------------------------------- + +AL::Marker* Song::addMarker(const QString& s, const AL::Pos& pos) + { + AL::Marker* marker = _markerList->add(s, pos); + updateCurrentMarker(); + emit markerChanged(MARKER_ADD); + return marker; + } + +//--------------------------------------------------------- +// removeMarker +//--------------------------------------------------------- + +void Song::removeMarker(AL::Marker* marker) + { + _markerList->remove(marker); + updateCurrentMarker(); + emit markerChanged(MARKER_REMOVE); + } + +//--------------------------------------------------------- +// setMarkerName +//--------------------------------------------------------- + +AL::Marker* Song::setMarkerName(AL::Marker* m, const QString& s) + { + m->setName(s); + emit markerChanged(MARKER_NAME); + return m; + } + +AL::Marker* Song::setMarkerTick(AL::Marker* m, int t) + { + AL::Marker mm(*m); + _markerList->remove(m); + mm.setTick(t); + m = _markerList->add(mm); + updateCurrentMarker(); + emit markerChanged(MARKER_TICK); + return m; + } + +AL::Marker* Song::setMarkerLock(AL::Marker* m, bool f) + { + m->setType(f ? AL::FRAMES : AL::TICKS); + updateCurrentMarker(); + emit markerChanged(MARKER_LOCK); + return m; + } + +//--------------------------------------------------------- +// endMsgCmd +//--------------------------------------------------------- + +void Song::endMsgCmd() + { + redoList->clear(); // TODO: delete elements in list + undoAction->setEnabled(true); + redoAction->setEnabled(false); + update(updateFlags); + } + +//--------------------------------------------------------- +// undo +//--------------------------------------------------------- + +void Song::undo() + { + updateFlags = 0; + if (doUndo1()) + return; + audio->msgUndo(); + doUndo3(); + redoAction->setEnabled(true); + undoAction->setEnabled(!undoList->empty()); + if (updateFlags) { + emit songChanged(updateFlags); + if (updateFlags & SC_TEMPO) + emit tempoChanged(); + } + } + +//--------------------------------------------------------- +// redo +//--------------------------------------------------------- + +void Song::redo() + { + updateFlags = 0; + if (doRedo1()) + return; + audio->msgRedo(); + doRedo3(); + undoAction->setEnabled(true); + redoAction->setEnabled(!redoList->empty()); + if (updateFlags) { + emit songChanged(updateFlags); + if (updateFlags & SC_TEMPO) + emit tempoChanged(); + } + } + +//--------------------------------------------------------- +// processMsg +// executed in realtime thread context +//--------------------------------------------------------- + +void Song::processMsg(AudioMsg* msg) + { + switch(msg->id) { + case SEQM_UNDO: + doUndo2(); + break; + case SEQM_REDO: + doRedo2(); + break; + + case SEQM_ADD_EVENT: + updateFlags = SC_EVENT_INSERTED; + if (addEvent(msg->ev1, (Part*)(msg->p2))) { + undoOp(UndoOp::AddEvent, msg->ev1, (Part*)msg->p2); + } + else + updateFlags = 0; + break; + + case SEQM_ADD_EVENTS: + updateFlags = SC_EVENT_INSERTED; + for (int i = 0; i < msg->el->size(); ++i) { + if (addEvent(msg->el->at(i), (Part*)(msg->p2))) { + undoOp(UndoOp::AddEvent, msg->el->at(i), (Part*)msg->p2); + } + } + break; + + case SEQM_REMOVE_EVENT: + { + Event event = msg->ev1; + Part* part = (Part*)(msg->p2); + Event e; + undoOp(UndoOp::DeleteEvent, e, event, part); + deleteEvent(event, part); + updateFlags = SC_EVENT_REMOVED; + } + break; + case SEQM_CHANGE_EVENT: + changeEvent(msg->ev1, msg->ev2, (Part*)(msg->p3)); + undoOp(UndoOp::ModifyEvent, msg->ev2, msg->ev1, (Part*)msg->p3); + updateFlags = SC_EVENT_MODIFIED; + break; + + case SEQM_ADD_TEMPO: + undoOp(UndoOp::AddTempo, msg->a, msg->b); + AL::tempomap.addTempo(msg->a, msg->b); + updateFlags = SC_TEMPO; + break; + + case SEQM_SET_TEMPO: + undoOp(UndoOp::AddTempo, msg->a, msg->b); + AL::tempomap.setTempo(msg->a, msg->b); + updateFlags = SC_TEMPO; + break; + + case SEQM_SET_GLOBAL_TEMPO: + AL::tempomap.setGlobalTempo(msg->a); + break; + + case SEQM_REMOVE_TEMPO: + undoOp(UndoOp::DeleteTempo, msg->a, msg->b); + AL::tempomap.delTempo(msg->a); + updateFlags = SC_TEMPO; + break; + + case SEQM_ADD_SIG: + undoOp(UndoOp::AddSig, msg->a, msg->b, msg->c); + AL::sigmap.add(msg->a, AL::TimeSignature(msg->b, msg->c)); + updateFlags = SC_SIG; + break; + + case SEQM_REMOVE_SIG: + //printf("processMsg (SEQM_REMOVE_SIG) UndoOp::DeleteSig. Deleting AL::sigmap at: %d with z=%d n=%d\n", msg->a, msg->b, msg->c); + undoOp(UndoOp::DeleteSig, msg->a, msg->b, msg->c); + AL::sigmap.del(msg->a); + updateFlags = SC_SIG; + break; + + case SEQM_ADD_CTRL: + msg->track->addControllerVal(msg->a, msg->time, msg->cval1); + break; + + case SEQM_REMOVE_CTRL: + msg->track->removeControllerVal(msg->a, msg->time); + break; + + case SEQM_ADD_TRACK: + insertTrack2(msg->track); + break; + + case SEQM_REMOVE_TRACK: + removeTrack2(msg->track); + break; + + case SEQM_ADD_PART: + { + Part* part = (Part*)(msg->p1); + part->track()->addPart(part); + } + break; + + case SEQM_REMOVE_PART: + { + Part* part = (Part*)(msg->p1); + Track* track = part->track(); + track->parts()->remove(part); + } + break; + + case SEQM_CHANGE_PART: + { + Part* newPart = (Part*)msg->p2; + Part* oldPart = (Part*)msg->p1; + Part part = *newPart; + *newPart = *oldPart; + *oldPart = part; + } + break; + + case SEQM_MOVE_TRACK: + moveTrack((Track*)(msg->p1), (Track*)(msg->p2)); + break; + + default: + printf("unknown seq message %d\n", msg->id); + break; + } + } + +//--------------------------------------------------------- +// panic +//--------------------------------------------------------- + +void Song::panic() + { + audio->msgPanic(); + } + +//--------------------------------------------------------- +// clear +// signal - emit signals for changes if true +// called from constructor as clear(false) and +// from MusE::clearSong() as clear(false) +//--------------------------------------------------------- + +void Song::clear(bool signal) + { + _created = false; + _backupWritten = false; + dirty = false; + _comment = ""; + _createDate = QDateTime::currentDateTime(); + + seekInProgress = false; + bounceTrack = 0; + +// for (iTrack i = _tracks.begin(); i != _tracks.end(); ++i) +// (*i)->deactivate(); + + _selectedTrack = 0; + _tracks.clear(); + + qDeleteAll(_midis); + _midis.clear(); + + qDeleteAll(_waves); + _waves.clear(); + + qDeleteAll(_inputs); // audio input ports + _inputs.clear(); + + qDeleteAll(_outputs); // audio output ports + _outputs.clear(); + + qDeleteAll(_groups); // mixer groups + _groups.clear(); + + qDeleteAll(_synthIs); + _synthIs.clear(); + + qDeleteAll(_midiSyntis); + _midiSyntis.clear(); + + qDeleteAll(_midiOutPorts); + _midiOutPorts.clear(); + + qDeleteAll(_midiInPorts); + _midiInPorts.clear(); + + AL::tempomap.clear(); + AL::sigmap.clear(); + undoList->clear(); + redoList->clear(); + _markerList->clear(); + pos[0].setTick(0); + pos[1].setTick(0); + pos[2].setTick(0); + + _masterFlag = true; + loopFlag = false; + loopFlag = false; + punchinFlag = false; + punchoutFlag = false; + recordFlag = false; + soloFlag = false; + // seq + _recMode = REC_OVERDUP; + _cycleMode = CYCLE_NORMAL; + _click = false; + _quantize = false; + _len = 1; // song len in ticks + // _tempo = 500000; // default tempo 120 + if (signal) { + emit loopChanged(false); + recordChanged(false); + } + } + +//--------------------------------------------------------- +// seqSignal +// sequencer message to GUI +// execution environment: gui thread +//--------------------------------------------------------- + +void Song::seqSignal(int fd) + { + char buffer[16]; + + int n = ::read(fd, buffer, 16); + if (n < 0) { + printf("Song: seqSignal(): READ PIPE failed: %s\n", + strerror(errno)); + return; + } + bool graphChangedCalled = false; + bool seekDone = false; + +// printf("seqSignal %d\n", n); + for (int i = 0; i < n; ++i) { +// printf(" seqSignal to gui:<%c>\n", buffer[i]); + switch(buffer[i]) { + case MSG_STOP: + stopRolling(); + break; + case MSG_PLAY: + setStopPlay(true); + break; + case MSG_RECORD: + setRecord(true); + break; + case MSG_SEEK: + if (!seekDone) { + seekDone = true; + setPos(0, audio->seqTime()->curTickPos, true, false, !seekInProgress); + seekInProgress = false; + beat(); // update controller guis + } + break; + case MSG_JACK_SHUTDOWN: + restartJack(); + break; + + case MSG_START_BOUNCE: + { + bool useFreewheel = config.useJackFreewheelMode; + if (useFreewheel) { + // check: + // we cannot use freewheel, if there are active audio input + // strips + + for (iAudioInput ii = _inputs.begin(); ii != _inputs.end(); ++i) { + AudioInput* ai = *ii; + if (!(ai->mute() || ai->off())) { + useFreewheel = false; + break; + } + } + if (useFreewheel) + audioDriver->setFreewheel(true); + } + } + break; + + case MSG_STOP_BOUNCE: + if (audio->freewheel()) + audioDriver->setFreewheel(false); + audio->msgPlay(false); + break; + + case MSG_GRAPH_CHANGED: + if (!graphChangedCalled) { + printf(" graph changed\n"); + graphChangedCalled = true; + audioDriver->graphChanged(); + } + break; + + default: + printf("unknown Seq Signal <%c>\n", buffer[i]); + break; + } + } + } + +//--------------------------------------------------------- +// stopRolling +//--------------------------------------------------------- + +void Song::stopRolling() + { + setStopPlay(false); + if (record()) { + audio->msgIdle(true); // gain access to all data structures + + WaveTrackList* wl = waves(); + for (iWaveTrack it = wl->begin(); it != wl->end(); ++it) { + WaveTrack* track = *it; + if (track->recordFlag() || bounceTrack == track) { + track->stopRecording(audio->getStartRecordPos(), audio->getEndRecordPos()); + } + } + MidiTrackList* ml = midis(); + for (iMidiTrack it = ml->begin(); it != ml->end(); ++it) { + if ((*it)->recordFlag()) + (*it)->stopRecording(); + } + OutputList* ol = outputs(); + for (iAudioOutput io = ol->begin(); io != ol->end(); ++io) { + AudioOutput* ao = *io; + if (ao->recordFlag()) + ao->stopRecording(audio->getStartRecordPos(), audio->getEndRecordPos()); + } + audio->msgIdle(false); + updateFlags |= SC_PART_MODIFIED; + endUndo(updateFlags); + setRecord(false); + } + // + // process recorded automation events + // + for (iTrack it = tracks()->begin(); it != tracks()->end(); ++it) { + Track* track = *it; + if (!track->autoWrite()) + continue; + CtrlRecList* crl = track->recEvents(); + CtrlList* cl = track->controller(); + for (iCtrl icl = cl->begin(); icl != cl->end(); ++icl) { + Ctrl* cl = icl->second; + int id = cl->id(); + // + // remove old events from record region + // + bool hasEvents = false; +// int start = audio->getStartRecordPos().frame(); +// int end = audio->getEndRecordPos().frame(); +// iCtrlVal s = cl->lower_bound(start); +// iCtrlVal e = cl->lower_bound(end); +// cl->erase(s, e); +// } + + for (iCtrlRec icr = crl->begin(); icr != crl->end(); ++icr) { + if (icr->id == id && icr->type == 1) { + int start = icr->time; + ++icr; + for (; icr != crl->end(); ++icr) { + if (icr->id == id && icr->type == 2) { + int end = icr->time; + if (track->timeType() == AL::TICKS) { + start = AL::tempomap.frame2tick(start); + end = AL::tempomap.frame2tick(end); + } + iCtrlVal s = cl->lowerBound(start); + iCtrlVal e = cl->lowerBound(end); + while (s != e) + cl->erase(s++); + hasEvents = true; + break; + } + } + if (icr == crl->end()) + break; + } + } + // + // extract all recorded events for controller "id" + // from CtrlRecList and put into cl + // + for (iCtrlRec icr = crl->begin(); icr != crl->end(); ++icr) { + if (icr->id == id && icr->type == 0) + cl->add(icr->time, icr->val); + } + track->emitControllerChanged(id); + } + crl->clear(); + track->setAutoWrite(false); + } + } + +//--------------------------------------------------------- +// addControllerVal +// GUI context +//--------------------------------------------------------- + +void Song::cmdAddControllerVal(Track* t, int id, const Pos& pos, CVal val) + { + Ctrl* c = t->getController(id); + if (c == 0) { + printf("Song::addControllerVal:: no controller %d found\n", id); + return; + } + cmdAddControllerVal(t, c, pos, val); + } + +void Song::cmdAddControllerVal(Track* t, Ctrl* c, const Pos& p, CVal val) + { + unsigned time = t->timeType() == AL::FRAMES ? p.frame() : p.tick(); + iCtrlVal e = c->find(time); + if (e == c->end()) { + // add new controller event + audio->msgAddController(t, c->id(), time, val); + } + else { + // + // change controller is handled inline: + // + CVal oval = c->value(time); + startUndo(); + undoOp(UndoOp::ModifyCtrl, t, c->id(), time, val, oval); + c->add(time, val); + endUndo(0); + } + if (!audio->isPlaying() && t->autoRead()) { + // current value may have changed + unsigned ctime = t->timeType() == AL::FRAMES ? pos[0].frame() : pos[0].tick(); + CVal cval = c->value(ctime); + if (c->curVal().i != cval.i) { + if (t->type() == Track::MIDI) { + MidiEvent ev(0, 0, ME_CONTROLLER, c->id(), cval.i); + ((MidiTrack*)t)->playMidiEvent(&ev); + } + c->setCurVal(cval); + } + } + t->emitControllerChanged(c->id()); //moved this out here, otherwise canvas is not updated + } + +//--------------------------------------------------------- +// setControllerVal +// GUI context +//--------------------------------------------------------- + +void Song::setControllerVal(Track* t, int id, CVal val) + { + Ctrl* c = t->getController(id); + if (c == 0) { + printf("Song::addControllerVal:: no controller %d found\n", id); + return; + } + setControllerVal(t, c, val); + } + +void Song::setControllerVal(Track* t, Ctrl* c, CVal val) + { + if (t->isMidiTrack()) { + if (t->type() == Track::MIDI) { + MidiTrack* mt = (MidiTrack*)t; + MidiEvent ev(0, 0, ME_CONTROLLER, c->id(), val.i); + mt->playMidiEvent(&ev); + } + else if (t->type() == Track::MIDI_OUT) { + MidiOutPort* mp = (MidiOutPort*)t; + MidiEvent ev(0, 0, ME_CONTROLLER, c->id(), val.i); + mp->playMidiEvent(&ev); + } + } + else { + c->setCurVal(val); + if (c->id() & 0x3ffff000) { + // plugin controller + AudioTrack* track = (AudioTrack*) t; + bool prefader; + int pluginIndex, ctrlIndex; + getCtrlPlugin(c->id(), &prefader, &pluginIndex, &ctrlIndex); + Pipeline* pipe = prefader ? track->prePipe() : track->postPipe(); + pipe->plugin(pluginIndex)->setParam(ctrlIndex, val.f); + } + } + c->setCurVal(val); + + if (t->autoWrite()) { + unsigned time = t->timeType() == AL::FRAMES ? pos[0].frame() : pos[0].tick(); + if (audio->isPlaying()) + t->recEvents()->push_back(CtrlRecVal(time, c->id(), val)); + else { + iCtrlVal e = c->find(time); + if (e == c->end()) { + // add new controller event + audio->msgAddController(t, c->id(), time, val); + } + else { + CVal oval = c->value(time); + startUndo(); + undoOp(UndoOp::ModifyCtrl, t, c->id(), time, val, oval); + c->add(time, val); + endUndo(0); + } + } + } + t->emitControllerChanged(c->id()); + } + +//--------------------------------------------------------- +// cmdRemoveControllerVal +//--------------------------------------------------------- + +void Song::cmdRemoveControllerVal(Track* t, int id, unsigned time) + { + audio->msgRemoveController(t, id, time); + t->emitControllerChanged(id); + } + +//--------------------------------------------------------- +// absoluteProjectPath +//--------------------------------------------------------- + +QString Song::absoluteProjectPath() const + { + return QDir::homePath() + "/" + config.projectPath + "/" + _projectPath; + } + +//--------------------------------------------------------- +// projectPath +//--------------------------------------------------------- + +QString Song::projectPath() const + { + return _projectPath; + } + +//--------------------------------------------------------- +// projectName +//--------------------------------------------------------- + +QString Song::projectName() const + { + QString name = _projectPath.split("/").last(); + return name; + } + +//--------------------------------------------------------- +// setProjectPath +//--------------------------------------------------------- + +void Song::setProjectPath(const QString& s) + { + _projectPath = s; + } + +//--------------------------------------------------------- +// read +// return false on error +//--------------------------------------------------------- + +bool Song::read(QFile* qf) + { + QDomDocument doc; + + int line, column; + QString err; + if (!doc.setContent(qf, false, &err, &line, &column)) { + QString col, ln, error; + col.setNum(column); + ln.setNum(line); + error = err + "\n at line: " + ln + " col: " + col; + printf("error reading med file: %s\n", error.toLatin1().data()); + return false; + } + for (QDomNode node = doc.documentElement(); !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + if (e.isNull()) + continue; + if (e.tagName() == "muse") { + QString sversion = e.attribute("version", "1.0"); + int major=0, minor=0; + sscanf(sversion.toLatin1().data(), "%d.%d", &major, &minor); + int version = major << 8 + minor; + if (version >= 0x201) + read30(node.firstChild()); + else if (version >= 0x200) + read20(node); + else if (version == 0x100) + read10(node.firstChild()); + else + printf("unsupported *.med file version %s\n", sversion.toLatin1().data()); + } + else + printf("MusE: %s not supported\n", e.tagName().toLatin1().data()); + } + dirty = false; + return true; + } + +//--------------------------------------------------------- +// read10 +//--------------------------------------------------------- + +void Song::read10(QDomNode) + { + printf("reading type 1.0 *.med files not implemented\n"); + } + +//--------------------------------------------------------- +// read30 +//--------------------------------------------------------- + +void Song::read30(QDomNode node) + { + for (; !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + if (e.isNull()) + continue; + if (e.tagName() == "configuration") + readConfiguration(node.firstChild()); + else if (e.tagName() == "song") + read(node.firstChild()); + else if (e.tagName() == "toplevels") + muse->readToplevels(node.firstChild()); + else + printf("MusE:read30(): unknown tag %s\n", e.tagName().toLatin1().data()); + } + } + +//--------------------------------------------------------- +// restartJack +//--------------------------------------------------------- + +void Song::restartJack() + { + muse->seqStop(); + audioState = AUDIO_STOP; + for (;;) { + // give the user a sensible explanation + int btn = QMessageBox::critical( muse, tr("Jack shutdown!"), + tr("Jack has detected a performance problem which has lead to\n" + "MusE being disconnected.\n" + "This could happen due to a number of reasons:\n" + "- a performance issue with your particular setup.\n" + "- a bug in MusE (or possibly in another connected software).\n" + "- a random hiccup which might never occur again.\n" + "- jack was voluntary stopped by you or someone else\n" + "- jack crashed\n" + "If there is a persisting problem you are much welcome to discuss it\n" + "on the MusE mailinglist.\n" + "(there is information about joining the mailinglist on the MusE\n" + " homepage which is available through the help menu)\n" + "\n" + "To proceed check the status of Jack and try to restart it and then .\n" + "click on the Restart button."), + "restart", "cancel", "save project" + ); + if (btn == 0) { + if (!audioDriver->restart()) + break; + } + else if (btn == 2) + muse->save(); + else if (btn == 1) + exit(-1); + } + muse->seqRestart(); + } + +//--------------------------------------------------------- +// routeChanged +//--------------------------------------------------------- + +void Song::routeChanged(QAction* a) + { + audio->msgRoute(a->isChecked(), a->data().value()); + } + diff --git a/attic/muse_qt4_evolution/muse/song.h b/attic/muse_qt4_evolution/muse/song.h new file mode 100644 index 00000000..3ad574a0 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/song.h @@ -0,0 +1,416 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __SONG_H__ +#define __SONG_H__ + +#include "undo.h" +#include "midiinport.h" +#include "midioutport.h" +#include "miditrack.h" +#include "midisynti.h" +#include "wavetrack.h" +#include "audioinput.h" +#include "audiooutput.h" +#include "audiogroup.h" +#include "synth.h" +#include "ctrl.h" +#include "midififo.h" + +namespace AL { + class Xml; + class Marker; + class MarkerList; + class Pos; + }; + +struct AudioMsg; +class Event; +class Track; +class Part; +class PartList; +class Marker; +class SettingsList; + +#define SC_TRACK_INSERTED 1 +#define SC_TRACK_REMOVED 2 +#define SC_TRACK_MODIFIED 4 +#define SC_PART_INSERTED 8 +#define SC_PART_REMOVED 0x10 +#define SC_PART_MODIFIED 0x20 +#define SC_EVENT_INSERTED 0x40 +#define SC_EVENT_REMOVED 0x80 +#define SC_EVENT_MODIFIED 0x100 +#define SC_SIG 0x200 // timing signature +#define SC_TEMPO 0x400 // tempo map changed +#define SC_MASTER 0x800 // master flag changed +#define SC_SELECTION 0x1000 +#define SC_RECFLAG 0x10000 +#define SC_ROUTE 0x20000 +#define SC_CHANNELS 0x40000 +#define SC_CONFIG 0x80000 // midiPort-midiDevice +#define SC_DRUMMAP 0x100000 // must update drumeditor +#define SC_AUTOMATION 0x800000 +#define SC_RACK 0x1000000 // mixer rack changed +#define SC_CLIP_MODIFIED 0x2000000 + +//--------------------------------------------------------- +// Song +//--------------------------------------------------------- + +class Song : public QObject { + Q_OBJECT + + public: + enum POS { CPOS = 0, LPOS, RPOS }; + enum FollowMode { NO, JUMP, CONTINUOUS }; + enum { REC_OVERDUP, REC_REPLACE }; + enum { CYCLE_NORMAL, CYCLE_MIX, CYCLE_REPLACE }; + enum { MARKER_CUR, MARKER_ADD, MARKER_REMOVE, MARKER_NAME, + MARKER_TICK, MARKER_LOCK }; + + private: + QString _projectPath; + QString _comment; + bool _backupWritten; // set after first "save" operation from + // user; used to make sure there will + // be only one backup for a session + bool _created; // project was created in current session + QDateTime _createDate; + + MidiFifo eventFifo; + + int updateFlags; + + TrackList _tracks; // tracklist as seen by arranger + MidiTrackList _midis; + WaveTrackList _waves; + InputList _inputs; // audio input ports + OutputList _outputs; // audio output ports + GroupList _groups; // mixer groups + SynthIList _synthIs; + MidiSyntiList _midiSyntis; + MidiOutPortList _midiOutPorts; + MidiInPortList _midiInPorts; + Track* _selectedTrack; + + UndoList* undoList; + UndoList* redoList; + Pos pos[3]; + AL::MarkerList* _markerList; + bool seekInProgress; // user initiated a seek + + bool _masterFlag; + bool loopFlag; + bool punchinFlag; + bool punchoutFlag; + bool recordFlag; + bool soloFlag; + int _recMode; + int _cycleMode; + bool _click; + bool _quantize; + unsigned _len; // song len in ticks + int _globalPitchShift; + void readMarker(QDomNode); + void restartJack(); + void undoPartModify(Part* oPart, Part* nPart, bool undo); + + public slots: + + void undo(); + void redo(); + + void setTempo(int t); + void setSig(const AL::TimeSignature&); + + void setMasterFlag(bool flag); + void setLoop(bool f); + void setRecord(bool f); + void setPlay(bool f); + void setStop(bool); + void forward(); + void rewindStart(); + void rewind(); + void setPunchin(bool f); + void setPunchout(bool f); + void setClick(bool val); + void toggleClick() { setClick(!click()); } + void gotoLeftMarker() { setPos(0, lPos()); } + void gotoRightMarker() { setPos(0, rPos()); } + + void setQuantize(bool val); + void panic(); + void seqSignal(int fd); + Track* addTrack(QAction*); + void setMeasureLen(int l); + void cmdChangePart(Part*, unsigned, unsigned); + void cmdCreateLRPart(Track* track); + void setPos(int, const AL::Pos&); + void setPos(int, const AL::Pos&, bool sig, bool isSeek = true, + bool adjustScrollbar = false); + void routeChanged(QAction*); + + signals: + void songChanged(int); + void posChanged(int, const AL::Pos&, bool); + void loopChanged(bool); + void recordChanged(bool); + void playChanged(bool); + void punchinChanged(bool); + void punchoutChanged(bool); + void clickChanged(bool); + void quantizeChanged(bool); + void markerChanged(int); + void midiPortsChanged(); + void midiEvent(const MidiEvent&); + void trackAdded(Track*, int idx); + void trackRemoved(Track*); + void lenChanged(const AL::Pos&); + void measureLenChanged(int); + + void recordChanged(Track*,bool); + void muteChanged(Track*,bool); + void soloChanged(Track*,bool); + void offChanged(Track*,bool); + void autoReadChanged(Track*,bool); + void autoWriteChanged(Track*,bool); + void trackSelectionChanged(Track*); + void tempoChanged(); + + public: + Song(); + ~Song(); + + void beat(); + void putEvent(const MidiEvent&); + void endMsgCmd(); + void processMsg(AudioMsg* msg); + + bool dirty; + bool backupWritten() const { return _backupWritten; } + void setBackupWritten(bool val) { _backupWritten = val; } + WaveTrack* bounceTrack; + + void updatePos(); + + void read(QDomNode); + void write(Xml&) const; + + void clear(bool signal); + void update(int flags = -1); + + int globalPitchShift() const { return _globalPitchShift; } + void setGlobalPitchShift(int val) { _globalPitchShift = val; } + + //----------------------------------------- + // Marker + //----------------------------------------- + + AL::MarkerList* marker() const { return _markerList; } + AL::Marker* addMarker(const QString& s, const AL::Pos&); + void removeMarker(AL::Marker*); + AL::Marker* setMarkerName(AL::Marker*, const QString&); + AL::Marker* setMarkerTick(AL::Marker*, int); + AL::Marker* setMarkerLock(AL::Marker*, bool); + void setMarkerCurrent(AL::Marker* m, bool f); + + //----------------------------------------- + // transport + //----------------------------------------- + + const Pos& cPos() const { return pos[0]; } + const Pos& lPos() const { return pos[1]; } + const Pos& rPos() const { return pos[2]; } + unsigned cpos() const { return pos[0].tick(); } + unsigned lpos() const { return pos[1].tick(); } + unsigned rpos() const { return pos[2].tick(); } + + bool loop() const { return loopFlag; } + bool record() const { return recordFlag; } + bool punchin() const { return punchinFlag; } + bool punchout() const { return punchoutFlag; } + bool masterFlag() const { return _masterFlag; } + void setRecMode(int val) { _recMode = val; } + int recMode() const { return _recMode; } + void setCycleMode(int val) { _cycleMode = val; } + int cycleMode() const { return _cycleMode; } + bool click() const { return _click; } + bool quantize() const { return _quantize; } + void setStopPlay(bool); + void stopRolling(); + + //----------------------------------------- + // access tempomap/sigmap (Mastertrack) + //----------------------------------------- + + unsigned len() const { return _len; } + int roundUpBar(int tick) const; + int roundUpBeat(int tick) const; + int roundDownBar(int tick) const; + + //----------------------------------------- + // event manipulations + //----------------------------------------- + + bool addEvent(const Event&, Part*); + void changeEvent(const Event&, const Event&, Part*); + void deleteEvent(const Event&, Part*); + void cmdChangeWave(QString original, QString tmpfile, unsigned sx, unsigned ex); + + //----------------------------------------- + // part manipulations + //----------------------------------------- + + void cmdAddPart(Part* part); + void addPart(Part* part); + + void cmdRemoveParts(); + void cmdRemovePart(Part* part); + void removePart(Part* part); + + void cmdChangePart(Part* oldPart, Part* newPart); + void changePart(Part*, Part*); + + void cmdSplitPart(Part* p, const Pos&); + void cmdGluePart(Part* p); + + PartList* getSelectedMidiParts() const; + PartList* getSelectedWaveParts() const; + + void cmdMovePart(Part*, unsigned, Track*); + void cmdLinkPart(Part*, unsigned, Track*); + void cmdCopyPart(Part*, unsigned, Track*); + void selectPart(Part*, bool add=false); + + //----------------------------------------- + // track manipulations + //----------------------------------------- + + TrackList* tracks() { return &_tracks; } + MidiTrackList* midis() { return &_midis; } + WaveTrackList* waves() { return &_waves; } + InputList* inputs() { return &_inputs; } + OutputList* outputs() { return &_outputs; } + GroupList* groups() { return &_groups; } + SynthIList* syntis() { return &_synthIs; } + MidiOutPortList* midiOutPorts() { return &_midiOutPorts; } + MidiSyntiList* midiSyntis() { return &_midiSyntis; } + MidiInPortList* midiInPorts() { return &_midiInPorts; } + + bool trackExists(Track*) const; + Track* findTrack(const QString& name) const; + + void removeTrack(Track* track); + void removeTrack1(Track* track); + void removeTrack2(Track* track); + void removeTrack3(Track* track); + void changeTrackName(Track* track, const QString&); + + void swapTracks(int i1, int i2); + void moveTrack(Track*, Track*); + void cmdInsertTrack(Track*, int idx); + void insertTrack(Track*, int idx); + + void insertTrack0(Track*, int idx); + void insertTrack1(Track*, int idx); + void insertTrack2(Track*); + void readRoute(QDomNode); + std::vector* synthesizer() const; + + void deselectTracks(); + void selectTrack(Track*); + + Track* selectedTrack() const { return _selectedTrack; } + void updateSelectedTrack(); + + //----------------------------------------- + // undo, redo + //----------------------------------------- + + void startUndo(); + void endUndo(int); + void undoOp(UndoOp::UndoType, int, Track*); + void undoOp(UndoOp::UndoType, int, int, int = 0); + void undoOp(UndoOp::UndoType, Part*); + void undoOp(UndoOp::UndoType, const Event& oevent, const Event& nevent, Part*); + void undoOp(UndoOp::UndoType type, const Event& nev, Part* part); + void undoOp(UndoOp::UndoType, SigEvent* oevent, SigEvent* nevent); + void undoOp(UndoOp::UndoType, Part* oPart, Part* nPart); + void undoOp(UndoOp::UndoType, Track*, int, unsigned, CVal, CVal); + void undoOp(UndoOp::UndoType, Track*, const QString&, const QString&); + void undoOp(UndoOp::UndoType type, const char* changedFile, const char* changeData, int startframe, int endframe); + bool doUndo1(); + void doUndo2(); + void doUndo3(); + bool doRedo1(); + void doRedo2(); + void doRedo3(); + + void addUndo(UndoOp& i); + + //----------------------------------------- + // Controller + //----------------------------------------- + + void cmdAddControllerVal(Track*, Ctrl*, const Pos&, CVal); + void cmdAddControllerVal(Track*, int, const Pos&, CVal); + void setControllerVal(Track*, Ctrl*, CVal); + void setControllerVal(Track*, int, CVal); + + void cmdRemoveControllerVal(Track*,int,unsigned); + void setAutoRead(Track*,bool); + void setAutoWrite(Track*,bool); + + //----------------------------------------- + // Misc/Debug + //----------------------------------------- + + void setLen(int); + void dumpMaster(); + void addUpdateFlags(int f) { updateFlags |= f; } + bool solo() const { return soloFlag; } + void setRecordFlag(Track*, bool); + void setMute(Track*,bool); + void setMonitor(Track*,bool); + void setSolo(Track*,bool); + void setOff(Track*,bool); + + QString projectPath() const; + QString absoluteProjectPath() const; + QString projectName() const; + void setProjectPath(const QString&); + QString comment() const { return _comment; } + void setComment(const QString& s) { _comment = s; } + void setCreated(bool val) { _created = val; } + bool created() const { return _created; } + QDateTime createDate() const { return _createDate; } + + bool read(QFile* qf); + void read30(QDomNode node); // muse >= 1.0 + void read20(QDomNode node); // muse < 1.0 + void read10(QDomNode); + void updateCurrentMarker(); + }; + +extern Song* song; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/songfile.cpp b/attic/muse_qt4_evolution/muse/songfile.cpp new file mode 100644 index 00000000..ff89e41e --- /dev/null +++ b/attic/muse_qt4_evolution/muse/songfile.cpp @@ -0,0 +1,489 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "muse.h" +#include "song.h" +#include "arranger.h" +#include "al/al.h" +#include "al/xml.h" +#include "midiedit/drummap.h" +#include "al/marker.h" +#include "midictrl.h" +#include "conf.h" +#include "al/tempo.h" +#include "al/sig.h" +#include "synth.h" +#include "waveedit/waveedit.h" +#include "master/masteredit.h" +#include "midiedit/drumedit.h" +#include "midiedit/pianoroll.h" +#include "part.h" +#include "marker/markerview.h" +#include "liste/listedit.h" + +using namespace AL; + +//--------------------------------------------------------- +// readPart +//--------------------------------------------------------- + +Part* MusE::readPart(QDomNode node) + { + QDomElement e = node.toElement(); + Part* part = 0; + QString s = e.text(); + int trackIdx; + int partIdx; + sscanf(s.toLatin1().data(), "%d:%d", &trackIdx, &partIdx); + TrackList* tl = song->tracks(); + Track* track = song->tracks()->value(trackIdx); + if (track) { + part = track->parts()->find(partIdx); + if (part == 0) { + printf("MusE::readPart(): part %d(%d) not found in track <%s>\n", + partIdx, track->parts()->size(), track->name().toLatin1().data()); + } + } + else { + printf("MusE::readPart(): trackIdx >= tl->size %d > %d\n", + trackIdx , tl->size()); + } + return part; + } + +//--------------------------------------------------------- +// readToplevels +//--------------------------------------------------------- + +void MusE::readToplevels(QDomNode node) + { + PartList* pl = new PartList; + + for (;!node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + QString tag(e.tagName()); + if (tag == "part") { + Part* part = readPart(node); + if (part) + pl->add(part); + else + printf("part not found\n"); + } + else if (tag == "PianoRoll") { + PianoRoll* pianoroll = new PianoRoll(pl, true); +// connect(muse, SIGNAL(configChanged()), pianoroll, SLOT(configChanged())); + pianoroll->read(node); + pianoroll->show(); + pl = new PartList; + } + else if (tag == "DrumEdit") { + DrumEdit* drumEditor = new DrumEdit(pl, true); +// connect(muse, SIGNAL(configChanged()), drumEditor, SLOT(configChanged())); + drumEditor->read(node); + drumEditor->show(); + pl = new PartList; + } + else if (tag == "ListEdit") { + listEditor = new ListEdit(0); + listEditor->show(); + listEditor->read(node); + } + else if (tag == "MasterEdit") { + MasterEdit* masterEditor = new MasterEdit(); + masterEditor->show(); + masterEditor->read(node); + } + else if (tag == "MarkerView") { + showMarker(true); + markerView->read(node); + } + else if (tag == "WaveEdit") { + WaveEdit* waveEditor = new WaveEdit(pl, true); + waveEditor->read(node); + waveEditor->show(); + connect(muse, SIGNAL(configChanged()), waveEditor, SLOT(configChanged())); + pl = new PartList; + } + else + printf("MusE:readToplevels: unknown tag <%s>\n", e.tagName().toLatin1().data()); + } + delete pl; + } + +//--------------------------------------------------------- +// readMarker +//--------------------------------------------------------- + +void Song::readMarker(QDomNode node) + { + AL::Marker m; + m.read(node); + _markerList->add(m); + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void Song::read(QDomNode node) + { + cloneList.clear(); + for (; !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + QString tag(e.tagName()); + int i = e.text().toInt(); + if (tag == "configuration") + ; // readConfiguration(node.firstChild()); + else if (tag == "master") + setMasterFlag(i); + else if (tag == "loop") + setLoop(i); + else if (tag == "punchin") + setPunchin(i); + else if (tag == "punchout") + setPunchout(i); + else if (tag == "record") + ; // setRecord(i); + else if (tag == "solo") + soloFlag = i; + else if (tag == "recmode") + _recMode = i; + else if (tag == "cycle") + _cycleMode = i; + else if (tag == "click") + setClick(i); + else if (tag == "quantize") + _quantize = i; + else if (tag == "len") + _len = i; + else if (tag == "tempolist") + AL::tempomap.read(node); + else if (tag == "siglist") + AL::sigmap.read(node.firstChild()); + else if (tag == "miditrack") { + MidiTrack* track = new MidiTrack(); + track->read(node.firstChild()); + insertTrack0(track, -1); + } + else if (tag == "drumtrack") { + MidiTrack* track = new MidiTrack(); + //TODO track->setUseDrumMap(true); + track->read(node.firstChild()); + insertTrack0(track, -1); + } + else if (tag == "wavetrack") { + WaveTrack* track = new WaveTrack(); + track->read(node.firstChild()); + insertTrack0(track, -1); + } + else if (tag == "AudioInput") { + AudioInput* track = new AudioInput(); + track->read(node.firstChild()); + insertTrack0(track,-1); + } + else if (tag == "AudioOutput") { + AudioOutput* track = new AudioOutput(); + track->read(node.firstChild()); + insertTrack0(track,-1); + } + else if (tag == "AudioGroup") { + AudioGroup* track = new AudioGroup(); + track->read(node.firstChild()); + insertTrack0(track,-1); + } + else if (tag == "SynthI") { + SynthI* track = new SynthI(); + track->read(node.firstChild()); + // insertTrack(track, -1); + } + else if (tag == "MidiOutPort") { + MidiOutPort* track = new MidiOutPort(); + track->read(node.firstChild()); + insertTrack0(track, -1); + } + else if (tag == "MidiInPort") { + MidiInPort* track = new MidiInPort(); + track->read(node.firstChild()); + insertTrack0(track, -1); + } + else if (tag == "MidiSynti") { + MidiSynti* track = new MidiSynti(); + track->read(node.firstChild()); + // insertTrack0(track, -1); + } + else if (tag == "arranger") + muse->arranger->readStatus(node.firstChild()); + else if (tag == "Route") + readRoute(node); + else if (tag == "marker") + readMarker(node); + else if (tag == "globalPitchShift") + _globalPitchShift = i; + else if (tag == "cpos") { + int pos = i; + Pos p(pos, AL::TICKS); + setPos(Song::CPOS, p, false, false, false); + } + else if (tag == "lpos") { + int pos = i; + Pos p(pos, AL::TICKS); + setPos(Song::LPOS, p, false, false, false); + } + else if (tag == "rpos") { + int pos = i; + Pos p(pos, AL::TICKS); + setPos(Song::RPOS, p, false, false, false); + } + else if (tag == "Pianoroll") + PianoRoll::readConfiguration(node); + else if (tag == "DrumEdit") + DrumEdit::readConfiguration(node); + else if (tag == "comment") + _comment = e.text(); + else if (tag == "createDate") + _createDate = QDateTime::fromString(e.text(), Qt::ISODate); + else if (tag == "LenInSec") + ; + else + printf("MusE:Song: unknown tag %s\n", tag.toLatin1().data()); + } + dirty = false; + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void Song::write(Xml& xml) const + { + xml.stag("song"); + xml.tag("comment", _comment); + xml.tag("createDate", _createDate.toString(Qt::ISODate)); + int n = AL::tempomap.tick2frame(_len); + xml.tag("LenInSec", n / AL::sampleRate); + + xml.tag("cpos", cpos()); + xml.tag("rpos", rpos()); + xml.tag("lpos", lpos()); + xml.tag("master", _masterFlag); + if (loopFlag) + xml.tag("loop", loopFlag); + if (punchinFlag) + xml.tag("punchin", punchinFlag); + if (punchoutFlag) + xml.tag("punchout", punchoutFlag); + if (soloFlag) + xml.tag("solo", soloFlag); + if (_recMode != REC_OVERDUP) + xml.tag("recmode", _recMode); + if (_cycleMode != CYCLE_NORMAL) + xml.tag("cycle", _cycleMode); + if (_click) + xml.tag("click", _click); + if (_quantize) + xml.tag("quantize", _quantize); + xml.tag("len", _len); + + if (_globalPitchShift) + xml.tag("globalPitchShift", _globalPitchShift); + + cloneList.clear(); + + // write tracks + for (ciTrack i = _tracks.begin(); i != _tracks.end(); ++i) + (*i)->write(xml); + + // write routing + for (ciTrack i = _tracks.begin(); i != _tracks.end(); ++i) + (*i)->writeRouting(xml); + muse->arranger->writeStatus(xml); + + AL::tempomap.write(xml); + AL::sigmap.write(xml); + _markerList->write(xml); + + xml.etag("song"); + } + +//--------------------------------------------------------- +// write +// write song +//--------------------------------------------------------- + +void MusE::write(Xml& xml) const + { + xml.header(); + + xml.stag("muse version=\"3.0\""); + writeConfiguration(xml); + + song->write(xml); + + xml.stag("toplevels"); + foreach(QWidget* w, QApplication::topLevelWidgets()) { + if (!w->isVisible()) + continue; + if (strcmp("DrumEdit", w->metaObject()->className()) == 0) + ((TopWin*)w)->write(xml); + else if (strcmp("PianoRoll", w->metaObject()->className()) == 0) + ((TopWin*)w)->write(xml); + else if (strcmp("MasterEdit", w->metaObject()->className()) == 0) + ((TopWin*)w)->write(xml); + else if (strcmp("WaveEdit", w->metaObject()->className()) == 0) + ((TopWin*)w)->write(xml); + else if (strcmp("ListEdit", w->metaObject()->className()) == 0) + ((TopWin*)w)->write(xml); + else if (strcmp("MarkerView", w->metaObject()->className()) == 0) + ((TopWin*)w)->write(xml); + else if (strcmp("Mixer", w->metaObject()->className()) == 0) + ; + else if (strcmp("Transport", w->metaObject()->className()) == 0) + ; + else if (strcmp("MusE", w->metaObject()->className()) == 0) + ; + else if (strcmp("QDesktopWidget", w->metaObject()->className()) == 0) + ; + else + printf("TopLevel <%s>\n", w->metaObject()->className()); + } + xml.etag("toplevels"); + xml.etag("muse"); + } + +//--------------------------------------------------------- +// read20 +// read old file versions (muse < 1.0) +//--------------------------------------------------------- + +void Song::read20(QDomNode node) + { + printf("Warning: importing old muse file version\n"); + + for (QDomNode n = node.firstChild(); !n.isNull(); n = n.nextSibling()) { + QDomElement e = n.toElement(); + if (e.isNull()) + continue; + QString t(e.tagName()); + if (t == "configuration") + readConfiguration(node.firstChild()); + else if (t == "song") { + for (QDomNode n1 = n.firstChild(); !n1.isNull(); n1 = n1.nextSibling()) { + QDomElement e = n1.toElement(); + if (e.isNull()) + continue; + QString t(e.tagName()); + int i = e.text().toInt(); + if (t == "automation") + ; + else if (t == "cpos") { + int pos = i; + Pos p(pos, AL::TICKS); + setPos(Song::CPOS, p, false, false, false); + } + else if (t == "rpos") { + int pos = i; + Pos p(pos, AL::TICKS); + setPos(Song::RPOS, p, false, false, false); + } + else if (t == "lpos") { + int pos = i; + Pos p(pos, AL::TICKS); + setPos(Song::LPOS, p, false, false, false); + } + else if (t == "master") + setMasterFlag(i); + else if (t == "loop") + setLoop(i); + else if (t == "punchin") + setPunchin(i); + else if (t == "punchout") + setPunchout(i); + else if (t == "record") + ; + else if (t == "solo") + soloFlag = i; + else if (t == "type") + ; + else if (t == "recmode") + _recMode = i; + else if (t == "cycle") + _cycleMode = i; + else if (t == "click") + setClick(i); + else if (t == "quantize") + _quantize = i; + else if (t == "len") + _len = i; + else if (t == "follow") + ; + else if (t == "drummap") + ; + else if (t == "siglist") + AL::sigmap.read(node.firstChild()); + else if (t == "tempolist") + AL::tempomap.read(node); + else if (t == "Route") + ; + else if (t == "AudioAux") { + AudioGroup* track = new AudioGroup(); + track->read(n1.firstChild()); + insertTrack0(track,-1); + } + else if (t == "AudioInput") { + AudioInput* track = new AudioInput(); + track->read(n1.firstChild()); + insertTrack0(track,-1); + } + else if (t == "AudioGroup") { + AudioGroup* track = new AudioGroup(); + track->read(n1.firstChild()); + insertTrack0(track,-1); + } + else if (t == "AudioOutput") { + AudioOutput* track = new AudioOutput(); + track->read(n1.firstChild()); + insertTrack0(track,-1); + } + else if (t == "wavetrack") { + MidiTrack* track = new MidiTrack(); + track->read(n1.firstChild()); + insertTrack0(track, -1); + } + else if (t == "drumtrack") { + MidiTrack* track = new MidiTrack(); + track->read(n1.firstChild()); + insertTrack0(track, -1); + } + else if (t == "miditrack") { + MidiTrack* track = new MidiTrack(); + track->read(n1.firstChild()); + insertTrack0(track, -1); + } + else + domError(n1); + } + } + else if (t == "toplevels") { + } + else + domError(n); + } + } + diff --git a/attic/muse_qt4_evolution/muse/songpart.cpp b/attic/muse_qt4_evolution/muse/songpart.cpp new file mode 100644 index 00000000..72faf7f8 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/songpart.cpp @@ -0,0 +1,371 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "song.h" +#include "part.h" +#include "audio.h" + +//--------------------------------------------------------- +// cmdAddPart +// GUI context + startUndo/endUndo +//--------------------------------------------------------- + +void Song::cmdAddPart(Part* part) + { + Track* track = part->track(); + // + // create default name: + // + for (int i = 1;;++i) { + PartList* pl = track->parts(); + bool found = false; + QString name = QString("Part-%1").arg(i); + for (iPart ip = pl->begin(); ip != pl->end(); ++ip) { + if (name == ip->second->name()) { + found = true; + break; + } + } + if (!found) { + part->setName(name); + break; + } + } + startUndo(); + addPart(part); + endUndo(0); + track->partListChanged(); + } + +//--------------------------------------------------------- +// addPart +// GUI context +//--------------------------------------------------------- + +void Song::addPart(Part* part) + { + AudioMsg msg; + msg.id = SEQM_ADD_PART; + msg.p1 = part; + audio->sendMessage(&msg, false); + undoOp(UndoOp::AddPart, part); + updateFlags |= SC_PART_INSERTED; + if (len() < part->endTick()) + setLen(part->endTick()); + } + +//--------------------------------------------------------- +// cmdRemovePart +//--------------------------------------------------------- + +void Song::cmdRemovePart(Part* part) + { + startUndo(); + removePart(part); + endUndo(0); + } + +//--------------------------------------------------------- +// cmdRemoveParts +// remove selected parts +//--------------------------------------------------------- + +void Song::cmdRemoveParts() + { + TrackList* tl = song->tracks(); + PartList pl; + + for (iTrack it = tl->begin(); it != tl->end(); ++it) { + PartList* pl2 = (*it)->parts(); + for (iPart ip = pl2->begin(); ip != pl2->end(); ++ip) { + if (ip->second->selected()) + pl.add(ip->second); + } + } + startUndo(); + for (iPart ip = pl.begin(); ip != pl.end(); ++ip) + removePart(ip->second); + endUndo(0); + } + +//--------------------------------------------------------- +// removePart +//--------------------------------------------------------- + +void Song::removePart(Part* part) + { + AudioMsg msg; + msg.id = SEQM_REMOVE_PART; + msg.p1 = part; + audio->sendMessage(&msg, false); + undoOp(UndoOp::DeletePart, part); + updateFlags |= SC_PART_REMOVED; + part->deref(); + part->track()->partListChanged(); + } + +//--------------------------------------------------------- +// cmdChangePart +// realtime context +//--------------------------------------------------------- + +void Song::cmdChangePart(Part* oldPart, Part* newPart) + { + startUndo(); + changePart(oldPart, newPart); + endUndo(0); + newPart->track()->partListChanged(); + } + +//--------------------------------------------------------- +// changePart +//--------------------------------------------------------- + +void Song::changePart(Part* oldPart, Part* newPart) + { + AudioMsg msg; + msg.id = SEQM_CHANGE_PART; + msg.p1 = oldPart; + msg.p2 = newPart; + audio->sendMessage(&msg, false); + undoOp(UndoOp::ModifyPart, oldPart, newPart); + updateFlags = SC_PART_MODIFIED; + if (len() < newPart->endTick()) + setLen(newPart->endTick()); + } + +//--------------------------------------------------------- +// cmdChangePart +// extend/shrink part in front or at end +//--------------------------------------------------------- + +void Song::cmdChangePart(Part* oPart, unsigned pos, unsigned len) + { + startUndo(); + // + // move events so they stay at same position in song + // + int delta = oPart->tick() - pos; + Part* nPart = new Part(*oPart); + nPart->clone(new EventList); + + const EventList* s = oPart->events(); + for (ciEvent ie = s->begin(); ie != s->end(); ++ie) { + int tick = ie->first + delta; + if (tick >= 0 && tick < int(len)) { + Event ev = ie->second.clone(); + ev.move(delta); + nPart->addEvent(ev, unsigned(tick)); + } + } + if (oPart->fillLen() > 0 && len < (unsigned)oPart->fillLen()) + oPart->setFillLen(len); + if (oPart->lenTick() < len && oPart->fillLen() > 0) { + unsigned loop = oPart->fillLen(); + unsigned fillLen = len - oPart->lenTick(); + for (unsigned i = 0; i < fillLen / loop; ++i) { + int start = oPart->lenTick() + loop * i; + for (ciEvent ie = s->begin(); ie != s->end(); ++ie) { + if (ie->first >= loop) + break; + Event ev = ie->second.clone(); + ev.move(start); + nPart->addEvent(ev, ie->first + start); + } + } + } + nPart->setLenTick(len); + nPart->setTick(pos); + changePart(oPart, nPart); + endUndo(0); + oPart->track()->partListChanged(); + } + +//--------------------------------------------------------- +// cmdMovePart +//--------------------------------------------------------- + +void Song::cmdMovePart(Part* oPart, unsigned pos, Track* track) + { + Track* oTrack = oPart->track(); + Part* nPart = new Part(*oPart); + nPart->setTrack(track); + nPart->setTick(pos); + startUndo(); + if (oPart->track() != track) { + removePart(oPart); + addPart(nPart); + } + else { + changePart(oPart, nPart); + } + endUndo(0); + oTrack->partListChanged(); + } + +//--------------------------------------------------------- +// cmdLinkPart +//--------------------------------------------------------- + +void Song::cmdLinkPart(Part* sPart, unsigned pos, Track* track) + { + Part* dPart = track->newPart(sPart, true); + dPart->setTick(pos); + cmdAddPart(dPart); + sPart->track()->partListChanged(); + dPart->track()->partListChanged(); + } + +//--------------------------------------------------------- +// cmdCopyPart +//--------------------------------------------------------- + +void Song::cmdCopyPart(Part* sPart, unsigned pos, Track* track) + { + bool clone = sPart->isClone(); + Part* dPart = track->newPart(sPart, clone); + dPart->setTick(pos); + if (!clone) { + // + // Copy Events + // + EventList* se = sPart->events(); + EventList* de = dPart->events(); + for (iEvent i = se->begin(); i != se->end(); ++i) { + Event oldEvent = i->second; + Event ev = oldEvent.clone(); + de->add(ev); + } + } + cmdAddPart(dPart); + sPart->track()->partListChanged(); + dPart->track()->partListChanged(); + } + +//--------------------------------------------------------- +// cmdCreateLRPart +//--------------------------------------------------------- + +void Song::cmdCreateLRPart(Track* track) + { + Part* part = track->newPart(); + if (part) { + part->setTick(pos[1].tick()); + part->setLenTick(pos[2].tick()-pos[1].tick()); + part->setSelected(true); + cmdAddPart(part); + } + } + +//--------------------------------------------------------- +// selectPart +//--------------------------------------------------------- + +void Song::selectPart(Part* part, bool add) + { + if (add) { + part->setSelected(!part->selected()); + part->track()->partListChanged(); + return; + } + for (iTrack it = _tracks.begin(); it != _tracks.end(); ++it) { + PartList* pl = (*it)->parts(); + bool changed = false; + for (iPart ip = pl->begin(); ip != pl->end(); ++ip) { + bool f = part == ip->second; + if (ip->second->selected() != f) { + ip->second->setSelected(f); + changed = true; + } + } + if (changed) + (*it)->partListChanged(); + } + } + +//--------------------------------------------------------- +// cmdSplitPart +//--------------------------------------------------------- + +void Song::cmdSplitPart(Part* part, const Pos& pos) + { + int tick = pos.tick(); + int l1 = tick - part->tick(); + int l2 = part->lenTick() - l1; + if (l1 <= 0 || l2 <= 0) + return; + Part* p1; + Part* p2; + part->track()->splitPart(part, tick, p1, p2); + + startUndo(); + changePart(part, p1); + addPart(p2); + endUndo(0); + part->track()->partListChanged(); + } + +//--------------------------------------------------------- +// cmdGluePart +//--------------------------------------------------------- + +void Song::cmdGluePart(Part* oPart) + { + Track* track = oPart->track(); + PartList* pl = track->parts(); + Part* nextPart = 0; + + for (iPart ip = pl->begin(); ip != pl->end(); ++ip) { + if (ip->second == oPart) { + ++ip; + if (ip == pl->end()) + return; + nextPart = ip->second; + break; + } + } + + Part* nPart = track->newPart(oPart); + nPart->setLenTick(nextPart->tick() + nextPart->lenTick() - oPart->tick()); + + // populate nPart with Events from oPart and nextPart + + EventList* sl1 = oPart->events(); + EventList* dl = nPart->events(); + + for (iEvent ie = sl1->begin(); ie != sl1->end(); ++ie) + dl->add(ie->second); + + EventList* sl2 = nextPart->events(); + int tickOffset = nextPart->tick() - oPart->tick(); + + for (iEvent ie = sl2->begin(); ie != sl2->end(); ++ie) { + Event event = ie->second.clone(); + event.move(tickOffset); + dl->add(event); + } + startUndo(); + removePart(nextPart); + changePart(oPart, nPart); + endUndo(0); + track->partListChanged(); + } + + diff --git a/attic/muse_qt4_evolution/muse/songtrack.cpp b/attic/muse_qt4_evolution/muse/songtrack.cpp new file mode 100644 index 00000000..8a865620 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/songtrack.cpp @@ -0,0 +1,715 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "song.h" +#include "audio.h" +#include "midiplugin.h" +#include "audiodev.h" +#include "muse.h" + +//--------------------------------------------------------- +// deselectTracks +//--------------------------------------------------------- + +void Song::deselectTracks() + { + for (iTrack t = _tracks.begin(); t != _tracks.end(); ++t) + (*t)->setSelected(false); + } + +//--------------------------------------------------------- +// selectTrack +//--------------------------------------------------------- + +void Song::selectTrack(Track* track) + { + bool changed = false; + for (iTrack t = _tracks.begin(); t != _tracks.end(); ++t) { + bool select = *t == track; + if ((*t)->selected() != select) { + (*t)->setSelected(select); + changed = true; + } + } + if (changed) { + updateSelectedTrack(); + trackSelectionChanged(_selectedTrack); + } + } + +//--------------------------------------------------------- +// updateSelectedTrack +// set _selectedTrack to first selected track +//--------------------------------------------------------- + +void Song::updateSelectedTrack() + { + _selectedTrack = 0; + for (iTrack t = _tracks.begin(); t != _tracks.end(); ++t) { + bool select = (*t)->selected(); + if (select) { + _selectedTrack = *t; + break; + } + } + } + +//--------------------------------------------------------- +// addTrack +// called from GUI context +//--------------------------------------------------------- + +Track* Song::addTrack(QAction* action) + { + int t = action->data().toInt(); + + deselectTracks(); + Track* track = 0; + + Track::TrackType type = (Track::TrackType) t; + if (t >= 5000) { + int idx = t - 5000; + type = Track::MIDI_SYNTI; + int k = 0; + iMidiPlugin i; + for (i = midiPlugins.begin(); i != midiPlugins.end(); ++i) { + if ((*i)->type() != MEMPI_GENERATOR) + continue; + if (k == idx) + break; + ++k; + } + if (i == midiPlugins.end()) { + fprintf(stderr, "Song::addTrack: midi synti not found\n"); + return 0; + } + MidiPlugin* s = *i; + MidiSynti* si = new MidiSynti(); + QString sName(s->name()); + for (k = s->instances(); k < 1000; ++k) { + QString instanceName = (k == 0) ? + sName : instanceName.arg(sName).arg(k); + + MidiSyntiList* sl = midiSyntis(); + iMidiSynti sii; + for (sii = sl->begin(); sii != sl->end(); ++sii) { + if ((*sii)->name() == instanceName) + break; + } + if (sii == sl->end()) { + si->setName(instanceName); + break; + } + } + if (si->initInstance(s)) { + delete si; + return 0; + } + track = si; + } + else if (t >= 1000) { + type = Track::AUDIO_SOFTSYNTH; + QString sclass = synthis[t-1000]->name(); + + Synth* s = findSynth(sclass); + if (s == 0) { + fprintf(stderr, "synthi class <%s> not found\n", sclass.toLatin1().data()); + return 0; + } + + SynthI* si = new SynthI(); + int i; + for (i = s->instances(); i < 1000; ++i) { + QString instanceName = (i == 0) ? + s->name() : QString("%1-%2").arg(s->name()).arg(i); + + SynthIList* sl = syntis(); + iSynthI sii; + for (sii = sl->begin(); sii != sl->end(); ++sii) { + if ((*sii)->name() == instanceName) + break; + } + if (sii == sl->end()) { + si->setName(instanceName); + break; + } + } + if (si->initInstance(s)) { + delete si; + return 0; + } + track = si; + } + else { + switch (type) { + case Track::MIDI: + track = new MidiTrack(); + break; + case Track::MIDI_OUT: + track = new MidiOutPort(); + break; + case Track::MIDI_IN: + track = new MidiInPort(); + break; + case Track::WAVE: + track = new WaveTrack(); + break; + case Track::AUDIO_OUTPUT: + track = new AudioOutput(); + break; + case Track::AUDIO_GROUP: + track = new AudioGroup(); + break; + case Track::AUDIO_INPUT: + track = new AudioInput(); + break; + case Track::AUDIO_SOFTSYNTH: + case Track::TRACK_TYPES: + default: + printf("Song::addTrack() illegal type %d\n", type); + abort(); + } + if (track == 0) + return 0; + } + track->setDefaultName(); + cmdInsertTrack(track, -1); + return track; + } + +//--------------------------------------------------------- +// cmdInsertTrack +//--------------------------------------------------------- + +void Song::cmdInsertTrack(Track* track, int idx) + { + startUndo(); + insertTrack(track, idx); + endUndo(SC_TRACK_INSERTED | SC_ROUTE); + selectTrack(track); + } + +//--------------------------------------------------------- +// insertTrack +//--------------------------------------------------------- + +void Song::insertTrack(Track* track, int idx) + { + // + // add default routes + // + OutputList* ol = outputs(); + AudioOutput* ao = 0; + if (!ol->empty()) + ao = ol->front(); + + switch (track->type()) { + case Track::TRACK_TYPES: + case Track::MIDI_OUT: + { +#if 0 + QList op = midiDriver->outputPorts(false); + if (!op.isEmpty()) { + RouteNode src(track); + RouteNode dst(op.back().port, -1, RouteNode::MIDIPORT); + Route r = Route(src, dst); + track->addOutRoute(r); + } +#endif + //TODO: autoconnect to JACK midi ports + } + break; + + case Track::MIDI_IN: + { +#if 0 + QList op = midiDriver->inputPorts(true); + if (!op.isEmpty()) { + RouteNode src(op.back().port, -1, RouteNode::MIDIPORT); + RouteNode dst(track); + Route r = Route(src, dst); + track->addInRoute(r); + } +#endif + //TODO: autoconnect to JACK midi ports + } + break; + + case Track::MIDI_SYNTI: + break; + case Track::MIDI: + // + // connect to first channel of all all midi input ports, + // if there is not already a route + // + if (track->noInRoute()) { + MidiInPortList* mi = midiInPorts(); + RouteNode dst(track); + for (iMidiInPort i = mi->begin(); i != mi->end(); ++i) { + RouteNode src(*i, 0, RouteNode::TRACK); + track->addInRoute(Route(src, dst)); + } + } + // + // connect to first free input channel in midi output ports + // + if (track->noOutRoute()) { + MidiOutPortList* mo = midiOutPorts(); + for (iMidiOutPort i = mo->begin(); i != mo->end(); ++i) { + RouteList* rl = (*i)->inRoutes(); + for (int ch = 0; ch < MIDI_CHANNELS; ++ch) { + RouteNode src(track); + RouteNode dst(*i, ch, RouteNode::TRACK); + Route r(src, dst); + bool channelUsed = false; + for (iRoute ir = rl->begin(); ir != rl->end(); ++ir) { + if (ir->dst.channel == ch) { + channelUsed = true; + break; + } + } + if (!channelUsed) { + track->addOutRoute(r); + break; + } + } + if (!track->noOutRoute()) + break; + } + } + break; + case Track::AUDIO_SOFTSYNTH: + case Track::WAVE: + case Track::AUDIO_GROUP: + if (ao) + track->addOutRoute(Route(RouteNode(track), RouteNode(ao))); + break; + + case Track::AUDIO_INPUT: + { + // connect first input channel to first available jack output + // etc. + QList op = audioDriver->outputPorts(false); + QList::iterator is = op.begin(); + for (int ch = 0; ch < track->channels(); ++ch) { + if (is != op.end()) { + RouteNode src(is->port, -1, RouteNode::AUDIOPORT); + RouteNode dst(track, ch, RouteNode::TRACK); + Route r = Route(src, dst); + track->addInRoute(r); + ++is; + } + } + } + break; + case Track::AUDIO_OUTPUT: + { + QList op = audioDriver->inputPorts(false); + QList::iterator is = op.begin(); + for (int ch = 0; ch < track->channels(); ++ch) { + if (is != op.end()) { + RouteNode src(track, ch, RouteNode::TRACK); + RouteNode dst(is->port, -1, RouteNode::AUDIOPORT); + Route r = Route(src, dst); + track->addOutRoute(r); + ++is; + } + } + } + break; + } + insertTrack1(track, idx); + + undoOp(UndoOp::AddTrack, idx, track); + AudioMsg msg; + msg.id = SEQM_ADD_TRACK; + msg.track = track; + msg.ival = idx; + audio->sendMsg(&msg); + emit trackAdded(track, idx); + } + +//--------------------------------------------------------- +// insertTrack0 +// can only be called if sequencer is idle +// (during song load) +//--------------------------------------------------------- + +void Song::insertTrack0(Track* track, int idx) + { + insertTrack1(track, idx); + insertTrack2(track); + } + +//--------------------------------------------------------- +// insertTrack1 +// non realtime part of insertTrack +//--------------------------------------------------------- + +void Song::insertTrack1(Track* track, int idx) + { + if (idx == -1) + idx = _tracks.size(); + _tracks.insert(idx, track); + if (track->type() == Track::AUDIO_SOFTSYNTH) { + SynthI* s = (SynthI*)track; + Synth* sy = s->synth(); + if (!s->isActivated()) + s->initInstance(sy); + } + if (audioState == AUDIO_RUNNING) { + track->activate1(); + track->activate2(); + } + } + +//--------------------------------------------------------- +// insertTrack2 +// realtime part +//--------------------------------------------------------- + +void Song::insertTrack2(Track* track) + { + switch(track->type()) { + case Track::MIDI_SYNTI: + _midiSyntis.push_back((MidiSynti*)track); + break; + case Track::MIDI: + _midis.push_back((MidiTrack*)track); + break; + case Track::MIDI_OUT: + _midiOutPorts.push_back((MidiOutPort*)track); + break; + case Track::MIDI_IN: + _midiInPorts.push_back((MidiInPort*)track); + break; + case Track::WAVE: + _waves.push_back((WaveTrack*)track); + break; + case Track::AUDIO_OUTPUT: + _outputs.push_back((AudioOutput*)track); + break; + case Track::AUDIO_GROUP: + _groups.push_back((AudioGroup*)track); + break; + case Track::AUDIO_INPUT: + _inputs.push_back((AudioInput*)track); + break; + case Track::AUDIO_SOFTSYNTH: + { + SynthI* s = (SynthI*)track; + midiInstruments.push_back(s->instrument()); + _synthIs.push_back(s); + } + break; + default: + fprintf(stderr, "insertTrack2: unknown track type %d\n", track->type()); + // abort(); + return; + } + + // + // connect routes + // + if (track->type() == Track::AUDIO_OUTPUT || track->type() == Track::MIDI_OUT) { + foreach(Route r, *(track->inRoutes())) { + if (r.src.type != RouteNode::AUXPLUGIN) { + r.src.track->addOutRoute(r); + } + } + } + else if (track->type() == Track::AUDIO_INPUT || track->type() == Track::MIDI_IN) { + foreach(Route r, *(track->outRoutes())) { + if (r.dst.type != RouteNode::AUXPLUGIN) { + r.dst.track->addInRoute(r); + } + } + } + else { + foreach(Route r, *(track->inRoutes())) { + if (r.src.type != RouteNode::AUXPLUGIN) { + r.src.track->addOutRoute(r); + } + } + foreach(Route r, *(track->outRoutes())) { + if (r.dst.type != RouteNode::AUXPLUGIN) { + r.dst.track->addInRoute(r); + } + } + } + } + +//--------------------------------------------------------- +// removeTrack +// called from gui context +//--------------------------------------------------------- + +void Song::removeTrack(Track* track) + { + startUndo(); + int idx = _tracks.indexOf(track); + undoOp(UndoOp::DeleteTrack, idx, track); + removeTrack1(track); + audio->msgRemoveTrack(track); + removeTrack3(track); + endUndo(SC_TRACK_REMOVED | SC_ROUTE); + } + +//--------------------------------------------------------- +// removeTrack1 +// non realtime part of removeTrack +//--------------------------------------------------------- + +void Song::removeTrack1(Track* track) + { + track->deactivate(); + _tracks.removeAt(_tracks.indexOf(track)); + } + +//--------------------------------------------------------- +// removeTrack2 +// called from RT context +//--------------------------------------------------------- + +void Song::removeTrack2(Track* track) + { + switch (track->type()) { + case Track::MIDI_SYNTI: + _midiSyntis.removeAt(_midiSyntis.indexOf((MidiSynti*)track)); + break; + case Track::MIDI: + _midis.removeAt(_midis.indexOf((MidiTrack*)track)); + break; + case Track::MIDI_OUT: + _midiOutPorts.removeAt(_midiOutPorts.indexOf((MidiOutPort*)track)); + break; + case Track::MIDI_IN: + _midiInPorts.removeAt(_midiInPorts.indexOf((MidiInPort*)track)); + break; + case Track::WAVE: + _waves.removeAt(_waves.indexOf((WaveTrack*)track)); + break; + case Track::AUDIO_OUTPUT: + _outputs.removeAt(_outputs.indexOf((AudioOutput*)track)); + break; + case Track::AUDIO_INPUT: + _inputs.removeAt(_inputs.indexOf((AudioInput*)track)); + break; + case Track::AUDIO_GROUP: + _groups.removeAt(_groups.indexOf((AudioGroup*)track)); + break; + case Track::AUDIO_SOFTSYNTH: + { + SynthI* s = (SynthI*) track; + s->deactivate2(); + _synthIs.removeAt(_synthIs.indexOf(s)); + } + break; + case Track::TRACK_TYPES: + return; + } + // + // remove routes + // + foreach (const Route r, *(track->inRoutes())) { + if (r.src.type != RouteNode::TRACK) + continue; + int idx = r.src.track->outRoutes()->indexOf(r); + if (idx != -1) + r.src.track->outRoutes()->removeAt(idx); + else + printf("Song::removeTrack2(): input route not found\n"); + } + foreach (const Route r, *(track->outRoutes())) { + if (r.dst.type != RouteNode::TRACK) + continue; + int idx = r.dst.track->inRoutes()->indexOf(r); + if (idx != -1) + r.dst.track->inRoutes()->removeAt(idx); + else { + printf("Song::removeTrack2(): output route not found\n"); + } + } + } + +//--------------------------------------------------------- +// removeTrack3 +// non realtime part of removeTrack +//--------------------------------------------------------- + +void Song::removeTrack3(Track* track) + { + if (track->type() == Track::AUDIO_SOFTSYNTH) { + SynthI* s = (SynthI*) track; + s->deactivate3(); + } + emit trackRemoved(track); + } + +//--------------------------------------------------------- +// synthesizer +//--------------------------------------------------------- + +std::vector* Song::synthesizer() const + { + std::vector* l = new std::vector; + + for (std::vector::const_iterator i = synthis.begin(); + i != synthis.end(); ++i) { + l->push_back((*i)->name()); + } + return l; + } + +//--------------------------------------------------------- +// setRecordFlag +//--------------------------------------------------------- + +void Song::setRecordFlag(Track* track, bool val) + { + if (track->type() == Track::AUDIO_OUTPUT) { + if (!val && track->recordFlag() == false) { + muse->bounceToFile(); + } + } + track->setRecordFlag(val); + } + +//--------------------------------------------------------- +// setMute +//--------------------------------------------------------- + +void Song::setMute(Track* track, bool val) + { + track->setMute(val); + emit muteChanged(track, track->mute()); + } + +//--------------------------------------------------------- +// setMonitor +//--------------------------------------------------------- + +void Song::setMonitor(Track* track, bool val) + { + track->setMonitor(val); +// emit monitorChanged(track, track->mute()); + } + +//--------------------------------------------------------- +// setOff +//--------------------------------------------------------- + +void Song::setOff(Track* track, bool val) + { + track->setOff(val); + emit offChanged(track, track->off()); + } + +//--------------------------------------------------------- +// setAutoRead +//--------------------------------------------------------- + +void Song::setAutoRead(Track* track, bool val) + { + track->setAutoRead(val); + emit autoReadChanged(track, track->autoRead()); + } + +//--------------------------------------------------------- +// setAutoWrite +//--------------------------------------------------------- + +void Song::setAutoWrite(Track* track, bool val) + { + track->setAutoWrite(val); + emit autoWriteChanged(track, track->autoRead()); + } + +//--------------------------------------------------------- +// setSolo +//--------------------------------------------------------- + +void Song::setSolo(Track* track, bool val) + { + if (!track->setSolo(val)) + return; + emit soloChanged(track, track->solo()); + soloFlag = false; + for (iTrack i = _tracks.begin(); i != _tracks.end(); ++i) { + if ((*i)->solo()) { + soloFlag = true; + break; + } + } + for (iTrack i = _tracks.begin(); i != _tracks.end(); ++i) { + (*i)->updateMute(); + } + } + +//--------------------------------------------------------- +// moveTrack +//--------------------------------------------------------- + +void Song::moveTrack(Track* src, Track* dst) + { + iTrack si = qFind(_tracks.begin(), _tracks.end(), src); + iTrack di = qFind(_tracks.begin(), _tracks.end(), dst); + if (si == _tracks.end() || di == _tracks.end()) { + printf("Song::moveTrack() track not found\n"); + return; + } + _tracks.erase(si); + _tracks.insert(di, src); + } + +//--------------------------------------------------------- +// changeTrackName +//--------------------------------------------------------- + +void Song::changeTrackName(Track* t, const QString& s) + { + startUndo(); + undoOp(UndoOp::RenameTrack, t, t->name(), s); + t->setName(s); + endUndo(SC_TRACK_MODIFIED); + } + +//--------------------------------------------------------- +// trackExists +//--------------------------------------------------------- + +bool Song::trackExists(Track* t) const + { + return findTrack(t->name()) != 0; + } + +//--------------------------------------------------------- +// findTrack +//--------------------------------------------------------- + +Track* Song::findTrack(const QString& name) const + { + for (int i = 0; i < _tracks.size(); ++i) { + if (_tracks[i]->name() == name) + return _tracks[i]; + } + return 0; + } + diff --git a/attic/muse_qt4_evolution/muse/strip.cpp b/attic/muse_qt4_evolution/muse/strip.cpp new file mode 100644 index 00000000..38519878 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/strip.cpp @@ -0,0 +1,123 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "gconfig.h" +#include "song.h" +#include "strip.h" +#include "muse.h" +#include "widgets/simplebutton.h" +#include "widgets/utils.h" + +//--------------------------------------------------------- +// resetPeaks +//--------------------------------------------------------- + +void Strip::resetPeaks() + { + track->resetPeaks(); + } + +//--------------------------------------------------------- +// updateLabel +//--------------------------------------------------------- + +void Strip::updateLabel() + { + label->setText(track->name()); + label->setToolTip(track->name()); + } + +//--------------------------------------------------------- +// Strip +// create mixer strip +//--------------------------------------------------------- + +Strip::Strip(Mixer* m, Track* t, bool align) + : QFrame() + { + ar = 0; + aw = 0; + setAttribute(Qt::WA_DeleteOnClose, true); + mixer = m; + _align = align; + setFrameStyle(QFrame::Panel | QFrame::Raised); + setLineWidth(2); + + track = t; + grid = new QGridLayout; + grid->setMargin(0); + grid->setSpacing(0); + setLayout(grid); + + //--------------------------------------------- + // label + //--------------------------------------------- + + label = new QLabel; + label->setObjectName(track->cname()); + label->setFixedHeight(LABEL_HEIGHT); + label->setTextFormat(Qt::PlainText); + label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); + label->setLineWidth(2); + label->setFrameStyle(QFrame::Sunken | QFrame::StyledPanel); + updateLabel(); + grid->addWidget(label, 0, 0, 1, 2); + connect(muse, SIGNAL(configChanged()), SLOT(configChanged())); + connect(track, SIGNAL(controllerChanged(int)), SLOT(controllerChanged(int))); + } + +//--------------------------------------------------------- +// Strip +//--------------------------------------------------------- + +Strip::~Strip() + { + } + +//--------------------------------------------------------- +// configChanged +//--------------------------------------------------------- + +void Strip::configChanged() + { + updateLabel(); + } + +//--------------------------------------------------------- +// addAutomationButtons +//--------------------------------------------------------- + +void Strip::addAutomationButtons(int row) + { + ar = newAutoReadButton(); + ar->setFixedHeight(BUTTON_HEIGHT); + ar->setChecked(track->autoRead()); + grid->addWidget(ar, row, 0); + aw = newAutoWriteButton(); + aw->setFixedHeight(BUTTON_HEIGHT); + aw->setChecked(track->autoWrite()); + grid->addWidget(aw, row, 1); + connect(ar, SIGNAL(clicked(bool)), SLOT(autoReadToggled(bool))); + connect(aw, SIGNAL(clicked(bool)), SLOT(autoWriteToggled(bool))); + connect(track, SIGNAL(autoReadChanged(bool)), ar, SLOT(setChecked(bool))); + connect(track, SIGNAL(autoWriteChanged(bool)), aw, SLOT(setChecked(bool))); + } + + diff --git a/attic/muse_qt4_evolution/muse/strip.h b/attic/muse_qt4_evolution/muse/strip.h new file mode 100644 index 00000000..1e5f7bd4 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/strip.h @@ -0,0 +1,75 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __STRIP_H__ +#define __STRIP_H__ + +#include "globaldefs.h" +#include "gui.h" + +class Track; +class Meter; +class SimpleButton; +class Mixer; + +static const QSize entrySize(STRIP_WIDTH/2-2, ENTRY_HEIGHT); + +//--------------------------------------------------------- +// Strip +//--------------------------------------------------------- + +class Strip : public QFrame { + Q_OBJECT + + protected: + Mixer* mixer; + Track* track; + QLabel* label; + QGridLayout* grid; + + SimpleButton* solo; + SimpleButton* mute; + SimpleButton* ar; + SimpleButton* aw; + + void updateLabel(); + bool _align; // align elements for mixer app + + void recordToggled(bool); + void addAutomationButtons(int row); + void addMidiInPorts(QMenu* menu, Track* dtrack, int channel); + void addMidiOutPorts(QMenu* menu, Track* strack, int channel); + + public slots: + void resetPeaks(); + virtual void songChanged(int) = 0; + virtual void controllerChanged(int) {} + void configChanged(); + + public: + Strip(Mixer* m, Track* t, bool align); + ~Strip(); + Track* getTrack() const { return track; } + virtual void heartBeat() = 0; + virtual QSize sizeHint() const { return QSize(STRIP_WIDTH, 80); } + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/style.qss b/attic/muse_qt4_evolution/muse/style.qss new file mode 100644 index 00000000..b62122c5 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/style.qss @@ -0,0 +1,66 @@ +/* + * this is the MusE application style sheet + */ + +QLabel#midiChannelLabel { font-size: 6pt } +MidiRack, EffectRack { font-size: 8pt } +QLabel#trackLabel { font-size: 6pt } +SimpleButton { font-size: 8pt } +QToolButton#routeButton { font-size: 8pt } +QToolButton#preButton { font-size: 8pt } + +TimeCanvas { + qproperty-fontSize1: 6; + qproperty-fontSize2: 8; + qproperty-fontSize3: 8 + } + +QLabel#knobLabel { font-size: 8pt } +Awl--MidiVolEntry { font-size: 5pt } +Awl--MidiPanEntry { font-size: 5pt } +Awl--VolEntry { font-size: 5pt } +Awl--PanEntry { font-size: 5pt } + +QLabel#AudioOut { + font-size: 7pt; + background-color: white; + } + +QLabel#Group { + font-size: 7pt; + background-color: yellow; + } + +QLabel#Wave { + font-size: 7pt; + background-color: rgb(0,255,0); + } + +QLabel#AudioIn { + font-size: 7pt; + background-color: red; + } + +QLabel#Synth { + font-size: 7pt; + background-color: blue; + } + +QLabel#Midi { + font-size: 7pt; + background-color: gray; + } + +QLabel#MidiOut { + font-size: 7pt; + background-color: gray; + } + +QLabel#MidiIn { + font-size: 7pt; + background-color: gray; + } +QLabel#M-Synth { + font-size: 7pt; + background-color: gray; + } diff --git a/attic/muse_qt4_evolution/muse/sync.cpp b/attic/muse_qt4_evolution/muse/sync.cpp new file mode 100644 index 00000000..c4cb30fc --- /dev/null +++ b/attic/muse_qt4_evolution/muse/sync.cpp @@ -0,0 +1,499 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "sync.h" +#include "song.h" +#include "widgets/utils.h" +#include "globals.h" +#include "audio.h" +#include "audiodev.h" +#include "gconfig.h" +#include "al/tempo.h" +#include "al/al.h" + +int rxSyncPort = -1; // receive from all ports +int txSyncPort = 1; + +bool debugSync = false; +MTC mtcOffset; +bool extSyncFlag = false; +bool genMTCSync = false; // output MTC Sync +bool genMCSync = false; // output MidiClock Sync +bool genMMC = false; // output Midi Machine Control +bool acceptMTC = false; +bool acceptMC = true; +bool acceptMMC = true; + +static MTC mtcCurTime; +// static int mtcState; // 0-7 next expected quarter message +// static bool mtcValid; +// static int mtcLost; +// static bool mtcSync; // receive complete mtc frame? + +//static bool mcStart = false; +//static int mcStartTick; + +enum { + MMC_STOP = 1, + MMC_PLAY = 2, + MMC_DEFERRED_PLAY = 3, + MMC_FAST_FORWARD = 4, + MMC_REWIND = 5, + MMC_RECORD_STROBE = 6, // Punch In + MMC_RECORD_EXIT = 7, // Punch Out + MMC_PAUSE = 9, + MMC_RESET = 13, + MMC_GOTO = 0x44 + }; + +#if 0 +//--------------------------------------------------------- +// mmcInput +// Midi Machine Control Input received +//--------------------------------------------------------- + +void MidiSeq::mmcInput(int id, int cmd, const Pos& pos) + { +#if 0 + int rxDeviceId = 127; + + if (!extSyncFlag || !acceptMMC || (id != 127 && id != rxDeviceId)) + return; + + if (debugMsg) + printf("mmcInput: id %d cmd %02x %02x\n", id, cmd, cmd); + + switch (cmd) { + case MMC_STOP: + if (debugSync) + printf(" MMC: STOP\n"); + if (audio->isPlaying()) + audioDriver->stopTransport(); + else + // reset REC + audio->sendMsgToGui(MSG_STOP); + break; + case MMC_PLAY: + case MMC_DEFERRED_PLAY: + audioDriver->startTransport(); + break; + case MMC_FAST_FORWARD: + printf("MMC: FF not implemented\n"); + break; + case MMC_REWIND: + printf("MMC: REWIND not implemented\n"); + break; + case MMC_RECORD_STROBE: + printf("MMC: REC STROBE not implemented\n"); + break; + case MMC_RECORD_EXIT: + printf("MMC: REC EXIT not implemented\n"); + break; + case MMC_PAUSE: + audio->sendMsgToGui(MSG_RECORD); + break; + case MMC_RESET: + printf("MMC: RESET not implemented\n"); + break; + + case MMC_GOTO: + audioDriver->seekTransport(pos.frame()); + break; + + default: + printf("MMC id %x cmd %x, unknown\n", id, cmd); + break; + } +#endif + } + +//--------------------------------------------------------- +// mtcInputQuarter +// process Quarter Frame Message +//--------------------------------------------------------- + +void MidiSeq::mtcInputQuarter(int, unsigned char c) + { +#if 0 + static int hour, min, sec, frame; + + if (!extSyncFlag) + return; + + int valL = c & 0xf; + int valH = valL << 4; + + int _state = (c & 0x70) >> 4; + if (mtcState != _state) + mtcLost += _state - mtcState; + mtcState = _state + 1; + + switch(_state) { + case 7: + hour = (hour & 0x0f) | valH; + break; + case 6: + hour = (hour & 0xf0) | valL; + break; + case 5: + min = (min & 0x0f) | valH; + break; + case 4: + min = (min & 0xf0) | valL; + break; + case 3: + sec = (sec & 0x0f) | valH; + break; + case 2: + sec = (sec & 0xf0) | valL; + break; + case 1: + frame = (frame & 0x0f) | valH; + break; + case 0: frame = (frame & 0xf0) | valL; + break; + } + frame &= 0x1f; // 0-29 + sec &= 0x3f; // 0-59 + min &= 0x3f; // 0-59 + hour &= 0x1f; + + if (mtcState == 8) { + mtcValid = (mtcLost == 0); + mtcState = 0; + mtcLost = 0; + if (mtcValid) { + mtcCurTime.set(hour, min, sec, frame); + mtcSyncMsg(mtcCurTime, !mtcSync); + mtcSync = true; + } + } + else if (mtcValid && (mtcLost == 0)) { + mtcCurTime.incQuarter(); + mtcSyncMsg(mtcCurTime, false); + } +#endif + } + +//--------------------------------------------------------- +// mtcInputFull +// process Frame Message +//--------------------------------------------------------- + +void MidiSeq::mtcInputFull(const unsigned char* p, int n) + { +#if 0 + if (debugSync) + printf("mtcInputFull\n"); + if (!extSyncFlag) + return; + + if (p[3] != 1) { + if (p[3] != 2) { // silently ignore user bits + printf("unknown mtc msg subtype 0x%02x\n", p[3]); + dump(p, n); + } + return; + } + int hour = p[4]; + int min = p[5]; + int sec = p[6]; + int frame = p[7]; + + frame &= 0x1f; // 0-29 + sec &= 0x3f; // 0-59 + min &= 0x3f; // 0-59 +// int type = (hour >> 5) & 3; + hour &= 0x1f; + + mtcCurTime.set(hour, min, sec, frame); + mtcState = 0; + mtcValid = true; + mtcLost = 0; +#endif + } + +//--------------------------------------------------------- +// nonRealtimeSystemSysex +//--------------------------------------------------------- + +void MidiSeq::nonRealtimeSystemSysex(const unsigned char* p, int n) + { +#if 0 +// int chan = p[2]; + switch(p[3]) { + case 4: + printf("NRT Setup\n"); + break; + default: + printf("unknown NRT Msg 0x%02x\n", p[3]); + dump(p, n); + break; + } +#endif + } + +//--------------------------------------------------------- +// setSongPosition +// MidiBeat is a 14 Bit value. Each MidiBeat spans +// 6 MIDI Clocks. Inother words, each MIDI Beat is a +// 16th note (since there are 24 MIDI Clocks in a +// quarter note). +//--------------------------------------------------------- + +void MidiSeq::setSongPosition(int port, int midiBeat) + { +#if 0 + if (midiInputTrace) + printf("set song position port:%d %d\n", port, midiBeat); + if (!extSyncFlag) + return; + Pos pos((config.division * midiBeat) / 4, AL::TICKS); + audioDriver->seekTransport(pos.frame()); + if (debugSync) + printf("setSongPosition %d\n", pos.tick()); +#endif + } + +//--------------------------------------------------------- +// realtimeSystemInput +// real time message received +//--------------------------------------------------------- + +void MidiSeq::realtimeSystemInput(int port, int c) + { +#if 0 + if (midiInputTrace) + printf("realtimeSystemInput port:%d 0x%x\n", port+1, c); + + if (midiInputTrace && (rxSyncPort != port) && rxSyncPort != -1) { + if (debugSync) + printf("rxSyncPort configured as %d; received sync from port %d\n", + rxSyncPort, port); + return; + } + if (!extSyncFlag) + return; + switch(c) { + case 0xf8: // midi clock (24 ticks / quarter note) + { + double mclock0 = curTime(); + // Difference in time last 2 rounds: + double tdiff0 = mclock0 - mclock1; + double tdiff1 = mclock1 - mclock2; + double averagetimediff = 0.0; + + if (mclock1 != 0.0) { + if (storedtimediffs < 24) + { + timediff[storedtimediffs] = mclock0 - mclock1; + storedtimediffs++; + } + else { + for (int i=0; i<23; i++) { + timediff[i] = timediff[i+1]; + } + timediff[23] = mclock0 - mclock1; + } + // Calculate average timediff: + for (int i=0; i < storedtimediffs; i++) { + averagetimediff += timediff[i]/storedtimediffs; + } + } + processMidiClock(); + + // Compare w audio if playing: + if (audio->isPlaying() /*state == PLAY*/) { + //BEGIN standard setup: + recTick += config.division / 24; // The one we're syncing to + int tempo = AL::tempomap.tempo(0); + unsigned curFrame = audio->pos().frame(); + double songtick = (double(curFrame)/double(AL::sampleRate)) * config.division * 1000000.0 / double(tempo); + double scale = tdiff0/averagetimediff; + double tickdiff = songtick - ((double) recTick - 24 + scale*24.0); + + //END standard setup + if (debugSync) { + // + // Create debug values for printing out which beat we're at, etc etc... yaddayadda... + // + int m, b, t; + audio->pos().mbt(&m, &b, &t); + + int song_beat = b + m*4; // if the time-signature is different than 4/4, this will be wrong. + int sync_beat = recTick/config.division; + printf("pT=%.3f rT=%d diff=%.3f songB=%d syncB=%d scale=%.3f", songtick, recTick, tickdiff, song_beat, sync_beat, scale); + } + //if ((mclock2 !=0.0) && (tdiff1 > 0.0) && tickdiff != 0.0 && lastTempo != 0) { + if ((mclock2 !=0.0) && (tdiff1 > 0.0) && fabs(tickdiff) > 2.0 && lastTempo != 0) { + // Interpolate: + double tickdiff1 = songtick1 - recTick1; + double tickdiff2 = songtick2 - recTick2; + //double newtickdiff = tickdiff/3.0 + tickdiff1/5.0 + tickdiff2/7.0; //2 min 15 sec, 120BPM, -p 512 jackd + //double newtickdiff = tickdiff/4.0 + tickdiff1/4.0 + tickdiff2/4.0; // Not long... :-P + //double newtickdiff = tickdiff/5.0 + tickdiff1/8.0 + tickdiff2/12.0; //3,5 mins on 120BPM, -p 512 jackd + //double newtickdiff = tickdiff/7.0 + tickdiff1/8.0 + tickdiff2/9.0; //2 min 15 sec, 120BPM, -p 512 jackd + //double newtickdiff = tickdiff/5.0 + tickdiff1/8.0 + tickdiff2/16.0; //3,5 mins on 120BPM, -p 512 jackd + double newtickdiff = tickdiff/5.0 + tickdiff1/16.0 + tickdiff2/24.0; //5 mins 30 secs on 116BPM, -p 512 jackd + //double newtickdiff = tickdiff/5.0 + tickdiff1/23.0 + tickdiff2/31.0; //5 mins on 116BPM, -p 512 jackd + //double newtickdiff = tickdiff + tickdiff1/8.0 + tickdiff2/16.0; // Not long... + + if (newtickdiff != 0.0) { + int newTempo = AL::tempomap.tempo(0); + //newTempo += int(24.0 * newtickdiff * scale); + newTempo += int(24.0 * newtickdiff); + if (debugSync) + printf(" tdiff=%f ntd=%f lt=%d tmpo=%.3f", tdiff0, newtickdiff, lastTempo, (float)((1000000.0 * 60.0)/newTempo)); + AL::tempomap.setTempo(0,newTempo); + } + if (debugSync) + printf("\n"); + } + else if (debugSync) + printf("\n"); + + //BEGIN post calc + lastTempo = tempo; + recTick2 = recTick1; + recTick1 = recTick; + mclock2 = mclock1; + mclock1 = mclock0; + songtick2 = songtick1; + songtick1 = songtick; + //END post calc + break; + } // END state play + // + // Pre-sync (when audio is not running) + // Calculate tempo depending on time per pulse + // + if (mclock1 == 0.0) { +//TODO3 midiPorts[port].device()->discardInput(); + if (debugSync) + printf("Discarding input from port %d\n", port); + } + if ((mclock2 != 0.0) && (tdiff0 > 0.0)) { + int tempo0 = int(24000000.0 * tdiff0 + .5); + int tempo1 = int(24000000.0 * tdiff1 + .5); + int tempo = AL::tempomap.tempo(0); + + int diff0 = tempo0 - tempo; + int diff1 = tempo1 - tempo0; + if (diff0) { + int newTempo = tempo + diff0/8 + diff1/16; + if (debugSync) + printf("setting new tempo %d = %f\n", newTempo, (float)((1000000.0 * 60.0)/newTempo)); + AL::tempomap.setTempo(0, newTempo); + } + } + mclock2 = mclock1; + mclock1 = mclock0; + } + break; + case 0xf9: // midi tick (every 10 msec) + if (mcStart) { + song->setPos(0, mcStartTick); + mcStart = false; + return; + } + break; + case 0xfa: // start + if (debugSync) + printf(" start\n"); + if (!audio->isPlaying() /*state == IDLE*/) { + //seek(0); + audioDriver->seekTransport(0); + unsigned curFrame = audioDriver->framePos(); + recTick = recTick1 = recTick2 = 0; + mclock1 = 0.0; mclock2 = 0.0; + songtick1 = songtick2 = 0; + if (debugSync) + printf(" curFrame: %d curTick: %d tempo: %d\n", curFrame, recTick, AL::tempomap.tempo(0)); + + //startPlay(); + storedtimediffs = 0; + for (int i=0; i<24; i++) + timediff[i] = 0.0; + audio->msgPlay(true); + } + break; + case 0xfb: // continue + if (debugSync) + printf(" continue\n"); + if (!audio->isPlaying() /*state == IDLE */) { + unsigned curFrame = audioDriver->framePos(); + recTick = AL::tempomap.frame2tick(curFrame); // don't think this will work... (ml) + audio->msgPlay(true); + } + break; + case 0xfc: // stop + if (debugSync) + printf(" stop\n"); + if (audio->isPlaying() /*state == PLAY*/) + audio->msgPlay(false); + break; + case 0xfd: // unknown + case 0xfe: // active sensing + case 0xff: // system reset + break; + } +#endif + + } + +//--------------------------------------------------------- +// mtcSyncMsg +// process received mtc Sync +// seekFlag - first complete mtc frame received after +// start +//--------------------------------------------------------- + +void MidiSeq::mtcSyncMsg(const MTC& /*mtc*/, bool /*seekFlag*/) + { +#if 0 + double time = mtc.time(); + if (debugSync) + printf("mtcSyncMsg: time %f\n", time); + + if (seekFlag && state == START_PLAY) { +// int tick = tempomap.time2tick(time); + state = PLAY; + sendMsgToGui(MSG_PLAY); + return; + } + // double curT = curTime(); + + if (tempoSN != tempomap.tempoSN()) { + double cpos = tempomap.tick2time(_midiTick, 0); + samplePosStart = samplePos - lrint(cpos * sampleRate); + rtcTickStart = rtcTick - lrint(cpos * realRtcTicks); + tempoSN = tempomap.tempoSN(); + } + + // + // diff is the time in sec MusE is out of sync + // + double diff = time - (double(samplePosStart)/double(sampleRate)); + if (debugSync) + printf(" state %d diff %f\n", mtcState, diff); +#endif + } +#endif + diff --git a/attic/muse_qt4_evolution/muse/sync.h b/attic/muse_qt4_evolution/muse/sync.h new file mode 100644 index 00000000..b8d8920b --- /dev/null +++ b/attic/muse_qt4_evolution/muse/sync.h @@ -0,0 +1,37 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __SYNC_H__ +#define __SYNC_H__ + +#include "mtc.h" + +extern bool debugSync; +extern MTC mtcOffset; +extern bool extSyncFlag; +extern bool genMTCSync; // output MTC Sync +extern bool genMCSync; // output MidiClock Sync +extern bool genMMC; // output Midi Machine Control +extern bool acceptMTC; +extern bool acceptMC; +extern bool acceptMMC; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/synth.cpp b/attic/muse_qt4_evolution/muse/synth.cpp new file mode 100644 index 00000000..bbec5e34 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/synth.cpp @@ -0,0 +1,588 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include + +#include "al/al.h" +#include "al/xml.h" +#include "al/tempo.h" +#include "muse.h" +#include "synth.h" +#include "midi.h" +#include "synti/libsynti/mess.h" +#include "song.h" +#include "audio.h" +#include "event.h" +#include "midievent.h" +#include "audio.h" +#include "midictrl.h" +#include "instruments/minstrument.h" +#include "audiodev.h" + +std::vector synthis; // array of available synthis + +extern void connectNodes(AudioTrack*, AudioTrack*); + +//--------------------------------------------------------- +// description +//--------------------------------------------------------- + +const char* MessSynth::description() const + { + return descr ? descr->description : ""; + } + +//--------------------------------------------------------- +// version +//--------------------------------------------------------- + +const char* MessSynth::version() const + { + return descr ? descr->version : ""; + } + +bool MessSynthIF::guiVisible() const + { + return _mess ? _mess->guiVisible() : false; + } + +void MessSynthIF::showGui(bool v) + { + if (v == guiVisible()) + return; + if (_mess) + _mess->showGui(v); + } + +bool MessSynthIF::hasGui() const + { + if (_mess) + return _mess->hasGui(); + return false; + } + +MidiEvent MessSynthIF::receiveEvent() + { + if (_mess) + return _mess->receiveEvent(); + return MidiEvent(); + } + +int MessSynthIF::eventsPending() const + { + if (_mess) + return _mess->eventsPending(); + return 0; + } + +void MessSynthIF::getGeometry(int* x, int* y, int* w, int* h) const + { + if (_mess) + _mess->getGeometry(x, y, w, h); + } + +void MessSynthIF::setGeometry(int x, int y, int w, int h) + { + if (_mess) + _mess->setGeometry(x, y, w, h); + } + +//--------------------------------------------------------- +// findSynth +// search for synthesizer base class +//--------------------------------------------------------- + +Synth* findSynth(const QString& sclass) + { + for (std::vector::iterator i = synthis.begin(); + i != synthis.end(); ++i) { + if ((*i)->name() == sclass) + return *i; + } + printf("synthi class <%s> not found\n", sclass.toLatin1().data()); + return 0; + } + +//--------------------------------------------------------- +// Synth +//--------------------------------------------------------- + +Synth::Synth(const QFileInfo* fi, QString s) + : info(*fi), _name(s) + { + _instances = 0; + } + +//--------------------------------------------------------- +// instantiate +//--------------------------------------------------------- + +void* MessSynth::instantiate(const QString& instanceName) + { + ++_instances; + const char* path = strdup(info.filePath().toAscii().data()); + + // load Synti dll + if (debugMsg) + printf(" load synti <%s>\n", path); + void* handle = dlopen(path, RTLD_NOW); + // void* handle = dlopen(path, RTLD_LAZY); + if (handle == 0) { + fprintf(stderr, "Synth::instantiate: dlopen(%s) failed: %s\n", + path, dlerror()); + delete path; + return 0; + } + typedef const MESS* (*MESS_Function)(); + MESS_Function msynth = (MESS_Function)dlsym(handle, "mess_descriptor"); + + if (!msynth) { + const char *txt = dlerror(); + if (txt) { + fprintf(stderr, + "Unable to find msynth_descriptor() function in plugin " + "library file \"%s\": %s.\n" + "Are you sure this is a MESS plugin file?\n", + path, txt); + delete path; + return 0; + } + } + delete path; + descr = msynth(); + if (descr == 0) { + fprintf(stderr, "Synth::instantiate: no MESS descr found\n"); + return 0; + } + Mess* mess = descr->instantiate(AL::sampleRate, instanceName.toLatin1().data()); + return mess; + } + +//--------------------------------------------------------- +// SynthI +//--------------------------------------------------------- + +SynthI::SynthI() + : AudioTrack() + { + track = this; + synthesizer = 0; + _sif = 0; + // setVolume(1.0); + // setPan(0.0); + setReadonly(true); // midi instrument cannot be edited + } + +//--------------------------------------------------------- +// ~SynthI +//--------------------------------------------------------- + +SynthI::~SynthI() + { + deactivate2(); + deactivate3(); + } + +//--------------------------------------------------------- +// setName +//--------------------------------------------------------- + +void SynthI::setName(const QString& s) + { + Track::setName(s); + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +bool MessSynthIF::init(Synth* s, SynthI* si) + { + _mess = (Mess*)((MessSynth*)s)->instantiate(si->name()); + return (_mess == 0); + } + +//--------------------------------------------------------- +// channels +//--------------------------------------------------------- + +int MessSynthIF::channels() const + { + return _mess->channels(); + } + +//--------------------------------------------------------- +// createSIF +//--------------------------------------------------------- + +SynthIF* MessSynth::createSIF(SynthI* si) + { + MessSynthIF* sif = new MessSynthIF(si); + sif->init(this, si); + return sif; + } + +//--------------------------------------------------------- +// initInstance +// returns false on success +//--------------------------------------------------------- + +bool SynthI::initInstance(Synth* s) + { + synthesizer = s; + _sif = s->createSIF(this); + + setIName(name()); // set instrument name + int n = _sif->channels(); + AudioTrack::setChannels(n); + + //--------------------------------------------------- + // read available controller from synti + //--------------------------------------------------- + + int id = 0; + MidiControllerList* cl = MidiInstrument::controller(); + for (;;) { + const char* name; + int ctrl; + int min; + int max; + id = _sif->getControllerInfo(id, &name, &ctrl, &min, &max); + if (id == 0) + break; + MidiController* c = new MidiController(QString(name), ctrl, min, max, 0); + cl->push_back(c); + } + + EventList* iel = midiState(); + if (!iel->empty()) { + for (iEvent i = iel->begin(); i != iel->end(); ++i) { + Event ev = i->second; + MidiEvent pev(0, 0, ev); + if (_sif->putEvent(pev)) + putFifo.put(pev); // save for later retry + } + iel->clear(); + } + + int idx = 0; + for (std::vector::iterator i = initParams.begin(); i != initParams.end(); ++i, ++idx) + _sif->setParameter(idx, *i); + return false; + } + +//--------------------------------------------------------- +// getControllerInfo +//--------------------------------------------------------- + +int MessSynthIF::getControllerInfo(int id, const char** name, int* ctrl, int* min, int* max) + { + return _mess->getControllerInfo(id, name, ctrl, min, max); + } + +//--------------------------------------------------------- +// SynthI::deactivate +//--------------------------------------------------------- + +void SynthI::deactivate2() + { + removeMidiInstrument(this); + } + +//--------------------------------------------------------- +// deactivate3 +//--------------------------------------------------------- + +void SynthI::deactivate3() + { + delete _sif; + _sif = 0; + synthesizer->incInstances(-1); + } + +void MessSynthIF::deactivate3() + { + if (_mess) { + delete _mess; + _mess = 0; + } + } + +MessSynthIF::~MessSynthIF() + { + deactivate3(); + } + +//--------------------------------------------------------- +// initMidiSynth +// search for software synthis and advertise +//--------------------------------------------------------- + +void initMidiSynth() + { + QString s = museGlobalLib + "/synthi"; + +#ifdef __APPLE__ + QDir pluginDir(s, QString("*.dylib"), 0, QDir::Files); +#else + QDir pluginDir(s, QString("*.so"), 0, QDir::Files); +#endif + if (debugMsg) + printf("searching for software synthesizer in <%s>\n", s.toLatin1().data()); + if (pluginDir.exists()) { + QFileInfoList list = pluginDir.entryInfoList(); + for (int i = 0; i < list.size(); ++i) { + QFileInfo fi = list.at(i); + synthis.push_back(new MessSynth(&fi)); + } + if (debugMsg) + printf("%zd soft synth found\n", synthis.size()); + } + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void SynthI::write(Xml& xml) const + { + xml.stag("SynthI"); + AudioTrack::writeProperties(xml); + xml.tag("class", synth()->name()); + + //--------------------------------------------- + // if soft synth is attached to a midi port, + // write out port number + //--------------------------------------------- + + if (hasGui()) { + xml.tag("guiVisible", guiVisible()); + int x, y, w, h; + w = 0; + h = 0; + getGeometry(&x, &y, &w, &h); + if (h || w) + xml.tag("geometry", QRect(x, y, w, h)); + } + _sif->write(xml); + xml.etag("SynthI"); + + } + +void MessSynthIF::write(Xml& xml) const + { + //--------------------------------------------- + // dump current state of synth + //--------------------------------------------- + + int len = 0; + const unsigned char* p; + _mess->getInitData(&len, &p); + if (len) { + xml.stag("midistate"); + xml.stag(QString("event type=\"%1\" datalen=\"%2\"").arg(Sysex).arg(len)); + xml.dump(len, p); + xml.etag("event"); + xml.etag("midistate"); + } + } + +//--------------------------------------------------------- +// SynthI::read +//--------------------------------------------------------- + +void SynthI::read(QDomNode node) + { + QString sclass; + int port = -1; + bool startGui = false; + QRect r; + + for (; !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + QString tag(e.tagName()); + if (tag == "class") + sclass = e.text(); + else if (tag == "port") + port = e.text().toInt(); + else if (tag == "guiVisible") + startGui = e.text().toInt(); + else if (tag == "midistate") + readMidiState(node.firstChild()); + else if (tag == "param") { + float val = e.text().toFloat(); + initParams.push_back(val); + } + else if (tag == "geometry") + r = AL::readGeometry(node); + else if (AudioTrack::readProperties(node)) { + printf("MusE:SynthI: unknown tag %s\n", e.tagName().toLatin1().data()); + } + } + Synth* s = findSynth(sclass); + if (s == 0) + return; + if (initInstance(s)) + return; + song->insertTrack0(this, -1); + setGeometry(r.x(), r.y(), r.width(), r.height()); + showGui(startGui); + } + +//--------------------------------------------------------- +// getPatchName +//--------------------------------------------------------- + +QString MessSynthIF::getPatchName(int channel, int prog) + { + if (_mess) + return _mess->getPatchName(channel, prog, 0); + return ""; + } + +//--------------------------------------------------------- +// populatePatchPopup +//--------------------------------------------------------- + +void MessSynthIF::populatePatchPopup(QMenu* menu, int ch) + { + menu->clear(); + const MidiPatch* mp = _mess->getPatchInfo(ch, 0); + QMenu *hm = NULL, *lm = NULL; + while (mp) { + switch(mp->typ) { + case MP_TYPE_HBANK : + hm = menu->addMenu(QString(mp->name)); + break; + case MP_TYPE_LBANK : + if(hm) lm = hm->addMenu(QString(mp->name)); + else lm = menu->addMenu(QString(mp->name)); + break; + default : + int id = ((mp->hbank & 0xff) << 16) + + ((mp->lbank & 0xff) << 8) + mp->prog; + QAction* a; + if(lm) a = lm->addAction(QString(mp->name)); + else a = menu->addAction(QString(mp->name)); + a->setData(id); + break; + } + mp = _mess->getPatchInfo(ch, mp); + } + } + + + +//--------------------------------------------------------- +// getData +//--------------------------------------------------------- + +void MessSynthIF::getData(MidiEventList* el, unsigned pos, int ports, unsigned n, float** buffer) + { + // Reset buffers first + for (int port = 0; port < ports; ++port) + memset(buffer[port], 0, n * sizeof(float)); + + int curPos = pos; + int endPos = pos + n; + + while (!synti->putFifo.isEmpty()) { + if (putEvent(synti->putFifo.peek())) + break; + synti->putFifo.remove(); + } + + // Echo events from Synti back + while (_mess->eventsPending()) + // _mess->processEvent(_mess->receiveEvent()); + _mess->receiveEvent(); // throw away event + + if (ports >= channels()) { + iMidiEvent i = el->begin(); + for (; i != el->end(); ++i) { + int frame = i->time(); + if (frame >= endPos) + break; + if (frame > curPos) { + // Several following notes during same segmentsize? + _mess->process(buffer, curPos-pos, frame - curPos); + curPos = frame; // don't process this piece again + } + if (putEvent(*i)) + synti->putFifo.put(*i); + } + if (endPos - curPos > 0) + _mess->process(buffer, curPos-pos, endPos - curPos); + el->erase(el->begin(), i); + } + else { + // this happens if the synth has stereo and we switch the + // channel to mono + + printf("MessSynthIF::getData - ports %d < channels %d\n", + ports, channels()); + } + } + +//--------------------------------------------------------- +// putEvent +// return true on error (busy), event will later be +// resend +//--------------------------------------------------------- + +bool MessSynthIF::putEvent(const MidiEvent& ev) + { + bool rv = true; + if (_mess) { + rv = _mess->processEvent(ev); + if (midiOutputTrace && !rv) { + printf("MidiOut<%s>", synti->name().toLatin1().data()); + ev.dump(); + } + } + return rv; + } + +//--------------------------------------------------------- +// collectInputData +//--------------------------------------------------------- + +void SynthI::collectInputData() + { + bufferEmpty = false; + _sif->getData(&_schedEvents, audioDriver->frameTime(), channels(), + segmentSize, buffer); + } + +//------------------------------------------------------------------- +// process +// Collect all midi events for the current process cycle and put +// into _schedEvents queue. For note on events create the proper +// note off events. The note off events maybe played after the +// current process cycle. +//------------------------------------------------------------------- + +void SynthI::processMidi(SeqTime* t) + { + if (mute()) + return; + MidiOut::processMidi(_schedEvents, t); + } + diff --git a/attic/muse_qt4_evolution/muse/synth.h b/attic/muse_qt4_evolution/muse/synth.h new file mode 100644 index 00000000..cae9c417 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/synth.h @@ -0,0 +1,227 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __SYNTH_H__ +#define __SYNTH_H__ + +#include "globals.h" +#include "instruments/minstrument.h" +#include "audiotrack.h" +#include "midiout.h" +#include "midififo.h" + +class Mess; +struct MESS; + +class SynthI; +class SynthIF; + +//--------------------------------------------------------- +// Synth +// software synthesizer +//--------------------------------------------------------- + +class Synth { + protected: + QFileInfo info; + QString _name; + int _instances; + + public: + Synth(const QFileInfo* fi, QString label); + virtual ~Synth() {} + virtual const char* description() const { return ""; } + virtual const char* version() const { return ""; } + + int instances() const { return _instances; } + virtual void incInstances(int val) { _instances += val; } + + QString name() const { return _name; } + QString path() const { return info.absolutePath(); } + virtual SynthIF* createSIF(SynthI*) = 0; + }; + +//--------------------------------------------------------- +// MessSynth +//--------------------------------------------------------- + +class MessSynth : public Synth { + const MESS* descr; + + public: + MessSynth(const QFileInfo* fi) : Synth(fi, fi->baseName()) { descr = 0; } + virtual ~MessSynth() {} + virtual const char* description() const; + virtual const char* version() const; + virtual void* instantiate(const QString&); + virtual SynthIF* createSIF(SynthI*); + }; + +class Mess; + +//--------------------------------------------------------- +// SynthIF +// synth instance interface +//--------------------------------------------------------- + +class SynthIF { + + protected: + SynthI* synti; + + public: + SynthIF(SynthI* s) { synti = s; } + virtual ~SynthIF() {} + + virtual bool guiVisible() const = 0; + virtual void showGui(bool v) = 0; + virtual bool hasGui() const = 0; + virtual void getGeometry(int*, int*, int*, int*) const = 0; + virtual void setGeometry(int, int, int, int) = 0; + virtual void getData(MidiEventList*, unsigned pos, int ports, unsigned n, float** buffer) = 0; + virtual bool putEvent(const MidiEvent& ev) = 0; + virtual MidiEvent receiveEvent() = 0; + virtual int eventsPending() const = 0; + virtual int channels() const = 0; + virtual void deactivate3() = 0; + virtual QString getPatchName(int, int) = 0; + virtual void populatePatchPopup(QMenu*, int) = 0; + virtual void write(Xml& xml) const = 0; + virtual void setParameter(int idx, float value) = 0; + virtual int getControllerInfo(int id, const char** name, int* ctrl, int* min, int* max) = 0; + virtual bool hasAuxSend() const { return true; } + }; + +//--------------------------------------------------------- +// SynthI +// software synthesizer instance +// Track +// MidiInstrument +//--------------------------------------------------------- + +class SynthI : public AudioTrack, public MidiOut, public MidiInstrument + { + Q_OBJECT + + SynthIF* _sif; + + protected: + Synth* synthesizer; + std::vector initParams; + MidiFifo putFifo; + + bool putMidiEvent(const MidiEvent& ev) { + return _sif->putEvent(ev); + } + + virtual QString open() { return QString("OK");} + virtual void close() {} + virtual void collectInputData(); + + public: + friend class SynthIF; + friend class MessSynthIF; + friend class DssiSynthIF; + + SynthI(); + virtual ~SynthI(); + virtual TrackType type() const { return AUDIO_SOFTSYNTH; } + + virtual void setName(const QString& s); + + SynthIF* sif() const { return _sif; } + bool initInstance(Synth* s); + + void read(QDomNode); + virtual void write(Xml&) const; + + Synth* synth() const { return synthesizer; } + virtual bool isSynti() const { return true; } + + virtual QString getPatchName(int ch, int prog) { + return _sif ? _sif->getPatchName(ch, prog) : ""; + } + virtual void populatePatchPopup(QMenu* m, int i) { + _sif->populatePatchPopup(m, i); + } + + void setParameter(const char* name, const char* value) const; + + bool guiVisible() const { return _sif->guiVisible(); } + void showGui(bool v) { _sif->showGui(v); } + bool hasGui() const { return _sif->hasGui(); } + void getGeometry(int* x, int* y, int* w, int* h) const { + _sif->getGeometry(x, y, w, h); + } + void setGeometry(int x, int y, int w, int h) { + _sif->setGeometry(x, y, w, h); + } + MidiEvent receiveEvent() { return _sif->receiveEvent(); } + int eventsPending() const { return _sif->eventsPending(); } + void deactivate2(); + void deactivate3(); + bool isActivated() const { return synthesizer && _sif; } + virtual bool hasAuxSend() const { return _sif->hasAuxSend(); } + virtual void processMidi(SeqTime*); + + virtual MidiOut* midiOut() { return this; } + virtual MidiInstrument* instrument() { return this; } + }; + +//--------------------------------------------------------- +// MessSynthIF +// mess synthesizer instance +//--------------------------------------------------------- + +class MessSynthIF : public SynthIF { + Mess* _mess; + + public: + MessSynthIF(SynthI* s) : SynthIF(s) { _mess = 0; } + virtual ~MessSynthIF(); + + virtual bool guiVisible() const; + virtual void showGui(bool v); + virtual bool hasGui() const; + virtual void getGeometry(int*, int*, int*, int*) const; + virtual void setGeometry(int, int, int, int); + virtual void getData(MidiEventList*, unsigned pos, int ports, unsigned n, float** buffer); + virtual bool putEvent(const MidiEvent& ev); + virtual MidiEvent receiveEvent(); + virtual int eventsPending() const; + virtual int channels() const; + virtual void deactivate3(); + virtual QString getPatchName(int, int); + virtual void populatePatchPopup(QMenu*, int); + virtual void write(Xml& xml) const; + virtual void setParameter(int, float) {} + virtual int getControllerInfo(int id, const char** name, int* ctrl, int* min, int* max); + bool init(Synth* s, SynthI* si); + }; + +typedef QList SynthIList; +typedef SynthIList::iterator iSynthI; +typedef SynthIList::const_iterator ciSynthI; + +extern std::vector synthis; // array of available synthis +extern Synth* findSynth(const QString& sclass); + +#endif + diff --git a/attic/muse_qt4_evolution/muse/templatedialog.cpp b/attic/muse_qt4_evolution/muse/templatedialog.cpp new file mode 100644 index 00000000..0b655862 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/templatedialog.cpp @@ -0,0 +1,259 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "templatedialog.h" +#include "gconfig.h" +#include "song.h" +#include "icons.h" + +// +// entry types for templateTree tree widget: +// +enum { DIR_TYPE, LOCAL_TEMPLATE_TYPE, GLOBAL_TEMPLATE_TYPE}; + +//--------------------------------------------------------- +// processSubdir +//--------------------------------------------------------- + +void TemplateDialog::processSubdir(QTreeWidgetItem* item, const QString& p, + const QString& subdir, int type) + { + QDir pd(p + "/" + subdir); + pd.setFilter(QDir::Files | QDir::AllDirs | QDir::NoDotAndDotDot); + pd.setNameFilters(QStringList("*.med")); + QFileInfoList el = pd.entryInfoList(); + foreach (QFileInfo s, el) { + QTreeWidgetItem* pi; + if (s.isDir()) { + pi = new QTreeWidgetItem(item, DIR_TYPE); + itemCollapsed(pi); + processSubdir(pi, pd.absolutePath(), s.fileName(), type); + } + else { + pi = new QTreeWidgetItem(item, type); + pi->setIcon(0, style()->standardIcon(QStyle::SP_FileIcon)); + } + pi->setText(0, s.fileName()); + } + } + +//--------------------------------------------------------- +// TemplateDialog +//--------------------------------------------------------- + +TemplateDialog::TemplateDialog(QWidget* parent) + : QDialog(parent) + { + setupUi(this); + templateTree->setSelectionBehavior(QAbstractItemView::SelectRows); + templateTree->setSelectionMode(QAbstractItemView::SingleSelection); + + // + // add global templates to list + // + QTreeWidgetItem* pi; + pi = new QTreeWidgetItem(templateTree, DIR_TYPE); + templateTree->setItemExpanded(pi, true); + itemExpanded(pi); + pi->setText(0, tr("MusE presets")); + processSubdir(pi, museGlobalShare, "templates", GLOBAL_TEMPLATE_TYPE); + + // + // add local templates to list + // + pi = new QTreeWidgetItem(templateTree, DIR_TYPE); + pi->setIcon(0, style()->standardIcon(QStyle::SP_FileIcon)); + templateTree->setItemExpanded(pi, true); + itemExpanded(pi); + pi->setText(0, tr("User presets")); + processSubdir(pi, QDir::homePath() + "/" + config.templatePath, ".", LOCAL_TEMPLATE_TYPE); + + connect(templateTree, + SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), + SLOT(currentChanged(QTreeWidgetItem*, QTreeWidgetItem*))); + connect(templateTree, + SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), + SLOT(itemDoubleClicked(QTreeWidgetItem*, int))); + connect(templateTree, + SIGNAL(itemCollapsed(QTreeWidgetItem*)), + SLOT(itemCollapsed(QTreeWidgetItem*))); + connect(templateTree, + SIGNAL(itemExpanded(QTreeWidgetItem*)), + SLOT(itemExpanded(QTreeWidgetItem*))); + + currentChanged(0, 0); + } + +//--------------------------------------------------------- +// itemCollapsed +//--------------------------------------------------------- + +void TemplateDialog::itemCollapsed(QTreeWidgetItem* item) + { + item->setIcon(0, style()->standardIcon(QStyle::SP_DirClosedIcon)); + } + +//--------------------------------------------------------- +// itemExpanded +//--------------------------------------------------------- + +void TemplateDialog::itemExpanded(QTreeWidgetItem* item) + { + item->setIcon(0, style()->standardIcon(QStyle::SP_DirOpenIcon)); + } + +//--------------------------------------------------------- +// itemPath +//--------------------------------------------------------- + +QString TemplateDialog::itemPath(QTreeWidgetItem* item) const + { + QString path; + QTreeWidgetItem* ti = item; + QStringList dirComponent; + do { + dirComponent.prepend(ti->text(0)); + ti = ti->parent(); + } while (ti); + size_t n = dirComponent.size(); + for (size_t i = 1; i < n; ++i) { + if (!path.isEmpty()) + path += "/"; + path += dirComponent[i]; + } + return path; + } + +//--------------------------------------------------------- +// currentChanged +//--------------------------------------------------------- + +void TemplateDialog::currentChanged(QTreeWidgetItem* item, QTreeWidgetItem*) + { + bool enable = (item != 0) && + ( + (item->type() == LOCAL_TEMPLATE_TYPE) + || + (item->type() == GLOBAL_TEMPLATE_TYPE) + ); + createdDate->setEnabled(enable); + modifiedDate->setEnabled(enable); + comment->setEnabled(enable); + + // newFolder->setEnabled(item == 0 || item->type() == DIR_TYPE); + if (!enable) + return; + + QString pd; + if (item->type() == LOCAL_TEMPLATE_TYPE) + pd = QDir::homePath() + "/" + config.templatePath; + else + pd = museGlobalShare + "/" + "templates"; + + pd += "/" + itemPath(item); + + QFileInfo pf(pd); + modifiedDate->setDateTime(pf.lastModified()); + + QTime time(0, 0, 0); + QDateTime date; + + QFile f(pf.filePath()); + QDomDocument doc; + int line, column; + QString err; + if (!doc.setContent(&f, false, &err, &line, &column)) { + QString col, ln, error; + col.setNum(column); + ln.setNum(line); + error = err + "\n at line: " + ln + " col: " + col; + printf("error reading med file: %s\n", error.toLatin1().data()); + return; + } + for (QDomNode node = doc.documentElement(); !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + if (e.isNull()) + continue; + if (e.tagName() == "muse") { + QString sversion = e.attribute("version", "1.0"); + int major=0, minor=0; + sscanf(sversion.toLatin1().data(), "%d.%d", &major, &minor); + int version = major << 8 + minor; + if (version >= 0x200) { + for (QDomNode n1 = node.firstChild(); !n1.isNull(); n1 = n1.nextSibling()) { + QDomElement e = n1.toElement(); + if (e.tagName() == "song") { + for (QDomNode n2 = n1.firstChild(); !n2.isNull(); n2 = n2.nextSibling()) { + QDomElement e = n2.toElement(); + QString tag(e.tagName()); + QString s(e.text()); + if (tag == "comment") + comment->setPlainText(s); + else if (tag == "createDate") { + date = QDateTime::fromString(e.text(), Qt::ISODate); + break; + } + } + } + } + } + } + } + createdDate->setDateTime(date); + } + +//--------------------------------------------------------- +// templatePath +//--------------------------------------------------------- + +QString TemplateDialog::templatePath() const + { + QTreeWidgetItem* item = templateTree->currentItem(); + QString s; + if (item) { + if (item->type() == LOCAL_TEMPLATE_TYPE) + s = QDir::homePath() + "/" + config.templatePath; + else + s = museGlobalShare + "/" + "templates"; + s += "/" + itemPath(item); + } + return s; + } + +//--------------------------------------------------------- +// setTemplatePath +//--------------------------------------------------------- + +void TemplateDialog::setTemplatePath(const QString&) + { + // TODO + } + +//--------------------------------------------------------- +// itemDoubleClicked +//--------------------------------------------------------- + +void TemplateDialog::itemDoubleClicked(QTreeWidgetItem* item, int) + { + if ((item->type() == LOCAL_TEMPLATE_TYPE) || + (item->type() == GLOBAL_TEMPLATE_TYPE)) + accept(); + } + diff --git a/attic/muse_qt4_evolution/muse/templatedialog.h b/attic/muse_qt4_evolution/muse/templatedialog.h new file mode 100644 index 00000000..4db03286 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/templatedialog.h @@ -0,0 +1,51 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __TEMPLATE_DIALOG_H__ +#define __TEMPLATE_DIALOG_H__ + +#include "ui_templatedialog.h" + +//--------------------------------------------------------- +// TemplateDialog +//--------------------------------------------------------- + +class TemplateDialog : public QDialog, public Ui_TemplateDialogBase { + Q_OBJECT + + void processSubdir(QTreeWidgetItem*, const QString&, + const QString&, int); + + QString itemPath(QTreeWidgetItem*) const; + + private slots: + void currentChanged(QTreeWidgetItem*, QTreeWidgetItem*); + void itemCollapsed(QTreeWidgetItem*); + void itemExpanded(QTreeWidgetItem*); + void itemDoubleClicked(QTreeWidgetItem*, int); + + public: + TemplateDialog(QWidget* parent = 0); + QString templatePath() const; + void setTemplatePath(const QString&); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/templatedialog.ui b/attic/muse_qt4_evolution/muse/templatedialog.ui new file mode 100644 index 00000000..cbbc295d --- /dev/null +++ b/attic/muse_qt4_evolution/muse/templatedialog.ui @@ -0,0 +1,188 @@ + + + + + TemplateDialogBase + + + + 0 + 0 + 574 + 385 + + + + MusE: Select Template + + + + 9 + + + 6 + + + + + Properties + + + + 9 + + + 3 + + + + + Qt::NoFocus + + + true + + + + + + + Qt::NoFocus + + + true + + + + + + + Comment: + + + + + + + Modified: + + + + + + + Created: + + + + + + + Qt::NoFocus + + + true + + + + + + + + + + 0 + + + 6 + + + + + Qt::Horizontal + + + + 131 + 31 + + + + + + + + OK + + + true + + + + + + + Cancel + + + + + + + + + + Templates + + + + + + + + + okButton + cancelButton + templateTree + modifiedDate + createdDate + comment + + + + + + + okButton + clicked() + TemplateDialogBase + accept() + + + 278 + 253 + + + 96 + 254 + + + + + cancelButton + clicked() + TemplateDialogBase + reject() + + + 369 + 253 + + + 179 + 282 + + + + + diff --git a/attic/muse_qt4_evolution/muse/thread.cpp b/attic/muse_qt4_evolution/muse/thread.cpp new file mode 100644 index 00000000..8291613b --- /dev/null +++ b/attic/muse_qt4_evolution/muse/thread.cpp @@ -0,0 +1,354 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include +#include +#include + +#include "thread.h" +#include "globals.h" +#include "errno.h" + +//--------------------------------------------------------- +// Thread +//--------------------------------------------------------- + +Thread::~Thread() + { + } + +//--------------------------------------------------------- +// serverloop +//--------------------------------------------------------- + +static void* loop(void* mops) + { + Thread* t = (Thread*) mops; + t->loop(); + return 0; + } + +//--------------------------------------------------------- +// start +//--------------------------------------------------------- + +void Thread::start(int prio, void* ptr) + { + userPtr = ptr; + pthread_attr_t* attributes = 0; + + realTimePriority = prio; + if (realTimePriority) { + attributes = (pthread_attr_t*) malloc(sizeof(pthread_attr_t)); + pthread_attr_init(attributes); + + if (pthread_attr_setschedpolicy(attributes, SCHED_FIFO)) { + printf("cannot set FIFO scheduling class for RT thread\n"); + } + if (pthread_attr_setscope (attributes, PTHREAD_SCOPE_SYSTEM)) { + printf("Cannot set scheduling scope for RT thread\n"); + } + if (pthread_attr_setinheritsched(attributes, PTHREAD_EXPLICIT_SCHED)) { + printf("Cannot set setinheritsched for RT thread\n"); + } + + struct sched_param rt_param; + memset(&rt_param, 0, sizeof(rt_param)); + rt_param.sched_priority = realTimePriority; + if (pthread_attr_setschedparam (attributes, &rt_param)) { + printf("Cannot set scheduling priority %d for RT thread (%s)\n", + realTimePriority, strerror(errno)); + } + } + + int rv; + if ((rv = pthread_create(&thread, attributes, ::loop, this))) { + fprintf(stderr, "creating thread <%s> failed: %s\n", + _name, strerror(rv)); + thread = 0; + } + } + +//--------------------------------------------------------- +// stop +//--------------------------------------------------------- + +void Thread::stop(bool force) + { + if (thread == 0) + return; + if (force) { + pthread_cancel(thread); + threadStop(); + } + _running = false; + if (pthread_join(thread, 0)) { + // perror("Failed to join sequencer thread"); + } + } + +//--------------------------------------------------------- +// Thread +// prio = 0 no realtime scheduling +//--------------------------------------------------------- + +Thread::Thread(const char* s) + { + userPtr = 0; + _name = s; + realTimePriority = 0; + pfd = 0; + npfd = 0; + maxpfd = 0; + _running = false; + _pollWait = -1; + thread = 0; + sendSerialNo = 0x00a5a500; + + // create message channels + int filedes[2]; // 0 - reading 1 - writing + if (pipe(filedes) == -1) { + perror("thread:creating pipe4"); + exit(-1); + } + toThreadFdr = filedes[0]; + toThreadFdw = filedes[1]; + if (fcntl(toThreadFdw, F_SETFL, O_NONBLOCK) == -1) + perror("set pipe nonblocking\n"); + + if (pipe(filedes) == -1) { + perror("thread: creating pipe5"); + exit(-1); + } + fromThreadFdr = filedes[0]; + fromThreadFdw = filedes[1]; + if (fcntl(fromThreadFdw, F_SETFL, O_NONBLOCK) == -1) + perror("set pipe nonblocking\n"); + } + +//--------------------------------------------------------- +// addPollFd +//--------------------------------------------------------- + +void Thread::addPollFd(int fd, int action, void (*handler)(void*,void*), void* p, void* q) + { + if (fd == -1) + return; + for (iPoll i = plist.begin(); i != plist.end(); ++i) { + if ((i->fd == fd) && (i->action == action)) + return; + } + + plist.push_back(Poll(fd, action, handler, p, q)); + + if (npfd == maxpfd) { + int n = (maxpfd == 0) ? 4 : maxpfd * 2; + //TODO: delete old pfd + pfd = new struct pollfd[n]; + maxpfd = n; + } + ++npfd; + int idx = 0; + for (iPoll i = plist.begin(); i != plist.end(); ++i, ++idx) { + pfd[idx].fd = i->fd; + pfd[idx].events = i->action; + } + } + +//--------------------------------------------------------- +// removePollFd +//--------------------------------------------------------- + +void Thread::removePollFd(int fd, int action) + { + for (iPoll i = plist.begin(); i != plist.end(); ++i) { + if (i->fd == fd && i->action == action) { + plist.erase(i); + --npfd; + break; + } + } + int idx = 0; + for (iPoll i = plist.begin(); i != plist.end(); ++i, ++idx) { + pfd[idx].fd = i->fd; + pfd[idx].events = i->action; + } + } + +//--------------------------------------------------------- +// loop +//--------------------------------------------------------- + +void Thread::loop() + { + if (!debugMode) { + if (mlockall(MCL_CURRENT | MCL_FUTURE)) + perror("WARNING: Cannot lock memory:"); + } +#ifdef __APPLE__ +#define BIG_ENOUGH_STACK (1024*256*1) +#else +#define BIG_ENOUGH_STACK (1024*1024*1) +#endif + char buf[BIG_ENOUGH_STACK]; + for (int i = 0; i < BIG_ENOUGH_STACK; i++) + buf[i] = i; +#undef BIG_ENOUGH_STACK + + pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, 0); + pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, 0); + + int policy; + /*if ((policy = sched_getscheduler (0)) < 0) { + printf("Thread: Cannot get current client scheduler: %s\n", strerror(errno)); + } +*/ + if (debugMsg) + printf("Thread <%s, id %p> has %s priority %d\n", + _name, (void *)pthread_self(), policy == SCHED_FIFO ? "SCHED_FIFO" : "SCHED_OTHER", + realTimePriority); + + _running = true; + + threadStart(userPtr); + while (_running) { + if (debugMode) // DEBUG + _pollWait = 10; // ms + else + _pollWait = -1; + + int n = poll(pfd, npfd, _pollWait); + if (n < 0) { + if (errno == EINTR) + continue; + fprintf(stderr, "poll failed: %s\n", strerror(errno)); + exit(-1); + } + if (n == 0) { // timeout + defaultTick(); + continue; + } + struct pollfd* p = &pfd[0]; + int i = 0; + for (iPoll ip = plist.begin(); ip != plist.end(); ++ip, ++p, ++i) { + if (ip->action & p->revents) { + (ip->handler)(ip->param1, ip->param2); + break; + } + } + } + threadStop(); + } + +//--------------------------------------------------------- +// sendMsg +// send request from gui to thread +// wait until request is processed +//--------------------------------------------------------- + +extern const char* seqMsgList[]; + +bool Thread::sendMsg(const ThreadMsg* m) + { +// fprintf(stderr, "<%s> self: %p sendMsg %d id %s running %d\n", +// _name, +// pthread_self(), sendSerialNo, seqMsgList[m->id], _running); + + m->serialNo = sendSerialNo; + if (_running) { + int rv = write(toThreadFdw, &m, sizeof(ThreadMsg*)); + if (rv != sizeof(ThreadMsg*)) { + perror("Thread::sendMessage(): write pipe failed"); + return true; + } + + // wait for thread to finish operation + int c; + rv = read(fromThreadFdr, &c, sizeof(c)); + if (rv != sizeof(c)) { + perror("Thread::sendMessage(): read pipe failed"); + return true; + } + if (c != sendSerialNo) + fprintf(stderr, "%p Thread:sendMsg() serial No mismatch %d - %d\n", + this, c, sendSerialNo); + } + else { + // if thread is not running (during initialization) + // process commands directly: + processMsg(m); + } + ++sendSerialNo; + return false; + } + +//--------------------------------------------------------- +// sendMsg1 +// send request from gui to thread +// do __not__ wait until request is processed +//--------------------------------------------------------- + +bool Thread::sendMsg1(const void* m, int n) + { + int rv = write(toThreadFdw, m, n); + if (rv != n) { + perror("Thread::sendMessage1(): write pipe failed"); + return true; + } + return false; + } + +//--------------------------------------------------------- +// readMsg +//--------------------------------------------------------- + +void Thread::readMsg() + { + ThreadMsg* p; + if (read(toThreadFdr, &p, sizeof(p)) != sizeof(p)) { + perror("Thread::readMsg(): read pipe failed"); + exit(-1); + } +// fprintf(stderr, "%p read msg %d %s\n", this, p->serialNo, seqMsgList[p->id]); + + processMsg(p); + int c = p->serialNo; + int rv = write(fromThreadFdw, &c, sizeof(c)); + if (rv != sizeof(c)) + perror("Thread::readMsg(): write pipe failed"); + } + +//--------------------------------------------------------- +// readMsg +// sequencer reads one gui message +//--------------------------------------------------------- + +void Thread::readMsg1(int size) + { + char buffer[size]; + int n = read(toThreadFdr, buffer, size); + if (n != size) { + fprintf(stderr, "Thread::readMessage1(): read pipe failed, get %d, expected %d: %s\n", + n, size, strerror(errno)); + exit(-1); + } + processMsg1(buffer); + } + diff --git a/attic/muse_qt4_evolution/muse/thread.h b/attic/muse_qt4_evolution/muse/thread.h new file mode 100644 index 00000000..cf7fc40b --- /dev/null +++ b/attic/muse_qt4_evolution/muse/thread.h @@ -0,0 +1,109 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __THREAD_H__ +#define __THREAD_H__ + +#include + +//--------------------------------------------------------- +// Poll +//--------------------------------------------------------- + +struct Poll { + int fd; + int action; + void (*handler)(void*,void*); + void* param1; + void* param2; + + Poll(int _fd, int _action, void(*_handler)(void*,void*), void* p, void* q) { + fd = _fd; + action = _action; + handler = _handler; + param1 = p; + param2 = q; + } + }; + +typedef std::list PollList; +typedef std::list::iterator iPoll; + + +//--------------------------------------------------------- +// ThreadMsg +//--------------------------------------------------------- + +struct ThreadMsg { + int id; + mutable int serialNo; // debug + }; + +//--------------------------------------------------------- +// Thread +//--------------------------------------------------------- + +class Thread { + const char* _name; + volatile bool _running; + int _pollWait; // poll timeout in msec (-1 = infinite) + int sendSerialNo; // debug + + pthread_t thread; + + int toThreadFdw; // message to thread (app write) + + PollList plist; + void* userPtr; + + protected: + int realTimePriority; + int fromThreadFdr; // message from thread (seq read) + int fromThreadFdw; // message from thread (app write) + int toThreadFdr; // message to thread (seq read) + struct pollfd* pfd; // poll file descriptors + int npfd; + int maxpfd; + virtual void processMsg(const ThreadMsg*) {} + virtual void processMsg1(const void *) {} + virtual void defaultTick() {} + + public: + Thread(const char* name); + virtual ~Thread(); + const char* name() const { return _name; } + virtual void start(int priority, void* ptr=0); + void stop(bool); + void clearPollFd() { plist.clear(); npfd = 0; } + void addPollFd(int fd, int action, void (*handler)(void*,void*), void*, void*); + void removePollFd(int fd, int action); + void loop(); + void readMsg(); + void readMsg1(int size); + bool sendMsg1(const void* m, int n); + bool sendMsg(const ThreadMsg* m); + bool isRunning() const { return _running; } + void setPollWait(int val) { _pollWait = val; } + virtual void threadStart(void*){ } // called from loop + virtual void threadStop() { } // called from loop before leaving + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/ticksynth.cpp b/attic/muse_qt4_evolution/muse/ticksynth.cpp new file mode 100644 index 00000000..861861de --- /dev/null +++ b/attic/muse_qt4_evolution/muse/ticksynth.cpp @@ -0,0 +1,181 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "audio.h" +#include "ticksynth.h" +#include "default_click.h" + +SynthI* metronome = 0; + +class MetronomeSynth; +static MetronomeSynth* metronomeSynth; + +//--------------------------------------------------------- +// MetronomeSynth +//--------------------------------------------------------- + +class MetronomeSynth : public Synth { + public: + MetronomeSynth(const QFileInfo* fi) : Synth(fi, QString("Metronome")) {} + virtual ~MetronomeSynth() {} + virtual void incInstances(int) {} + virtual void* instantiate(); + virtual SynthIF* createSIF(SynthI*); + }; + +//--------------------------------------------------------- +// instantiate +//--------------------------------------------------------- + +void* MetronomeSynth::instantiate() + { + return 0; + } + +//--------------------------------------------------------- +// MetronomeSynthIF +//--------------------------------------------------------- + +class MetronomeSynthIF : public SynthIF + { + const float* data; + int pos; + int len; + void process(float** buffer, int offset, int n); + + public: + MetronomeSynthIF(SynthI* s) : SynthIF(s) { + data = 0; + } + virtual bool guiVisible() const { return false; } + virtual void showGui(bool) {} + virtual bool hasGui() const { return false; } + virtual void getGeometry(int*, int*, int*, int*) const {} + virtual void setGeometry(int, int, int, int) {} + virtual void getData(MidiEventList*, unsigned pos, int ports, unsigned n, float** buffer); + virtual bool putEvent(const MidiEvent& ev); + virtual MidiEvent receiveEvent() { return MidiEvent(); } + virtual int eventsPending() const { return 0; } + virtual int channels() const { return 1; } + virtual void deactivate2() {} + virtual void deactivate3() {} + virtual QString getPatchName(int, int, int) const { return ""; } + virtual QString getPatchName(int, int) { return ""; } + virtual void populatePatchPopup(QMenu*, int) {}; + virtual void write(Xml&) const {} + virtual void setParameter(int, float) {} + virtual int getControllerInfo(int, const char**, int*, int*, int*) { return 0; } + virtual bool hasAuxSend() const { return false; } + }; + +//--------------------------------------------------------- +// getData +//--------------------------------------------------------- + +void MetronomeSynthIF::getData(MidiEventList* el, unsigned pos, int/*ports*/, unsigned n, float** buffer) + { + unsigned curPos = pos; + unsigned endPos = pos + n; + unsigned off = pos; + + iMidiEvent i = el->begin(); + for (; i != el->end(); ++i) { + unsigned frame = i->time(); + if (frame >= endPos) + break; + if (frame > curPos) { + if (frame < pos) + printf("should not happen: missed event %d\n", pos -frame); + else + process(buffer, curPos-pos, frame - curPos); + curPos = frame; + } + putEvent(*i); + } + if (endPos - curPos) + process(buffer, curPos - off, endPos - curPos); + el->erase(el->begin(), i); + } + +//--------------------------------------------------------- +// putEvent +//--------------------------------------------------------- + +bool MetronomeSynthIF::putEvent(const MidiEvent& ev) + { + if (ev.dataA() == 0) { + data = defaultClickEmphasis; + len = defaultClickEmphasisLength; + } + else { + data = defaultClick; + len = defaultClickLength; + } + pos = 0; + return false; + } + +//--------------------------------------------------------- +// createSIF +//--------------------------------------------------------- + +SynthIF* MetronomeSynth::createSIF(SynthI* s) + { + return new MetronomeSynthIF(s); + } + +//--------------------------------------------------------- +// process +// synthesize n samples into buffer+offset +//--------------------------------------------------------- + +void MetronomeSynthIF::process(float** buffer, int offset, int n) + { + if (data == 0) { + memset(buffer[0], 0, n * sizeof(float)); + return; + } + const float* s = data + pos; + float* d = *buffer + offset; + int l = std::min(n, len); + int i; + for (i = 0; i < l; ++i) + *d++ = *s++; + for (; i < n; ++i) + *d++ = 0.0f; + pos += l; + len -= l; + if (len <= 0) + data = 0; + } + +//--------------------------------------------------------- +// initMetronome +//--------------------------------------------------------- + +void initMetronome() + { + QFileInfo fi; // dummy + metronomeSynth = new MetronomeSynth(&fi); + metronome = new SynthI(); + metronome->setName("metronome"); + metronome->initInstance(metronomeSynth); + } + diff --git a/attic/muse_qt4_evolution/muse/ticksynth.h b/attic/muse_qt4_evolution/muse/ticksynth.h new file mode 100644 index 00000000..d18a483d --- /dev/null +++ b/attic/muse_qt4_evolution/muse/ticksynth.h @@ -0,0 +1,29 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __TICKSYNTH_H__ +#define __TICKSYNTH_H__ + +#include "synth.h" +extern void initMetronome(); +extern SynthI* metronome; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/tllineedit.cpp b/attic/muse_qt4_evolution/muse/tllineedit.cpp new file mode 100644 index 00000000..0581b858 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/tllineedit.cpp @@ -0,0 +1,70 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "tllineedit.h" + +//--------------------------------------------------------- +// TLLineEdit +//--------------------------------------------------------- + +TLLineEdit::TLLineEdit(const QString& contents, QWidget* parent) + : QLineEdit(contents, parent) + { + setReadOnly(true); + setFrame(false); + setAlignment(Qt::AlignLeft); + setCursorPosition(0); + connect(this, SIGNAL(editingFinished()), SLOT(contentHasChanged())); + } + +//--------------------------------------------------------- +// contentHasChanged +//--------------------------------------------------------- + +void TLLineEdit::contentHasChanged() + { + setReadOnly(true); + setFrame(false); + if (isModified()) + emit contentChanged(text()); + setModified(false); + } + +//--------------------------------------------------------- +// mouseDoubleClickEvent +//--------------------------------------------------------- + +void TLLineEdit::mouseDoubleClickEvent(QMouseEvent*) + { + setReadOnly(false); + setFocus(); + setFrame(true); + } + +//--------------------------------------------------------- +// mousePressEvent +//--------------------------------------------------------- + +void TLLineEdit::mousePressEvent(QMouseEvent* ev) + { + QLineEdit::mousePressEvent(ev); + emit mousePress(); + } + diff --git a/attic/muse_qt4_evolution/muse/tllineedit.h b/attic/muse_qt4_evolution/muse/tllineedit.h new file mode 100644 index 00000000..56bfdd55 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/tllineedit.h @@ -0,0 +1,48 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __TLLINEEDIT_H__ +#define __TLLINEEDIT_H__ + +//--------------------------------------------------------- +// TLLineEdit +//--------------------------------------------------------- + +class TLLineEdit : public QLineEdit { + Q_OBJECT + + virtual void mouseDoubleClickEvent(QMouseEvent*); + virtual void mousePressEvent(QMouseEvent*); + + private slots: + void contentHasChanged(); + + signals: + void contentChanged(QString s); + void mousePress(); + + public: + TLLineEdit(const QString& contents, QWidget* parent = 0); + }; + +#endif + + + diff --git a/attic/muse_qt4_evolution/muse/tlswidget.cpp b/attic/muse_qt4_evolution/muse/tlswidget.cpp new file mode 100644 index 00000000..23b7fbc1 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/tlswidget.cpp @@ -0,0 +1,355 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "song.h" +#include "track.h" +#include "tlswidget.h" +#include "tlwlayout.h" +#include "icons.h" +#include "arranger.h" +#include "widgets/simplebutton.h" +#include "muse.h" +#include "ctrl/configmidictrl.h" +#include "ctrl/ctrldialog.h" +#include "midictrl.h" +#include "widgets/utils.h" + +//--------------------------------------------------------- +// TLSLayout +//--------------------------------------------------------- + +class TLSLayout : public QLayout { + QList itemList; + + public: + TLSLayout() {} + ~TLSLayout(); + + void addItem(QLayoutItem* item); + void insertWidget(int index, QWidget* item); + Qt::Orientations expandingDirections() const { return 0; } + bool hasHeightForWidth() const { return false; } + int count() const { return itemList.size(); } + void setGeometry(const QRect &rect); + QSize sizeHint() const { return ((QWidget*)parent())->size(); } + QLayoutItem *itemAt(int index) const { return itemList.value(index); } + QLayoutItem *takeAt(int idx) { + return idx >= 0 && idx < itemList.size() ? itemList.takeAt(idx) : 0; + } + }; + +//--------------------------------------------------------- +// TLSLayout +//--------------------------------------------------------- + +TLSLayout::~TLSLayout() + { + QLayoutItem* child; + while ((child = takeAt(0)) != 0) + delete child; + } + +//--------------------------------------------------------- +// insertWidget +//--------------------------------------------------------- + +void TLSLayout::insertWidget(int index, QWidget* item) + { + if (item->parent() == 0) + item->setParent((QWidget*)parent()); + itemList.insert(index, new QWidgetItem(item)); + update(); + } + +//--------------------------------------------------------- +// addItem +//--------------------------------------------------------- + +void TLSLayout::addItem(QLayoutItem* item) + { + itemList.append(item); + update(); + } + +//--------------------------------------------------------- +// setGeometry +//--------------------------------------------------------- + +void TLSLayout::setGeometry(const QRect& rect) + { + static const int labelWidth = 50; + int x1 = rect.x() + labelWidth; + int y = rect.y(); + int y2 = y + rect.height(); + + QLayoutItem *item = itemList.at(0); + QSize size(item->sizeHint()); + item->widget()->setGeometry(QRect(x1 - 18, y2 - 18-splitWidth, 18, 18)); + + item = itemList.at(1); + size = item->sizeHint(); + item->setGeometry(QRect(x1, rect.y(), + rect.width() - x1 - 2, trackRowHeight)); + } + +//--------------------------------------------------------- +// TLSWidget +//--------------------------------------------------------- + +TLSWidget::TLSWidget(Track* t, ArrangerTrack* atrack, TimeCanvas* timeC) + { + setAttribute(Qt::WA_NoBackground); + setAttribute(Qt::WA_StaticContents); + setAutoFillBackground(true); + + setMouseTracking(true); + _tc = timeC; + state = S_NORMAL; + + at = atrack; + _track = t; + _ctrlTrack = t; + + TLSLayout* l = new TLSLayout; + setLayout(l); + // + // track type + // + SimpleButton* minus = newMinusButton(); + minus->setToolTip(tr("Remove Subtrack")); + l->addWidget(minus); + + ctrlList = new QToolButton; + ctrlList->setText(tr("Ctrl")); + + connect(ctrlList, SIGNAL(clicked()), SLOT(showControllerList())); + + l->addWidget(ctrlList); + ctrlList->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); + + connect(_track, SIGNAL(selectionChanged(bool)), SLOT(selectionChanged())); + connect(_track, SIGNAL(controllerChanged(int)), SLOT(controllerListChanged(int))); + connect(_track, SIGNAL(autoReadChanged(bool)), SLOT(autoReadChanged())); + connect(muse, SIGNAL(configChanged()), SLOT(configChanged())); + connect(minus, SIGNAL(clicked()), SLOT(labelMinusClicked())); + configChanged(); + } + +//--------------------------------------------------------- +// ctrl +//--------------------------------------------------------- + +Ctrl* TLSWidget::ctrl() const + { + return at->controller; + } + +//--------------------------------------------------------- +// height +//--------------------------------------------------------- + +int TLSWidget::cheight() const + { + return at->tw->height() - splitWidth; + } + +//--------------------------------------------------------- +// selectionChanged +//--------------------------------------------------------- + +void TLSWidget::selectionChanged() + { +// setFrameShadow(_track->selected() ? QFrame::Sunken : QFrame::Raised); + } + +//--------------------------------------------------------- +// configChanged +//--------------------------------------------------------- + +void TLSWidget::configChanged() + { + QColor c(_track->ccolor()); + QPalette p(palette()); + p.setColor(QPalette::Background, c.light(100)); + setPalette(p); + } + +//--------------------------------------------------------- +// showControllerList +//--------------------------------------------------------- + +bool TLSWidget::showControllerList() + { + Ctrl* c = ctrl(); + int id; + if (c) + id = c->id(); + else + id = CTRL_NO_CTRL; + for (;;) { + CtrlDialog cd(_ctrlTrack, id); + int rv = cd.exec(); + if (rv != 1) + return false; + id = cd.curId(); + if (id == CTRL_NO_CTRL) + return false; + if (id != CTRL_OTHER) + break; + ConfigMidiCtrl* mce = new ConfigMidiCtrl((MidiTrack*)_track); + mce->exec(); + delete mce; + } + setCtrl(id); + return true; + } + +//--------------------------------------------------------- +// setCtrl +//--------------------------------------------------------- + +bool TLSWidget::setCtrl(int ctrl) + { + if (ctrl == CTRL_NO_CTRL || ctrl == CTRL_OTHER) { + // this controller subtrack is new, ask user for + // controller: + return showControllerList(); + } + + if (_ctrlTrack && _ctrlTrack != _track) { + disconnect(_ctrlTrack, SIGNAL(controllerChanged(int)), this, SLOT(controllerListChanged(int))); + } + if (ctrl == CTRL_VELOCITY) { + at->controller = &veloList; + at->ctrl = CTRL_VELOCITY; + ctrlList->setText(tr("Velocity")); + _ctrlTrack = _track; + emit controllerChanged(at->ctrl); + } + else { + at->ctrl = ctrl; + at->controller = _track->getController(ctrl); + if (at->controller) { + _ctrlTrack = _track; + ctrlList->setText(at->controller->name()); + emit controllerChanged(ctrl); + } + } + return true; + } + +//--------------------------------------------------------- +// labelMinusClicked +//--------------------------------------------------------- + +void TLSWidget::labelMinusClicked() + { + emit minusClicked(this); + } + +//--------------------------------------------------------- +// mousePressEvent +//--------------------------------------------------------- + +void TLSWidget::mousePressEvent(QMouseEvent* ev) + { + if (ev->button() == Qt::RightButton) { + QMenu* menu = new QMenu(this); + QAction* a = menu->addAction(tr("Delete Controller")); + a->setData(0); + QAction* rv = menu->exec(ev->globalPos()); + if (rv == 0) + return; + emit minusClicked(this); + return; + } + song->selectTrack(_track); + + int y = ev->pos().y(); + int wh = height(); + starty = ev->globalPos().y(); + if (y > (wh - splitWidth)) { + state = S_DRAGBOTTOM; + emit startDrag(trackIdx); + } + } + +//--------------------------------------------------------- +// mouseReleaseEvent +//--------------------------------------------------------- + +void TLSWidget::mouseReleaseEvent(QMouseEvent*) + { + state = S_NORMAL; + } + +//--------------------------------------------------------- +// mouseMoveEvent +//--------------------------------------------------------- + +void TLSWidget::mouseMoveEvent(QMouseEvent* ev) + { + QPoint pos(ev->pos()); + + if (state == S_DRAGTOP) + emit drag(trackIdx-1, ev->globalPos().y() - starty); + else if (state == S_DRAGBOTTOM) + emit drag(trackIdx, ev->globalPos().y() - starty); + else { + int y = pos.y(); + int wh = height(); + if (y > (wh - splitWidth)) + setCursor(Qt::SizeVerCursor); + else + setCursor(Qt::ArrowCursor); + } + } + +//--------------------------------------------------------- +// controllerListChanged +// controller list for controller id changed +//--------------------------------------------------------- + +void TLSWidget::controllerListChanged(int id) + { + if (ctrl()->id() == id) + tc()->widget()->update(); + } + +//--------------------------------------------------------- +// autoReadChanged +//--------------------------------------------------------- + +void TLSWidget::autoReadChanged() + { + tc()->widget()->update(); + } + +//--------------------------------------------------------- +// paintEvent +//--------------------------------------------------------- + +void TLSWidget::paintEvent(QPaintEvent* ev) + { + QPainter p(this); + QRect r(ev->rect()); + p.fillRect(r, _track->ccolor()); + paintHLine(p, r.x(), r.x() + r.width(), height() - splitWidth); + } diff --git a/attic/muse_qt4_evolution/muse/tlswidget.h b/attic/muse_qt4_evolution/muse/tlswidget.h new file mode 100644 index 00000000..ccdfa3b8 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/tlswidget.h @@ -0,0 +1,83 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __TLSWIDGET_H__ +#define __TLSWIDGET_H__ + +class Track; +class ArrangerTrack; +class CtrlDialog; +class TimeCanvas; + +#include "ctrl/ctrleditor.h" + +//--------------------------------------------------------- +// TLSWidget +//--------------------------------------------------------- + +class TLSWidget : public QWidget, public CtrlEditor { + Q_OBJECT + + enum { S_NORMAL, S_DRAGTOP, S_DRAGBOTTOM, S_DRAG }; + int state; + + int trackIdx; + int starty; + Track* _track; // editor canvas is associated to this track + Track* _ctrlTrack; // track were ctrl belongs to + TimeCanvas* _tc; + QToolButton* ctrlList; + QLineEdit* nameEdit; + ArrangerTrack* at; + + TimeCanvas* tc() const { return _tc; } + Ctrl* ctrl() const; + int cheight() const; + + virtual void paintEvent(QPaintEvent*); + virtual void mousePressEvent(QMouseEvent*); + virtual void mouseReleaseEvent(QMouseEvent*); + virtual void mouseMoveEvent(QMouseEvent*); + + private slots: + void labelMinusClicked(); + bool showControllerList(); + void selectionChanged(); + void configChanged(); + void controllerListChanged(int); + void autoReadChanged(); + + signals: + void minusClicked(TLSWidget*); + void controllerChanged(int); + void startDrag(int idx); + void drag(int idx, int); + + public: + TLSWidget(Track*, ArrangerTrack*, TimeCanvas* tc); + Track* track() const { return _track; } + Track* ctrlTrack() const { return _ctrlTrack; } + bool setCtrl(int ctrl); + void setIdx(int n) { trackIdx = n; } + }; + +#endif + + diff --git a/attic/muse_qt4_evolution/muse/tlwidget.cpp b/attic/muse_qt4_evolution/muse/tlwidget.cpp new file mode 100644 index 00000000..fdf08d0b --- /dev/null +++ b/attic/muse_qt4_evolution/muse/tlwidget.cpp @@ -0,0 +1,641 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "song.h" +#include "track.h" +#include "tlwidget.h" +#include "tlwlayout.h" +#include "tllineedit.h" +#include "icons.h" +#include "arranger.h" +#include "widgets/simplebutton.h" +#include "muse.h" +#include "trelement.h" +#include "gconfig.h" +#include "widgets/utils.h" +#include "trackdrag.h" +#include "synth.h" +#include "widgets/outportcombo.h" +#include "audio.h" +#include "midioutport.h" +#include "instruments/minstrument.h" + +//--------------------------------------------------------- +// TLWidget +//--------------------------------------------------------- + +TLWidget::TLWidget(Track* t, TrGroupList* tgl) + { + setAttribute(Qt::WA_OpaquePaintEvent); + setAutoFillBackground(true); + + setMouseTracking(true); + + state = S_NORMAL; + off = 0; + tel = tgl; + _track = t; + outPort = 0; + + bgColor = _track->ccolor(); + selectBgColor = bgColor.light(); + + QPalette p(palette()); + p.setColor(QPalette::Window, bgColor); + p.setColor(QPalette::Base, bgColor); + setPalette(p); + + l = new TLWidgetLayout(this); + configChanged(); + + connect(_track, SIGNAL(selectionChanged(bool)), SLOT(selectionChanged())); + setAcceptDrops(true); + connect(muse, SIGNAL(configChanged()), SLOT(configChanged())); + } + +//--------------------------------------------------------- +// selectionChanged +//--------------------------------------------------------- + +void TLWidget::selectionChanged() + { + update(); + } + +//--------------------------------------------------------- +// nameChanged +//--------------------------------------------------------- + +void TLWidget::nameChanged(QString s) + { + song->changeTrackName(_track, s); + nameEdit->setCursorPosition(0); + } + +//--------------------------------------------------------- +// selectTL +//--------------------------------------------------------- + +void TLWidget::select() + { + setFocus(); + song->selectTrack(_track); + } + +//--------------------------------------------------------- +// labelPlusClicked +//--------------------------------------------------------- + +void TLWidget::labelPlusClicked() + { + emit plusClicked(this); + } + +//--------------------------------------------------------- +// mousePressEvent +//--------------------------------------------------------- + +void TLWidget::mousePressEvent(QMouseEvent* ev) + { + enum { + CMD_REMOVE_TRACK, CMD_COPY_TRACK, CMD_SHOW_AUDIO_GUI, + CMD_SHOW_MIDI_GUI + }; + int button = ev->button(); + if (button == Qt::RightButton) { + QMenu* menu = new QMenu(this); + QAction* a = getAction("delete", this); + menu->addAction(a); + a->setData(CMD_REMOVE_TRACK); + if (_track->type() == Track::MIDI || _track->type() == Track::WAVE) { + a = menu->addAction(tr("Copy Track")); + a->setData(CMD_COPY_TRACK); + } + if (_track->type() == Track::AUDIO_SOFTSYNTH) { + SynthI* s = (SynthI*) _track; + if (s->hasGui()) { + menu->addSeparator(); + a = menu->addAction(tr("Show Gui")); + a->setData(CMD_SHOW_AUDIO_GUI); + a->setCheckable(true); + a->setChecked(s->guiVisible()); + } + } + else if (_track->type() == Track::MIDI_SYNTI) { + MidiSynti* s = (MidiSynti*) _track; + if (s->hasGui()) { + menu->addSeparator(); + a = menu->addAction(tr("Show Gui")); + a->setData(CMD_SHOW_MIDI_GUI); + a->setCheckable(true); + a->setChecked(s->guiVisible()); + } + } + + a = menu->exec(ev->globalPos()); + if (!a) + return; + int rv = a->data().toInt(); + switch (rv) { + default: + break; + case CMD_REMOVE_TRACK: + song->removeTrack(_track); + break; + case CMD_COPY_TRACK: + { + int idx = song->tracks()->indexOf(_track); + if (_track->type() == Track::MIDI) { + MidiTrack* t = new MidiTrack(); + t->clone((MidiTrack*)_track); + song->cmdInsertTrack(t, idx); + } + else { + WaveTrack* t = new WaveTrack(); + t->clone((WaveTrack*)_track); + song->cmdInsertTrack(t, idx); + } + } + break; + case CMD_SHOW_AUDIO_GUI: + { + SynthI* s = (SynthI*) _track; + s->showGui(!s->guiVisible()); + } + break; + case CMD_SHOW_MIDI_GUI: + { + MidiSynti* s = (MidiSynti*) _track; + s->showGui(!s->guiVisible()); + } + break; + } + return; + } + int y = ev->pos().y(); + int wh = height(); + starty = ev->globalPos().y(); + if (y > (wh - splitWidth)) { + state = S_DRAGBOTTOM; + emit startDrag(trackIdx); + } + else { + state = S_DRAG; + startDragPos = ev->pos(); + startDragTime = QTime::currentTime(); + select(); + } + } + +//--------------------------------------------------------- +// mouseReleaseEvent +//--------------------------------------------------------- + +void TLWidget::mouseReleaseEvent(QMouseEvent*) + { + state = S_NORMAL; + } + +//--------------------------------------------------------- +// mouseMoveEvent +//--------------------------------------------------------- + +void TLWidget::mouseMoveEvent(QMouseEvent* ev) + { + QPoint pos(ev->pos()); + + if (state == S_DRAGBOTTOM) + emit drag(trackIdx, ev->globalPos().y() - starty); + else if (state == S_DRAG) { + int t = startDragTime.msecsTo(QTime::currentTime()); + bool dragActive = (startDragPos - pos).manhattanLength() > + QApplication::startDragDistance() + || t > QApplication::startDragTime(); + if (dragActive) { + QDrag* d = new TrackDrag(_track, this); + d->start(Qt::MoveAction); + state = S_NORMAL; + } + } + else { + int y = pos.y(); + int wh = height(); + if (y > (wh - splitWidth)) + setCursor(Qt::SizeVerCursor); + else + setCursor(Qt::ArrowCursor); + } + } + +//--------------------------------------------------------- +// configChanged +//--------------------------------------------------------- + +void TLWidget::configChanged() + { + l->clear(); + wlist.clear(); + nameEdit = 0; + record = 0; + off = 0; + outChannel = 0; + outPort = 0; + + label = new QLabel; + label->setObjectName("trackLabel"); + l->addWidget(label); + label->setIndent(3); + + label->setText(_track->cname()); + label->setFixedHeight(11); + + plus = newPlusButton(); + l->addWidget(plus); + plus->setToolTip(tr("Add Subtrack")); + connect(plus, SIGNAL(clicked()), SLOT(labelPlusClicked())); + + for (iTrGroup i = tel->begin(); i != tel->end(); ++i) { + TrElementList& el = *i; + iTrElement k; + for (k = el.begin(); k != el.end(); ++k) { + int id = (*k)->id; + switch(id) { + case TR_NAME: + nameEdit = new TLLineEdit(_track->name(), this); + nameEdit->setFixedHeight(trackRowHeight); + connect(nameEdit, SIGNAL(contentChanged(QString)), SLOT(nameChanged(QString))); + connect(nameEdit, SIGNAL(mousePress()), SLOT(select())); + connect(_track, SIGNAL(nameChanged(const QString&)), nameEdit, SLOT(setText(const QString&))); + nameEdit->setToolTip(_track->clname() + " Name"); + l->addWidget(nameEdit); + wlist.push_back(nameEdit); + break; + + case TR_INSTRUMENT: + { + instrument = new QComboBox(this); + instrument->setFixedHeight(trackRowHeight); + MidiOutPort* op = (MidiOutPort*)_track; + MidiInstrument* mi = op->instrument(); + int idx = 0; + int curIdx = 0; + for (iMidiInstrument i = midiInstruments.begin(); i != midiInstruments.end(); ++i, ++idx) { + instrument->addItem((*i)->iname()); + if ((*i)->iname() == mi->iname()) + curIdx = idx; + } + instrument->setCurrentIndex(curIdx); + connect(instrument, SIGNAL(activated(int)), SLOT(instrumentSelected(int))); + connect(op, SIGNAL(instrumentChanged()), SLOT(instrumentChanged())); + l->addWidget(instrument); + wlist.push_back(instrument); + } + break; + + case TR_PATCH: + { + // Ctrl* ctrl = _track->getController(CTRL_PROGRAM); + } + break; + + case TR_OFF: + { + off = newOffButton(); + off->setFixedSize(trackRowHeight, trackRowHeight); + off->setChecked(_track->off()); + connect(off, SIGNAL(clicked(bool)), SLOT(offToggled(bool))); + connect(_track, SIGNAL(offChanged(bool)), this, SLOT(updateOffState())); + l->addWidget(off); + wlist.push_back(off); + } + break; + + case TR_DRUMMAP: + { + SimpleButton* dm = newDrumMapButton(); + dm->setFixedSize(trackRowHeight, trackRowHeight); + dm->setChecked(((MidiTrack*)_track)->useDrumMap()); + connect(dm, SIGNAL(clicked(bool)), SLOT(drumMapToggled(bool))); + connect(_track, SIGNAL(useDrumMapChanged(bool)), dm, SLOT(setChecked(bool))); + l->addWidget(dm); + wlist.push_back(dm); + } + break; + + case TR_MUTE: + { + SimpleButton* mute = newMuteButton(); + mute->setFixedSize(trackRowHeight, trackRowHeight); + mute->setChecked(_track->isMute()); + connect(mute, SIGNAL(clicked(bool)), SLOT(muteToggled(bool))); + connect(_track, SIGNAL(muteChanged(bool)), mute, SLOT(setChecked(bool))); + l->addWidget(mute); + wlist.push_back(mute); + } + break; + + case TR_SOLO: + { + SimpleButton* solo = newSoloButton(); + solo->setFixedSize(trackRowHeight, trackRowHeight); + solo->setChecked(_track->solo()); + connect(solo, SIGNAL(clicked(bool)), SLOT(soloToggled(bool))); + connect(_track, SIGNAL(soloChanged(bool)), solo, SLOT(setChecked(bool))); + l->addWidget(solo); + wlist.push_back(solo); + } + break; + + case TR_MONITOR: + { + SimpleButton* monitor = newMonitorButton(); + monitor->setFixedSize(trackRowHeight+4, trackRowHeight); + monitor->setChecked(_track->monitor()); + connect(monitor, SIGNAL(clicked(bool)), SLOT(monitorToggled(bool))); + connect(_track, SIGNAL(monitorChanged(bool)), monitor, SLOT(setChecked(bool))); + l->addWidget(monitor); + wlist.push_back(monitor); + } + break; + + case TR_RECORD: + { + record = newRecordButton(); + record->setFixedSize(trackRowHeight, trackRowHeight); + record->setChecked(_track->recordFlag()); + connect(record, SIGNAL(clicked(bool)), SLOT(recordToggled(bool))); + connect(_track, SIGNAL(recordChanged(bool)), record, SLOT(setChecked(bool))); + l->addWidget(record); + wlist.push_back(record); + } + break; + + case TR_AREAD: + { + SimpleButton* b = newAutoReadButton(); + b->setFixedSize(trackRowHeight, trackRowHeight); + b->setChecked(_track->autoRead()); + connect(b, SIGNAL(clicked(bool)), SLOT(autoReadToggled(bool))); + connect(_track, SIGNAL(autoReadChanged(bool)), b, SLOT(setChecked(bool))); + l->addWidget(b); + wlist.push_back(b); + } + break; + + case TR_AWRITE: + { + SimpleButton* b = newAutoWriteButton(); + b->setFixedSize(trackRowHeight, trackRowHeight); + b->setChecked(_track->autoWrite()); + connect(b, SIGNAL(clicked(bool)), SLOT(autoWriteToggled(bool))); + connect(_track, SIGNAL(autoWriteChanged(bool)), b, SLOT(setChecked(bool))); + l->addWidget(b); + wlist.push_back(b); + } + break; + + case TR_OCHANNEL: + { + outChannel = new QSpinBox(this); + outChannel->setFixedSize(45, trackRowHeight); + outChannel->setRange(1, 16); + outChannel->setValue(((MidiTrack*)_track)->channelNo() + 1); + outChannel->setToolTip(tr("Midi Output Channel")); + l->addWidget(outChannel); + wlist.push_back(outChannel); + connect(outChannel, SIGNAL(valueChanged(int)), SLOT(setChannel(int))); + connect((MidiTrack*)_track, SIGNAL(channelChanged(int)), SLOT(channelChanged(int))); + } + break; + + default: + printf("TLWidget:: unknown element %d\n", id); + break; + } + } + } + updateOffState(); + selectionChanged(); // update selection state + l->update(); + } + +//--------------------------------------------------------- +// recordToggled +//--------------------------------------------------------- + +void TLWidget::recordToggled(bool val) + { + song->setRecordFlag(_track, !val); + } + +//--------------------------------------------------------- +// muteToggled +//--------------------------------------------------------- + +void TLWidget::muteToggled(bool val) + { + song->setMute(_track, val); + } + +//--------------------------------------------------------- +// monitorToggled +//--------------------------------------------------------- + +void TLWidget::monitorToggled(bool val) + { + _track->setMonitor(val); + } + +//--------------------------------------------------------- +// drumMapToggled +//--------------------------------------------------------- + +void TLWidget::drumMapToggled(bool val) + { + ((MidiTrack*)_track)->setUseDrumMap(val); + } + +//--------------------------------------------------------- +// offToggled +//--------------------------------------------------------- + +void TLWidget::offToggled(bool val) + { + song->setOff(_track, !val); + } + +//--------------------------------------------------------- +// soloToggled +//--------------------------------------------------------- + +void TLWidget::soloToggled(bool val) + { + song->setSolo(_track, val); + } + +//--------------------------------------------------------- +// autoReadToggled +//--------------------------------------------------------- + +void TLWidget::autoReadToggled(bool val) + { + song->setAutoRead(_track, val); + } + +//--------------------------------------------------------- +// autoWriteToggled +//--------------------------------------------------------- + +void TLWidget::autoWriteToggled(bool val) + { + song->setAutoWrite(_track, val); + } + +//--------------------------------------------------------- +// setOutPort +//--------------------------------------------------------- + +void TLWidget::setOutPort(int n) + { + outPort->setCurrentIndex(n); + } + +//--------------------------------------------------------- +// dragEnterEvent +//--------------------------------------------------------- + +void TLWidget::dragEnterEvent(QDragEnterEvent* event) + { + if (TrackDrag::canDecode(event)) + event->acceptProposedAction(); + } + +//--------------------------------------------------------- +// dropEvent +//--------------------------------------------------------- + +void TLWidget::dropEvent(QDropEvent* event) + { + Track* t; + TrackDrag::decode(event, t); + if (_track != t) + emit moveTrack(t, _track); + event->acceptProposedAction(); + } + +//--------------------------------------------------------- +// updateOffState +//--------------------------------------------------------- + +void TLWidget::updateOffState() + { + bool val = !_track->off(); + std::vector::iterator i = wlist.begin(); + for (; i != wlist.end(); ++i) { + if ((*i) != off) + (*i)->setEnabled(val); + } + if (off) + off->setChecked(!val); + } + +//--------------------------------------------------------- +// instrumentSelected +//--------------------------------------------------------- + +void TLWidget::instrumentSelected(int n) + { + MidiOutPort* op = (MidiOutPort*)_track; + int idx = 0; + for (iMidiInstrument i = midiInstruments.begin(); i != midiInstruments.end(); ++i, ++idx) { + if (idx == n) { + op->setInstrument(*i); + break; + } + } + } + +//--------------------------------------------------------- +// instrumentChanged +//--------------------------------------------------------- + +void TLWidget::instrumentChanged() + { + MidiOutPort* op = (MidiOutPort*)_track; + MidiInstrument* mi = op->instrument(); + int idx = 0; + for (iMidiInstrument i = midiInstruments.begin(); i != midiInstruments.end(); ++i, ++idx) { + if (*i == mi) { + instrument->setCurrentIndex(idx); + break; + } + } + } + +//--------------------------------------------------------- +// paintEvent +//--------------------------------------------------------- + +void TLWidget::paintEvent(QPaintEvent* ev) + { + QPainter p(this); + QRect r(ev->rect()); + QColor color(_track->selected() ? selectBgColor : bgColor); + p.fillRect(r, color); + + paintHLine(p, r.x(), r.x() + r.width(), height() - splitWidth); + QPalette pl = nameEdit->palette(); + pl.setColor(QPalette::Window, color); + pl.setColor(QPalette::Base, color); + nameEdit->setPalette(pl); + + // The selected track will get a 4 pixel red bar to the left + if ( _track->selected()) { + QColor color(200,10,10); + QRect qr(0, 0, 4, r.height()-splitWidth); + p.fillRect(qr, color); + } + } + +//--------------------------------------------------------- +// channelChanged +// SLOT: callend when channel routing of track has +// changed +// - channel starts counting at 0 +//--------------------------------------------------------- + +void TLWidget::channelChanged(int channel) + { + if (outChannel->value() == channel + 1) + return; + outChannel->setValue(channel + 1); + } + +//--------------------------------------------------------- +// setChannel +// - called when channel spinbox value changed +// - channel starts counting at 1 +//--------------------------------------------------------- + +void TLWidget::setChannel(int channel) + { + ((MidiTrack*)_track)->setChannel(channel - 1); + } + diff --git a/attic/muse_qt4_evolution/muse/tlwidget.h b/attic/muse_qt4_evolution/muse/tlwidget.h new file mode 100644 index 00000000..fbe428e2 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/tlwidget.h @@ -0,0 +1,105 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __TLWIDGET_H__ +#define __TLWIDGET_H__ + +class Track; +class TrGroupList; +class TLWidgetLayout; +class SimpleButton; + +//--------------------------------------------------------- +// TLWidget +//--------------------------------------------------------- + +class TLWidget : public QWidget { + Q_OBJECT + + enum { S_NORMAL, S_DRAGBOTTOM, S_DRAG }; + int state; + + int trackIdx; + int starty; + Track* _track; + QColor bgColor; + QColor selectBgColor; + + QLineEdit* nameEdit; + TLWidgetLayout* l; + TrGroupList* tel; + QSpinBox* outChannel; + QComboBox* outPort; + SimpleButton* off; + SimpleButton* plus; + SimpleButton* record; + std::vector wlist; + QComboBox* instrument; + QLabel* label; + + QTime startDragTime; + QPoint startDragPos; + + virtual void paintEvent(QPaintEvent*); + virtual void mousePressEvent(QMouseEvent*); + virtual void mouseReleaseEvent(QMouseEvent*); + virtual void mouseMoveEvent(QMouseEvent*); + virtual void dragEnterEvent(QDragEnterEvent*); + virtual void dropEvent(QDropEvent*); + + signals: + void startDrag(int idx); + void drag(int idx, int); + + private slots: + void nameChanged(QString); + void labelPlusClicked(); + void configChanged(); + void recordToggled(bool); + void muteToggled(bool); + void offToggled(bool); + void soloToggled(bool); + void monitorToggled(bool); + void drumMapToggled(bool); + void selectionChanged(); + void setOutPort(int); + void autoReadToggled(bool val); + void autoWriteToggled(bool val); + void instrumentSelected(int); + void instrumentChanged(); + void updateOffState(); + void channelChanged(int); + void setChannel(int); + + public slots: + void select(); + + signals: + void plusClicked(TLWidget*); + void moveTrack(Track* src, Track* dst); + + public: + TLWidget(Track* t, TrGroupList*); + Track* track() const { return _track; } + void setIdx(int n) { trackIdx = n; } + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/tlwlayout.cpp b/attic/muse_qt4_evolution/muse/tlwlayout.cpp new file mode 100644 index 00000000..076f07cf --- /dev/null +++ b/attic/muse_qt4_evolution/muse/tlwlayout.cpp @@ -0,0 +1,144 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "tlwlayout.h" +#include "arranger.h" +#include "gui.h" + +//--------------------------------------------------------- +// TLWidgetLayout +//--------------------------------------------------------- + +TLWidgetLayout::TLWidgetLayout(QWidget *parent) + : QLayout(parent) + { + setMargin(0); + setSpacing(0); + } + +TLWidgetLayout::TLWidgetLayout() + { + setMargin(0); + setSpacing(0); + } + +//--------------------------------------------------------- +// takeAt +//--------------------------------------------------------- + +QLayoutItem *TLWidgetLayout::takeAt(int index) + { + if (index >= 0 && index < itemList.size()) + return itemList.takeAt(index); + else + return 0; + } + +//--------------------------------------------------------- +// setGeometry +//--------------------------------------------------------- + +void TLWidgetLayout::setGeometry(const QRect &rect) + { + int n = itemList.size(); + if (n < 2) + return; + + static const int labelWidth = 50; + int x1 = rect.x() + labelWidth; + int x2 = rect.x() + rect.width(); + int y = rect.y() + 1; + int y2 = y + rect.height() - splitWidth; + int dh = trackRowHeight; + + QLayoutItem* item = itemList.at(0); + QSize size(item->sizeHint()); + item->setGeometry(QRect(rect.x(), rect.y(), size.width(), size.height())); + + item = itemList.at(1); + item->setGeometry(QRect(x1 - 18, y2 - 19, 18, 18)); + + itemList.at(2)->setGeometry(QRect(x1, y, x2-x1, dh)); + if (n <= 3) + return; + + y += dh; + if ((y + itemList.at(3)->sizeHint().height()) > y2) { + for (int i = 3; i < n; ++i) + itemList.at(i)->setGeometry(QRect(-1000, -1000, 0, 0)); + return; + } + int x = x1; + + for (int i = 3; i < n; ++i) { + QLayoutItem *item = itemList.at(i); + QSize size(item->sizeHint()); + + if ((x > x1) && ((x + size.width()) > x2)) { + x = x1; + y += dh; + if ((y + size.height()) > y2) { + for (; i < n; ++i) + itemList.at(i)->setGeometry(QRect(-1000, -1000, 0, 0)); + return; + } + } + item->setGeometry(QRect(x, y, size.width(), dh)); + x += size.width(); + } + } + +//--------------------------------------------------------- +// sizeHint +//--------------------------------------------------------- + +QSize TLWidgetLayout::sizeHint() const + { + return minimumSize(); + } + +//--------------------------------------------------------- +// minimumSize +//--------------------------------------------------------- + +QSize TLWidgetLayout::minimumSize() const + { + QSize size; + QLayoutItem *item; + foreach (item, itemList) + size = size.expandedTo(item->minimumSize()); + + size += QSize(2*margin(), 2*margin()); + return size; + } + +//--------------------------------------------------------- +// clear +//--------------------------------------------------------- + +void TLWidgetLayout::clear() + { + QLayoutItem* child; + while ((child = takeAt(0)) != 0) { + delete child->widget(); + delete child; + } + } + diff --git a/attic/muse_qt4_evolution/muse/tlwlayout.h b/attic/muse_qt4_evolution/muse/tlwlayout.h new file mode 100644 index 00000000..1a9cc914 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/tlwlayout.h @@ -0,0 +1,51 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __TLWLAYOUT_H__ +#define __TLWLAYOUT_H__ + +//--------------------------------------------------------- +// TLWidgetLayout +//--------------------------------------------------------- + +class TLWidgetLayout : public QLayout { + QList itemList; + + int doLayout(const QRect& rect, bool testOnly) const; + + public: + TLWidgetLayout(QWidget* parent); + TLWidgetLayout(); + ~TLWidgetLayout() { clear(); } + + void addItem(QLayoutItem* item) { itemList.append(item); } + Qt::Orientations expandingDirections() const { return 0; } + bool hasHeightForWidth() const { return false; } + int count() const { return itemList.size(); } + QSize minimumSize() const; + void setGeometry(const QRect &rect); + QSize sizeHint() const; + QLayoutItem *itemAt(int index) const { return itemList.value(index); } + QLayoutItem *takeAt(int index); + void clear(); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/track.cpp b/attic/muse_qt4_evolution/muse/track.cpp new file mode 100644 index 00000000..93d92ac1 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/track.cpp @@ -0,0 +1,1062 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "track.h" +#include "song.h" +#include "al/tempo.h" +#include "al/xml.h" +#include "icons.h" +#include "audio.h" +#include "gconfig.h" +#include "midictrl.h" +#include "part.h" +#include "gui.h" +#include "audiodev.h" + +// synchronize with TrackType!: + +const char* Track::_cname[] = { + "AudioOut", "Group", "Wave", "AudioIn", + "Synth", "Midi", "MidiOut", "MidiIn", "M-Synth" + }; + +const char* Track::_clname[] = { + "Audio Output", "Audio Group", "Wave Track", "Audio Input", + "Synti", "Midi Track", "Midi Output", "Midi Input", + "Midi Synth" + }; + +//--------------------------------------------------------- +// ArrangerTrack +//--------------------------------------------------------- + +ArrangerTrack::ArrangerTrack() + { + tw = 0; + ctrl = -1; // first ctrl in list + controller = 0; + h = defaultTrackHeight; + } + +//--------------------------------------------------------- +// ccolor +// return track specific track background color +//--------------------------------------------------------- + +QColor Track::ccolor() const + { + return config.trackBg[type()]; + } + +//--------------------------------------------------------- +// pixmap +//--------------------------------------------------------- + +QPixmap* Track::pixmap(TrackType t) + { + switch(t) { + case AUDIO_OUTPUT: return addtrack_audiooutputIcon; + case AUDIO_GROUP: return addtrack_audiogroupIcon; + case WAVE: return addtrack_wavetrackIcon; + case AUDIO_INPUT: return addtrack_audioinputIcon; + case AUDIO_SOFTSYNTH: return addtrack_audioinputIcon; // DEBUG + default: + case MIDI: return addtrack_addmiditrackIcon; + case MIDI_OUT: return addtrack_addmiditrackIcon; + case MIDI_IN: return addtrack_addmiditrackIcon; + } + } + +//--------------------------------------------------------- +// Track +//--------------------------------------------------------- + +Track::Track() + { + _tt = AL::TICKS; + _recordFlag = false; + _monitor = false; + _mute = false; + _solo = false; + _off = false; + _channels = 0; // 1 - mono, 2 - stereo + _selected = false; + _locked = false; + _autoRead = autoReadDefault(); + _autoWrite = autoWriteDefault(); + + for (int i = 0; i < MAX_CHANNELS; ++i) { + _meter[i] = 0.0f; + _peak[i] = 0.0f; + _peakTimer[i] = 0; + } + _sendSync = false; + _deviceId = 127; + _parts = new PartList; + } + +//--------------------------------------------------------- +// ~Track +//--------------------------------------------------------- + +Track::~Track() + { + delete _parts; + + for (int i = 0; i < MAX_CHANNELS; ++i) { +// if (!_alsaPort[i].isZero()) +// midiDriver->unregisterPort(_alsaPort[i]); + if (!_jackPort[i].isZero()) + audioDriver->unregisterPort(_jackPort[i]); + } + + } + +//--------------------------------------------------------- +// setDefaultName +// generate unique name for track +//--------------------------------------------------------- + +void Track::setDefaultName() + { + QString base; + switch(type()) { + case MIDI: + case WAVE: + base = QString("Track"); + break; + case AUDIO_GROUP: + base = QString("Group"); + break; + case AUDIO_SOFTSYNTH: + // base = QString("Synth"); + return; + case AUDIO_OUTPUT: + case AUDIO_INPUT: + case MIDI_OUT: + case MIDI_IN: + case MIDI_SYNTI: + case TRACK_TYPES: + base = cname(); + break; + }; + // + // create unique name + // + for (int i = 1;; ++i) { + QString s; + if (i == 1) + s = base; + else + s = QString("%1 %2").arg(base).arg(i); + bool found = false; + TrackList* tl = song->tracks(); + for (iTrack it = tl->begin(); it != tl->end(); ++it) { + Track* track = *it; + if (track->name() == s) { + found = true; + break; + } + } + if (!found) { + setName(s); + break; + } + } + } + +//--------------------------------------------------------- +// dump +//--------------------------------------------------------- + +void Track::dump() const + { + printf("Track <%s>: typ %d, parts %zd sel %d\n", + _name.toLatin1().data(), type(), _parts->size(), _selected); + } + +//--------------------------------------------------------- +// addPart +//--------------------------------------------------------- + +void Track::addPart(Part* p) + { + p->setTrack(this); + _parts->add(p); + } + +//--------------------------------------------------------- +// findPart +//--------------------------------------------------------- + +Part* Track::findPart(unsigned tick) + { + for (iPart i = _parts->begin(); i != _parts->end(); ++i) { + Part* part = i->second; + if (tick >= part->tick() && tick < (part->tick()+part->lenTick())) + return part; + } + return 0; + } + +//--------------------------------------------------------- +// Track::writeProperties +//--------------------------------------------------------- + +void Track::writeProperties(Xml& xml) const + { + xml.tag("name", _name); + if (!_comment.isEmpty()) + xml.tag("comment", _comment); + if (_recordFlag) + xml.tag("record", _recordFlag); + if (mute() != muteDefault()) + xml.tag("mute", mute()); + if (solo()) + xml.tag("solo", solo()); + if (off()) + xml.tag("off", off()); + if (_channels) + xml.tag("channels", _channels); + if (_locked) + xml.tag("locked", _locked); + if (_monitor) + xml.tag("monitor", _monitor); + if (_autoRead != autoReadDefault()) + xml.tag("autoRead", _autoRead); + if (_autoWrite != autoWriteDefault()) + xml.tag("autoWrite", _autoWrite); + if (_selected) + xml.tag("selected", _selected); + for (ciCtrl icl = controller()->begin(); icl != controller()->end(); ++icl) + icl->second->write(xml); + if (arrangerTrack.tw) + xml.tag("height", arrangerTrack.tw->height()); + for (ciArrangerTrack i = subtracks.begin(); i != subtracks.end(); ++i) { + xml.stag("subtrack"); + xml.tag("height", (*i)->tw->height()); + xml.tag("ctrl", (*i)->ctrl); + xml.etag("subtrack"); + } + } + +//--------------------------------------------------------- +// Track::readProperties +//--------------------------------------------------------- + +bool Track::readProperties(QDomNode node) + { + QDomElement e = node.toElement(); + QString tag(e.tagName()); + QString s(e.text()); + int i = s.toInt(); + + if (tag == "name") + setName(s); + else if (tag == "comment") + _comment = s; + else if (tag == "record") { + bool recordFlag = i; + setRecordFlag(recordFlag); + } + else if (tag == "mute") + _mute = i; + else if (tag == "solo") + _solo = i; + else if (tag == "off") + _off = i; + else if (tag == "channels") + _channels = i; + else if (tag == "locked") + _locked = i; + else if (tag == "monitor") + _monitor = i; + else if (tag == "selected") + _selected = i; + else if (tag == "autoRead") + _autoRead = i; + else if (tag == "autoWrite") + _autoWrite = i; + else if (tag == "controller") { + Ctrl* l = new Ctrl(); + l->read(node, false); + + iCtrl icl = controller()->find(l->id()); + if (icl == controller()->end()) + controller()->add(l); + else { //??? + Ctrl* d = icl->second; + for (iCtrlVal i = l->begin(); i != l->end(); ++i) + d->insert(i.key(), i.value()); + d->setCurVal(l->curVal()); + d->setDefault(l->getDefault()); + delete l; + } + } + else if (tag == "height") + arrangerTrack.h = i < minTrackHeight ? minTrackHeight : i; + else if (tag == "subtrack") { + ArrangerTrack* st = new ArrangerTrack; + for (QDomNode n = node.firstChild(); !n.isNull(); n = n.nextSibling()) { + QDomElement e = n.toElement(); + QString tag = e.tagName(); + QString s = e.text(); + int i = s.toInt(); + if (tag == "height") + st->h = i; + else if (tag == "ctrl") { + st->ctrl = i; + } + else + printf("Track::subtrack: unknown tag <%s>\n", tag.toLatin1().data()); + } + subtracks.push_back(st); + } + else + return true; + return false; + } + +//--------------------------------------------------------- +// addController +//--------------------------------------------------------- + +void Track::addController(Ctrl* list) + { + iCtrl i = controller()->find(list->id()); + if (i != controller()->end()) { + // printf("%s(%s)::addController(%s): already there 0x%x\n", + // cname().toLatin1().data(), name().toLatin1().data(), list->name().toLatin1().data(), list->id()); + // abort(); + return; + } + controller()->add(list); + emit clChanged(); + } + +//--------------------------------------------------------- +// addMidiController +//--------------------------------------------------------- + +void Track::addMidiController(MidiInstrument* mi, int ctrl) + { + iCtrl cl = _controller.find(ctrl); + if (cl != _controller.end()) + return; + + MidiController* mc = mi->midiController(ctrl); + Ctrl* pvl; + if (mc) { + pvl = new Ctrl(mc); + } + else { + printf("unknown midi controller %x\n", ctrl); + pvl = new Ctrl(ctrl, QString("unknown")); + pvl->setCurVal(CTRL_VAL_UNKNOWN); + pvl->setType(Ctrl::DISCRETE | Ctrl::INT); + } + addController(pvl); + } + +//--------------------------------------------------------- +// removeController +//--------------------------------------------------------- + +void Track::removeController(int id) + { + iCtrl i = controller()->find(id); + if (i == controller()->end()) { + printf("Track::removeController id 0x%x not found, listsize %zd\n", + id, controller()->size()); + return; + } + controller()->erase(i); + emit clChanged(); + } + +//--------------------------------------------------------- +// changeCtrlName +//--------------------------------------------------------- + +void Track::changeCtrlName(Ctrl* c, const QString& s) + { + c->setName(s); + emit clChanged(); + } + +//--------------------------------------------------------- +// addControllerVal +// return true if new controller value added +//--------------------------------------------------------- + +bool Track::addControllerVal(int id, unsigned time, CVal val) + { + iCtrl i = controller()->find(id); + if (i == controller()->end()) { + if ((id & 0xf0000) == CTRL_NRPN_OFFSET) { + int msb = id & 0xff00; + // int lsb = id & 0xff; + int nid = CTRL_NRPN_OFFSET + msb + 0xff; + i = controller()->find(nid); + if (i != controller()->end()) { + Ctrl* c = new Ctrl(*(i->second)); + c->setId(id); + addController(c); +// printf("add pitch ctrl %x\n", id); + return c->add(time, val); + } + } + printf("Track::addControllerVal(): id 0x%x not found, listsize %zd\n", + id, controller()->size()); + return false; + } + return i->second->add(time, val); + } + +//--------------------------------------------------------- +// removeControllerVal +//--------------------------------------------------------- + +void Track::removeControllerVal(int id, unsigned time) + { + iCtrl i = controller()->find(id); + if (i == controller()->end()) { + printf("Track::removeControllerVal(): id 0x%x not found, listsize %zd\n", + id, controller()->size()); + return; + } + i->second->del(time); + } + +//--------------------------------------------------------- +// getController +//--------------------------------------------------------- + +Ctrl* Track::getController(int id) const + { + ciCtrl i = controller()->find(id); + if (i == controller()->end()) { +// printf("%s(%s)::getController(%d) size %d: not found\n", +// cname().toLatin1().data(), name().toLatin1().data(), id, controller()->size()); +// const CtrlList* cl = controller(); +// for (ciCtrl i = cl->begin(); i != cl->end(); ++i) +// printf(" Ctrl %d\n", i->first); + return 0; + } + return i->second; + } + +//--------------------------------------------------------- +// controllerNames +//--------------------------------------------------------- + +ControllerNameList* Track::controllerNames() const + { + ControllerNameList* l = new ControllerNameList; + for (ciCtrl i = controller()->begin(); i != controller()->end(); ++i) + l->push_back(ControllerName(i->second->name(), i->second->id())); + return l; + } + +//--------------------------------------------------------- +// setRecordFlag +//--------------------------------------------------------- + +void Track::setRecordFlag(bool f) + { + if (_recordFlag != f) { + _recordFlag = f; + emit recordChanged(_recordFlag); + } + } + +//--------------------------------------------------------- +// setMonitor +//--------------------------------------------------------- + +void Track::setMonitor(bool f) + { + if (_monitor != f) { + _monitor = f; + emit monitorChanged(_monitor); + } + } + +//--------------------------------------------------------- +// setSelected +//--------------------------------------------------------- + +void Track::setSelected(bool f) + { + if (f != _selected) { + _selected = f; + emit selectionChanged(_selected); +// muse->selectionChanged(); + } + } + +//--------------------------------------------------------- +// setController +// called from GUI +//--------------------------------------------------------- + +#if 0 +void Track::setController(Pos pos, int id, int v) + { + CVal val; + val.i = v; + setController(pos, id, val); + } + +void Track::setController(Pos pos, int id, double v) + { + CVal val; + val.f = v; + setController(pos, id, val); + } + +void Track::setController(Pos pos, int id, CVal val) + { + Ctrl* c = getController(id); + if (c == 0) { + printf("no controller 0x%x %s\n", id, name().toLatin1().data()); + return; + } + if (isMidiTrack()) { + int port = ((MidiTrack*)this)->outPort(); + int channel = ((MidiTrack*)this)->outChannel(); + MidiEvent ev(0, port, channel, ME_CONTROLLER, id, val.i); + audio->msgPlayMidiEvent(&ev); + } + else { + // non midi controller are current once set + c->setCurVal(val); + } + c->setSchedVal(val); + if (autoWrite()) { + unsigned time = _tt == AL::FRAMES ? pos.frame() : pos.tick(); + if (audio->isPlaying()) + _recEvents.push_back(CtrlRecVal(time, id, val)); + else + song->addControllerVal(this, c, id, time, val); + } + emit controllerChanged(id); + } +#endif + +//--------------------------------------------------------- +// startAutoRecord +// slider/knob touched +//--------------------------------------------------------- + +void Track::startAutoRecord(int n) + { + Ctrl* ctrl = getController(n); + if (ctrl) { + ctrl->setTouched(true); + if (audio->isPlaying() && autoWrite()) + _recEvents.push_back(CtrlRecVal(song->cPos().frame(), n, 1)); + } + else + printf("no ctrl 0x%x\n", n); + } + +//--------------------------------------------------------- +// stopAutoRecord +// slider/knob released +//--------------------------------------------------------- + +void Track::stopAutoRecord(int n) + { + Ctrl* ctrl = getController(n); + if (ctrl) { + ctrl->setTouched(false); + if (audio->isPlaying() && autoWrite()) + _recEvents.push_back(CtrlRecVal(song->cPos().frame(), n, 2)); + } + else + printf("no ctrl 0x%x\n", n); + } + +//--------------------------------------------------------- +// setName +//--------------------------------------------------------- + +void Track::setName(const QString& s) + { + _name = s; + emit nameChanged(_name); + } + +//--------------------------------------------------------- +// setAutoRead +//--------------------------------------------------------- + +void Track::setAutoRead(bool val) + { + if (_autoRead != val) { + _autoRead = val; + emit autoReadChanged(_autoRead); + } + } + +//--------------------------------------------------------- +// setAutoWrite +//--------------------------------------------------------- + +void Track::setAutoWrite(bool val) + { + if (_autoWrite != val) { + _autoWrite = val; + emit autoWriteChanged(_autoWrite); + } + } + +//--------------------------------------------------------- +// cpos +//--------------------------------------------------------- + +unsigned Track::cpos() const + { + return timeType() == AL::TICKS ? song->cPos().tick() : song->cPos().frame(); + } + +//--------------------------------------------------------- +// updateController +//--------------------------------------------------------- + +void Track::updateController() + { + CtrlList* cl = controller(); + for (iCtrl i = cl->begin(); i != cl->end(); ++i) { + Ctrl* c = i->second; + if (c->changed()) { + c->setChanged(false); + emit controllerChanged(c->id()); + } + } + } + +//--------------------------------------------------------- +// writeRouting +//--------------------------------------------------------- + +void Track::writeRouting(Xml& xml) const + { + if (type() == AUDIO_INPUT || type() == MIDI_IN) { + foreach(Route r, _inRoutes) { + xml.stag("Route"); + r.src.write(xml, "src"); + r.dst.write(xml, "dst"); + xml.etag("Route"); + } + } + foreach(Route r, _outRoutes) { + xml.stag("Route"); + r.src.write(xml, "src"); + r.dst.write(xml, "dst"); + xml.etag("Route"); + } + } + +//--------------------------------------------------------- +// hwCtrlState +//--------------------------------------------------------- + +int Track::hwCtrlState(int ctrl) const + { + ciCtrl cl = _controller.find(ctrl); + if (cl == _controller.end()) { + if (debugMsg) + printf("hwCtrlState: ctrl 0x%x not found\n", ctrl); + return CTRL_VAL_UNKNOWN; + } + Ctrl* vl = cl->second; + return vl->curVal().i; + } + +//--------------------------------------------------------- +// setHwCtrlState +//--------------------------------------------------------- + +void Track::setHwCtrlState(int ctrl, int val) + { + iCtrl cl = _controller.find(ctrl); + if (cl == _controller.end()) { + // try to add new controller + if (debugMsg) + printf("setHwCtrlState(0x%x,0x%x): not found\n", ctrl, val); + return; + } + Ctrl* vl = cl->second; +// printf("setHwCtrlState ctrl %x val %x\n", ctrl, val); + vl->setChanged(true); + return vl->setCurVal(val); + } + +//--------------------------------------------------------- +// getCtrl +//--------------------------------------------------------- + +int Track::getCtrl(int tick, int ctrl) const + { + ciCtrl cl = _controller.find(ctrl); + if (cl == _controller.end()) { + if (debugMsg) + printf("getCtrl: controller %d(0x%x) not found %zd\n", + ctrl, ctrl, _controller.size()); + return CTRL_VAL_UNKNOWN; + } + return cl->second->value(tick).i; + } + +//--------------------------------------------------------- +// setSolo +//--------------------------------------------------------- + +bool Track::setSolo(bool val) + { + if (_solo != val) { + _solo = val; + emit soloChanged(_solo); + return true; + } + return false; + } + +//--------------------------------------------------------- +// setMute +// return true if mute changed +//--------------------------------------------------------- + +bool Track::setMute(bool val) + { + if (_mute != val) { + _mute = val; + emit muteChanged(_mute); + return true; + } + return false; + } + +//--------------------------------------------------------- +// setOff +// return true if state changed +//--------------------------------------------------------- + +bool Track::setOff(bool val) + { + if (_off != val) { + _off = val; + emit offChanged(_off); + return true; + } + return false; + } + +//--------------------------------------------------------- +// setChannels +//--------------------------------------------------------- + +void Track::setChannels(int n) + { + _channels = n; + for (int i = 0; i < _channels; ++i) { + _meter[i] = 0.0f; + _peak[i] = 0.0f; + } + } + +//--------------------------------------------------------- +// resetMeter +//--------------------------------------------------------- + +void Track::resetMeter() + { + for (int i = 0; i < _channels; ++i) + _meter[i] = 0.0f; + } + +//--------------------------------------------------------- +// resetPeaks +//--------------------------------------------------------- + +void Track::resetPeaks() + { + for (int i = 0; i < _channels; ++i) + _peak[i] = 0; + } + +//--------------------------------------------------------- +// resetAllMeter +//--------------------------------------------------------- + +void Track::resetAllMeter() + { + TrackList* tl = song->tracks(); + for (iTrack i = tl->begin(); i != tl->end(); ++i) + (*i)->resetMeter(); + } + +//--------------------------------------------------------- +// activate1 +// register JACK and ALSA ports +//--------------------------------------------------------- + +void Track::activate1() + { + if (isMidiTrack()) { + if (!jackPort(0).isZero()) + printf("Track::activate1() midi: jack port already active!\n"); + if (type() == MIDI_OUT) { + _jackPort[0] = audioDriver->registerOutPort(_name, true); + } + else if (type() == MIDI_IN) { + _jackPort[0] = audioDriver->registerInPort(_name, true); + } + return; + } + + for (int i = 0; i < channels(); ++i) { + if (!jackPort(i).isZero()) + printf("Track<%s>::activate1(): channel %d already active!\n", + name().toLatin1().data(), i); + else { + QString s(QString("%1-%2").arg(_name).arg(i)); + if (type() == AUDIO_OUTPUT) + _jackPort[i] = audioDriver->registerOutPort(s, false); + else if (type() == AUDIO_INPUT) + _jackPort[i] = audioDriver->registerInPort(s, false); + } + } + } + +//--------------------------------------------------------- +// activate2 +// connect all JACK/ALSA in/out routes +// connect to JACK only works if JACK is running +//--------------------------------------------------------- + +void Track::activate2() + { + if (audioState != AUDIO_RUNNING) { + printf("Track::activate2(): no audio running !\n"); + abort(); + } + foreach(Route r, _outRoutes) { + if (r.dst.type == RouteNode::JACKMIDIPORT) { + audioDriver->connect(_jackPort[0], r.dst.port); + r.disconnected = false; + } + else if (r.dst.type == RouteNode::AUDIOPORT) { + audioDriver->connect(_jackPort[r.src.channel], r.dst.port); + r.disconnected = false; + } + } + foreach(Route r, _inRoutes) { + if (r.src.type == RouteNode::JACKMIDIPORT) { + audioDriver->connect(r.src.port, _jackPort[0]); + r.disconnected = false; + } + else if (r.src.type == RouteNode::AUDIOPORT) { + audioDriver->connect(r.src.port, _jackPort[r.dst.channel]); + r.disconnected = false; + } + } + } + +//--------------------------------------------------------- +// deactivate +// disconnect and unregister JACK and ALSA ports +//--------------------------------------------------------- + +void Track::deactivate() + { +// printf("deactivate<%s>\n", name().toLatin1().data()); + foreach(Route r, _outRoutes) { + if (r.dst.type == RouteNode::JACKMIDIPORT) { + r.disconnected = true; + audioDriver->disconnect(_jackPort[0], r.dst.port); + } + else if (r.dst.type == RouteNode::AUDIOPORT) { + audioDriver->disconnect(_jackPort[r.src.channel], r.dst.port); + r.disconnected = true; + } + } + foreach(Route r, _inRoutes) { + if (r.src.type == RouteNode::JACKMIDIPORT) { + r.disconnected = true; + audioDriver->disconnect(r.src.port, _jackPort[0]); + } + else if (r.src.type == RouteNode::AUDIOPORT) { + r.disconnected = true; + audioDriver->disconnect(r.src.port, _jackPort[r.dst.channel]); + } + } + for (int i = 0; i < channels(); ++i) { + if (!_jackPort[i].isZero()) { + audioDriver->unregisterPort(_jackPort[i]); + _jackPort[i].setZero(); + } + } + } + +//--------------------------------------------------------- +// setSendSync +//--------------------------------------------------------- + +void Track::setSendSync(bool val) + { + _sendSync = val; + emit sendSyncChanged(val); + } + +//--------------------------------------------------------- +// splitPart +// split part "part" at "tick" position +// create two new parts p1 and p2 +//--------------------------------------------------------- + +void Track::splitPart(Part* part, int tickpos, Part*& p1, Part*& p2) + { + int l1 = 0; // len of first new part (ticks or samples) + int l2 = 0; // len of second new part + + int samplepos = AL::tempomap.tick2frame(tickpos); + + switch (type()) { + case WAVE: + l1 = samplepos - part->frame(); + l2 = part->lenFrame() - l1; + break; + case MIDI: + l1 = tickpos - part->tick(); + l2 = part->lenTick() - l1; + break; + default: + return; + } + + if (l1 <= 0 || l2 <= 0) + return; + + p1 = newPart(part); // new left part + p2 = newPart(part); // new right part + + switch (type()) { + case WAVE: + p1->setLenFrame(l1); + p2->setFrame(samplepos); + p2->setLenFrame(l2); + break; + case MIDI: + p1->setLenTick(l1); + p2->setTick(tickpos); + p2->setLenTick(l2); + break; + default: + break; + } + + EventList* se = part->events(); + EventList* de1 = p1->events(); + EventList* de2 = p2->events(); + + if (type() == WAVE) { + int ps = part->frame(); + int d1p1 = p1->frame(); + int d2p1 = p1->endFrame(); + int d1p2 = p2->frame(); + int d2p2 = p2->endFrame(); + for (iEvent ie = se->begin(); ie != se->end(); ++ie) { + Event event = ie->second; + int s1 = event.frame() + ps; + int s2 = event.endFrame() + ps; + + if ((s2 > d1p1) && (s1 < d2p1)) { + Event si = event.mid(d1p1 - ps, d2p1 - ps); + de1->add(si); + } + if ((s2 > d1p2) && (s1 < d2p2)) { + Event si = event.mid(d1p2 - ps, d2p2 - ps); + si.setFrame(si.frame() - l1); //?? + si.setFrame(0); //?? + de2->add(si); + } + } + } + else { + for (iEvent ie = se->begin(); ie != se->end(); ++ie) { + Event event = ie->second.clone(); + int t = event.tick(); + if (t >= l1) { + event.move(-l1); + de2->add(event); + } + else + de1->add(event); + } + } + } + +//--------------------------------------------------------- +// addInRoute +//--------------------------------------------------------- + +void Track::addInRoute(const Route& r) + { + if (_inRoutes.indexOf(r) != -1) { + printf("Track::addInRoute: route already there\n"); + return; + } + _inRoutes.push_back(r); + } + +//--------------------------------------------------------- +// addOutRoute +//--------------------------------------------------------- + +void Track::addOutRoute(const Route& r) + { + if (_outRoutes.indexOf(r) != -1) { + printf("Track::addOutRoute: route already there\n"); + return; + } + _outRoutes.push_back(r); + } + +//--------------------------------------------------------- +// inRouteExists +//--------------------------------------------------------- + +bool Track::inRouteExists(const Route& r) const + { + return _inRoutes.indexOf(r) != -1; + } + +//--------------------------------------------------------- +// outRouteExists +//--------------------------------------------------------- + +bool Track::outRouteExists(const Route& r) const + { + return _outRoutes.indexOf(r) != -1; + } + diff --git a/attic/muse_qt4_evolution/muse/track.h b/attic/muse_qt4_evolution/muse/track.h new file mode 100644 index 00000000..1afa3cc2 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/track.h @@ -0,0 +1,345 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __TRACK_H__ +#define __TRACK_H__ + +#include "port.h" +#include "al/pos.h" +#include "route.h" +#include "ctrl.h" +#include "globaldefs.h" + +namespace AL { + class Xml; + enum TType; + }; +using AL::Xml; +using AL::TType; + +class DrumMap; +class MidiPipeline; +class MidiEvent; +class MidiEventList; +class SynthI; +class MidiPlugin; +class MidiPluginI; +class MidiInstrument; +class PartList; +class Part; +class MidiOutPort; +class MidiInPort; +class MidiOut; + +//--------------------------------------------------------- +// ArrangerTrack +//--------------------------------------------------------- + +struct ArrangerTrack { + QWidget* tw; // tracklist widget + int ctrl; + int h; // tmp val used by readProperties() + Ctrl* controller; + + ArrangerTrack(); + }; + +typedef std::list ArrangerTrackList; +typedef ArrangerTrackList::iterator iArrangerTrack; +typedef ArrangerTrackList::const_iterator ciArrangerTrack; + +//--------------------------------------------------------- +// Track +//--------------------------------------------------------- + +class Track : public QObject { + Q_OBJECT + + public: + enum TrackType { + AUDIO_OUTPUT, + AUDIO_GROUP, + WAVE, + AUDIO_INPUT, + AUDIO_SOFTSYNTH, + MIDI, + MIDI_OUT, + MIDI_IN, + MIDI_SYNTI, + TRACK_TYPES + }; + enum { + M_AUDIO_OUTPUT = 1 << AUDIO_OUTPUT, + M_AUDIO_GROUP = 1 << AUDIO_GROUP, + M_WAVE = 1 << WAVE, + M_AUDIO_INPUT = 1 << AUDIO_INPUT, + M_AUDIO_SOFTSYNTH = 1 << AUDIO_SOFTSYNTH, + M_MIDI = 1 << MIDI, + M_MIDI_OUT = 1 << MIDI_OUT, + M_MIDI_IN = 1 << MIDI_IN, + M_MIDI_SYNTI = 1 << MIDI_SYNTI + }; + + private: + QString _comment; + PartList* _parts; + Port _jackPort[MAX_CHANNELS]; + bool _sendSync; // this port sends mtc/mmc events + int _deviceId; // midi device id: 0-126; 127 == all + + protected: + TType _tt; // time type + QString _name; + bool _recordFlag; + bool _mute; + bool _solo; + bool _off; + bool _monitor; + int _channels; // 1 - mono, 2 - stereo + // Note: midi out/in tracks have + // 1 channel + CtrlRecList _recEvents; // recorded automation events + double _meter[MAX_CHANNELS]; + double _peak[MAX_CHANNELS]; + int _peakTimer[MAX_CHANNELS]; + bool _locked; // true if parts are locked to frames + bool _selected; + + RouteList _inRoutes, _outRoutes; + CtrlList _controller; + + bool _autoRead, _autoWrite; + + bool readProperties(QDomNode); + void writeProperties(Xml& xml) const; + + virtual bool setMute(bool val); + virtual bool setOff(bool val); + virtual bool setSolo(bool val); + + signals: + void recordChanged(bool); + void autoReadChanged(bool); + void autoWriteChanged(bool); + void clChanged(); + void controllerChanged(int id); + void selectionChanged(bool); + void muteChanged(bool); + void soloChanged(bool); + void monitorChanged(bool); + void offChanged(bool); + void partsChanged(); + void nameChanged(const QString&); + void routeChanged(); + void sendSyncChanged(bool); + + private slots: + void setAutoRead(bool); + void setAutoWrite(bool); + + public: + Track(); + virtual ~Track(); + + static const char* _cname[]; + static const char* _clname[]; + + QString comment() const { return _comment; } + void setComment(const QString& s) { _comment = s; } + TType timeType() const { return _tt; } + void setTimeType(TType t) { _tt = t; } + + QString cname() const { + int t = type(); + return QString(_cname[t]); + } + QString clname() const { return QString(_clname[type()]); } + + // + // called before and after use + // (undo/redo) + // connects/reconnects to the outside world + // + void activate1(); + void activate2(); + void deactivate(); + + //---------------------------------------------------------- + // controller handling + //---------------------------------------------------------- + + CtrlList* controller() { return &_controller; } + const CtrlList* controller() const { return &_controller; } + + ControllerNameList* controllerNames() const; + void addController(Ctrl*); + void addMidiController(MidiInstrument*, int ctrl); + void removeController(int id); + Ctrl* getController(int id) const; + + int hwCtrlState(int ctrl) const; + void setHwCtrlState(int ctrl, int val); + + // current value: + CVal ctrlVal(int id) { return getController(id)->curVal(); } + + // editor interface: + bool addControllerVal(int id, unsigned pos, CVal); + void removeControllerVal(int id, unsigned pos); + int getCtrl(int tick, int ctrl) const; + + // signal interface: + virtual void emitControllerChanged(int id) { emit controllerChanged(id); } + void updateController(); + void changeCtrlName(Ctrl* c, const QString& s); + + // automation + void startAutoRecord(int); + void stopAutoRecord(int); + CtrlRecList* recEvents() { return &_recEvents; } + //---------------------------------------------------------- + + QColor ccolor() const; + QPixmap* pixmap() const { return pixmap(type()); } + static QPixmap* pixmap(TrackType); + + bool selected() const { return _selected; } + void setSelected(bool f); + + bool locked() const { return _locked; } + void setLocked(bool b) { _locked = b; } + + QString name() const { return _name; } + virtual void setName(const QString& s); + + virtual TrackType type() const = 0; + + PartList* parts() const { return _parts; } + + Part* findPart(unsigned tick); + void addPart(Part* p); + + virtual void write(Xml&) const = 0; + + void setRecordFlag(bool); + virtual Part* newPart(Part*p=0, bool clone = false) = 0; + void dump() const; + virtual void splitPart(Part*, int, Part*&, Part*&); + + void setMonitor(bool val); + virtual bool isMute() const = 0; + + bool monitor() const { return _monitor; } + bool solo() const { return _solo; } + bool mute() const { return _mute; } + bool off() const { return _off; } + bool recordFlag() const { return _recordFlag; } + + void resetMeter(); + void resetPeaks(); + static void resetAllMeter(); + double meter(int ch) const { return _meter[ch]; } + void addMidiMeter(int velo) { + _meter[0] += velo/5; + if (_meter[0] > 127.0f) + _meter[0] = 127.0f; + } + double peak(int ch) const { return _peak[ch]; } + void setPeak(int ch, double v) { _peak[ch] = v; } + void resetPeak(int ch) { + _peak[ch] = 0; + _peakTimer[ch] = 0; + } + int peakTimer(int ch) const { return _peakTimer[ch]; } + void setPeakTimer(int ch, int v) { _peakTimer[ch] = v; } + void setMeter(int ch, double v) { + _meter[ch] = v; + if (v > _peak[ch]) { + _peak[ch] = v; + _peakTimer[ch] = 0; + } + } + + void setDefaultName(); + int channels() const { return _channels; } + virtual void setChannels(int n); + bool isMidiTrack() const { + return type() == MIDI + || type() == MIDI_IN + || type() == MIDI_OUT + || type() == MIDI_SYNTI; + } + virtual bool canRecord() const { return false; } + + bool autoRead() const { return _autoRead; } + bool autoWrite() const { return _autoWrite; } + + void partListChanged() { emit partsChanged(); } + void updateMute() { emit muteChanged(isMute()); } + unsigned cpos() const; + + //---------------------------------------------------------- + // routing + //---------------------------------------------------------- + + RouteList* inRoutes() { return &_inRoutes; } + RouteList* outRoutes() { return &_outRoutes; } + bool noInRoute() const { return _inRoutes.empty(); } + bool noOutRoute() const { return _outRoutes.empty(); } + void addInRoute(const Route& r); + void addOutRoute(const Route& r); + void writeRouting(Xml&) const; + bool inRouteExists(const Route& r) const; + bool outRouteExists(const Route& r) const; + + Port jackPort(int channel = 0) const { return _jackPort[channel]; } + + void setJackPort(const Port& port, int channel = 0) { + _jackPort[channel] = port; + } + + struct ArrangerTrack arrangerTrack; + ArrangerTrackList subtracks; + + friend class Song; + + virtual void routeEvent(const MidiEvent&) {} + bool sendSync() const { return _sendSync; } + void setSendSync(bool val); + int deviceId() const { return _deviceId; } + void setDeviceId(int val) { _deviceId = val; } + + virtual bool muteDefault() const { return false; } + virtual bool autoReadDefault() const { return false; } + virtual bool autoWriteDefault() const { return false; } + + virtual MidiOut* midiOut() { return 0; } + virtual MidiInstrument* instrument() { return 0; } + }; + +Q_DECLARE_METATYPE(class Track*); + +typedef QList TrackList; +typedef TrackList::iterator iTrack; +typedef TrackList::const_iterator ciTrack; + + +#endif + diff --git a/attic/muse_qt4_evolution/muse/trackdrag.cpp b/attic/muse_qt4_evolution/muse/trackdrag.cpp new file mode 100644 index 00000000..beab87dd --- /dev/null +++ b/attic/muse_qt4_evolution/muse/trackdrag.cpp @@ -0,0 +1,61 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "trackdrag.h" + +class Track; +const char TrackDrag::type[] = "application/muse/track"; + +//--------------------------------------------------------- +// TrackDrag +//--------------------------------------------------------- + +TrackDrag::TrackDrag(Track* track, QWidget* src) + : QDrag(src) + { + QByteArray a((char*)&track, sizeof(track)); + QMimeData* mimeData = new QMimeData; + mimeData->setData(type, a); + setMimeData(mimeData); + } + +//--------------------------------------------------------- +// canDecode +//--------------------------------------------------------- + +bool TrackDrag::canDecode(const QMimeSource* s) + { + return !strcmp(s->format(0), type); + } + +//--------------------------------------------------------- +// decode +//--------------------------------------------------------- + +bool TrackDrag::decode(const QMimeSource* s, Track*& p) + { + QByteArray a = s->encodedData(type); + p = (Track*)((a[0] & 0xff) + | (a[1] & 0xff) << 8 + | (a[2] & 0xff) << 16 + | (a[3] & 0xff) << 24); + return true; + } + diff --git a/attic/muse_qt4_evolution/muse/trackdrag.h b/attic/muse_qt4_evolution/muse/trackdrag.h new file mode 100644 index 00000000..083a94b3 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/trackdrag.h @@ -0,0 +1,42 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __TRACKDRAG_H__ +#define __TRACKDRAG_H__ + +class Track; + +//--------------------------------------------------------- +// TrackDrag +//--------------------------------------------------------- + +class TrackDrag : public QDrag { + static const char type[]; + Q_OBJECT + + public: + TrackDrag(Track*, QWidget* src); + static bool canDecode(const QMimeSource*); + static bool decode(const QMimeSource* s, Track*& p); + }; + + +#endif + diff --git a/attic/muse_qt4_evolution/muse/trackinfo.cpp b/attic/muse_qt4_evolution/muse/trackinfo.cpp new file mode 100644 index 00000000..1a62b1c0 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/trackinfo.cpp @@ -0,0 +1,553 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "arranger.h" +#include "widgets/outportcombo.h" +#include "instruments/minstrument.h" +#include "midiedit/drummap.h" +#include "midictrl.h" +#include "song.h" +#include "trackinfo.h" +#include "synth.h" +#include "tllineedit.h" +#include "audio.h" +#include "gui.h" +#include "midioutport.h" +#include "midiinport.h" + +static QColor labelColor(140, 140, 255); + +//--------------------------------------------------------- +// createTrackInfo +//--------------------------------------------------------- + +TrackInfo* Arranger::createTrackInfo() + { + Track::TrackType t = _curTrack->type(); + switch (t) { + case Track::MIDI: return new MidiTrackInfo(); + case Track::AUDIO_OUTPUT: return new AudioOutputInfo(); + case Track::AUDIO_GROUP: return new AudioGroupInfo(); + case Track::WAVE: return new WaveTrackInfo(); + case Track::AUDIO_INPUT: return new AudioInputInfo(); + case Track::AUDIO_SOFTSYNTH: return new SynthIInfo(); + case Track::MIDI_OUT: return new MidiOutPortInfo(); + case Track::MIDI_IN: return new MidiInPortInfo(); + case Track::MIDI_SYNTI: return new MidiSynthIInfo(); + default: + printf("Arranger::createTrackInfo: type %d\n", t); + abort(); + } + } + +//--------------------------------------------------------- +// TrackInfo +//--------------------------------------------------------- + +TrackInfo::TrackInfo() + : QWidget() + { + track = 0; + label = new QLabel; + label->setToolTip(tr("Track Type")); + label->setLineWidth(2); + label->setFrameStyle(QFrame::Panel | QFrame::Raised); + label->setAutoFillBackground(true); + QPalette p = label->palette(); + p.setColor(QPalette::Background, labelColor); + label->setPalette(p); + + name = new TLLineEdit(""); + name->setToolTip(tr("Track Name")); + name->setMaximumHeight(24); + + grid = new QGridLayout; + grid->setMargin(0); + grid->setSpacing(0); + setLayout(grid); + + grid->addWidget(label, 0, 0, 1, 2); + grid->addWidget(name, 1, 0, 1, 2); + connect(name, SIGNAL(contentChanged(QString)), SLOT(nameChanged(QString))); + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); +// resize(QSize(infoWidth, height())); + } + +//--------------------------------------------------------- +// nameChanged +//--------------------------------------------------------- + +void TrackInfo::nameChanged(QString s) + { + song->changeTrackName(track, s); + name->setCursorPosition(0); + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +void TrackInfo::init(Track* t) + { + track = t; + if (t == 0) + return; + label->setText(track->clname()); + name->setText(track->name()); + connect(track, SIGNAL(nameChanged(const QString&)), name, SLOT(setText(const QString&))); + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void TrackInfo::songChanged(int val) + { + if ((val & SC_ROUTE) && track) + init(track); + } + +//--------------------------------------------------------- +// MidiTrackInfo +//--------------------------------------------------------- + +MidiTrackInfo::MidiTrackInfo() + : TrackInfo() + { + QWidget* midiTrackInfo = new QWidget; + mt.setupUi(midiTrackInfo); + + QWidget* midiPortInfo = new QWidget; + mp.setupUi(midiPortInfo); + + grid->addWidget(midiTrackInfo, 2, 0, 1, 2); + + channel = new QComboBox; + channel->setMaximumHeight(24); + for (int ch = 0; ch < MIDI_CHANNELS; ++ch) + channel->addItem(tr("Channel %1").arg(ch+1), ch); + grid->addWidget(channel, 3, 0, 1, 2); + + QLabel* label = new QLabel; + label->setText(tr("Midi Port")); + label->setLineWidth(2); + label->setFrameStyle(QFrame::Panel | QFrame::Raised); + label->setAutoFillBackground(true); + QPalette p = label->palette(); + p.setColor(QPalette::Background, labelColor); + label->setPalette(p); + grid->addWidget(label, 4, 0, 1, 2); + + port = new QComboBox; + port->setMaximumHeight(24); + grid->addWidget(port, 5, 0, 1, 2); + grid->addWidget(midiPortInfo, 6, 0, 1, 2); + grid->setRowStretch(grid->rowCount(), 100); + + pop = new QMenu(mt.patch); + + connect(mt.transposition, SIGNAL(valueChanged(int)), SLOT(transpositionChanged(int))); + connect(mt.velocity, SIGNAL(valueChanged(int)), SLOT(velocityChanged(int))); + connect(mt.delay, SIGNAL(valueChanged(int)), SLOT(delayChanged(int))); + connect(mt.length, SIGNAL(valueChanged(int)), SLOT(lenChanged(int))); + connect(mt.compression, SIGNAL(valueChanged(int)), SLOT(iKomprChanged(int))); + connect(mt.patch, SIGNAL(clicked()), SLOT(patchClicked())); + connect(port, SIGNAL(activated(int)), SLOT(portSelected(int))); + connect(mp.instrument, SIGNAL(activated(int)), SLOT(instrumentSelected(int))); + connect(mp.deviceId, SIGNAL(valueChanged(int)), SLOT(deviceIdChanged(int))); + connect(song, SIGNAL(autoReadChanged(Track*,bool)), SLOT(autoChanged(Track*,bool))); + connect(song, SIGNAL(autoWriteChanged(Track*,bool)), SLOT(autoChanged(Track*,bool))); + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +void MidiTrackInfo::init(Track* t) + { + MidiTrack* midiTrack = (MidiTrack*)&*t; + if (t != track) { + if (track) { + disconnect(channel, 0, track, 0); + disconnect(track, 0, channel, 0); + } + connect(channel, SIGNAL(activated(int)), midiTrack, SLOT(setChannel(int))); + connect(midiTrack,SIGNAL(channelChanged(int)), channel, SLOT(setCurrentIndex(int))); + } + + TrackInfo::init(t); + mt.transposition->setValue(midiTrack->transposition()); + mt.delay->setValue(midiTrack->delay()); + mt.length->setValue(midiTrack->len()); + mt.velocity->setValue(midiTrack->velocity()); + mt.compression->setValue(midiTrack->compression()); + + mp.instrument->clear(); + foreach(MidiInstrument* mi, midiInstruments) + mp.instrument->addItem(mi->iname()); + + RouteList* rl = track->outRoutes(); + Track* outputTrack = 0; + if (!rl->isEmpty()) + outputTrack = (*rl)[0].dst.track; + + port->clear(); + port->addItem("---", QVariant::fromValue(0)); + foreach(MidiOutPort* mp, *(song->midiOutPorts())) + port->addItem(mp->name(), QVariant::fromValue(mp)); + foreach(SynthI* s, *(song->syntis())) + port->addItem(s->name(), QVariant::fromValue(s)); + if (outputTrack) { + int idx = port->findText(outputTrack->name()); + port->setCurrentIndex(idx == -1 ? 0 : idx); + } + + channel->setCurrentIndex(midiTrack->channelNo()); + + connect(track, SIGNAL(controllerChanged(int)), SLOT(controllerChanged(int))); + if (outputTrack && outputTrack->type() == Track::MIDI_OUT) + connect(outputTrack, SIGNAL(instrumentChanged()), SLOT(instrumentChanged())); + + instrumentChanged(); // setup instrument + + // enable instrument selection only for tracks routed to a + // midi out port: + mp.instrument->setEnabled(outputTrack && (outputTrack->type() == Track::MIDI_OUT)); + + if (!rl->isEmpty()) { + mp.deviceId->setValue(midiTrack->deviceId()); + autoChanged(track, false); // update enable + int val = midiTrack->ctrlVal(CTRL_PROGRAM).i; + int channelno = midiTrack->channelNo(); + mt.patch->setText(midiTrack->instrument()->getPatchName(channelno, val)); + } + else { + channel->setCurrentIndex(0); + port->setCurrentIndex(0); + mp.instrument->addItem("--"); + mp.instrument->setCurrentIndex(0); + mt.patch->setText("--"); + } + } + +//--------------------------------------------------------- +// portSelected +//--------------------------------------------------------- + +void MidiTrackInfo::portSelected(int idx) + { + QVariant v(port->itemData(idx)); + Track* outputTrack = (Track*)v.value(); + if (outputTrack == 0) + return; + RouteList* rl = track->outRoutes(); + if (rl->isEmpty()) + return; + Route r = (*rl)[0]; + audio->msgRemoveRoute(r); + r.dst.track = outputTrack; + audio->msgAddRoute(r); + song->update(SC_ROUTE); + } + +//--------------------------------------------------------- +// controllerChanged +//--------------------------------------------------------- + +void MidiTrackInfo::controllerChanged(int id) + { + if (id == CTRL_PROGRAM) { + MidiInstrument* mi = track->instrument(); + int val = track->ctrlVal(id).i; + mt.patch->setText(mi->getPatchName(((MidiTrack*)&*track)->channelNo(), val)); + } + } + +//--------------------------------------------------------- +// instrumentChanged +//--------------------------------------------------------- + +void MidiTrackInfo::instrumentChanged() + { + MidiInstrument* mi = track->instrument(); + mp.instrument->setCurrentIndex(midiInstruments.indexOf(mi)); + } + +//--------------------------------------------------------- +// autoChanged +//--------------------------------------------------------- + +void MidiTrackInfo::autoChanged(Track* t, bool) + { + if (t != track) + return; + bool ar = t->autoRead(); + bool aw = t->autoWrite(); + bool en = !ar || (ar && aw); + mt.patch->setEnabled(en); + } + +//--------------------------------------------------------- +// transpositionChanged +//--------------------------------------------------------- + +void MidiTrackInfo::transpositionChanged(int val) + { + ((MidiTrack*)&*track)->setTransposition(val); + } + +//--------------------------------------------------------- +// patchClicked +//--------------------------------------------------------- + +void MidiTrackInfo::patchClicked() + { + MidiInstrument* mi = track->instrument(); + mi->populatePatchPopup(pop, 0); + + QAction* rv = pop->exec(mt.patch->mapToGlobal(QPoint(10,5))); + if (rv != 0) { + CVal cval; + cval.i = rv->data().toInt(); + song->setControllerVal(track, CTRL_PROGRAM, cval); + } + } + +//--------------------------------------------------------- +// instrumentSelected +//--------------------------------------------------------- + +void MidiTrackInfo::instrumentSelected(int n) + { + RouteList* rl = track->outRoutes(); + if (rl->isEmpty()) + return; + Track* outTrack = (*rl)[0].dst.track; + if (outTrack->type() == Track::MIDI_OUT) + ((MidiOutPort*)outTrack)->setInstrument(midiInstruments[n]); + } + +//--------------------------------------------------------- +// velocityChanged +//--------------------------------------------------------- + +void MidiTrackInfo::velocityChanged(int val) + { + ((MidiTrack*)&*track)->setVelocity(val); + } + +//--------------------------------------------------------- +// delayChanged +//--------------------------------------------------------- + +void MidiTrackInfo::delayChanged(int val) + { + ((MidiTrack*)&*track)->setDelay(val); + } + +//--------------------------------------------------------- +// lenChanged +//--------------------------------------------------------- + +void MidiTrackInfo::lenChanged(int val) + { + ((MidiTrack*)&*track)->setLen(val); + } + +//--------------------------------------------------------- +// iKomprChanged +//--------------------------------------------------------- + +void MidiTrackInfo::iKomprChanged(int val) + { + ((MidiTrack*)&*track)->setCompression(val); + } + +//--------------------------------------------------------- +// deviceIdChanged +//--------------------------------------------------------- + +void MidiTrackInfo::deviceIdChanged(int val) + { + ((MidiTrack*)&*track)->setDeviceId(val); + } + +//--------------------------------------------------------- +// AudioOutputInfo +//--------------------------------------------------------- + +AudioOutputInfo::AudioOutputInfo() + : TrackInfo() + { + grid->setRowStretch(grid->rowCount(), 100); + } + +//--------------------------------------------------------- +// AudioInputInfo +//--------------------------------------------------------- + +AudioInputInfo::AudioInputInfo() + : TrackInfo() + { + grid->setRowStretch(grid->rowCount(), 100); + } + +//--------------------------------------------------------- +// AudioGroupInfo +//--------------------------------------------------------- + +AudioGroupInfo::AudioGroupInfo() + : TrackInfo() + { + grid->setRowStretch(grid->rowCount(), 100); + } + +//--------------------------------------------------------- +// AudioAuxInfo +//--------------------------------------------------------- + +AudioAuxInfo::AudioAuxInfo() + : TrackInfo() + { + grid->setRowStretch(grid->rowCount(), 100); + } + +//--------------------------------------------------------- +// WaveTrackInfo +//--------------------------------------------------------- + +WaveTrackInfo::WaveTrackInfo() + : TrackInfo() + { + grid->setRowStretch(grid->rowCount(), 100); + } + +//--------------------------------------------------------- +// SynthIInfo +//--------------------------------------------------------- + +SynthIInfo::SynthIInfo() + : TrackInfo() + { + grid->setRowStretch(grid->rowCount(), 100); + } + +//--------------------------------------------------------- +// MidiSynthIInfo +//--------------------------------------------------------- + +MidiSynthIInfo::MidiSynthIInfo() + : TrackInfo() + { + grid->setRowStretch(grid->rowCount(), 100); + } + +//--------------------------------------------------------- +// MidiOutPortInfo +//--------------------------------------------------------- + +MidiOutPortInfo::MidiOutPortInfo() + : TrackInfo() + { + QWidget* midiPortInfo = new QWidget; + mp.setupUi(midiPortInfo); + grid->addWidget(midiPortInfo, 2, 0, 1, 2); + + grid->setRowStretch(grid->rowCount(), 100); + + connect(mp.instrument, SIGNAL(activated(int)), SLOT(instrumentSelected(int))); + connect(mp.deviceId, SIGNAL(valueChanged(int)), SLOT(deviceIdChanged(int))); + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +void MidiOutPortInfo::init(Track* t) + { + TrackInfo::init(t); + + MidiOutPort* op = (MidiOutPort*)&*track; + MidiInstrument* mi = op->instrument(); + int idx = 0; + int curIdx = 0; + mp.instrument->clear(); + for (iMidiInstrument i = midiInstruments.begin(); i != midiInstruments.end(); ++i, ++idx) { + mp.instrument->addItem((*i)->iname()); + if ((*i)->iname() == mi->iname()) + curIdx = idx; + } + mp.instrument->setCurrentIndex(curIdx); + mp.deviceId->setValue(op->deviceId()); + connect(t, SIGNAL(instrumentChanged()), SLOT(instrumentChanged())); + } + +//--------------------------------------------------------- +// deviceIdChanged +//--------------------------------------------------------- + +void MidiOutPortInfo::deviceIdChanged(int val) + { + ((MidiOutPort*)&*track)->setDeviceId(val); + } + +//--------------------------------------------------------- +// instrumentChanged +//--------------------------------------------------------- + +void MidiOutPortInfo::instrumentChanged() + { + MidiOutPort* op = (MidiOutPort*)&*track; + MidiInstrument* mi = op->instrument(); + int idx = 0; + for (iMidiInstrument i = midiInstruments.begin(); i != midiInstruments.end(); ++i, ++idx) { + if (*i == mi) { + mp.instrument->setCurrentIndex(idx); + break; + } + } + } + +//--------------------------------------------------------- +// instrumentSelected +//--------------------------------------------------------- + +void MidiOutPortInfo::instrumentSelected(int n) + { + MidiOutPort* op = (MidiOutPort*)&*track; + int idx = 0; + for (iMidiInstrument i = midiInstruments.begin(); i != midiInstruments.end(); ++i, ++idx) { + if (idx == n) { + op->setInstrument(*i); + break; + } + } + } + +//--------------------------------------------------------- +// MidiInPortInfo +//--------------------------------------------------------- + +MidiInPortInfo::MidiInPortInfo() + : TrackInfo() + { + grid->setRowStretch(grid->rowCount(), 100); + } + diff --git a/attic/muse_qt4_evolution/muse/trackinfo.h b/attic/muse_qt4_evolution/muse/trackinfo.h new file mode 100644 index 00000000..bea98d70 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/trackinfo.h @@ -0,0 +1,203 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __TRACKINFO_H__ +#define __TRACKINFO_H__ + +#include "ui_miditrackinfo.h" +#include "ui_midiportinfo.h" + +class Track; +class MidiTrack; +class AudioOutput; +class AudioInput; +class AudioGroup; +class AudioAux; +class SynthI; +class MidiInPort; +class MidiOutPort; +class MidiChannel; +class WaveTrack; +class TLLineEdit; + +//--------------------------------------------------------- +// TrackInfo +//--------------------------------------------------------- + +class TrackInfo : public QWidget { + Q_OBJECT + + QLabel* label; + TLLineEdit* name; + + protected: + QGridLayout* grid; + QPointer track; + + private slots: + void nameChanged(QString s); + void songChanged(int); + + public: + TrackInfo(); + virtual void init(Track*); + }; + +//--------------------------------------------------------- +// MidiTrackInfo +//--------------------------------------------------------- + +class MidiTrackInfo : public TrackInfo { + Q_OBJECT + + Ui::MidiTrackInfoBase mt; + Ui::MidiPortInfoBase mp; + QComboBox* port; + QComboBox* channel; + QMenu* pop; + + private slots: + void transpositionChanged(int val); + void velocityChanged(int val); + void delayChanged(int val); + void lenChanged(int val); + void iKomprChanged(int val); + void patchClicked(); + void instrumentSelected(int); + void instrumentChanged(); + void autoChanged(Track*,bool); + void controllerChanged(int); + void portSelected(int); + void deviceIdChanged(int); + + public: + MidiTrackInfo(); + virtual void init(Track*); + }; + +//--------------------------------------------------------- +// AudioOutputInfo +//--------------------------------------------------------- + +class AudioOutputInfo : public TrackInfo { + Q_OBJECT + + public: + AudioOutputInfo(); + }; + +//--------------------------------------------------------- +// AudioInputInfo +//--------------------------------------------------------- + +class AudioInputInfo : public TrackInfo { + Q_OBJECT + + public: + AudioInputInfo(); + }; + +//--------------------------------------------------------- +// AudioGroupInfo +//--------------------------------------------------------- + +class AudioGroupInfo : public TrackInfo { + Q_OBJECT + + public: + AudioGroupInfo(); + }; + +//--------------------------------------------------------- +// AudioAuxInfo +//--------------------------------------------------------- + +class AudioAuxInfo : public TrackInfo { + Q_OBJECT + + public: + AudioAuxInfo(); + }; + +//--------------------------------------------------------- +// WaveTrackInfo +//--------------------------------------------------------- + +class WaveTrackInfo : public TrackInfo { + Q_OBJECT + + public: + WaveTrackInfo(); + }; + +//--------------------------------------------------------- +// SynthIInfo +//--------------------------------------------------------- + +class SynthIInfo : public TrackInfo { + Q_OBJECT + + public: + SynthIInfo(); + }; + +//--------------------------------------------------------- +// MidiSynthIInfo +//--------------------------------------------------------- + +class MidiSynthIInfo : public TrackInfo { + Q_OBJECT + + public: + MidiSynthIInfo(); + }; + +//--------------------------------------------------------- +// MidiOutPortInfo +//--------------------------------------------------------- + +class MidiOutPortInfo : public TrackInfo { + Q_OBJECT + + Ui::MidiPortInfoBase mp; + + private slots: + void instrumentSelected(int); + void instrumentChanged(); + void deviceIdChanged(int); + + public: + MidiOutPortInfo(); + virtual void init(Track*); + }; + +//--------------------------------------------------------- +// MidiInPortInfo +//--------------------------------------------------------- + +class MidiInPortInfo : public TrackInfo { + Q_OBJECT + + public: + MidiInPortInfo(); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/transport.cpp b/attic/muse_qt4_evolution/muse/transport.cpp new file mode 100644 index 00000000..aa8fcc7c --- /dev/null +++ b/attic/muse_qt4_evolution/muse/transport.cpp @@ -0,0 +1,411 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "song.h" +#include "transport.h" +#include "widgets/doublelabel.h" +#include "widgets/siglabel.h" +#include "globals.h" +#include "icons.h" +#include "awl/posedit.h" +#include "sync.h" +#include "shortcuts.h" +#include "gconfig.h" +#include "muse.h" +#include "al/sig.h" +#include "al/tempo.h" + +static const char* recordTransportText = QT_TR_NOOP("Click this button to enable recording"); +static const char* stopTransportText = QT_TR_NOOP("Click this button to stop playback"); +static const char* playTransportText = QT_TR_NOOP("Click this button to start playback"); +static const char* startTransportText = QT_TR_NOOP("Click this button to rewind to start position"); +static const char* frewindTransportText = QT_TR_NOOP("Click this button to rewind"); +static const char* fforwardTransportText = QT_TR_NOOP("Click this button to forward current play position"); + +//--------------------------------------------------------- +// Transport +//--------------------------------------------------------- + +Transport::Transport() + { + setupUi(this); + + connect(recMode, SIGNAL(activated(int)), SLOT(setRecMode(int))); + connect(cycleMode, SIGNAL(activated(int)), SLOT(setCycleMode(int))); + + //----------------------------------------------------- + // loop flags + //----------------------------------------------------- + + connect(punchinButton, SIGNAL(toggled(bool)), song, SLOT(setPunchin(bool))); + connect(punchoutButton, SIGNAL(toggled(bool)), song, SLOT(setPunchout(bool))); + connect(loopButton, SIGNAL(toggled(bool)), song, SLOT(setLoop(bool))); + + connect(song, SIGNAL(punchinChanged(bool)), punchinButton, SLOT(setChecked(bool))); + connect(song, SIGNAL(punchoutChanged(bool)), punchoutButton, SLOT(setChecked(bool))); + connect(song, SIGNAL(loopChanged(bool)), loopButton, SLOT(setChecked(bool))); + + //----------------------------------------------------- + // Transport Buttons + //----------------------------------------------------- + + time2->setSmpte(true); + + buttons[0] = tb1; + tb1->setWhatsThis(tr(startTransportText)); + + buttons[1] = tb2; + tb2->setAutoRepeat(true); + tb2->setWhatsThis(tr(frewindTransportText)); + + buttons[2] = tb3; + tb3->setAutoRepeat(true); + tb3->setWhatsThis(tr(fforwardTransportText)); + + buttons[3] = tb4; + tb4->setChecked(true); // set STOP + tb4->setWhatsThis(tr(stopTransportText)); + + buttons[4] = tb5; + tb5->setWhatsThis(tr(playTransportText)); + + buttons[5] = tb6; + tb6->setIcon(*recordIcon); + tb6->setWhatsThis(tr(recordTransportText)); + + connect(buttons[0], SIGNAL(clicked()), song, SLOT(rewindStart())); + connect(buttons[1], SIGNAL(clicked()), song, SLOT(rewind())); + connect(buttons[2], SIGNAL(clicked()), song, SLOT(forward())); + connect(buttons[3], SIGNAL(clicked(bool)), SLOT(stopToggled(bool))); + connect(buttons[4], SIGNAL(clicked(bool)), SLOT(playToggled(bool))); + connect(buttons[5], SIGNAL(clicked(bool)), song, SLOT(setRecord(bool))); + + connect(song, SIGNAL(recordChanged(bool)), SLOT(setRecord(bool))); + + //----------------------------------------------------- + // AQ - Click - Sync + //----------------------------------------------------- + +//TODOB clickButton->setShortcut(shortcuts[SHRT_TOGGLE_METRO].key); + + connect(quantizeButton, SIGNAL(clicked(bool)), song, SLOT(setQuantize(bool))); + connect(clickButton, SIGNAL(clicked(bool)), song, SLOT(setClick(bool))); + connect(syncButton, SIGNAL(clicked(bool)), SLOT(syncButtonClicked(bool))); +//TD connect(&extSyncFlag, SIGNAL(valueChanged(bool)), SLOT(syncChanged(bool))); + + connect(song, SIGNAL(quantizeChanged(bool)), this, SLOT(setQuantizeFlag(bool))); + connect(song, SIGNAL(clickChanged(bool)), clickButton, SLOT(setChecked(bool))); + + //----------------------------------------------------- + // Tempo/Sig + //----------------------------------------------------- + + connect(masterButton, SIGNAL(clicked(bool)), song, SLOT(setMasterFlag(bool))); + + //----------------------------------------------------- + + connect(tl1, SIGNAL(valueChanged(const Pos&)), SLOT(lposChanged(const Pos&))); + connect(tl2, SIGNAL(valueChanged(const Pos&)), SLOT(rposChanged(const Pos&))); + connect(time1, SIGNAL(valueChanged(const Pos&)), SLOT(cposChanged(const Pos&))); + connect(time2, SIGNAL(valueChanged(const Pos&)), SLOT(cposChanged(const Pos&))); + + slider->setRange(0, song->len()); + connect(song, SIGNAL(lenChanged(const AL::Pos&)), SLOT(setLen(const AL::Pos&))); + connect(slider,SIGNAL(sliderMoved(int)), SLOT(cposChanged(int))); + connect(song, SIGNAL(posChanged(int,const AL::Pos&, bool)), SLOT(setPos(int,const AL::Pos&))); + connect(tempo, SIGNAL(tempoChanged(int)), song, SLOT(setTempo(int))); + connect(song, SIGNAL(playChanged(bool)), SLOT(setPlay(bool))); + connect(song, SIGNAL(songChanged(int)), this, SLOT(songChanged(int))); + setValues(); + } + +//--------------------------------------------------------- +// setValues +//--------------------------------------------------------- + +void Transport::setValues() + { + punchinButton->setChecked(song->punchin()); + loopButton->setChecked(song->loop()); + punchoutButton->setChecked(song->punchout()); + quantizeButton->setChecked(song->quantize()); + clickButton->setChecked(song->click()); + syncButton->setChecked(extSyncFlag); + setPos(0, song->cpos()); + setPos(1, song->lpos()); + setPos(2, song->rpos()); + } + +//--------------------------------------------------------- +// setLen +// song len changed +//--------------------------------------------------------- + +void Transport::setLen(const AL::Pos& len) + { + slider->setRange(0, len.tick()); + } + +//--------------------------------------------------------- +// setTimesig +//--------------------------------------------------------- + +void Transport::setTimesig(int /*z*/, int /*n*/) + { +//TD tempo->setTimesig(z, n); + } + +//--------------------------------------------------------- +// setPos +//--------------------------------------------------------- + +void Transport::setPos(int idx, const AL::Pos& pos) + { + switch (idx) { + case 0: + time1->setValue(pos); + time2->setValue(pos); + slider->setValue(pos.tick()); + { + int tp = AL::tempomap.tempo(pos.tick()); + AL::TimeSignature sig = AL::sigmap.timesig(pos.tick()); + int z = sig.z; + int n = sig.n; + setTimesig(z, n); + tempo->setTempo(tp); + } + break; + case 1: + tl1->setValue(pos); + break; + case 2: + tl2->setValue(pos); + break; + } + } + +//--------------------------------------------------------- +// cposChanged +//--------------------------------------------------------- + +void Transport::cposChanged(int tick) + { + song->setPos(0, tick); + } + +//--------------------------------------------------------- +// cposChanged +//--------------------------------------------------------- + +void Transport::cposChanged(const Pos& pos) + { + song->setPos(0, pos.tick()); + } + +//--------------------------------------------------------- +// lposChanged +//--------------------------------------------------------- + +void Transport::lposChanged(const Pos& pos) + { + song->setPos(1, pos.tick()); + } + +//--------------------------------------------------------- +// rposChanged +//--------------------------------------------------------- + +void Transport::rposChanged(const Pos& pos) + { + song->setPos(2, pos.tick()); + } + +//--------------------------------------------------------- +// setPlay +//--------------------------------------------------------- + +void Transport::setPlay(bool f) + { + buttons[3]->setChecked(!f); + buttons[4]->setChecked(f); + } + +//--------------------------------------------------------- +// setMasterFlag +//--------------------------------------------------------- + +void Transport::setMasterFlag(bool f) + { + masterButton->setChecked(f); + } + +//--------------------------------------------------------- +// setQuantizeFlag +//--------------------------------------------------------- + +void Transport::setQuantizeFlag(bool f) + { + quantizeButton->setChecked(f); + } + +//--------------------------------------------------------- +// setSyncFlag +//--------------------------------------------------------- + +void Transport::setSyncFlag(bool f) + { + syncButton->setChecked(f); + } + +//--------------------------------------------------------- +// toggleRecMode +//--------------------------------------------------------- + +void Transport::setRecMode(int id) + { + song->setRecMode(id); + } + +//--------------------------------------------------------- +// toggleCycleMode +//--------------------------------------------------------- + +void Transport::setCycleMode(int id) + { + song->setCycleMode(id); + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void Transport::songChanged(int flags) + { + int cpos = song->cpos(); + if (flags & (SC_MASTER | SC_TEMPO)) { + if (extSyncFlag) { + tempo->setTempo(0); + } + else { + int t = AL::tempomap.tempo(cpos); + tempo->setTempo(t); + } + } + if (flags & SC_SIG) { + AL::TimeSignature sig = AL::sigmap.timesig(cpos); + int z = sig.z; + int n = sig.n; + setTimesig(z, n); + } + if (flags & SC_MASTER) + masterButton->setChecked(song->masterFlag()); + } + +//--------------------------------------------------------- +// syncChanged +//--------------------------------------------------------- + +void Transport::syncChanged(bool flag) + { + syncButton->setChecked(flag); + buttons[0]->setEnabled(!flag); // goto start + buttons[1]->setEnabled(!flag); // rewind + buttons[2]->setEnabled(!flag); // forward + buttons[3]->setEnabled(!flag); // stop + buttons[4]->setEnabled(!flag); // play + slider->setEnabled(!flag); + masterButton->setEnabled(!flag); + if (flag) { + masterButton->setChecked(false); + song->setMasterFlag(false); + tempo->setValue(0); // slave mode: show "extern" + } + else + tempo->setValue(AL::tempomap.tempo(song->cpos())); + muse->playAction->setEnabled(!flag); + muse->startAction->setEnabled(!flag); + muse->stopAction->setEnabled(!flag); + muse->rewindAction->setEnabled(!flag); + muse->forwardAction->setEnabled(!flag); + } + +//--------------------------------------------------------- +// stopToggled +//--------------------------------------------------------- + +void Transport::stopToggled(bool val) + { + if (val) + song->setStop(true); + else { + buttons[3]->setChecked(true); + } + } + +//--------------------------------------------------------- +// playToggled +//--------------------------------------------------------- + +void Transport::playToggled(bool val) + { + if (val) + song->setPlay(true); + else { + buttons[4]->setChecked(true); + } + } + +//--------------------------------------------------------- +// setRecord +//--------------------------------------------------------- + +void Transport::setRecord(bool flag) + { + buttons[5]->setChecked(flag); + } + +//--------------------------------------------------------- +// syncButtonClicked +//--------------------------------------------------------- + +void Transport::syncButtonClicked(bool flag) + { + extSyncFlag = flag; + } + +//--------------------------------------------------------- +// syncChanged +//--------------------------------------------------------- + +void Transport::syncChanged() + { + syncButton->setChecked(extSyncFlag); + } + +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void Transport::closeEvent(QCloseEvent *ev) + { + emit closed(); + QWidget::closeEvent(ev); + } + diff --git a/attic/muse_qt4_evolution/muse/transport.h b/attic/muse_qt4_evolution/muse/transport.h new file mode 100644 index 00000000..43acef24 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/transport.h @@ -0,0 +1,74 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __TRANSPORT_H__ +#define __TRANSPORT_H__ + +#include "ui_transport.h" + +namespace AL { + class Pos; + }; +using AL::Pos; + +//--------------------------------------------------------- +// Transport +//--------------------------------------------------------- + +class Transport : public QWidget, public Ui::TransportBase + { + QToolButton* buttons[6]; // transport buttons + Q_OBJECT + + virtual void closeEvent(QCloseEvent*); + + private slots: + void cposChanged(const Pos&); + void cposChanged(int); + void lposChanged(const Pos&); + void rposChanged(const Pos&); + void setRecMode(int); + void setCycleMode(int); + void songChanged(int); + void syncChanged(bool); + void setRecord(bool flag); + void stopToggled(bool); + void playToggled(bool); + void setLen(const AL::Pos& len); + + public slots: + void setTimesig(int a, int b); + void setPos(int idx, const AL::Pos& pos); + void setMasterFlag(bool); + void setQuantizeFlag(bool); + void setSyncFlag(bool); + void setPlay(bool f); + void syncButtonClicked(bool); + void syncChanged(); + + signals: + void closed(); + + public: + Transport(); + void setValues(); + }; +#endif + diff --git a/attic/muse_qt4_evolution/muse/transport.ui b/attic/muse_qt4_evolution/muse/transport.ui new file mode 100644 index 00000000..a70992e9 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/transport.ui @@ -0,0 +1,856 @@ + + + + + TransportBase + + + + 0 + 0 + 636 + 99 + + + + + 0 + 0 + 0 + 0 + + + + MusE: Transport Panel + + + + 1 + + + 1 + + + + + 3 + + + 2 + + + + + + Overdub + + + + + Replace + + + + + + + + + Sans Serif + 6 + 50 + false + false + false + false + + + + Rec Mode + + + Qt::AlignCenter + + + + + + + + Normal + + + + + Mix + + + + + Replace + + + + + + + + + Sans Serif + 6 + 50 + false + false + false + false + + + + Cycle Rec + + + Qt::AlignCenter + + + + + + + + + 2 + + + 2 + + + + + + 5 + 7 + 0 + 0 + + + + :/xpm/punchin.xpm + + + true + + + + + + + + 5 + 7 + 0 + 0 + + + + ... + + + :/xpm/loop.xpm + + + true + + + + + + + + 5 + 7 + 0 + 0 + + + + :/xpm/punchout.xpm + + + true + + + Qt::ToolButtonTextOnly + + + Qt::NoArrow + + + + + + + + + 2 + + + 2 + + + + + + + + + Sans Serif + 6 + 50 + false + false + false + false + + + + Left Loc + + + Qt::AlignCenter + + + + + + + + + + + Sans Serif + 6 + 50 + false + false + false + false + + + + Right Loc + + + Qt::AlignCenter + + + + + + + + + 3 + + + 2 + + + + + 0 + + + 0 + + + + + + + + + + + + + + 7 + 7 + 0 + 0 + + + + Qt::Horizontal + + + + + + + 3 + + + 1 + + + + + + 5 + 7 + 0 + 0 + + + + rewind to start + + + ... + + + :/xpm/start.xpm + + + + + + + + 5 + 7 + 0 + 0 + + + + rewind + + + ... + + + :/xpm/frewind.xpm + + + + + + + + 5 + 7 + 0 + 0 + + + + forward + + + ... + + + :/xpm/fforward.xpm + + + + + + + + 5 + 7 + 0 + 0 + + + + stop + + + ... + + + :/xpm/stop.xpm + + + true + + + + + + + + 5 + 7 + 0 + 0 + + + + play + + + ... + + + :/xpm/play.xpm + + + true + + + + + + + + 5 + 7 + 0 + 0 + + + + record + + + ... + + + true + + + + + + + + + + + 2 + + + 2 + + + + + + 5 + 7 + 0 + 0 + + + + AC + + + true + + + + + + + + 5 + 7 + 0 + 0 + + + + Click + + + true + + + + + + + + 5 + 7 + 0 + 0 + + + + Sync + + + true + + + + + + + + + 5 + + + 1 + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 1 + + + 1 + + + + + + + + + + + 128 + 128 + 128 + + + 221 + 223 + 228 + + + 255 + 255 + 255 + + + 255 + 255 + 255 + + + 85 + 85 + 85 + + + 199 + 199 + 199 + + + 199 + 199 + 199 + + + 255 + 255 + 255 + + + 128 + 128 + 128 + + + 255 + 255 + 255 + + + 255 + 255 + 255 + + + 0 + 0 + 0 + + + 86 + 117 + 148 + + + 255 + 255 + 255 + + + 0 + 0 + 238 + + + 82 + 24 + 139 + + + 232 + 232 + 232 + + + + + 128 + 128 + 128 + + + 221 + 223 + 228 + + + 255 + 255 + 255 + + + 255 + 255 + 255 + + + 85 + 85 + 85 + + + 199 + 199 + 199 + + + 199 + 199 + 199 + + + 255 + 255 + 255 + + + 128 + 128 + 128 + + + 255 + 255 + 255 + + + 255 + 255 + 255 + + + 0 + 0 + 0 + + + 86 + 117 + 148 + + + 255 + 255 + 255 + + + 0 + 0 + 238 + + + 82 + 24 + 139 + + + 232 + 232 + 232 + + + + + 128 + 128 + 128 + + + 221 + 223 + 228 + + + 255 + 255 + 255 + + + 255 + 255 + 255 + + + 85 + 85 + 85 + + + 199 + 199 + 199 + + + 199 + 199 + 199 + + + 255 + 255 + 255 + + + 128 + 128 + 128 + + + 255 + 255 + 255 + + + 255 + 255 + 255 + + + 0 + 0 + 0 + + + 86 + 117 + 148 + + + 255 + 255 + 255 + + + 0 + 0 + 238 + + + 82 + 24 + 139 + + + 232 + 232 + 232 + + + + + + 4/4 + + + Qt::AlignCenter + + + + + + + + + + + 5 + 0 + 0 + 0 + + + + use tempo map + + + Tempomap + + + true + + + true + + + + + + + + + + + Awl::PosEdit + QWidget +
awl/posedit.h
+ 0 + +
+ + SigLabel + QLabel +
widgets/siglabel.h
+ 0 + +
+ + Awl::TempoEdit + QWidget +
awl/tempoedit.h
+ 0 + +
+
+ + + + +
diff --git a/attic/muse_qt4_evolution/muse/transpose.cpp b/attic/muse_qt4_evolution/muse/transpose.cpp new file mode 100644 index 00000000..73edb05a --- /dev/null +++ b/attic/muse_qt4_evolution/muse/transpose.cpp @@ -0,0 +1,92 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "transpose.h" +#include "track.h" +#include "song.h" +#include "event.h" +#include "audio.h" +#include "part.h" + +//--------------------------------------------------------- +// Transpose +//--------------------------------------------------------- + +Transpose::Transpose(QWidget* parent) + : QDialog(parent) + { + setupUi(this); + if (song->lpos() != song->rpos()) { + time_selected->setChecked(true); + } + else { +// time_all->setChecked(true); + ButtonGroup1->setEnabled(false); + } +// parts_all->setSelected(true); + } + +//--------------------------------------------------------- +// accept +//--------------------------------------------------------- + +void Transpose::accept() + { + int left = 0, right = 0; + int dv = delta->value(); + + TrackList *tracks = song->tracks(); + + if (time_selected->isChecked()) { + left = song->lpos(); + right = song->rpos(); + } + else { + left = 0; + right = song->len(); + } + + song->startUndo(); + for (iTrack t = tracks->begin(); t != tracks->end(); ++t) { + if (((*t)->type() != Track::MIDI) + || !(parts_all->isChecked() || (*t)->selected())) + continue; + + PartList *pl = (*t)->parts(); + for (iPart p = pl->begin(); p != pl->end(); ++p) { + Part *mp = p->second; + EventList* el = mp->events(); + for (iEvent i = el->begin(); i != el->end(); ++i) { + Event oe = i->second; + int tick = oe.tick(); + if (tick > right) + break; + if (tick < left) + continue; + Event ne = oe.clone(); + ne.setA(oe.dataA() + dv ); + audio->msgChangeEvent(oe, ne, mp, false); + } + } + } + song->endUndo(SC_EVENT_MODIFIED); + close(); + } + diff --git a/attic/muse_qt4_evolution/muse/transpose.h b/attic/muse_qt4_evolution/muse/transpose.h new file mode 100644 index 00000000..31b73865 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/transpose.h @@ -0,0 +1,40 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __TRANSPOSE_H__ +#define __TRANSPOSE_H__ + +#include "ui_transpose.h" + +//--------------------------------------------------------- +// transpose widget +//--------------------------------------------------------- + +class Transpose : public QDialog, public Ui::TransposeDialogBase { + Q_OBJECT + + private slots: + virtual void accept(); + + public: + Transpose(QWidget* parent=0); + }; + +#endif diff --git a/attic/muse_qt4_evolution/muse/transpose.ui b/attic/muse_qt4_evolution/muse/transpose.ui new file mode 100644 index 00000000..de0bfe2e --- /dev/null +++ b/attic/muse_qt4_evolution/muse/transpose.ui @@ -0,0 +1,193 @@ + + + + + TransposeDialogBase + + + + 0 + 0 + 289 + 317 + + + + MusE: Midi Transpose + + + + 11 + + + 6 + + + + + Value + + + + 11 + + + 6 + + + + + 0 + + + 6 + + + + + + 5 + 0 + 0 + 0 + + + + -99 + + + + + + + + 3 + 1 + 0 + 0 + + + + halftones + + + + + + + + + + + + + 11 + + + 6 + + + + + all + + + true + + + + + + + between markers + + + + + + + + + + + 11 + + + 6 + + + + + all + + + true + + + + + + + + + + all in selected tracks + + + + + + + + + + 0 + + + 6 + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 20 + 20 + + + + + + + + OK + + + false + + + true + + + + + + + Cancel + + + + + + + + + qPixmapFromMimeSource + + + diff --git a/attic/muse_qt4_evolution/muse/trelement.h b/attic/muse_qt4_evolution/muse/trelement.h new file mode 100644 index 00000000..4c702ae2 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/trelement.h @@ -0,0 +1,63 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __TR_ELEMENT_H__ +#define __TR_ELEMENT_H__ + +#include "track.h" + +//--------------------------------------------------------- +// TrElement +// describes a configurable gui element of the +// track list +//--------------------------------------------------------- + +enum { + TR_NAME, TR_MUTE, TR_OFF, TR_SOLO, TR_RECORD, TR_AREAD, TR_AWRITE, + TR_OCHANNEL, TR_MONITOR, TR_DRUMMAP, TR_INSTRUMENT, TR_PATCH + }; + +struct TrElement { + int id; + int grp; // default group + const char* name; + int trackMask; + + TrElement(int i, int g, const char* s, int m) + : id(i), grp(g), name(s), trackMask(m) {} + }; + +//--------------------------------------------------------- +// TrGroup +// TrElements are grouped +//--------------------------------------------------------- + +typedef std::list TrElementList; +typedef TrElementList::iterator iTrElement; + +class TrGroupList : public std::list { + }; +typedef TrGroupList::iterator iTrGroup; + +extern const TrElement trElements[]; +extern const int nTrElements; +extern TrGroupList glist[Track::TRACK_TYPES]; + +#endif diff --git a/attic/muse_qt4_evolution/muse/undo.cpp b/attic/muse_qt4_evolution/muse/undo.cpp new file mode 100644 index 00000000..383f7d33 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/undo.cpp @@ -0,0 +1,614 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "undo.h" +#include "song.h" +#include "globals.h" +#include "al/tempo.h" +#include "al/sig.h" +#include "al/sig.h" +#include "part.h" + +// iundo points to last Undo() in Undo-list + +static bool undoMode = false; // for debugging +std::list temporaryWavFiles; + +//--------------------------------------------------------- +// typeName +//--------------------------------------------------------- + +const char* UndoOp::typeName() + { + static const char* name[] = { + "AddTrack", "DeleteTrack", "RenameTrack", + "AddPart", "DeletePart", "ModifyPart", + "AddEvent", "DeleteEvent", "ModifyEvent", + "AddTempo", "DeleteTempo", + "AddSig", "DeleteSig", + "SwapTrack", + "ModifyClip", + "AddCtrl", "RemoveCtrl", "ModifyCtrl" + }; + return name[type]; + } + +//--------------------------------------------------------- +// dump +//--------------------------------------------------------- + +void UndoOp::dump() + { + printf("UndoOp: %s\n ", typeName()); + switch(type) { + case AddTrack: + case DeleteTrack: + printf("%d %s\n", id, track->name().toLatin1().data()); + break; + case AddPart: + case DeletePart: + case ModifyPart: + break; + case AddEvent: + case DeleteEvent: + printf("old event:\n"); + oEvent.dump(5); + printf(" new event:\n"); + nEvent.dump(5); + printf(" Part:\n"); + if (part) + part->dump(5); + break; + case ModifyEvent: + case AddTempo: + case DeleteTempo: + case AddSig: + case DeleteSig: + case SwapTrack: + case AddCtrl: + case RemoveCtrl: + case ModifyCtrl: + case RenameTrack: + case ModifyClip: + break; + } + } + +//--------------------------------------------------------- +// startUndo +//--------------------------------------------------------- + +void Song::startUndo() + { + undoList->push_back(Undo()); + updateFlags = 0; + undoMode = true; + } + +//--------------------------------------------------------- +// endUndo +//--------------------------------------------------------- + +void Song::endUndo(int flags) + { + updateFlags |= flags; + endMsgCmd(); + undoMode = false; + } + +//--------------------------------------------------------- +// doUndo2 +// real time part +//--------------------------------------------------------- + +void Song::doUndo2() + { + Undo& u = undoList->back(); + +// printf("doUndo2\n"); + for (riUndoOp i = u.rbegin(); i != u.rend(); ++i) { +// printf(" doUndo2 %s\n", i->typeName()); + switch(i->type) { + case UndoOp::AddTrack: + removeTrack2(i->track); + updateFlags |= SC_TRACK_REMOVED; + break; + case UndoOp::DeleteTrack: + insertTrack2(i->track); + updateFlags |= SC_TRACK_INSERTED; + break; + case UndoOp::SwapTrack: + { + updateFlags |= SC_TRACK_MODIFIED; + Track* track = _tracks[i->a]; + _tracks[i->a] = _tracks[i->b]; + _tracks[i->b] = track; + updateFlags |= SC_TRACK_MODIFIED; + } + break; + case UndoOp::RenameTrack: + i->track->setName(*(i->os)); + break; + case UndoOp::AddPart: + { + Part* part = i->oPart; + part->track()->parts()->remove(part); + updateFlags |= SC_PART_REMOVED; + part->deref(); + } + break; + case UndoOp::DeletePart: + i->oPart->track()->addPart(i->oPart); + updateFlags |= SC_PART_INSERTED; + i->oPart->ref(); + break; + case UndoOp::ModifyPart: + { + Part* oldPart = i->oPart; + Part* newPart = i->nPart; + Part part = *newPart; + *newPart = *oldPart; + *oldPart = part; +// oldPart->deref(); +// newPart->ref(); + updateFlags |= SC_PART_MODIFIED; + } + break; + case UndoOp::AddEvent: + deleteEvent(i->nEvent, i->part); + updateFlags |= SC_EVENT_REMOVED; + break; + case UndoOp::DeleteEvent: + addEvent(i->nEvent, i->part); + updateFlags |= SC_EVENT_INSERTED; + break; + case UndoOp::ModifyEvent: + updateFlags |= SC_EVENT_MODIFIED; + changeEvent(i->oEvent, i->nEvent, i->part); + break; + case UndoOp::AddTempo: + AL::tempomap.delTempo(i->a); + updateFlags |= SC_TEMPO; + break; + case UndoOp::DeleteTempo: + AL::tempomap.addTempo(i->a, i->b); + updateFlags |= SC_TEMPO; + break; + case UndoOp::AddSig: + AL::sigmap.del(i->a); + updateFlags |= SC_SIG; + break; + case UndoOp::DeleteSig: + AL::sigmap.add(i->a, AL::TimeSignature(i->b, i->c)); + updateFlags |= SC_SIG; + break; + case UndoOp::AddCtrl: + i->track->removeControllerVal(i->id, i->time); + break; + case UndoOp::RemoveCtrl: + i->track->addControllerVal(i->id, i->time, i->cval1); + break; + case UndoOp::ModifyCtrl: + i->track->addControllerVal(i->id, i->time, i->cval2); + break; + case UndoOp::ModifyClip: + break; + } + } + } + +//--------------------------------------------------------- +// Song::doRedo2 +//--------------------------------------------------------- + +void Song::doRedo2() + { + Undo& u = redoList->back(); +// printf("doRedo2\n"); + for (iUndoOp i = u.begin(); i != u.end(); ++i) { +// printf(" doRedo2 %s\n", i->typeName()); + switch(i->type) { + case UndoOp::AddTrack: + insertTrack2(i->track); + updateFlags |= SC_TRACK_INSERTED; + break; + case UndoOp::DeleteTrack: + removeTrack2(i->track); + updateFlags |= SC_TRACK_REMOVED; + break; + case UndoOp::SwapTrack: + { + Track* track = _tracks[i->a]; + _tracks[i->a] = _tracks[i->b]; + _tracks[i->b] = track; + updateFlags |= SC_TRACK_MODIFIED; + } + break; + case UndoOp::RenameTrack: + i->track->setName(*(i->ns)); + break; + case UndoOp::AddPart: + i->oPart->track()->addPart(i->oPart); + updateFlags |= SC_PART_INSERTED; + i->oPart->ref(); + break; + case UndoOp::DeletePart: + { + Part* part = i->oPart; + part->track()->parts()->remove(part); + updateFlags |= SC_PART_REMOVED; + part->deref(); + } + break; + case UndoOp::ModifyPart: + { + Part* oldPart = i->oPart; + Part* newPart = i->nPart; + Part part = *newPart; + *newPart = *oldPart; + *oldPart = part; + updateFlags |= SC_PART_MODIFIED; +// oldPart->ref(); +// newPart->deref(); + } + break; + case UndoOp::AddEvent: + addEvent(i->nEvent, i->part); + updateFlags |= SC_EVENT_INSERTED; + break; + case UndoOp::DeleteEvent: + deleteEvent(i->nEvent, i->part); + updateFlags |= SC_EVENT_REMOVED; + break; + case UndoOp::ModifyEvent: + changeEvent(i->nEvent, i->oEvent, i->part); + updateFlags |= SC_EVENT_MODIFIED; + break; + case UndoOp::AddTempo: + AL::tempomap.addTempo(i->a, i->b); + updateFlags |= SC_TEMPO; + break; + case UndoOp::DeleteTempo: + AL::tempomap.delTempo(i->a); + updateFlags |= SC_TEMPO; + break; + case UndoOp::AddSig: + AL::sigmap.add(i->a, AL::TimeSignature(i->b, i->c)); + updateFlags |= SC_SIG; + break; + case UndoOp::DeleteSig: + //printf("doRedo: UndoOp::DeleteSig. Deleting sigmap at: %d, z=%d n=%d\n", i->a, i->b, i->c); + AL::sigmap.del(i->a); + updateFlags |= SC_SIG; + break; + case UndoOp::AddCtrl: + i->track->addControllerVal(i->id, i->time, i->cval1); + break; + case UndoOp::RemoveCtrl: + i->track->removeControllerVal(i->id, i->time); + break; + case UndoOp::ModifyCtrl: + i->track->addControllerVal(i->id, i->time, i->cval1); + break; + case UndoOp::ModifyClip: + break; + } + } + } + +void Song::undoOp(UndoOp::UndoType type, int a, int b, int c) + { + UndoOp i; + i.type = type; + i.a = a; + i.b = b; + i.c = c; + addUndo(i); + } + +void Song::undoOp(UndoOp::UndoType type, int n, Track* track) + { + UndoOp i; + i.type = type; + i.id = n; + i.track = track; + if (type == UndoOp::AddTrack) + updateFlags |= SC_TRACK_INSERTED; + addUndo(i); + } + +void Song::undoOp(UndoOp::UndoType type, Part* part) + { + UndoOp i; + i.type = type; + i.oPart = part; + addUndo(i); + } + +void Song::undoOp(UndoOp::UndoType type, const Event& oev, const Event& nev, Part* part) + { + UndoOp i; + i.type = type; + i.nEvent = nev; + i.oEvent = oev; + i.part = part; + addUndo(i); + } + +void Song::undoOp(UndoOp::UndoType type, const Event& nev, Part* part) + { + UndoOp i; + i.type = type; + i.nEvent = nev; + i.part = part; + addUndo(i); + } + +void Song::undoOp(UndoOp::UndoType type, Part* oPart, Part* nPart) + { + UndoOp i; + i.type = type; + i.oPart = nPart; + i.nPart = oPart; + addUndo(i); + } + +void Song::undoOp(UndoOp::UndoType type, SigEvent* oevent, SigEvent* nevent) + { + UndoOp i; + i.type = type; + i.oSignature = oevent; + i.nSignature = nevent; + addUndo(i); + } + +void Song::undoOp(UndoOp::UndoType type, Track* t, int id, unsigned time, CVal nval, CVal oval) + { + UndoOp i; + i.type = type; + i.track = t; + i.id = id; + i.time = time; + i.cval1 = nval; + i.cval2 = oval; + addUndo(i); + } + +void Song::undoOp(UndoOp::UndoType type, Track* t, const QString& s1, const QString& s2) + { + UndoOp i; + i.type = type; + i.track = t; + i.os = new QString(s1); + i.ns = new QString(s2); + addUndo(i); + } + +void Song::undoOp(UndoOp::UndoType type, const char* changedFile, const char* changeData, int startframe, int endframe) + { + UndoOp i; + i.type = type; + i.filename = changedFile; + i.tmpwavfile = changeData; + i.startframe = startframe; + i.endframe = endframe; + addUndo(i); + temporaryWavFiles.push_back(QString(changeData)); + + printf("Adding ModifyClip undo-operation: origfile=%s tmpfile=%s sf=%d ef=%d\n", changedFile, changeData, startframe, endframe); + } + +//--------------------------------------------------------- +// addUndo +//--------------------------------------------------------- + +void Song::addUndo(UndoOp& i) + { + if (!undoMode) { + printf("internal error: undoOp without startUndo()\n"); +abort(); + return; + } + undoList->back().push_back(i); + dirty = true; + } + +//--------------------------------------------------------- +// doUndo1 +// non realtime context +// return true if nothing to do +//--------------------------------------------------------- + +bool Song::doUndo1() + { + if (undoList->empty()) + return true; +// printf("doUndo1\n"); + Undo& u = undoList->back(); + for (riUndoOp i = u.rbegin(); i != u.rend(); ++i) { +// printf(" doUndo1 %s\n", i->typeName()); + switch(i->type) { + case UndoOp::AddTrack: + removeTrack1(i->track); + break; + case UndoOp::DeleteTrack: + insertTrack1(i->track, i->id); + break; + case UndoOp::ModifyClip: + SndFile::applyUndoFile(i->filename, i->tmpwavfile, i->startframe, i->endframe); + break; + default: + break; + } + } + return false; + } + +//--------------------------------------------------------- +// doUndo3 +// non realtime context after realtime operation +//--------------------------------------------------------- + +void Song::doUndo3() + { +// printf("doUndo3\n"); + Undo& u = undoList->back(); + for (riUndoOp i = u.rbegin(); i != u.rend(); ++i) { +// printf(" doUndo3 %s\n", i->typeName()); + switch(i->type) { + case UndoOp::AddTrack: + removeTrack3(i->track); + break; + case UndoOp::DeleteTrack: + emit trackAdded(i->track, i->id); + if (i->track->selected()) { + i->track->setSelected(false); + selectTrack(i->track); + } + break; + case UndoOp::ModifyPart: + undoPartModify(i->oPart, i->nPart, true); + + case UndoOp::AddPart: + case UndoOp::DeletePart: + i->oPart->track()->partListChanged(); + break; + case UndoOp::AddCtrl: + case UndoOp::RemoveCtrl: + case UndoOp::ModifyCtrl: + i->track->emitControllerChanged(i->id); + break; + default: + break; + } + } + redoList->push_back(u); // put item on redo list + undoList->pop_back(); + dirty = true; + } + +//--------------------------------------------------------- +// doRedo1 +// non realtime context +// return true if nothing to do +//--------------------------------------------------------- + +bool Song::doRedo1() + { + if (redoList->empty()) + return true; +// printf("doRedo1\n"); + Undo& u = redoList->back(); + for (iUndoOp i = u.begin(); i != u.end(); ++i) { +// printf(" doRedo1 %s\n", i->typeName()); + switch(i->type) { + case UndoOp::AddTrack: + insertTrack1(i->track, i->id); + break; + case UndoOp::DeleteTrack: + removeTrack1(i->track); + break; + case UndoOp::ModifyClip: + SndFile::applyUndoFile(i->filename, i->tmpwavfile, i->startframe, i->endframe); + break; + case UndoOp::AddCtrl: + case UndoOp::RemoveCtrl: + default: + break; + } + } + return false; + } + +//--------------------------------------------------------- +// doRedo3 +// non realtime context +//--------------------------------------------------------- + +void Song::doRedo3() + { +// printf("doRedo3\n"); + Undo& u = redoList->back(); + for (iUndoOp i = u.begin(); i != u.end(); ++i) { +// printf(" doRedo3 %s\n", i->typeName()); + switch(i->type) { + case UndoOp::AddTrack: + emit trackAdded(i->track, i->id); + break; + case UndoOp::DeleteTrack: + removeTrack3(i->track); + break; + case UndoOp::ModifyPart: + undoPartModify(i->oPart, i->nPart, false); + + case UndoOp::AddPart: + case UndoOp::DeletePart: + i->oPart->track()->partListChanged(); + break; + case UndoOp::AddCtrl: + case UndoOp::RemoveCtrl: + case UndoOp::ModifyCtrl: + i->track->emitControllerChanged(i->id); + break; + default: + break; + } + } + undoList->push_back(u); // put item on undo list + redoList->pop_back(); + dirty = true; + } + +//--------------------------------------------------------- +// undoPartModify +//--------------------------------------------------------- + +void Song::undoPartModify(Part* oPart, Part* nPart, bool undo) + { + if (oPart->track() != nPart->track()) + nPart->track()->partListChanged(); + // + // look for cloned part + // + for (iMidiTrack i = _midis.begin(); i != _midis.end(); ++i) { + PartList* pl = (*i)->parts(); + for (iPart ip = pl->begin(); ip != pl->end(); ++ip) { + Part* p = ip->second; + if (undo) { + if (p == nPart) + continue; + if (p->events() == nPart->events()) { + // this is a cloned Part + p->ref(); + return; + } + } + else { + if (p == oPart) + continue; + if (p->events() == oPart->events()) { + p->deref(); + return; + } + } + } + } + } + diff --git a/attic/muse_qt4_evolution/muse/undo.h b/attic/muse_qt4_evolution/muse/undo.h new file mode 100644 index 00000000..620199bb --- /dev/null +++ b/attic/muse_qt4_evolution/muse/undo.h @@ -0,0 +1,103 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __UNDO_H__ +#define __UNDO_H__ + +#include "event.h" +#include "ctrl.h" + +class Track; +class TEvent; +class SigEvent; +class Part; + +extern std::list temporaryWavFiles; //!< Used for storing all tmp-files, for cleanup on shutdown + +//--------------------------------------------------------- +// UndoOp +//--------------------------------------------------------- + +struct UndoOp { + enum UndoType { + AddTrack, DeleteTrack, RenameTrack, + AddPart, DeletePart, ModifyPart, + AddEvent, DeleteEvent, ModifyEvent, + AddTempo, DeleteTempo, + AddSig, DeleteSig, + SwapTrack, + ModifyClip, + AddCtrl, RemoveCtrl, ModifyCtrl + }; + UndoType type; + + union { + struct { + int a; + int b; + int c; + }; + struct { + Part* oPart; + Part* nPart; + }; + struct { + Part* part; + }; + struct { + SigEvent* nSignature; + SigEvent* oSignature; + }; + struct { + int startframe; //!< Start frame of changed data + int endframe; //!< End frame of changed data + const char* filename; //!< The file that is changed + const char* tmpwavfile; //!< The file with the changed data + }; + struct { + Track* track; + int id; + unsigned time; + CVal cval1, cval2; + QString* os; + QString* ns; + }; + }; + Event oEvent; + Event nEvent; + const char* typeName(); + void dump(); + }; + +class Undo : public std::list { + void undoOp(UndoOp::UndoType, int data); + }; + +typedef Undo::iterator iUndoOp; +typedef Undo::reverse_iterator riUndoOp; + +class UndoList : public std::list { + public: + }; + +typedef UndoList::iterator iUndo; + + +#endif // __UNDO_H__ diff --git a/attic/muse_qt4_evolution/muse/value.cpp b/attic/muse_qt4_evolution/muse/value.cpp new file mode 100644 index 00000000..9434d192 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/value.cpp @@ -0,0 +1,73 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "value.h" +#include "al/xml.h" + +IValue::IValue(QObject* parent, const char* name) + : QObject(parent) + { + setObjectName(name); + } +BValue::BValue(QObject* parent, const char* name) + : QObject(parent) + { + setObjectName(name); + } + +//--------------------------------------------------------- +// save +//--------------------------------------------------------- + +void BValue::save(Xml& xml) + { + xml.intTag(objectName().toLatin1().data(), val); + } + +//--------------------------------------------------------- +// save +//--------------------------------------------------------- + +void IValue::save(Xml& xml) + { + xml.intTag(objectName().toLatin1().data(), val); + } + +//--------------------------------------------------------- +// setValue +//--------------------------------------------------------- + +void BValue::setValue(bool v) + { + if (val != v) { + val = v; + emit valueChanged(val); + emit valueChanged(int(val)); + } + } + +void IValue::setValue(int v) + { + if (val != v) { + val = v; + emit valueChanged(val); + } + } + diff --git a/attic/muse_qt4_evolution/muse/vst.cpp b/attic/muse_qt4_evolution/muse/vst.cpp new file mode 100644 index 00000000..f91d1322 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/vst.cpp @@ -0,0 +1,1063 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// This code is based on jack_fst: +// Copyright (C) 2004 Paul Davis +// Torben Hohn +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "config.h" + +#ifdef VST_SUPPORT + +#include "al/al.h" +#include +#include +#include + +#include "vst.h" +#include "globals.h" +#include "synth.h" +#include "jackaudio.h" +#include "midi.h" +#include "al/xml.h" +#include "song.h" +#include "audio.h" +#include "widgets/utils.h" + +extern "C" void fst_error(const char *fmt, ...); +extern JackAudio* jackAudio; + +//--------------------------------------------------------- +// jfstReserveMem +//--------------------------------------------------------- + +static void jfstReserveMem(int size) + { + char buf[size]; + + for (int i = 0; i < size; ++i) + buf[i] = (char)(i % 256); + } + +//--------------------------------------------------------- +// vstHostCallback +//--------------------------------------------------------- + +static long vstHostCallback(AEffect* effect, + long opcode, long index, long value, void* ptr, float opt) + { + static VstTimeInfo _timeInfo; + + VstPluginIF* pluginIF = effect ? (VstPluginIF*) effect->user : 0; + + jack_position_t jack_pos; + jack_transport_state_t tstate; + + switch (opcode) { + case audioMasterAutomate: + // index, value, returns 0 + if (pluginIF) { + PluginI* pi = pluginIF->pluginInstance(); + // pi->setParam(index, opt); + CVal cval; + cval.f = opt; + song->setControllerVal(pi->track(), pi->controller(index), cval); + } + return 0; + + case audioMasterVersion: + // vst version, currently 2 (0 for older) + return 2200; + + case audioMasterCurrentId: + // returns the unique id of a plug that's currently + // loading + return 0; + + case audioMasterIdle: + // call application idle routine (this will + // call effEditIdle for all open editors too) + effect->dispatcher(effect, effEditIdle, 0, 0, NULL, 0.0f); + return 0; + + case audioMasterPinConnected: + // inquire if an input or output is beeing connected; + // index enumerates input or output counting from zero: + // value is 0 for input and != 0 otherwise. note: the + // return value is 0 for such that older versions + // will always return true. + return 1; + + case audioMasterWantMidi: + // is a filter which is currently ignored + return 0; + + case audioMasterGetTime: + // returns const VstTimeInfo* (or 0 if not supported) + // should contain a mask indicating which fields are required + // (see valid masks above), as some items may require extensive + // conversions + + memset(&_timeInfo, 0, sizeof(_timeInfo)); + + if (effect) { + tstate = jackAudio->transportQuery(&jack_pos); + + _timeInfo.samplePos = jack_pos.frame; + _timeInfo.sampleRate = jack_pos.frame_rate; + _timeInfo.flags = 0; + + if ((value & (kVstBarsValid|kVstTempoValid)) && (jack_pos.valid & JackPositionBBT)) { + _timeInfo.tempo = jack_pos.beats_per_minute; + _timeInfo.timeSigNumerator = (long) floor (jack_pos.beats_per_bar); + _timeInfo.timeSigDenominator = (long) floor (jack_pos.beat_type); + _timeInfo.flags |= (kVstBarsValid|kVstTempoValid); + } + if (tstate == JackTransportRolling) { + _timeInfo.flags |= kVstTransportPlaying; + } + } + else { + _timeInfo.samplePos = 0; + _timeInfo.sampleRate = AL::sampleRate; + } + return (long)&_timeInfo; + + case audioMasterProcessEvents: + // VstEvents* in + return 0; + + case audioMasterSetTime: + // VstTimenfo* in , filter in , not supported + + case audioMasterTempoAt: + // returns tempo (in bpm * 10000) at sample frame location passed in + return 0; + + case audioMasterGetNumAutomatableParameters: + return 0; + + case audioMasterGetParameterQuantization: + // returns the integer value for +1.0 representation, + // or 1 if full single float precision is maintained + // in automation. parameter index in (-1: all, any) + return 0; + + case audioMasterIOChanged: + // numInputs and/or numOutputs has changed + return 0; + + case audioMasterNeedIdle: + // plug needs idle calls (outside its editor window) + return 0; + + case audioMasterSizeWindow: + // index: width, value: height + return 0; + + case audioMasterGetSampleRate: + return 0; + + case audioMasterGetBlockSize: + return 0; + + case audioMasterGetInputLatency: + return 0; + + case audioMasterGetOutputLatency: + return 0; + + case audioMasterGetPreviousPlug: + // input pin in (-1: first to come), returns cEffect* + return 0; + + case audioMasterGetNextPlug: + // output pin in (-1: first to come), returns cEffect* + + case audioMasterWillReplaceOrAccumulate: + // returns: 0: not supported, 1: replace, 2: accumulate + return 0; + + case audioMasterGetCurrentProcessLevel: + // returns: 0: not supported, + // 1: currently in user thread (gui) + // 2: currently in audio thread (where process is called) + // 3: currently in 'sequencer' thread (midi, timer etc) + // 4: currently offline processing and thus in user thread + // other: not defined, but probably pre-empting user thread. + return 0; + + case audioMasterGetAutomationState: + // returns 0: not supported, 1: off, 2:read, 3:write, 4:read/write + // offline + return 0; + + case audioMasterOfflineStart: + case audioMasterOfflineRead: + // ptr points to offline structure, see below. return 0: error, 1 ok + return 0; + + case audioMasterOfflineWrite: + // same as read + return 0; + + case audioMasterOfflineGetCurrentPass: + case audioMasterOfflineGetCurrentMetaPass: + return 0; + + case audioMasterSetOutputSampleRate: + // for variable i/o, sample rate in + return 0; + + case audioMasterGetSpeakerArrangement: + // (long)input in , output in + return 0; + + case audioMasterGetVendorString: + // fills with a string identifying the vendor (max 64 char) + strcpy ((char*) ptr, "LAD"); + return 0; + + case audioMasterGetProductString: + // fills with a string with product name (max 64 char) + strcpy ((char*) ptr, "FreeST"); + + case audioMasterGetVendorVersion: + // returns vendor-specific version + return 1000; + + case audioMasterVendorSpecific: + // no definition, vendor specific handling + return 0; + + case audioMasterSetIcon: + // void* in , format not defined yet + return 0; + + case audioMasterCanDo: + // string in ptr, see below + return 0; + + case audioMasterGetLanguage: + // see enum + return 0; + + case audioMasterOpenWindow: + // returns platform specific ptr + return 0; + + case audioMasterCloseWindow: + // close window, platform specific handle in + return 0; + + case audioMasterGetDirectory: + // get plug directory, FSSpec on MAC, else char* + return 0; + + case audioMasterUpdateDisplay: + // something has changed, update 'multi-fx' display + effect->dispatcher(effect, effEditIdle, 0, 0, NULL, 0.0f); + return 0; + + case audioMasterBeginEdit: + // begin of automation session (when mouse down), parameter index in + return 0; + + case audioMasterEndEdit: + // end of automation session (when mouse up), parameter index in + return 0; + + case audioMasterOpenFileSelector: + // open a fileselector window with VstFileSelect* in + return 0; + + default: + break; + } + return 0; + } + + +//--------------------------------------------------------- +// FstPlugin +//--------------------------------------------------------- + +FstPlugin::FstPlugin() + { + _fst = 0; + } + +//--------------------------------------------------------- +// ~FstPlugin +//--------------------------------------------------------- + +FstPlugin::~FstPlugin() + { + if (_fst) { + destroyEditor(); + fst_close(_fst); + _fst = 0; + } + } + +//--------------------------------------------------------- +// instantiate +//--------------------------------------------------------- + +void FstPlugin::instantiate(FSTHandle* fstHandle, void* p) + { + _fst = fst_instantiate(fstHandle, vstHostCallback, p); + if (_fst == 0) { + printf("FstPlugin::instantiate:: cannot instantiate plugin\n"); + return; + } + AEffect* plugin = _fst->plugin; + version = plugin->dispatcher (plugin, effGetVstVersion, 0, 0, 0, 0.0f); + } + +//--------------------------------------------------------- +// numInputs +//--------------------------------------------------------- + +int FstPlugin::numInputs() const + { + return _fst->plugin->numInputs; + } + +//--------------------------------------------------------- +// numOutputs +//--------------------------------------------------------- + +int FstPlugin::numOutputs() const + { + return _fst->plugin->numOutputs; + } + +//--------------------------------------------------------- +// numParameter +//--------------------------------------------------------- + +int FstPlugin::numParameter() const + { + return _fst->plugin->numParams; + } + +//--------------------------------------------------------- +// setSampleRate +//--------------------------------------------------------- + +void FstPlugin::setSampleRate(float sr) + { + AEffect* plugin = _fst->plugin; + plugin->dispatcher(plugin, effSetSampleRate, 0, 0, 0, sr); + } + +//--------------------------------------------------------- +// setBlockSize +//--------------------------------------------------------- + +void FstPlugin::setBlockSize(int bs) + { + AEffect* plugin = _fst->plugin; + plugin->dispatcher(plugin, effSetBlockSize, 0, bs, 0, 0.0f); + } + +//--------------------------------------------------------- +// mainsChanged +//--------------------------------------------------------- + +void FstPlugin::mainsChanged(bool on) + { + AEffect* plugin = _fst->plugin; + plugin->dispatcher(plugin, effMainsChanged, 0, on, 0, 0.0f); + } + +//--------------------------------------------------------- +// setProgram +//--------------------------------------------------------- + +void FstPlugin::setProgram(int p) + { + AEffect* plugin = _fst->plugin; + plugin->dispatcher(plugin, effSetProgram, 0, p, 0, 0.0f); + } + +//--------------------------------------------------------- +// hasGui +//--------------------------------------------------------- + +bool FstPlugin::hasGui() const + { + return _fst->plugin->flags & effFlagsHasEditor; + } + +//--------------------------------------------------------- +// canReplacing +//--------------------------------------------------------- + +bool FstPlugin::canReplacing() + { + return _fst->plugin->flags & effFlagsCanReplacing; + } + +//--------------------------------------------------------- +// runEditor +//--------------------------------------------------------- + +bool FstPlugin::runEditor() + { + return fst_run_editor(_fst); + } + +//--------------------------------------------------------- +// destroyEditor +//--------------------------------------------------------- + +void FstPlugin::destroyEditor() + { + fst_destroy_editor(_fst); + } + +//--------------------------------------------------------- +// getVstVersion +//--------------------------------------------------------- + +int FstPlugin::getVstVersion() + { + return version; + } + +//--------------------------------------------------------- +// setParameter +//--------------------------------------------------------- + +void FstPlugin::setParameter(int idx, float value) + { + AEffect* plugin = _fst->plugin; + plugin->setParameter(plugin, idx, value); + } + +//--------------------------------------------------------- +// getParameter +//--------------------------------------------------------- + +float FstPlugin::getParameter(int idx) + { + AEffect* plugin = _fst->plugin; + return plugin->getParameter(plugin, idx); + } + +//--------------------------------------------------------- +// processReplacing +//--------------------------------------------------------- + +void FstPlugin::processReplacing(float** ins, float** outs, int n) + { + AEffect* plugin = _fst->plugin; + plugin->processReplacing(plugin, ins, outs, n); + } + +//--------------------------------------------------------- +// process +//--------------------------------------------------------- + +void FstPlugin::process(float** ins, float** outs, int n) + { + AEffect* plugin = _fst->plugin; + plugin->process(plugin, ins, outs, n); + } + +//--------------------------------------------------------- +// putEvent +//--------------------------------------------------------- + +void FstPlugin::putEvent(const MidiEvent& ev) + { + AEffect* plugin = _fst->plugin; + static struct VstEvents events; + static struct VstMidiEvent event; + events.numEvents = 1; + events.reserved = 0; + events.events[0] = (VstEvent*)(&event); + + event.type = kVstMidiType; + event.byteSize = 24; + event.deltaFrames = 0; + event.flags = 0; + event.detune = 0; + event.noteLength = 0; + event.noteOffset = 0; + event.reserved1 = 0; + event.reserved2 = 0; + event.noteOffVelocity = 0; + switch (ev.type()) { + case ME_PITCHBEND: + { + int a = ev.dataA() + 8192; + int b = a >> 7; + event.midiData[0] = (ev.type() | ev.channel()) & 0xff; + event.midiData[1] = a & 0x7f; + event.midiData[2] = b & 0x7f; + event.midiData[3] = 0; + } + break; + + case ME_CONTROLLER: + case ME_NOTEON: + default: + event.midiData[0] = (ev.type() | ev.channel()) & 0xff; + event.midiData[1] = ev.dataA() & 0xff; + event.midiData[2] = ev.dataB() & 0xff; + event.midiData[3] = 0; + break; + } + plugin->dispatcher(plugin, effProcessEvents, 0, 0, &events, 0.0f); + } + +//--------------------------------------------------------- +// getParameterName +//--------------------------------------------------------- + +const char* FstPlugin::getParameterName(int idx) const + { + static char dsp[8]; + dsp[0] = 0; + AEffect* effect = _fst->plugin; + effect->dispatcher(effect, effGetParamName, idx, 0, &dsp, 0.0f); + return dsp; + } + +//--------------------------------------------------------- +// getParameterLabel +//--------------------------------------------------------- + +const char* FstPlugin::getParameterLabel(int idx) const + { + static char dsp[8]; + dsp[0] = 0; + AEffect* effect = _fst->plugin; + effect->dispatcher(effect, effGetParamLabel, idx, 0, &dsp, 0.0f); + return dsp; + } + +//--------------------------------------------------------- +// getParameterDisplay +//--------------------------------------------------------- + +const char* FstPlugin::getParameterDisplay(int idx, float val) const + { + static char dsp[8]; + dsp[0] = 0; + AEffect* effect = _fst->plugin; + effect->dispatcher(effect, effGetParamDisplay, idx, 0, &dsp, val); + return dsp; + } + +//--------------------------------------------------------- +// scanVstDir +//--------------------------------------------------------- + +static void scanVstDir(const QString& s) + { + if (debugMsg) + printf("scan vst plugin dir <%s>\n", s.toLatin1().data()); + QDir pluginDir(s, QString("*.dll"), QDir::Unsorted, QDir::Files); + if (pluginDir.exists()) { + const QFileInfoList list = pluginDir.entryInfoList(); + for (int i = 0; i < list.size(); ++i) { + QFileInfo fi = list.at(i); + char* path = strdup(fi.filePath().toLatin1().data()); + FSTInfo* info = fst_get_info(path); + if (info) { + // + // simple hack: + // plugins with no inputs are treated + // as software synthesizer + // + // if (info->wantEvents && info->numOutputs) { + if (info->numInputs == 0 && info->numOutputs) { + if (debugMsg) + printf(" add vsti synti <%s>\n", fi.fileName().toLatin1().data()); + synthis.push_back(new VstSynth(&fi)); + fst_free_info(info); + } + else if (info->numInputs && info->numOutputs) { + if (debugMsg) + printf(" add vst plugin <%s>\n", fi.fileName().toLatin1().data()); + plugins.push_back(new VstPlugin(&fi, info)); + } + } + free(path); + } + } + } + +//--------------------------------------------------------- +// fstSignalHandler +//--------------------------------------------------------- + +static void fstSignalHandler(int sig, siginfo_t* /*info*/, void* /*context*/) + { + fst_error("fst signal handler %d, thread = 0x%x", sig, pthread_self ()); + //if (sig == SIGSEGV || sig == SIGABRT) { + char*p = 0; + *p = 0; +// } + fatalError("fst signal"); + } + +//--------------------------------------------------------- +// initVST +//--------------------------------------------------------- + +void initVST() + { + jfstReserveMem(1000000); + + if (fst_init(fstSignalHandler)) { + printf("initVST failed\n"); + return; + } + char* vstPath = getenv("VST_PATH"); + if (vstPath == 0) + vstPath = "/usr/lib/vst:/usr/local/lib/vst"; + + char* p = vstPath; + while (*p != '\0') { + char* pe = p; + while (*pe != ':' && *pe != '\0') + pe++; + + int n = pe - p; + if (n) { + char* buffer = new char[n + 1]; + strncpy(buffer, p, n); + buffer[n] = '\0'; + scanVstDir(QString(buffer)); + delete[] buffer; + } + p = pe; + if (*p == ':') + p++; + } + } + +//--------------------------------------------------------- +// guiVisible +//--------------------------------------------------------- + +bool VstSynthIF::guiVisible() const + { + return _guiVisible; + } + +//--------------------------------------------------------- +// showGui +//--------------------------------------------------------- + +void VstSynthIF::showGui(bool v) + { + if (v == guiVisible()) + return; + if (v) + _fst->runEditor(); + else + _fst->destroyEditor(); + _guiVisible = v; + } + +//--------------------------------------------------------- +// receiveEvent +//--------------------------------------------------------- + +MidiEvent VstSynthIF::receiveEvent() + { + return MidiEvent(); + } + +//--------------------------------------------------------- +// hasGui +//--------------------------------------------------------- + +bool VstSynthIF::hasGui() const + { + return _fst->hasGui(); + } + +//--------------------------------------------------------- +// incInstances +//--------------------------------------------------------- + +void VstSynth::incInstances(int val) + { + _instances += val; + if (_instances == 0 && fstHandle) { + fst_unload(fstHandle); + fstHandle = 0; + } + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +bool VstSynthIF::init(FSTHandle* h) + { + _fst = new FstPlugin(); + _fst->instantiate(h, 0); + _fst->setSampleRate(AL::sampleRate); + _fst->setBlockSize(segmentSize); + _fst->mainsChanged(true); + _fst->setProgram(0); + return true; + } + +//--------------------------------------------------------- +// channels +//--------------------------------------------------------- + +int VstSynthIF::channels() const + { + return _fst->numOutputs(); + } + +//--------------------------------------------------------- +// createSIF +//--------------------------------------------------------- + +SynthIF* VstSynth::createSIF(SynthI* s) + { + VstSynthIF* sif = new VstSynthIF(s); + ++_instances; + const char* path = info.filePath().toLatin1().data(); + + if (fstHandle == 0) { + fstHandle = fst_load(path); + if (fstHandle == 0) { + printf("SynthIF:: cannot load vst plugin %s\n", path); + return 0; + } + } + sif->init(fstHandle); + return sif; + } + +//--------------------------------------------------------- +// deactivate3 +//--------------------------------------------------------- + +void VstSynthIF::deactivate3() + { + if (_fst) { + delete _fst; + _fst = 0; + } + } + +//--------------------------------------------------------- +// ~VstSynthIF +//--------------------------------------------------------- + +VstSynthIF::~VstSynthIF() + { + deactivate3(); + } + +//--------------------------------------------------------- +// setParameter +//--------------------------------------------------------- + +void VstSynthIF::setParameter(int idx, float value) + { + _fst->setParameter(idx, value); + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void VstSynthIF::write(Xml& xml) const + { + //--------------------------------------------- + // dump current state of synth + //--------------------------------------------- + + int params = _fst->numParameter(); + for (int i = 0; i < params; ++i) { + float f = _fst->getParameter(i); + xml.tag("param", f); + } + } + +//--------------------------------------------------------- +// getData +//--------------------------------------------------------- + +void VstSynthIF::getData(MidiEventList* el, unsigned pos, int ports, unsigned n, float** buffer) + { + unsigned int endPos = pos + n; + iMidiEvent i = el->begin(); + for (; i != el->end(); ++i) { + if (i->time() >= endPos) + break; + putEvent(*i); + } + el->erase(el->begin(), i); + + int outputs = _fst->numOutputs(); + if (ports < outputs) { + float* ob[outputs]; + float fp[n * (outputs-ports)]; // dummy output buffer + for (int i = 0; i < outputs; ++i) { + if (i < ports) + ob[i] = buffer[i]; + else + ob[i] = fp + n * (i-ports); + } + if (_fst->canReplacing()) + _fst->processReplacing(0, ob, n); + else { + for (int i = 0; i < outputs; ++i) + memset(ob[i], 0, n * sizeof(float)); + _fst->process(0, ob, n); + } + } + else { + if (_fst->canReplacing()) + _fst->processReplacing(0, buffer, n); + else { + for (int i = 0; i < outputs; ++i) + memset(buffer[i], 0, n * sizeof(float)); + _fst->process(0, buffer, n); + } + } + } + +//--------------------------------------------------------- +// putEvent +//--------------------------------------------------------- + +bool VstSynthIF::putEvent(const MidiEvent& ev) + { + if (midiOutputTrace) + ev.dump(); + _fst->putEvent(ev); + return false; + } + +//--------------------------------------------------------- +// VstPlugin +//--------------------------------------------------------- + +VstPlugin::VstPlugin(const QFileInfo* fi, FSTInfo* i) + : Plugin(fi) + { + info = i; + fstHandle = 0; + } + +//--------------------------------------------------------- +// VstPlugin +//--------------------------------------------------------- + +VstPlugin::~VstPlugin() + { + fst_free_info(info); + } + +//--------------------------------------------------------- +// createPIF +//--------------------------------------------------------- + +PluginIF* VstPlugin::createPIF(PluginI* pi) + { + VstPluginIF* pif = new VstPluginIF(pi); + ++_instances; + const char* path = fi.filePath().toLatin1().data(); + + if (fstHandle == 0) { + fstHandle = fst_load(path); + if (fstHandle == 0) { + printf("SynthIF:: cannot load vst plugin %s\n", path); + return 0; + } + } + pif->init(fstHandle); + return pif; + } + +//--------------------------------------------------------- +// parameter +//--------------------------------------------------------- + +int VstPlugin::parameter() const + { + return info->numParams; + } + +//--------------------------------------------------------- +// inports +//--------------------------------------------------------- + +int VstPlugin::inports() const + { + return info->numInputs; + } + +//--------------------------------------------------------- +// outports +//--------------------------------------------------------- + +int VstPlugin::outports() const + { + return info->numOutputs; + } + +//--------------------------------------------------------- +// id +//--------------------------------------------------------- + +unsigned long VstPlugin::id() const + { + return info->UniqueID; + } + +//--------------------------------------------------------- +// VstPluginIF +//--------------------------------------------------------- + +VstPluginIF::VstPluginIF(PluginI* pi) + : PluginIF(pi) + { + _fst = 0; + _guiVisible = false; + } + +VstPluginIF::~VstPluginIF() + { + if (_fst == 0) + return; + delete _fst; + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +bool VstPluginIF::init(FSTHandle* h) + { + _fst = new FstPlugin(); + _fst->instantiate(h, this); + _fst->setSampleRate(AL::sampleRate); + _fst->setBlockSize(segmentSize); + _fst->mainsChanged(true); + _fst->setProgram(0); + return true; + } + +//--------------------------------------------------------- +// hasGui +//--------------------------------------------------------- + +bool VstPluginIF::hasGui() const + { + return _fst->hasGui(); + } + +//--------------------------------------------------------- +// showGui +//--------------------------------------------------------- + +void VstPluginIF::showGui(bool v) + { + if (v == guiVisible()) + return; + if (v) + _fst->runEditor(); + else + _fst->destroyEditor(); + _guiVisible = v; + } + +//--------------------------------------------------------- +// getParameterName +//--------------------------------------------------------- + +const char* VstPluginIF::getParameterName(int idx) const + { + return _fst->getParameterName(idx); + } + +//--------------------------------------------------------- +// getParameterLabel +//--------------------------------------------------------- + +const char* VstPluginIF::getParameterLabel(int idx) const + { + return _fst->getParameterLabel(idx); + } + +//--------------------------------------------------------- +// getParameterDisplay +//--------------------------------------------------------- + +const char* VstPluginIF::getParameterDisplay(int idx, float val) const + { + return _fst->getParameterDisplay(idx, val); + } + +//--------------------------------------------------------- +// apply +//--------------------------------------------------------- + +void VstPluginIF::apply(unsigned nframes, float** src, float** dst) + { + if (_fst->canReplacing()) + _fst->processReplacing(src, dst, nframes); + else { + int n = _fst->numOutputs(); + + for (int i = 0; i < n; ++i) + memset(dst[i], 0, sizeof(float) * nframes); + _fst->process(src, dst, nframes); + } + } + +//--------------------------------------------------------- +// setParam +//--------------------------------------------------------- + +void VstPluginIF::setParam(int i, double val) + { + _fst->setParameter(i, val); + } + +//--------------------------------------------------------- +// param +//--------------------------------------------------------- + +float VstPluginIF::param(int i) const + { + return _fst->getParameter(i); + } + +#else +void initVST() {} +#endif + diff --git a/attic/muse_qt4_evolution/muse/vst.h b/attic/muse_qt4_evolution/muse/vst.h new file mode 100644 index 00000000..0ecea974 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/vst.h @@ -0,0 +1,172 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __VST_H__ +#define __VST_H__ + +#include "synth.h" +#include "plugin.h" + +struct _FSTHandle; +struct _FST; +class VstPluginIF; + +//--------------------------------------------------------- +// FstPlugin +//--------------------------------------------------------- + +class FstPlugin { + _FST* _fst; + int version; + + public: + FstPlugin(); + ~FstPlugin(); + void instantiate(FSTHandle* s, void*); + int numInputs() const; + int numOutputs() const; + int numParameter() const; + void setProgram(int p); + void mainsChanged(bool on); + void setBlockSize(int bs); + void setSampleRate(float sr); + bool runEditor(); + void destroyEditor(); + int getVstVersion(); + bool hasGui() const; + bool canReplacing(); + void setParameter(int idx, float value); + float getParameter(int idx); + void processReplacing(float**, float**, int); + void process(float**, float**, int); + void putEvent(const MidiEvent& ev); + const char* getParameterName(int idx) const; + const char* getParameterLabel(int idx) const; + const char* getParameterDisplay(int idx, float val) const; + }; + +//--------------------------------------------------------- +// VstSynth +//--------------------------------------------------------- + +class VstSynth : public Synth { + _FSTHandle* fstHandle; + int vstVersion; + + public: + VstSynth(const QFileInfo* fi) : Synth(fi, fi->baseName()) { + fstHandle = 0; + } + virtual ~VstSynth() {} + virtual void incInstances(int val); + virtual SynthIF* createSIF(SynthI*); + }; + +//--------------------------------------------------------- +// VstSynthIF +// VSTi synthesizer instance +//--------------------------------------------------------- + +class VstSynthIF : public SynthIF + { + FstPlugin* _fst; + bool _guiVisible; + + public: + VstSynthIF(SynthI* s) : SynthIF(s) { + _fst = 0; + _guiVisible = false; + } + virtual ~VstSynthIF(); + + virtual bool guiVisible() const; + virtual void showGui(bool v); + virtual bool hasGui() const; + virtual void getGeometry(int*, int*, int*, int*) const {} + virtual void setGeometry(int, int, int, int) {} + virtual void getData(MidiEventList*, unsigned pos, int ports, unsigned n, float** buffer) ; + virtual bool putEvent(const MidiEvent& ev); + virtual MidiEvent receiveEvent(); + virtual int eventsPending() const { return 0; } + virtual int channels() const; + virtual void deactivate3(); + virtual QString getPatchName(int, int) { return QString(""); } + virtual void populatePatchPopup(QMenu*, int) {}; + virtual void write(Xml& xml) const; + virtual void setParameter(int idx, float value); + virtual int getControllerInfo(int, const char**, int*, int*, int*) { return 0; } + bool init(FSTHandle*); + }; + +//--------------------------------------------------------- +// VstPlugin +//--------------------------------------------------------- + +class VstPlugin : public Plugin { + _FSTHandle* fstHandle; + FSTInfo* info; + + protected: + int vstVersion; + friend class VstPluginIF; + + public: + VstPlugin(const QFileInfo* fi, FSTInfo* i); + virtual ~VstPlugin(); + virtual PluginIF* createPIF(PluginI*); + virtual QString name() const { return QString(info->name); } + virtual QString label() const { return QString(info->name); } + + virtual int parameter() const; + virtual int inports() const; + virtual int outports() const; + virtual unsigned long id() const; + }; + +//--------------------------------------------------------- +// VstPluginIF +// Vst plugin instance interface +//--------------------------------------------------------- + +class VstPluginIF : public PluginIF { + FstPlugin* _fst; + bool _guiVisible; + + public: + VstPluginIF(PluginI*); + virtual ~VstPluginIF(); + + virtual void apply(unsigned nframes, float** src, float** dst); + virtual void activate() {} + virtual void deactivate() {} + virtual void cleanup() {} + virtual void setParam(int i, double val); + virtual float param(int i) const; + virtual const char* getParameterName(int k) const; + virtual const char* getParameterLabel(int) const; + virtual const char* getParameterDisplay(int, float) const; + virtual bool hasGui() const; + virtual bool guiVisible() const { return _guiVisible; } + virtual void showGui(bool f); + bool init(FSTHandle*); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/wave.cpp b/attic/muse_qt4_evolution/muse/wave.cpp new file mode 100644 index 00000000..dca9843b --- /dev/null +++ b/attic/muse_qt4_evolution/muse/wave.cpp @@ -0,0 +1,1087 @@ + //============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include + +#include "al/xml.h" +#include "al/al.h" +#include "song.h" +#include "wave.h" +#include "muse.h" +#include "widgets/filedialog.h" +#include "arranger.h" +#include "globals.h" +#include "event.h" +#include "audio.h" +#include "part.h" + +const char* audioFilePattern[] = { + "Wave/Binary (*.wav *.bin)", + "Wave (*.wav)", + "Binary (*.bin)", + "All Files (*)", + 0 + }; +const int cacheMag = 128; + +QHash SndFile::sndFiles; +QList SndFile::createdFiles; +int SndFile::recFileNumber; + +//--------------------------------------------------------- +// copyWaveFileToProject +// - copy wave file to project directory +// - do sample rate conversion +// +// return false on error +//--------------------------------------------------------- + +static bool copyWaveFileToProject(const QString& path) + { + QFile srcFile(path); + QFileInfo srcInfo(srcFile); + + QString dst(song->absoluteProjectPath()); + QFile dstFile(dst + "/" + srcInfo.fileName()); + if (dstFile.exists()) { + // TODO: rename file or check for identity + // we cannot easily check for identity if destination + // file is sample rate converted + // + // for now we assume that the file has already + // be imported: + // + printf("File already exists\n"); + return true; + } + + SF_INFO sfinfoSrc; + memset(&sfinfoSrc, 0, sizeof(SF_INFO)); + SNDFILE* sfSrc = sf_open(path.toLatin1().data(), SFM_READ, &sfinfoSrc); + if (sfSrc == 0) { + printf("Cannot open source file: %s\n", strerror(errno)); + return false; + } + int channels = sfinfoSrc.channels; + sf_count_t size = sfinfoSrc.frames; + + SF_INFO sfinfoDst; + memset(&sfinfoDst, 0, sizeof(SF_INFO)); + sfinfoDst.samplerate = AL::sampleRate; + sfinfoDst.channels = channels; + sfinfoDst.format = SF_FORMAT_WAV | SF_FORMAT_FLOAT; + SNDFILE* sfDst = sf_open(dstFile.fileName().toLatin1().data(), + SFM_WRITE, &sfinfoDst); + if (sfDst == 0) { + printf("Cannot open destination file<%s>: %s\n", + dstFile.fileName().toLatin1().data(), strerror(errno)); + return false; + } + + bool showProgress = size > (1024LL * 1024LL * 8LL); + QProgressDialog* progress = 0; + if (showProgress) { + QString label(QWidget::tr("copy \n %1\nto\n %2")); + label = label.arg(path).arg(dst); + if (sfinfoSrc.samplerate != AL::sampleRate) { + QString cs(QWidget::tr("\nconverting sample rate\n" + "from %1 to %2")); + label += cs.arg(sfinfoSrc.samplerate).arg(AL::sampleRate); + } + int csize = size / 1024; + progress = new QProgressDialog(label, QWidget::tr("Abort"), 0, csize); + progress->setValue(0); + progress->setWindowTitle("MusE"); + progress->raise(); + progress->show(); + qApp->processEvents(); + } + sf_count_t inSize = 1024LL * 64LL; + sf_count_t samplesWritten = 0LL; + + bool returnValue = true; + if (sfinfoSrc.samplerate != AL::sampleRate) { + // TODO: convertsample rate + printf("wave file has samplerate of %d, our project has %d\n", + sfinfoSrc.samplerate,AL::sampleRate); + + int srcType = SRC_SINC_MEDIUM_QUALITY; + int error; + SRC_STATE* src = src_new(srcType, channels, &error); + if (src == 0) { + printf("creating sample rate converter failed: error %d\n", + error); + return false; + } + double ratio = double(AL::sampleRate) / double(sfinfoSrc.samplerate); + src_set_ratio(src, ratio); + sf_count_t outSize = int(inSize * ratio) + 1; + float inBuffer[inSize * channels]; + float* inPtr = inBuffer; + while (size) { + float outBuffer[outSize * channels]; + + // read buffer + sf_count_t framesToRead = (inBuffer + inSize) - inPtr; + if (framesToRead > size) + framesToRead = size; + sf_count_t nr = sf_readf_float(sfSrc, inPtr, framesToRead); + if (nr != framesToRead) { + printf("sound file read failed\n"); + src_delete(src); + returnValue = false; + break; + } + + // convert + SRC_DATA data; + data.data_in = inBuffer; + data.data_out = outBuffer; + data.input_frames = inSize; + data.output_frames = outSize; + data.end_of_input = framesToRead == size; + data.src_ratio = ratio; + + int rv = src_process(src, &data); + if (rv > 0) { + printf("error sampe rate conversion: %s\n", + src_strerror(rv)); + src_delete(src); + returnValue = false; + break; + } + + // write buffer + sf_count_t n = sf_writef_float(sfDst, outBuffer, data.output_frames_gen); + if (n != data.output_frames_gen) { + printf("sound write failed: returns %lld, should return %ld\n", + n, data.output_frames_gen); + returnValue = false; + break; + } + + int rest = (inPtr + nr - inBuffer) - data.input_frames_used; + rest *= (sizeof(float) * channels); + if (rest > 0) + memcpy(inBuffer, inBuffer + data.input_frames_used, rest); + + inPtr += framesToRead; + inPtr -= data.input_frames_used; + if (data.input_frames_used > size) + size = 0; + else + size -= data.input_frames_used; + framesToRead = data.input_frames_used; + samplesWritten += data.input_frames_used; + + if (framesToRead > size) + framesToRead = size; + if (showProgress) { + progress->setValue(samplesWritten / 1024LL); + progress->raise(); + qApp->processEvents(); + if (progress->wasCanceled()) { + returnValue = false; + break; + } + } + } + src_delete(src); + } + else { + while (size) { + float buffer[inSize * channels]; + + sf_count_t n = inSize > size ? size : inSize; + sf_count_t nn = sf_readf_float(sfSrc, buffer, n); + + if (nn != n) { + printf("sound file read failed\n"); + returnValue = false; + break; + } + // write buffer + nn = sf_writef_float(sfDst, buffer, n); + if (n != nn) { + printf("sound write failed: returns %lld, should return %lld\n", + nn, n); + returnValue = false; + break; + } + size -= n; + samplesWritten += n; + if (showProgress) { + progress->setValue(samplesWritten / 1024LL); + progress->raise(); + qApp->processEvents(); + if (progress->wasCanceled()) { + returnValue = false; + break; + } + } + } + } + if (progress) + delete progress; + sf_close(sfSrc); + sf_close(sfDst); + return returnValue; + } + +//--------------------------------------------------------- +// SndFile +//--------------------------------------------------------- + +SndFile::SndFile(const QString& name) + { + refCount = 0; + _finfo.setFile(name); + sfRT = 0; + sfUI = 0; + csize = 0; + cache = 0; + openFlag = false; + sndFiles[_finfo.absoluteFilePath()] = this; + } + +SndFile::~SndFile() + { + if (openFlag) + close(); + sndFiles.remove(_finfo.absoluteFilePath()); + if (cache) { + for (unsigned i = 0; i < channels(); ++i) + delete cache[i]; + delete[] cache; + cache = 0; + } + } + +//--------------------------------------------------------- +// openRead +//--------------------------------------------------------- + +bool SndFile::openRead() + { + if (openFlag) { + printf("SndFile:: alread open\n"); + return false; + } + QString p = _finfo.absoluteFilePath(); + sfinfo.format = 0; + sfUI = sf_open(p.toAscii().data(), SFM_READ, &sfinfo); + sfinfo.format = 0; + sfRT = sf_open(p.toAscii().data(), SFM_READ, &sfinfo); + if (sfUI == 0 || sfRT == 0) { + printf("SndFile::openRead(): failed\n"); + return true; + } + writeFlag = false; + openFlag = true; + QString cacheName = _finfo.absolutePath() + QString("/") + _finfo.baseName() + QString(".wca"); + readCache(cacheName, true); + return false; + } + +//--------------------------------------------------------- +// update +// called after recording to file +//--------------------------------------------------------- + +void SndFile::update() + { + close(); + + // force recreation of wca data + QString cacheName = _finfo.absolutePath() + + QString("/") + _finfo.baseName() + QString(".wca"); + ::remove(cacheName.toLatin1().data()); + if (openRead()) { + printf("SndFile::openRead(%s) failed: %s\n", _finfo.filePath().toLatin1().data(), strerror().toLatin1().data()); + } + } + +//--------------------------------------------------------- +// readCache +//--------------------------------------------------------- + +void SndFile::readCache(const QString& path, bool showProgress) + { +// printf("readCache %s for %d samples channel %d\n", +// path.toLatin1().data(), samples(), channels()); + + if (cache) { + for (unsigned i = 0; i < channels(); ++i) + delete cache[i]; + delete[] cache; + } + if (samples() == 0) { +// printf("SndFile::readCache: file empty\n"); + return; + } + csize = (samples() + cacheMag - 1)/cacheMag; + cache = new SampleV*[channels()]; + for (unsigned ch = 0; ch < channels(); ++ch) + cache[ch] = new SampleV[csize]; + + FILE* cfile = fopen(path.toAscii().data(), "r"); + if (cfile) { + for (unsigned ch = 0; ch < channels(); ++ch) + fread(cache[ch], csize * sizeof(SampleV), 1, cfile); + fclose(cfile); + return; + } + + //--------------------------------------------------- + // create cache + //--------------------------------------------------- + + QProgressDialog* progress = 0; + if (showProgress) { + QString label(QWidget::tr("create peakfile for ")); + label += _finfo.baseName(); + progress = new QProgressDialog(label, "Abort", 0, csize, 0); + qApp->processEvents(); + } + float data[channels()][cacheMag]; + float* fp[channels()]; + for (unsigned k = 0; k < channels(); ++k) + fp[k] = &data[k][0]; + int interval = csize / 10; + for (int i = 0; i < csize; i++) { + if (showProgress && ((i % interval) == 0)) { + progress->setValue(i); + progress->raise(); + qApp->processEvents(); + if (progress->wasCanceled()) { + // TODO + } + } + seek(i * cacheMag); + read(channels(), fp, cacheMag); + for (unsigned ch = 0; ch < channels(); ++ch) { + float rms = 0.0; + cache[ch][i].peak = 0; + for (int n = 0; n < cacheMag; n++) { + float fd = data[ch][n]; + rms += fd * fd; + int idata = lrint(fd * 255.0); + if (idata < 0) + idata = -idata; + if (idata > 255) + idata = 255; + if (cache[ch][i].peak < idata) + cache[ch][i].peak = idata; + } + // amplify rms value +12dB + int rmsValue = lrint((sqrt(rms/cacheMag) * 255.0)); + if (rmsValue > 255) + rmsValue = 255; + cache[ch][i].rms = rmsValue; + } + } + if (showProgress) { + progress->setValue(csize); + qApp->processEvents(); + } + writeCache(path); + if (showProgress) + delete progress; + } + +//--------------------------------------------------------- +// writeCache +//--------------------------------------------------------- + +void SndFile::writeCache(const QString& path) + { + FILE* cfile = fopen(path.toLatin1().data(), "w"); + if (cfile == 0) + return; + for (unsigned ch = 0; ch < channels(); ++ch) + fwrite(cache[ch], csize * sizeof(SampleV), 1, cfile); + fclose(cfile); + } + +//--------------------------------------------------------- +// read +// integrate "mag" samples, starting at position "pos" +// into "s" +//--------------------------------------------------------- + +void SndFile::read(SampleV* s, int mag, unsigned pos) + { + for (unsigned ch = 0; ch < channels(); ++ch) { + s[ch].peak = 0; + s[ch].rms = 0; + } + if (pos > samples()) + return; + + if (mag < cacheMag) { + float data[channels()][mag]; + float* fp[channels()]; + for (unsigned i = 0; i < channels(); ++i) + fp[i] = &data[i][0]; + sf_seek(sfUI, pos, SEEK_SET); + { + int srcChannels = channels(); + int dstChannels = sfinfo.channels; + float** dst = fp; + float buffer[mag * dstChannels]; + size_t rn = sf_readf_float(sfUI, buffer, mag); + float* src = buffer; + + if (srcChannels == dstChannels) { + for (size_t i = 0; i < rn; ++i) { + for (int ch = 0; ch < srcChannels; ++ch) + *(dst[ch]+i) = *src++; + } + } + else if ((srcChannels == 1) && (dstChannels == 2)) { + // stereo to mono + for (size_t i = 0; i < rn; ++i) + *(dst[0] + i) = src[i + i] + src[i + i + 1]; + } + else if ((srcChannels == 2) && (dstChannels == 1)) { + // mono to stereo + for (size_t i = 0; i < rn; ++i) { + float data = *src++; + *(dst[0]+i) = data; + *(dst[1]+i) = data; + } + } + } + + for (unsigned ch = 0; ch < channels(); ++ch) { + s[ch].peak = 0; + float rms = 0.0; + for (int i = 0; i < mag; i++) { + float fd = data[ch][i]; + rms += fd; + int idata = int(fd * 255.0); + if (idata < 0) + idata = -idata; + if (s[ch].peak < idata) + s[ch].peak = idata; + } + s[ch].rms = 0; // TODO rms / mag; + } + } + else { + mag /= cacheMag; + int rest = csize - (pos/cacheMag); + int end = mag; + if (rest < mag) + end = rest; + + for (unsigned ch = 0; ch < channels(); ++ch) { + int rms = 0; + int off = pos/cacheMag; + for (int offset = off; offset < off+end; offset++) { + rms += cache[ch][offset].rms; + if (s[ch].peak < cache[ch][offset].peak) + s[ch].peak = cache[ch][offset].peak; + } + s[ch].rms = rms / mag; + } + } + } + +//--------------------------------------------------------- +// openWrite +//--------------------------------------------------------- + +bool SndFile::openWrite() + { + if (openFlag) { + printf("SndFile:: alread open\n"); + return false; + } + QString p = _finfo.filePath(); + sfRT = sf_open(p.toLatin1().data(), SFM_RDWR, &sfinfo); + sfUI = 0; + if (sfRT) { + openFlag = true; + writeFlag = true; + QString cacheName = _finfo.absolutePath() + + QString("/") + _finfo.baseName() + QString(".wca"); + readCache(cacheName, true); + } + return sfRT == 0; + } + +//--------------------------------------------------------- +// close +//--------------------------------------------------------- + +void SndFile::close() + { + if (!openFlag) { + printf("SndFile:: alread closed\n"); + return; + } + sf_close(sfRT); + if (sfUI) + sf_close(sfUI); + openFlag = false; + } + +//--------------------------------------------------------- +// remove +//--------------------------------------------------------- + +void SndFile::remove() + { + if (openFlag) + close(); + QString cacheName = _finfo.absolutePath() + QString("/") + _finfo.baseName() + QString(".wca"); + // QFile::remove(_finfo.filePath()); + // QFile::remove(cacheName); + // DEBUG: + QFile::rename(_finfo.filePath(), _finfo.filePath() + ".del"); + QFile::rename(cacheName, cacheName + ".del"); + } + +//--------------------------------------------------------- +// samples +//--------------------------------------------------------- + +unsigned SndFile::samples() const + { + return sfinfo.frames; + } + +//--------------------------------------------------------- +// channels +//--------------------------------------------------------- + +unsigned SndFile::channels() const + { + return sfinfo.channels; + } + +//--------------------------------------------------------- +// samplerate +//--------------------------------------------------------- + +unsigned SndFile::samplerate() const + { + return sfinfo.samplerate; + } + +//--------------------------------------------------------- +// format +//--------------------------------------------------------- + +unsigned SndFile::format() const + { + return sfinfo.format; + } + +//--------------------------------------------------------- +// setFormat +//--------------------------------------------------------- + +void SndFile::setFormat(int fmt, int ch, int rate) + { + sfinfo.samplerate = rate; + sfinfo.channels = ch; + sfinfo.format = fmt; + sfinfo.seekable = true; + sfinfo.frames = 0; + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +size_t SndFile::read(int srcChannels, float** dst, size_t n) + { + float buffer[n * sfinfo.channels]; + size_t rn = sf_readf_float(sfRT, buffer, n); + + float* src = buffer; + int dstChannels = sfinfo.channels; + + if (srcChannels == dstChannels) { + for (size_t i = 0; i < rn; ++i) { + for (int ch = 0; ch < srcChannels; ++ch) + *(dst[ch]+i) = *src++; + } + } + else if ((srcChannels == 1) && (dstChannels == 2)) { + // stereo to mono + for (size_t i = 0; i < rn; ++i) + *(dst[0] + i) = src[i + i] + src[i + i + 1]; + } + else if ((srcChannels == 2) && (dstChannels == 1)) { + // mono to stereo + for (size_t i = 0; i < rn; ++i) { + float data = *src++; + *(dst[0]+i) = data; + *(dst[1]+i) = data; + } + } + else { + printf("SndFile:read channel mismatch %d -> %d\n", + srcChannels, dstChannels); + } + return rn; + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +size_t SndFile::write(int srcChannels, float** src, size_t n) + { + int dstChannels = sfinfo.channels; + float buffer[n * dstChannels]; + float* dst = buffer; + + if (srcChannels == dstChannels) { + for (size_t i = 0; i < n; ++i) { + for (int ch = 0; ch < dstChannels; ++ch) + *dst++ = *(src[ch]+i); + } + } + else if ((srcChannels == 1) && (dstChannels == 2)) { + // mono to stereo + for (size_t i = 0; i < n; ++i) { + float data = *(src[0]+i); + *dst++ = data; + *dst++ = data; + } + } + else if ((srcChannels == 2) && (dstChannels == 1)) { + // stereo to mono + for (size_t i = 0; i < n; ++i) + *dst++ = *(src[0]+i) + *(src[1]+i); + } + else { + printf("SndFile:write channel mismatch %d -> %d\n", + srcChannels, dstChannels); + return 0; + } + return sf_writef_float(sfRT, buffer, n) ; + } + +//--------------------------------------------------------- +// seek +//--------------------------------------------------------- + +off_t SndFile::seek(off_t frames) + { + return sf_seek(sfRT, frames, SEEK_SET); + } + +//--------------------------------------------------------- +// strerror +//--------------------------------------------------------- + +QString SndFile::strerror() const + { + char buffer[128]; + buffer[0] = 0; + sf_error_str(sfRT, buffer, 128); + return QString(buffer); + } + +//--------------------------------------------------------- +// getWave +//--------------------------------------------------------- + +SndFile* SndFile::getWave(const QString& inName, bool writeFlag) + { + QString name = song->absoluteProjectPath() + "/" + inName; + + SndFile* f = sndFiles.value(name); +// printf("SndFile::getWave: %p writeFlag %d %s %s\n", f, writeFlag, inName.toLatin1().data(), name.toLatin1().data()); + if (f == 0) { + if (!QFile::exists(name)) { + fprintf(stderr, "wave file <%s> not found\n", + name.toLatin1().data()); + return 0; + } + f = new SndFile(name); + bool error; + if (writeFlag) + error = f->openWrite(); + else + error = f->openRead(); + if (error) { + fprintf(stderr, "open wave file(%s) for %s failed: %s\n", + name.toLatin1().data(), + writeFlag ? "writing" : "reading", + f->strerror().toLatin1().data()); + delete f; + f = 0; + } + } + else { + if (writeFlag && ! f->isWritable()) { + if (f->isOpen()) + f->close(); + f->openWrite(); + } + } + return f; + } + +//--------------------------------------------------------- +// applyUndoFile +//--------------------------------------------------------- + +void SndFile::applyUndoFile(const QString& original, const QString& tmpfile, unsigned startframe, unsigned endframe) + { + // This one is called on both undo and redo of a wavfile + // For redo to be called, undo must have been called first, and we don't store both the original data and the modified data in separate + // files. Thus, each time this function is called the data in the "original"-file will be written to the tmpfile, after the data + // from the tmpfile has been applied. + // + // F.ex. if mute has been made on part of a wavfile, the unmuted data is stored in the tmpfile when + // the undo operation occurs. The unmuted data is then written back to the original file, and the mute data will be + // put in the tmpfile, and when redo is eventually called the data is switched again (causing the muted data to be written to the "original" + // file. The data is merely switched. + + //printf("Applying undofile: orig=%s tmpfile=%s startframe=%d endframe=%d\n", original.toLatin1().data(), tmpfile.toLatin1().data(), startframe, endframe); + SndFile* orig = sndFiles.value(original); + SndFile tmp = SndFile(tmpfile); + if (!orig) { + printf("Internal error: could not find original file: %s in filelist - Aborting\n", original.toLatin1().data()); + return; + } + + if (!orig->isOpen()) { + if (orig->openRead()) { + printf("Cannot open original file %s for reading - cannot undo! Aborting\n", original.toLatin1().data()); + return; + } + } + + if (!tmp.isOpen()) { + if (tmp.openRead()) { + printf("Could not open temporary file %s for writing - cannot undo! Aborting\n", tmpfile.toLatin1().data()); + return; + } + } + + audio->msgIdle(true); + tmp.setFormat(orig->format(), orig->channels(), orig->samplerate()); + + // Read data in original file to memory before applying tmpfile to original + unsigned file_channels = orig->channels(); + unsigned tmpdatalen = endframe - startframe; + float* data2beoverwritten[file_channels]; + + for (unsigned i=0; iseek(startframe); + orig->read(file_channels, data2beoverwritten, tmpdatalen); + + orig->close(); + + // Read data from temporary file to memory + float* tmpfiledata[file_channels]; + for (unsigned i=0; iopenWrite()) { + printf("Cannot open orig for write - aborting.\n"); + return; + } + + orig->seek(startframe); + orig->write(file_channels, tmpfiledata, tmpdatalen); + + // Delete dataholder for temporary file + for (unsigned i=0; imsgIdle(false); + return; + } + tmp.seek(0); + tmp.write(file_channels, data2beoverwritten, tmpdatalen); + tmp.close(); + + // Delete dataholder for replaced original file + for (unsigned i=0; iclose(); + orig->openRead(); + orig->update(); + audio->msgIdle(false); + } + +//--------------------------------------------------------- +// importAudio +//--------------------------------------------------------- + +void MusE::importWave() + { + Track* track = arranger->curTrack(); + if (track == 0 || track->type() != Track::WAVE) { + QMessageBox::critical(this, QString("MusE"), + tr("to import a audio file you have first to select" + "a wave track")); + return; + } + QStringList pattern; + const char** p = audioFilePattern; + while (*p) + pattern << *p++; + QString fn = getOpenFileName(lastWavePath, pattern, this, + tr("Import Wave File")); + if (!fn.isEmpty()) { + QFileInfo qf(fn); + lastWavePath = qf.path(); + importWave(fn); + } + } + +//--------------------------------------------------------- +// importWave +//--------------------------------------------------------- + +bool MusE::importWave(const QString& name) + { + return importWaveToTrack(name, (WaveTrack*)(arranger->curTrack()), + song->cPos()); + } + +//--------------------------------------------------------- +// importWaveToTrack +//--------------------------------------------------------- + +bool MusE::importWaveToTrack(const QString& wave, Track* track, const Pos& pos) + { + if (!copyWaveFileToProject(wave)) + return true; + QFileInfo srcInfo(wave); + SndFile* f = SndFile::getWave(srcInfo.fileName(), false); + + if (f == 0) { + printf("import audio file failed\n"); + return true; + } + int samples = f->samples(); + track->setChannels(f->channels()); + + Part* part = new Part((WaveTrack *)track); + part->ref(); + part->setType(AL::FRAMES); + part->setTick(pos.tick()); + part->setLenFrame(samples); + + Event event(Wave); + SndFileR sf(f); + event.setSndFile(sf); + event.setSpos(0); + event.setLenFrame(samples); + part->addEvent(event); + + part->setName(srcInfo.baseName()); + song->cmdAddPart(part); + unsigned endTick = part->tick() + part->lenTick(); + if (song->len() < endTick) + song->setLen(endTick); + return false; + } + +//--------------------------------------------------------- +// cmdChangeWave +// called from GUI context +//--------------------------------------------------------- + +void Song::cmdChangeWave(QString original, QString tmpfile, unsigned sx, unsigned ex) + { + char* original_charstr = new char[original.length() + 1]; + char* tmpfile_charstr = new char[tmpfile.length() + 1]; + strcpy(original_charstr, original.toLatin1().data()); + strcpy(tmpfile_charstr, tmpfile.toLatin1().data()); + song->undoOp(UndoOp::ModifyClip, original_charstr, tmpfile_charstr, sx, ex); + } + +//--------------------------------------------------------- +// SndFileR +//--------------------------------------------------------- + +SndFileR::SndFileR(SndFile* _sf) + { + sf = _sf; + if (sf) + (sf->refCount)++; + } + +SndFileR::SndFileR(const SndFileR& ed) + { + sf = ed.sf; + if (sf) + (sf->refCount)++; + } + +//--------------------------------------------------------- +// operator= +//--------------------------------------------------------- + +SndFileR& SndFileR::operator=(const SndFileR& ed) + { + if (sf == ed.sf) + return *this; + if (sf && --(sf->refCount) == 0) + delete sf; + sf = ed.sf; + if (sf) + (sf->refCount)++; + return *this; + } + +//--------------------------------------------------------- +// ~SndFileR +//--------------------------------------------------------- + +SndFileR::~SndFileR() + { + if (sf && --(sf->refCount) <= 0) + delete sf; + } + +//--------------------------------------------------------- +// createRecFile +// create soundfile for recording +//--------------------------------------------------------- + +SndFile* SndFile::createRecFile(int channels) + { + QString fileName("%1/rec%2.wav"); + QFileInfo fi; + do { + fi.setFile(fileName.arg(song->absoluteProjectPath()).arg(recFileNumber)); + ++recFileNumber; + } while (fi.exists()); + SndFile* recFile = new SndFile(fi.absoluteFilePath()); + recFile->setFormat(SF_FORMAT_WAV | SF_FORMAT_FLOAT, channels, + AL::sampleRate); + createdFiles.append(recFile); + return recFile; + } + +//--------------------------------------------------------- +// cleanupRecFiles +// remove all record files which are not referenced +// any more +// this is called on exit +//--------------------------------------------------------- + +void SndFile::cleanupRecFiles(bool removeAll) + { + QList* fl; + QList removeFiles; + + if (removeAll) + fl = &createdFiles; + else { + foreach (SndFile* s, createdFiles) { + bool remove = true; + WaveTrackList* wt = song->waves(); + for (iWaveTrack iwt = wt->begin(); iwt != wt->end(); ++iwt) { + WaveTrack* t = *iwt; + PartList* parts = t->parts(); + for (iPart ip = parts->begin(); ip != parts->end(); ++ip) { + Part* part = ip->second; + EventList* events = part->events(); + for (iEvent ie = events->begin(); ie != events->end(); ++ie) { + if (ie->second.sndFile() == s) { + remove = false; + break; + } + } + } + if (t->recFile() && t->recFile()->samples() == 0) { + t->recFile()->remove(); + } + } + if (remove) + removeFiles.append(s); + } + fl = &removeFiles; + } + foreach (SndFile* sf, *fl) { + printf("cleanup rec file <%s>\n", sf->finfo()->absoluteFilePath().toLatin1().data()); + sf->remove(); + } + createdFiles.clear(); + } + +//--------------------------------------------------------- +// updateRecFiles +// this is called on "save" +// remove all saved wave files from list of potentially +// to delete files +//--------------------------------------------------------- + +void SndFile::updateRecFiles() + { + QList removeFiles; + + foreach (SndFile* s, createdFiles) { + bool remove = true; + WaveTrackList* wt = song->waves(); + for (iWaveTrack iwt = wt->begin(); iwt != wt->end(); ++iwt) { + WaveTrack* t = *iwt; + PartList* parts = t->parts(); + for (iPart ip = parts->begin(); ip != parts->end(); ++ip) { + Part* part = ip->second; + EventList* events = part->events(); + for (iEvent ie = events->begin(); ie != events->end(); ++ie) { + if (ie->second.sndFile() == s) { + remove = false; + break; + } + } + if (!remove) + break; + } + if (t->recFile() && t->recFile()->samples() == 0) { + t->recFile()->remove(); + } + if (!remove) + break; + } + if (remove) + removeFiles.append(s); + } + createdFiles = removeFiles; + } + diff --git a/attic/muse_qt4_evolution/muse/wave.h b/attic/muse_qt4_evolution/muse/wave.h new file mode 100644 index 00000000..42054f87 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/wave.h @@ -0,0 +1,162 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __WAVE_H__ +#define __WAVE_H__ + +#include + +//--------------------------------------------------------- +// SampleV +// peak file value +//--------------------------------------------------------- + +struct SampleV { + unsigned char peak; + unsigned char rms; + }; + +class SndFile; + +class SndFileList : public QHash { + public: + SndFile* search(const QString& name) { return (*this)[name]; } + }; + +//--------------------------------------------------------- +// SndFile +//--------------------------------------------------------- + +class SndFile { + static QHash sndFiles; + static QList createdFiles; + static int recFileNumber; + + QFileInfo _finfo; + SNDFILE* sfRT; // used by rt process (prefetch) + SNDFILE* sfUI; // used by ui process + SF_INFO sfinfo; + SampleV** cache; + int csize; // frames in cache + + void readCache(const QString& path, bool progress); + void writeCache(const QString& path); + + bool openFlag; + bool writeFlag; + + protected: + int refCount; + + public: + SndFile(const QString& name); + ~SndFile(); + + static void applyUndoFile(const QString& original, const QString& tmpfile, unsigned sx, unsigned ex); + + bool openRead(); // return true on error + bool openWrite(); // return true on error + void close(); + void remove(); + + bool isOpen() const { return openFlag; } + bool isWritable() const { return writeFlag; } + void update(); + + QFileInfo* finfo() { return &_finfo; } + + unsigned samples() const; + unsigned channels() const; + unsigned samplerate() const; + unsigned format() const; + int sampleBits() const; + void setFormat(int fmt, int ch, int rate); + + size_t read(int channel, float**, size_t); + size_t write(int channel, float**, size_t); + + off_t seek(off_t frames); + void read(SampleV* s, int mag, unsigned pos); + QString strerror() const; + + static SndFile* createRecFile(int); + static void cleanupRecFiles(bool); + static void updateRecFiles(); + static SndFile* search(const QString& name); + static SndFile* getWave(const QString& inName, bool writeFlag); + + friend class SndFileR; + }; + +//--------------------------------------------------------- +// SndFileR +// SndFile with reference count +//--------------------------------------------------------- + +class SndFileR { + SndFile* sf; + + public: + SndFileR() { sf = 0; } + SndFileR(SndFile* _sf); + SndFileR(const SndFileR& ed); + SndFileR& operator=(const SndFileR& ed); + bool operator==(const SndFileR& c) const { return sf == c.sf; } + bool operator==(SndFile* c) const { return sf == c; } + ~SndFileR(); + int getRefCount() const { return sf->refCount; } + bool isNull() const { return sf == 0; } + + bool openRead() { return sf->openRead(); } + bool openWrite() { return sf->openWrite(); } + void close() { sf->close(); } + void remove() { sf->remove(); } + + bool isOpen() const { return sf->isOpen(); } + bool isWritable() const { return sf->isWritable(); } + void update() { sf->update(); } + QFileInfo* finfo() { return sf->finfo(); } + const QFileInfo* finfo() const { return sf->finfo(); } + + unsigned samples() const { return sf->samples(); } + unsigned channels() const { return sf->channels(); } + unsigned samplerate() const { return sf->samplerate(); } + unsigned format() const { return sf->format(); } + int sampleBits() const { return sf->sampleBits(); } + void setFormat(int fmt, int ch, int rate) { + sf->setFormat(fmt, ch, rate); + } + size_t read(int channel, float** f, size_t n) { + return sf->read(channel, f, n); + } + size_t write(int channel, float** f, size_t n) { + return sf->write(channel, f, n); + } + off_t seek(off_t frames) { + return sf->seek(frames); + } + void read(SampleV* s, int mag, unsigned pos) { + sf->read(s, mag, pos); + } + QString strerror() const { return sf->strerror(); } + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/waveedit/CMakeLists.txt b/attic/muse_qt4_evolution/muse/waveedit/CMakeLists.txt new file mode 100644 index 00000000..69ff19e3 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/waveedit/CMakeLists.txt @@ -0,0 +1,34 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +QT4_WRAP_CPP ( waveedit_mocs + waveedit.h + waveview.h + ) + +add_library ( waveedit STATIC + ${waveedit_mocs} + waveedit.cpp + waveview.cpp + ) + +set_target_properties( waveedit + PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h" + ) diff --git a/attic/muse_qt4_evolution/muse/waveedit/waveedit.cpp b/attic/muse_qt4_evolution/muse/waveedit/waveedit.cpp new file mode 100644 index 00000000..3bfbbe40 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/waveedit/waveedit.cpp @@ -0,0 +1,289 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2000-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "waveedit.h" +#include "waveview.h" +#include "song.h" +#include "awl/poslabel.h" +#include "esettings.h" +#include "al/tempo.h" +#include "icons.h" +#include "shortcuts.h" +#include "wave.h" +#include "part.h" +#include "muse.h" + +int WaveEdit::initWidth = WaveEdit::INIT_WIDTH; +int WaveEdit::initHeight = WaveEdit::INIT_HEIGHT; + +//--------------------------------------------------------- +// WaveEdit +//--------------------------------------------------------- + +WaveEdit::WaveEdit(PartList* pl, bool init) + : Editor() + { + _parts = pl; + selPart = 0; + + //---------Pulldown Menu---------------------------- + QMenuBar* mb = menuBar(); + QAction* a; + + QMenu* menuFile = mb->addMenu(tr("&File")); + QMenu* menuEdit = mb->addMenu(tr("&Edit")); + menuFunctions = mb->addMenu(tr("Func&tions")); + + menuGain = menuFunctions->addMenu(tr("&Gain")); + a = menuGain->addAction(tr("200%")); + a->setData("gain200"); + a = menuGain->addAction(tr("150%")); + a->setData("gain150"); + a = menuGain->addAction(tr("75%")); + a->setData("gain75"); + a = menuGain->addAction(tr("50%")); + a->setData("gain50"); + a = menuGain->addAction(tr("25%")); + a->setData("gain25"); + a = menuGain->addAction(tr("Other")); + a->setData("gain_free"); + a = menuFunctions->addSeparator(); + + a = menuEdit->addAction(tr("Edit in E&xternal Editor")); + a->setData("exit_external"); + a = menuFunctions->addAction(tr("Mute Selection")); + a->setData("mute"); + a = menuFunctions->addAction(tr("Normalize Selection")); + a->setData("normalize"); + a = menuFunctions->addAction(tr("Fade In Selection")); + a->setData("fade_in"); + a = menuFunctions->addAction(tr("Fade Out Selection")); + a->setData("fade_out"); + a = menuFunctions->addAction(tr("Reverse Selection")); + a->setData("reverse"); + + select = menuEdit->addMenu(QIcon(*selectIcon), tr("Select")); + select->addAction(getAction("sel_all", this)); + select->addAction(getAction("sel_none", this)); + + connect(menuFunctions, SIGNAL(triggered(QAction*)), SLOT(cmd(QAction*))); + connect(menuFile, SIGNAL(triggered(QAction*)), SLOT(cmd(QAction*))); + connect(select, SIGNAL(triggered(QAction*)), SLOT(cmd(QAction*))); + connect(menuGain, SIGNAL(triggered(QAction*)), SLOT(cmd(QAction*))); + connect(menuEdit, SIGNAL(triggered(QAction*)), SLOT(cmd(QAction*))); + + //---------ToolBar---------------------------------- + tools = addToolBar(tr("waveedit-tools")); + tools->addAction(undoAction); + tools->addAction(redoAction); + + const int waveeditTools = PointerTool | PencilTool + | RubberTool | DrawTool; + EditToolBar* tools2 = new EditToolBar(this, waveeditTools); + addToolBar(tools2); + + //-------------------------------------------------- + // Transport Bar + QToolBar* transport = addToolBar(tr("Transport")); + muse->setupTransportToolbar(transport); + + //-------------------------------------------------- + // ToolBar: Solo Cursor1 Cursor2 + + addToolBarBreak(); + tb1 = addToolBar(tr("pianoroll-tools")); + solo = tb1->addAction(tr("Solo")); + solo->setCheckable(true); + connect(solo, SIGNAL(toggled(bool)), SLOT(soloChanged(bool))); + + tb1->addWidget(new QLabel(tr("Cursor"))); + pos1 = new PosLabel; + pos2 = new PosLabel; + pos2->setSmpte(true); + tb1->addWidget(pos1); + tb1->addWidget(pos2); + + //--------------------------------------------------- + // Rest + //--------------------------------------------------- + +// if (!parts()->empty()) { // Roughly match total size of part +// Part* firstPart = parts()->begin()->second; +// xscale = 0 - firstPart->lenFrame()/_widthInit; +// } + + view = new WaveView(this); + view->setRaster(0); + view->setFollow(INIT_FOLLOW); + + connect(muse, SIGNAL(configChanged()), SLOT(configChanged())); + connect(song, SIGNAL(posChanged(int,const AL::Pos&,bool)), view, SLOT(setLocatorPos(int,const AL::Pos&,bool))); + view->setLocatorPos(0, song->cpos(), true); + view->setLocatorPos(1, song->lpos(), false); + view->setLocatorPos(2, song->rpos(), false); +// connect(view, SIGNAL(cursorPos(unsigned)), SIGNAL(setTime(unsigned))); + connect(view, SIGNAL(posChanged(int,const AL::Pos&)), song, SLOT(setPos(int,const AL::Pos&))); + + setCentralWidget(view); + view->setCornerWidget(new QSizeGrip(view)); + setWindowTitle(view->getCaption()); + + Pos p1(0, AL::FRAMES), p2(0, AL::FRAMES); + view->range(p1, p2); + p2 += AL::sigmap.ticksMeasure(p2.tick()); // show one more measure + view->setTimeRange(p1, p2); + + connect(view, SIGNAL(toolChanged(int)), tools2, SLOT(set(int))); + connect(tools2, SIGNAL(toolChanged(int)), view, SLOT(setTool(int))); + +// view->selectFirst(); + configChanged(); + if (init) + ; // initFromPart(); + else { + resize(initWidth, initHeight); + } + } + +//--------------------------------------------------------- +// configChanged +//--------------------------------------------------------- + +void WaveEdit::configChanged() + { +// view->setBg(config.waveEditBackgroundColor); + } + +//--------------------------------------------------------- +// setTime +//--------------------------------------------------------- + +void WaveEdit::setTime(unsigned samplepos) + { +// printf("setTime %d %x\n", samplepos, samplepos); + unsigned tick = AL::tempomap.frame2tick(samplepos); + pos1->setValue(tick, true); + pos2->setValue(tick, true); +// time->setPos(3, tick, false); + } + +//--------------------------------------------------------- +// ~WaveEdit +//--------------------------------------------------------- + +WaveEdit::~WaveEdit() + { +// undoRedo->removeFrom(tools); + } + +//--------------------------------------------------------- +// cmd +//--------------------------------------------------------- + +void WaveEdit::cmd(QAction* a) + { + view->cmd(a->data().toString()); + } + +//--------------------------------------------------------- +// soloChanged +// signal from "song" +//--------------------------------------------------------- + +void WaveEdit::soloChanged(SNode*/* s*/) + { + Part* part = parts()->begin()->second; + solo->setChecked(part->track()->solo()); + } + +//--------------------------------------------------------- +// soloChanged +// signal from solo button +//--------------------------------------------------------- + +void WaveEdit::soloChanged(bool flag) + { + Part* part = parts()->begin()->second; + song->setSolo(part->track(), flag); + } + +//--------------------------------------------------------- +// viewKeyPressEvent +//--------------------------------------------------------- + +void WaveEdit::keyPressEvent(QKeyEvent* event) + { + int key = event->key(); + if (key == Qt::Key_Escape) { + close(); + return; + } + else { + event->ignore(); + } + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void WaveEdit::read(QDomNode node) + { + for (node = node.firstChild(); !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + QString tag(e.tagName()); + if (tag == "CtrlEdit") { + int id = e.attribute("id","0").toInt(); + int h = e.attribute("h","50").toInt(); + view->addController(id, h); + } + else + AL::readProperties(this, node); + } + view->layout1(); + } + + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void WaveEdit::write(Xml& xml) const + { + for (ciPart p = _parts->begin(); p != _parts->end(); ++p) { + Part* part = p->second; + Track* track = part->track(); + int trkIdx = song->tracks()->indexOf(track); + int partIdx = track->parts()->index(part); + xml.stag("part"); + xml.put(QString("%1:%2").arg(trkIdx).arg(partIdx)); + xml.etag("part"); + } + xml.stag(metaObject()->className()); + xml.writeProperties(this); + const CtrlEditList* el = view->getCtrlEditors(); + for (ciCtrlEdit i = el->begin(); i != el->end(); ++i) { + xml.tagE(QString("CtrlEdit h=\"%1\" id=\"%2\"") + .arg((*i)->height()).arg((*i)->ctrl()->id())); + } + xml.etag(metaObject()->className()); + } + + diff --git a/attic/muse_qt4_evolution/muse/waveedit/waveedit.h b/attic/muse_qt4_evolution/muse/waveedit/waveedit.h new file mode 100644 index 00000000..f861587d --- /dev/null +++ b/attic/muse_qt4_evolution/muse/waveedit/waveedit.h @@ -0,0 +1,88 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __WAVE_EDIT_H__ +#define __WAVE_EDIT_H__ + +#include "midiedit/midieditor.h" + +class PartList; +class WaveView; +class ScrollScale; +class SNode; + +namespace Awl { + class PosLabel; + }; +using Awl::PosLabel; + + +//--------------------------------------------------------- +// WaveEdit +//--------------------------------------------------------- + +class WaveEdit : public Editor { + Q_OBJECT + + PartList* _parts; + Part* selPart; + + WaveView* view; + QToolBar* tools; + QToolBar* tb1; + QAction* solo; + PosLabel* pos1; + PosLabel* pos2; + + static int _widthInit, _heightInit; + + virtual void keyPressEvent(QKeyEvent*); + + QMenu* menuFunctions, *select, *menuGain; + + private slots: + void cmd(QAction*); + void setTime(unsigned t); + void soloChanged(SNode* s); + void soloChanged(bool flag); + + public slots: + void configChanged(); + + public: + WaveEdit(PartList*, bool); + ~WaveEdit(); + PartList* parts() const { return _parts; } + void read(QDomNode node); + void write(Xml& xml) const; + + enum { CMD_MUTE=0, CMD_NORMALIZE, CMD_FADE_IN, CMD_FADE_OUT, CMD_REVERSE, + CMD_GAIN_FREE, CMD_GAIN_200, CMD_GAIN_150, CMD_GAIN_75, CMD_GAIN_50, CMD_GAIN_25, + CMD_EDIT_EXTERNAL, + CMD_SELECT_ALL, CMD_SELECT_NONE }; + static int initWidth, initHeight; + static const int INIT_WIDTH = 650; + static const int INIT_HEIGHT = 450; + }; + +static const bool INIT_FOLLOW = false; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/waveedit/waveview.cpp b/attic/muse_qt4_evolution/muse/waveedit/waveview.cpp new file mode 100644 index 00000000..eb5a744d --- /dev/null +++ b/attic/muse_qt4_evolution/muse/waveedit/waveview.cpp @@ -0,0 +1,1124 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include + +#include "waveview.h" +#include "song.h" +#include "midiedit/midieditor.h" +#include "al/tempo.h" +#include "event.h" +#include "globals.h" +#include "waveedit.h" +#include "audio.h" +#include "gconfig.h" +#include "part.h" +#include "widgets/simplebutton.h" +#include "utils.h" + +static const int partLabelHeight = 13; + +//--------------------------------------------------------- +// WaveView +//--------------------------------------------------------- + +WaveView::WaveView(WaveEdit* pr) + : TimeCanvas(TIME_CANVAS_WAVEEDIT) + { + setMarkerList(song->marker()); + curSplitter = -1; + dragSplitter = false; + selectionStart = 0; + selectionStop = 0; + lastGainvalue = 100; + editor = pr; + + curPart = editor->parts()->begin()->second; + setMouseTracking(true); + + songChanged(SC_TRACK_INSERTED); + } + +//--------------------------------------------------------- +// drawWavePart +// y0 - start of track +// th - track height +// from - x pixel coordinate start drawing +// to - x end drawing +// +// redraw area is QRect(from, y0, to-from, th) +//--------------------------------------------------------- + +void WaveView::drawWavePart(QPainter& p, Part* wp, int y0, int th, int from, int to) + { + int h = th/2; + int y = y0 + 1 + h; + int cc = th % 2 ? 0 : 1; + + const Pos pos(pix2pos(from)); + EventList* el = wp->events(); + for (iEvent e = el->begin(); e != el->end(); ++e) { + Event event = e->second; + SndFileR f = event.sndFile(); + if (f.isNull()) + continue; + unsigned channels = f.channels(); + if (channels == 0) { + printf("drawWavePart: channels==0! %s\n", f.finfo()->fileName().toLatin1().data()); + continue; + } + + int x1 = pos2pix(event.pos() + *wp); + int x2 = pos2pix(event.end() + *wp); + int w = x2 - x1; + if (w == 0) + continue; + + int samples = event.lenFrame(); + int xScale = (samples + w/2)/w; + int frame = pos.frame() - wp->frame() + - event.pos().frame() + event.spos(); + + if (h < 20) { + // + // combine multi channels into one waveform + // + for (int i = from; i < to; i++) { + SampleV sa[channels]; + f.read(sa, xScale, frame); + frame += xScale; + int peak = 0; + int rms = 0; + for (unsigned k = 0; k < channels; ++k) { + if (sa[k].peak > peak) + peak = sa[k].peak; + rms += sa[k].rms; + } + rms /= channels; + peak = (peak * (th-2)) >> 9; + rms = (rms * (th-2)) >> 9; + p.setPen(QColor(Qt::darkGray)); + p.drawLine(i, y - peak - cc, i, y + peak); + p.setPen(QColor(Qt::black)); + p.drawLine(i, y - rms - cc, i, y + rms); + } + } + else { + // + // multi channel display + // + h = th / (channels * 2); + int cc = th % (channels * 2) ? 0 : 1; + for (int i = from; i < to; i++) { + y = y0 + 1 + h; + SampleV sa[channels]; + f.read(sa, xScale, frame); + frame += xScale; + for (unsigned k = 0; k < channels; ++k) { + int peak = (sa[k].peak * (h - 1)) >> 8; + int rms = (sa[k].rms * (h - 1)) >> 8; + p.setPen(QColor(Qt::darkGray)); + p.drawLine(i, y - peak - cc, i, y + peak); + p.setPen(QColor(Qt::black)); + p.drawLine(i, y - rms - cc, i, y + rms); + y += 2 * h; + } + } + } + } + } + +//--------------------------------------------------------- +// draw +//--------------------------------------------------------- + +void WaveView::paint(QPainter& p, QRect r) + { + QFont f = font(); + f.setPointSize(8); + p.setFont(f); + + int from = r.x(); + int to = from + r.width(); + + PartList* pl = editor->parts(); + for (iPart ip = pl->begin(); ip != pl->end(); ++ip) { + Part* part = ip->second; + int x1 = pos2pix(*part); + int x2 = pos2pix(part->end()); + int len = x2 - x1; + + if (x2 <= from) + continue; + if (x1 > to) + break; + + int h = rCanvasA.height(); + int xx1 = x1; + if (xx1 < from) + xx1 = from; + int xx2 = x2; + if (xx2 > to) + xx2 = to; + drawWavePart(p, part, 0, h, xx1, xx2); + int yy = h - partLabelHeight; + p.drawText(x1 + 3, yy, len - 6, + partLabelHeight-1, Qt::AlignVCenter | Qt::AlignLeft, + part->name()); + } + } + +//--------------------------------------------------------- +// getCaption +//--------------------------------------------------------- + +QString WaveView::getCaption() const + { + QString caption("MusE: WaveEditor"); + if (curPart) + return caption + QString(": ") + curPart->name(); + return caption; + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void WaveView::songChanged(int flags) + { + if (flags & ~SC_SELECTION) { + startFrame = MAXINT; + endFrame = 0; + for (iPart p = editor->parts()->begin(); p != editor->parts()->end(); ++p) { + Part* part = p->second; + int sframe = part->frame(); + int eframe = sframe + part->lenFrame(); + if (sframe < startFrame) + startFrame = sframe; + if (eframe > endFrame) + endFrame = eframe; + } + } +// if (flags & SC_CLIP_MODIFIED) { +// update(); // Boring, but the only thing possible to do +// } + setPart(*curPart, curPart->end()); + widget()->update(); + } + +//--------------------------------------------------------- +// mousePress +//--------------------------------------------------------- + +void WaveView::mousePress(QMouseEvent* me) + { + QPoint pos(me->pos()); + + if (rCanvasA.contains(pos)) { +// mousePressCanvasA(me); + return; + } + if (curSplitter != -1) { + dragSplitter = true; + splitterY = pos.y(); + return; + } + + if (rCanvasB.contains(pos)) { + for (iCtrlEdit i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i) { + CtrlEdit* c = *i; + QRect r(rCanvasB.x(), rCanvasB.y() + c->y + splitWidth, + rCanvasB.width(), c->cheight()); + if (r.contains(pos)) { + c->mousePress(pos - r.topLeft(), me); + break; + } + } + } + } + +//--------------------------------------------------------- +// mouseRelease +//--------------------------------------------------------- + +void WaveView::mouseRelease(QMouseEvent* me) + { + if (dragSplitter) { + dragSplitter = false; + return; + } + QPoint pos(me->pos()); + if (rCanvasA.contains(pos)) { + // mouseReleaseCanvasA(me); + return; + } + if (rCanvasB.contains(pos)) { + for (iCtrlEdit i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i) { + CtrlEdit* c = *i; + QRect r(rCanvasB.x(), rCanvasB.y() + c->y + splitWidth, + rCanvasB.width(), c->cheight()); + if (r.contains(pos)) { + c->mouseRelease(); + break; + } + } + } + } + +//--------------------------------------------------------- +// mouseMove +//--------------------------------------------------------- + +void WaveView::mouseMove(QPoint pos) + { + if (dragSplitter) { + int deltaY = pos.y() - splitterY; + + iCtrlEdit i = ctrlEditList.begin(); + int y = 0; + if (curSplitter > 0) { + int k = 0; + CtrlEdit* c = 0; + for (; i != ctrlEditList.end(); ++i, ++k) { + c = *i; + y += c->height(); + if ((k+1) == curSplitter) + break; + } + if (i == ctrlEditList.end()) { + printf("unexpected edit list end, curSplitter %d\n", curSplitter); + return; + } + if (c->height() + deltaY < splitWidth) + deltaY = splitWidth - c->height(); + ++i; + int rest = 0; + for (iCtrlEdit ii = i; ii != ctrlEditList.end(); ++ii) + rest += (*ii)->cheight(); + if (rest < deltaY) + deltaY = rest; + c->setHeight(c->height() + deltaY); + layoutPanelB(c); + y += deltaY; + } + // + // layout rest, add deltaY vertical + // + int rest = 0; + for (iCtrlEdit ii = i; ii != ctrlEditList.end(); ++ii) { + CtrlEdit* c = *ii; + rest += c->cheight(); + } + if (rest < deltaY) + deltaY = rest; + rest = deltaY; + for (; i != ctrlEditList.end(); ++i) { + CtrlEdit* c = *i; + int d = c->cheight(); + if (d > deltaY) + d = deltaY; + c->setHeight(c->height() - d); + c->y = y; + layoutPanelB(c); + y += c->height(); + deltaY -= d; + if (deltaY == 0) + break; + } + if (i != ctrlEditList.end()) + ++i; + for (; i != ctrlEditList.end(); ++i) { + CtrlEdit* c = *i; + c->y = y; + y += c->height(); + } + if (curSplitter == 0) + resizeController(ctrlHeight - rest); + else + widget()->update(rPanelB | rCanvasB); + splitterY = pos.y(); + updatePartControllerList(); + return; + } + if (rCanvasA.contains(pos)) { + // mouseMoveCanvasA(pos - rCanvasA.topLeft()); + return; + } + if (button == 0) { + if (rPanelB.contains(pos) || rCanvasB.contains(pos)) { + int y = pos.y() - rPanelB.y(); + int k = 0; + for (iCtrlEdit i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i, ++k) { + CtrlEdit* c = *i; + if (y >= c->y && y < (c->y + splitWidth)) { + curSplitter = k; + setCursor(); + return; + } + int ypos = y - c->y - splitWidth; + if (ypos >= 0) + emit yChanged(c->pixel2val(ypos)); + } + } + if (curSplitter != -1) { + curSplitter = -1; + setCursor(); + } + return; + } + if (rCanvasB.contains(pos)) { + for (iCtrlEdit i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i) { + CtrlEdit* c = *i; + QRect r(rCanvasB.x(), rCanvasB.y() + c->y + splitWidth, + rCanvasB.width(), c->cheight()); + if (r.contains(pos)) { + c->mouseMove(pos - r.topLeft()); + break; + } + } + } + + } + +//--------------------------------------------------------- +// cmd +//--------------------------------------------------------- + +void WaveView::cmd(const QString&) + { +#if 0 + int modifyoperation = -1; + double paramA = 0.0; + + switch(n) { + case WaveEdit::CMD_SELECT_ALL: + if (!editor->parts()->empty()) { + iPart iBeg = editor->parts()->begin(); + iPart iEnd = editor->parts()->end(); + iEnd--; + Part* beg = iBeg->second; + Part* end = iEnd->second; + selectionStart = beg->frame(); + selectionStop = end->frame() + end->lenFrame(); + update(); + } + break; + + case WaveEdit::CMD_EDIT_EXTERNAL: + modifyoperation = EDIT_EXTERNAL; + break; + + case WaveEdit::CMD_SELECT_NONE: + selectionStart = selectionStop = 0; + update(); + break; + + case WaveEdit::CMD_MUTE: + modifyoperation = MUTE; + break; + + case WaveEdit::CMD_NORMALIZE: + modifyoperation = NORMALIZE; + break; + + case WaveEdit::CMD_FADE_IN: + modifyoperation = FADE_IN; + break; + + case WaveEdit::CMD_FADE_OUT: + modifyoperation = FADE_OUT; + break; + + case WaveEdit::CMD_REVERSE: + modifyoperation = REVERSE; + break; + + case WaveEdit::CMD_GAIN_FREE: { + /* + EditGain* editGain = new EditGain(this, lastGainvalue); + if (editGain->exec() == QDialog::Accepted) { + lastGainvalue = editGain->getGain(); + modifyoperation = GAIN; + paramA = (double)lastGainvalue / 100.0; + } + delete editGain; + */ + printf("Free gain - todo!\n"); + } + break; + + case WaveEdit::CMD_GAIN_200: + modifyoperation = GAIN; + paramA = 2.0; + break; + + case WaveEdit::CMD_GAIN_150: + modifyoperation = GAIN; + paramA = 1.5; + break; + + case WaveEdit::CMD_GAIN_75: + modifyoperation = GAIN; + paramA = 0.75; + break; + + case WaveEdit::CMD_GAIN_50: + modifyoperation = GAIN; + paramA = 0.5; + break; + + case WaveEdit::CMD_GAIN_25: + modifyoperation = GAIN; + paramA = 0.25; + break; + + default: + break; + } + + if (modifyoperation != -1) { + if (selectionStart == selectionStop) { + printf("No selection. Ignoring\n"); //@!TODO: Disable menu options when no selection + return; + } + modifySelection(modifyoperation, selectionStart, selectionStop, paramA); + } +#endif + } + +//--------------------------------------------------------- +// getSelection +//--------------------------------------------------------- + +WaveSelectionList WaveView::getSelection(unsigned /*startpos*/, unsigned /*stoppos*/) + { + WaveSelectionList selection; +#if 0 + for (iPart ip = editor->parts()->begin(); ip != editor->parts()->end(); ++ip) { + Part* wp = ip->second; + unsigned part_offset = wp->frame(); + EventList* el = wp->events(); + + for (iEvent e = el->begin(); e != el->end(); ++e) { + Event event = e->second; + if (event.empty()) + continue; + SndFileR file = event.sndFile(); + if (file.isNull()) + continue; + + unsigned event_offset = event.frame() + part_offset; + unsigned event_startpos = event.spos(); + unsigned event_length = event.lenFrame() + event.spos(); + unsigned event_end = event_offset + event_length; + //printf("startpos=%d stoppos=%d part_offset=%d event_offset=%d event_startpos=%d event_length=%d event_end=%d\n", startpos, stoppos, part_offset, event_offset, event_startpos, event_length, event_end); + + if (!(event_end <= startpos || event_offset >= stoppos)) { + int tmp_sx = startpos - event_offset + event_startpos; + int tmp_ex = stoppos - event_offset + event_startpos; + unsigned sx; + unsigned ex; + + tmp_sx < (int)event_startpos ? sx = event_startpos : sx = tmp_sx; + tmp_ex > (int)event_length ? ex = event_length : ex = tmp_ex; + + //printf("Event data affected: %d->%d filename:%s\n", sx, ex, file.name().toLatin1().data()); + WaveEventSelection s; + s.file = file; + s.startframe = sx; + s.endframe = ex; + selection.push_back(s); + } + } + } +#endif + return selection; + } + +//--------------------------------------------------------- +// modifySelection +//--------------------------------------------------------- + +void WaveView::modifySelection(int /*operation*/, unsigned /*startpos*/, unsigned /*stoppos*/, double /*paramA*/) + { +#if 0 + song->startUndo(); + + WaveSelectionList selection = getSelection(startpos, stoppos); + for (iWaveSelection i = selection.begin(); i != selection.end(); i++) { + WaveEventSelection w = *i; + SndFileR& file = w.file; + unsigned sx = w.startframe; + unsigned ex = w.endframe; + unsigned file_channels = file.channels(); + + QString tmpWavFile = QString::null; + if (!getUniqueTmpfileName(tmpWavFile)) { + break; + } + + audio->msgIdle(true); // Not good with playback during operations + SndFile tmpFile(tmpWavFile); + tmpFile.setFormat(file.format(), file_channels, file.samplerate()); + if (tmpFile.openWrite()) { + audio->msgIdle(false); + printf("Could not open temporary file...\n"); + break; + } + + // + // Write out data that will be changed to temp file + // + unsigned tmpdatalen = ex - sx; + off_t tmpdataoffset = sx; + float* tmpdata[file_channels]; + + for (unsigned i=0; icmdChangeWave(file.dirPath() + "/" + file.name(), tmpWavFile, sx, ex); + audio->msgIdle(false); // Not good with playback during operations + } + song->endUndo(SC_CLIP_MODIFIED); + update(); +#endif + } + +//--------------------------------------------------------- +// muteSelection +//--------------------------------------------------------- + +void WaveView::muteSelection(unsigned /*channels*/, float** /*data*/, unsigned /*length*/) + { +#if 0 + // Set everything to 0! + for (unsigned i=0; i loudest) + loudest = data[i][j]; + } + } + + double scale = 0.99 / (double)loudest; + + for (unsigned i=0; iabsolutePath(); + dir.remove(exttmpFileName); + dir.remove(exttmpFile.finfo()->baseName() + ".wca"); + } + } + +//--------------------------------------------------------- +// getUniqueTmpfileName +//--------------------------------------------------------- + +bool WaveView::getUniqueTmpfileName(QString& newFilename) + { + // Check if tmp-directory exists under project path + QString tmpWavDir = song->absoluteProjectPath() + "/tmp_musewav"; //!@TODO: Don't hardcode like this + QFileInfo tmpdirfi(tmpWavDir); + if (!tmpdirfi.isDir()) { + // Try to create a tmpdir + QDir projdir(song->absoluteProjectPath()); + if (!projdir.mkdir("tmp_musewav")) { + printf("Could not create undo dir!\n"); + return false; + } + } + + + tmpdirfi.setFile(tmpWavDir); + + if (!tmpdirfi.isWritable()) { + printf("Temp directory is not writable - aborting\n"); + return false; + } + + QDir tmpdir = tmpdirfi.dir(); + + // Find a new filename + for (int i=0; i<10000; i++) { + QString filename = "muse_tmp"; + filename.append(QString::number(i)); + filename.append(".wav"); + + if (!tmpdir.exists(tmpWavDir +"/" + filename)) { + newFilename = tmpWavDir + "/" + filename; + return true; + } + } + + printf("Could not find a suitable tmpfilename (more than 10000 tmpfiles in tmpdir - clean up!\n"); + return false; + } + +//--------------------------------------------------------- +// range +//--------------------------------------------------------- + +void WaveView::range(AL::Pos& s, AL::Pos& e) const + { + s.setFrame(startFrame); + e.setFrame(endFrame); + } + +//--------------------------------------------------------- +// layout +//--------------------------------------------------------- + +void WaveView::layout() + { + int n = ctrlEditList.size(); + if (n == 0) + return; + if (ctrlHeight == 0) { + int wh = widget()->height(); + resizeController(wh < 120 ? wh / 2 : 100); + } + // check, if layout is ok already; this happens after + // song load + int h = 0; + for (iCtrlEdit i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i) { + CtrlEdit* c = *i; + h += c->height(); + } + if (h == ctrlHeight) { + for (iCtrlEdit i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i) + layoutPanelB(*i); + return; + } + int y = 0; + int sch = ctrlHeight / n; + for (iCtrlEdit i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i) { + CtrlEdit* c = *i; + c->y = y; + c->setHeight(sch); + layoutPanelB(c); + y += sch; + } + } + +//--------------------------------------------------------- +// layout1 +//--------------------------------------------------------- + +void WaveView::layout1() + { + int n = ctrlEditList.size(); + if (n == 0) + return; + int y = 0; + for (iCtrlEdit i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i) { + CtrlEdit* c = *i; + c->y = y; + y += c->height(); + } + resizeController(y); + } + +//--------------------------------------------------------- +// layoutPanelB +//--------------------------------------------------------- + +void WaveView::layoutPanelB(CtrlEdit* c) + { + int y = c->y; + int h = c->height(); + int bx = rPanelB.x() + rPanelB.width() - 23; + int by = rPanelB.y() + y + h - 19; + c->minus->setGeometry(bx, by, 18, 18); + bx = rPanelB.x() + 1; + by = rPanelB.y() + y + 5; + c->sel->setGeometry(bx, by, rPanelB.width() - 5, 18); + } + +//--------------------------------------------------------- +// addController +//--------------------------------------------------------- + +void WaveView::addController() + { + int n = ctrlEditList.size(); + CtrlEdit* ce = new CtrlEdit(widget(), this, curPart->track()); + ce->setHeight(50); + ctrlEditList.push_back(ce); + + ce->minus->defaultAction()->setData(n); + connect(ce->minus, SIGNAL(triggered(QAction*)), SLOT(removeController(QAction*))); + ce->minus->show(); + ce->sel->show(); + + layout(); + widget()->update(); + updatePartControllerList(); + } + +void WaveView::addController(int id, int h) + { + ctrlHeight += h; + int n = ctrlEditList.size(); + + CtrlEdit* ce = new CtrlEdit(widget(), this, curPart->track()); + ce->setHeight(h); + ce->setCtrl(id); + ctrlEditList.push_back(ce); + + ce->minus->defaultAction()->setData(n); + connect(ce->minus, SIGNAL(triggered(QAction*)), SLOT(removeController(QAction*))); + } + +//--------------------------------------------------------- +// removeController +//--------------------------------------------------------- + +void WaveView::removeController(QAction* a) + { + int id = a->data().toInt(); + + int k = 0; + for (iCtrlEdit i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i, ++k) { + if (k == id) { + CtrlEdit* c = *i; + delete c; + ctrlEditList.erase(i); + break; + } + } + k = 0; + for (iCtrlEdit i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i, ++k) { + CtrlEdit* c = *i; + c->minus->defaultAction()->setData(k); + } + + if (ctrlEditList.empty()) + resizeController(0); + else + layout(); + widget()->update(); + updatePartControllerList(); + } + +//--------------------------------------------------------- +// updatePartControllerList +//--------------------------------------------------------- + +void WaveView::updatePartControllerList() + { + if (curPart == 0) + return; + CtrlCanvasList* cl = curPart->getCtrlCanvasList(); + cl->clear(); + for (iCtrlEdit i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i) { + CtrlCanvas cc; + cc.ctrlId = (*i)->ctrlId; + cc.height = (*i)->height(); + cl->push_back(cc); + } + } + +//--------------------------------------------------------- +// paintControllerCanvas +// r(0, 0) is PanelB topLeft() +//--------------------------------------------------------- + +void WaveView::paintControllerCanvas(QPainter& p, QRect r) + { + int x1 = r.x(); + int x2 = x1 + r.width(); + + int xx2 = rCanvasB.width(); + if (xx2 >= x2) + x2 = xx2 - 2; + for (iCtrlEdit i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i) { + CtrlEdit* c = *i; + int y = c->y; + paintHLine(p, x1, x2, y); + p.setPen(lineColor[0]); + p.drawLine(xx2-1, 1, xx2-1, splitWidth-2); + + QRect rc(0, y + splitWidth, rCanvasB.width(), c->cheight()); + QPoint pt(rc.topLeft()); + rc &= r; + if (!rc.isEmpty()) { + p.translate(pt); + c->paint(p, rc.translated(-pt)); + p.translate(-pt); + } + } + } + +//--------------------------------------------------------- +// paintControllerPanel +// panelB +//--------------------------------------------------------- + +void WaveView::paintControllerPanel(QPainter& p, QRect r) + { + p.fillRect(r, QColor(0xe0, 0xe0, 0xe0)); + int x1 = r.x(); + int x2 = x1 + r.width(); + + paintVLine(p, r.y() + splitWidth, r.y() + r.height(), + rPanelB.x() + rPanelB.width()); + + if (x1 == 0) + x1 = 1; + for (iCtrlEdit i = ctrlEditList.begin(); i != ctrlEditList.end(); ++i) { + CtrlEdit* c = *i; + paintHLine(p, x1, x2, c->y); + p.setPen(lineColor[0]); + p.drawLine(0, 1, 0, splitWidth-2); + } + } + +//--------------------------------------------------------- +// setCursor +//--------------------------------------------------------- + +void WaveView::setCursor() + { + if (curSplitter != -1) { + widget()->setCursor(Qt::SplitVCursor); + return; + } + TimeCanvas::setCursor(); + } + +//--------------------------------------------------------- +// enterB +//--------------------------------------------------------- + +void WaveView::enterB() + { + if ((button == 0) && curSplitter != -1) { + curSplitter = -1; + setCursor(); + } + } + +//--------------------------------------------------------- +// leaveB +//--------------------------------------------------------- + +void WaveView::leaveB() + { + if ((button == 0) && (curSplitter != -1)) { + curSplitter = -1; + setCursor(); + } + } + + diff --git a/attic/muse_qt4_evolution/muse/waveedit/waveview.h b/attic/muse_qt4_evolution/muse/waveedit/waveview.h new file mode 100644 index 00000000..462ce26d --- /dev/null +++ b/attic/muse_qt4_evolution/muse/waveedit/waveview.h @@ -0,0 +1,127 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef WAVE_VIEW_H +#define WAVE_VIEW_H + +#include "al/pos.h" +#include "wave.h" +#include "awl/tcanvas.h" +#include "ctrl/ctrledit.h" + +class PartList; +class QPainter; +class QRect; +class Part; +class WaveEdit; +class GraphMidiEditor; + +//--------------------------------------------------------- +// WaveEventSelection +//--------------------------------------------------------- + +struct WaveEventSelection { + SndFileR file; + unsigned startframe; + unsigned endframe; + }; + +typedef std::list WaveSelectionList; +typedef std::list::iterator iWaveSelection; + +//--------------------------------------------------------- +// WaveView +//--------------------------------------------------------- + +class WaveView : public TimeCanvas { + Q_OBJECT + + WaveEdit* editor; + CtrlEditList ctrlEditList; + + int startFrame; + int endFrame; + + Part* curPart; + + enum { NORMAL, DRAG } mode; + enum { MUTE = 0, NORMALIZE, FADE_IN, FADE_OUT, REVERSE, GAIN, EDIT_EXTERNAL }; //!< Modify operations + + unsigned selectionStart, selectionStop, dragstartx; + int curSplitter; // -1 mouse not in splitter + bool dragSplitter; + int splitterY; + + virtual void paint(QPainter&, QRect); + virtual void mousePress(QMouseEvent*); + virtual void mouseMove(QPoint); + virtual void enterB(); + virtual void leaveB(); + virtual void mouseRelease(QMouseEvent*); + + bool getUniqueTmpfileName(QString& newFilename); //!< Generates unique filename for temporary SndFile + WaveSelectionList getSelection(unsigned startpos, unsigned stoppos); + + int lastGainvalue; //!< Stores the last used gainvalue when specifiying gain value in the editgain dialog + void modifySelection(int operation, unsigned startpos, unsigned stoppos, double paramA); //!< Modifies selection + + void muteSelection(unsigned channels, float** data, unsigned length); //!< Mutes selection + void normalizeSelection(unsigned channels, float** data, unsigned length); //!< Normalizes selection + void fadeInSelection(unsigned channels, float** data, unsigned length); //!< Linear fade in of selection + void fadeOutSelection(unsigned channels, float** data, unsigned length); //!< Linear fade out of selection + void reverseSelection(unsigned channels, float** data, unsigned length); //!< Reverse selection + void applyGain(unsigned channels, float** data, unsigned length, double gain); //!< Apply gain to selection + + void editExternal(unsigned file_format, unsigned file_samplerate, unsigned channels, float** data, unsigned length); + + //void applyLadspa(unsigned channels, float** data, unsigned length); //!< Apply LADSPA plugin on selection + + void drawWavePart(QPainter& p, Part* wp, int y0, int th, int from, int to); + virtual void addController(); + virtual void layout(); + void layoutPanelB(CtrlEdit*); + void updatePartControllerList(); + + virtual void paintControllerCanvas(QPainter&, QRect); + virtual void paintControllerPanel(QPainter&, QRect); + + void setCursor(); + + private slots: + void removeController(QAction*); + + public slots: + void songChanged(int type); + + signals: + void yChanged(int); // emitted from mouseMove in controller canvas + + public: + WaveView(WaveEdit*); + QString getCaption() const; + void cmd(const QString&); + void range(AL::Pos&, AL::Pos&) const; + void addController(int id, int h); + void layout1(); + const CtrlEditList* getCtrlEditors() const { return &ctrlEditList; } + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/waveevent.cpp b/attic/muse_qt4_evolution/muse/waveevent.cpp new file mode 100644 index 00000000..4aff6a47 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/waveevent.cpp @@ -0,0 +1,137 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "globals.h" +#include "event.h" +#include "waveevent.h" +#include "al/xml.h" +#include "wave.h" + +//--------------------------------------------------------- +// WaveEvent +//--------------------------------------------------------- + +WaveEventBase::WaveEventBase(EventType t) + : EventBase(t) + { + deleted = false; + } + +//--------------------------------------------------------- +// WaveEvent::mid +//--------------------------------------------------------- + +EventBase* WaveEventBase::mid(unsigned b, unsigned e) + { + WaveEventBase* ev = new WaveEventBase(*this); + + int offset = b - frame(); + unsigned end = endFrame(); + if (e < end) + end = e; + + int len = end - b; + ev->setFrame(b); + ev->setLenFrame(len); + ev->setSpos(spos() + offset); + return ev; + } + +//--------------------------------------------------------- +// dump +//--------------------------------------------------------- + +void WaveEventBase::dump(int n) const + { + EventBase::dump(n); + } + +//--------------------------------------------------------- +// WaveEventBase::read +//--------------------------------------------------------- + +void WaveEventBase::read(QDomNode node) + { + node = node.firstChild(); + while (!node.isNull()) { + QDomElement e = node.toElement(); + if (e.tagName() == "poslen") + PosLen::read(node); + else if (e.tagName() == "frame") + _spos = e.text().toInt(); + else if (e.tagName() == "file") { + SndFile* wf = SndFile::getWave(e.text(), false); + if (wf) + f = SndFileR(wf); + } + else + printf("MusE:WaveEventBase: unknown tag %s\n", e.tagName().toLatin1().data()); + node = node.nextSibling(); + } + Pos::setType(AL::FRAMES); + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void WaveEventBase::write(Xml& xml, const Pos& offset) const + { + if (f.isNull()) + return; + xml.stag("event"); + PosLen wpos(*this); + wpos += offset; +// if (offset) +// wpos.setTick(wpos.tick() + offset); + wpos.write(xml, "poslen"); + xml.tag("frame", _spos); // offset in wave file + xml.tag("file", f.finfo()->fileName()); + xml.etag("event"); + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void WaveEventBase::read(unsigned offset, float** buffer, int channel, int n) + { + if (f.isNull()) + return; + f.seek(offset + _spos); + f.read(channel, buffer, n); + } + +//--------------------------------------------------------- +// WaveEventBase::operator== +//--------------------------------------------------------- + +bool WaveEventBase::operator==(const EventBase& ev) const { + + const WaveEventBase* pev = dynamic_cast(&ev); + + if(pev) return operator==(*pev); + else return false; +} + +bool WaveEventBase::operator==(const WaveEventBase& /*ev*/) const { + //TODO + return false; +} diff --git a/attic/muse_qt4_evolution/muse/waveevent.h b/attic/muse_qt4_evolution/muse/waveevent.h new file mode 100644 index 00000000..476b3a03 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/waveevent.h @@ -0,0 +1,61 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __WAVE_EVENT_H__ +#define __WAVE_EVENT_H__ + +#include "eventbase.h" + +//--------------------------------------------------------- +// WaveEvent +//--------------------------------------------------------- + +class WaveEventBase : public EventBase { + QString _name; + SndFileR f; + int _spos; // start sample position in WaveFile + bool deleted; + + virtual EventBase* clone() const { return new WaveEventBase(*this); } + + public: + WaveEventBase(EventType t); + virtual ~WaveEventBase() {} + + virtual void read(QDomNode); + virtual void write(Xml&, const Pos& offset) const; + virtual EventBase* mid(unsigned, unsigned); + virtual void dump(int n = 0) const; + + + virtual const QString name() const { return _name; } + virtual void setName(const QString& s) { _name = s; } + virtual int spos() const { return _spos; } + virtual void setSpos(int s) { _spos = s; } + virtual SndFileR sndFile() const { return f; } + virtual void setSndFile(SndFileR& sf) { f = sf; } + virtual void read(unsigned offset, float** bpp, int channels, int nn); + + virtual bool operator==(const EventBase&) const; + virtual bool operator==(const WaveEventBase&) const; + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/wavetrack.cpp b/attic/muse_qt4_evolution/muse/wavetrack.cpp new file mode 100644 index 00000000..e796c3f3 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/wavetrack.cpp @@ -0,0 +1,427 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "wavetrack.h" +#include "event.h" +#include "audio.h" +#include "wave.h" +#include "al/xml.h" +#include "al/dsp.h" +#include "song.h" +#include "globals.h" +#include "part.h" +#include "audiowriteback.h" +#include "muse.h" +#include "audioprefetch.h" + +bool WaveTrack::firstWaveTrack = true; + +//--------------------------------------------------------- +// WaveTrack +//--------------------------------------------------------- + +WaveTrack::WaveTrack() + : AudioTrack() + { + // + // allocate prefetch buffer + // + float* p = new float[FIFO_BUFFER * segmentSize * MAX_CHANNELS]; + float** pp = new float*[FIFO_BUFFER * MAX_CHANNELS]; + + for (int i = 0; i < FIFO_BUFFER; ++i) { + readBuffer[i] = pp; + for (int k = 0; k < MAX_CHANNELS; ++k) { + *pp = p; + p += segmentSize; + ++pp; + } + } + + recordPart = 0; // part we are recording into + } + +//--------------------------------------------------------- +// WaveTrack +//--------------------------------------------------------- + +WaveTrack::~WaveTrack() + { + delete[] *readBuffer[0]; + delete[] readBuffer[0]; + } + +//--------------------------------------------------------- +// fetchData +// called from prefetch thread +//--------------------------------------------------------- + +void WaveTrack::fetchData(unsigned pos, unsigned samples, int widx) + { + float** bp = readBuffer[widx]; + for (int i = 0; i < channels(); ++i) + memset(bp[i], 0, samples * sizeof(float)); + + PartList* pl = parts(); + for (iPart ip = pl->begin(); ip != pl->end(); ++ip) { + Part* part = ip->second; + + if (part->mute()) + continue; + unsigned p_spos = part->frame(); + if (pos + samples <= p_spos) + break; + unsigned p_epos = p_spos + part->lenFrame(); + if (pos >= p_epos) + continue; + + EventList* events = part->events(); + for (iEvent ie = events->begin(); ie != events->end(); ++ie) { + Event& event = ie->second; + + unsigned e_spos = event.frame() + p_spos; + if (pos + samples <= e_spos) + break; + unsigned nn = event.lenFrame(); + unsigned e_epos = e_spos + nn; + if (pos >= e_epos) + continue; + + int offset = e_spos - pos; + + unsigned srcOffset, dstOffset; + if (offset > 0) { + nn = samples - offset; + srcOffset = 0; + dstOffset = offset; + } + else { + srcOffset = -offset; + dstOffset = 0; + nn -= offset; + if (nn > samples) + nn = samples; + } + if (dstOffset) { + float* bpp[channels()]; + for (int i = 0; i < channels(); ++i) + bpp[i] = bp[i] + dstOffset; + event.read(srcOffset, bpp, channels(), nn); + } + else + event.read(srcOffset, bp, channels(), nn); + } + } + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void WaveTrack::write(Xml& xml) const + { + xml.stag("wavetrack"); + AudioTrack::writeProperties(xml); + const PartList* pl = parts(); + for (ciPart p = pl->begin(); p != pl->end(); ++p) + p->second->write(xml); + xml.etag("wavetrack"); + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void WaveTrack::read(QDomNode node) + { + for (; !node.isNull(); node = node.nextSibling()) { + QDomElement e = node.toElement(); + if (e.tagName() == "part") { + Part* p = newPart(); + p->read(node, false); + parts()->add(p); + } + else if (AudioTrack::readProperties(node)) + printf("MusE:WaveTrack: unknown tag %s\n", e.tagName().toLatin1().data()); + } + } + +//--------------------------------------------------------- +// newPart +//--------------------------------------------------------- + +Part* WaveTrack::newPart(Part*p, bool clone) + { + Part* part = new Part(this); + if (p) { + if (clone) + part->clone(p->events()); + else + part->ref(); + part->setName(p->name()); + part->setColorIndex(p->colorIndex()); + + *(AL::PosLen*)part = *(AL::PosLen*)p; + part->setMute(p->mute()); + } + else + part->ref(); + return part; + } + +//--------------------------------------------------------- +// setChannels +//--------------------------------------------------------- + +void WaveTrack::setChannels(int n) + { + AudioTrack::setChannels(n); + SndFile* sf = recFile(); + if (sf) { + if (sf->samples() == 0) { + sf->remove(); + sf->setFormat(sf->format(), _channels, + sf->samplerate()); + sf->openWrite(); + } + } + } + +//--------------------------------------------------------- +// startRecording +// gui context +//--------------------------------------------------------- + +void WaveTrack::startRecording() + { + AudioTrack::startRecording(); // create file + partCreated = false; + AL::Pos start = song->punchin() ? song->lPos() : song->cPos(); + + // search for recordPart + recordPart = 0; + for (iPart ip = parts()->begin(); ip != parts()->end(); ++ip) { + Part* part = ip->second; + unsigned partStart = part->tick(); + unsigned partEnd = partStart + part->lenTick(); + if (start.tick() >= partStart && start.tick() < partEnd) { + recordPart = part; + break; + } + } + if (recordPart == 0) { + // + // create new part for recording + // + recordPart = new Part(this); + recordPart->ref(); + recordPart->setType(AL::FRAMES); + Pos spos(start.downSnaped(muse->raster())); + Pos epos(start.upSnaped(muse->raster())); + recordPart->setPos(spos); + recordPart->setLenTick(epos.tick() - spos.tick()); + recordPart->setName(name()); + song->addPart(recordPart); + partCreated = true; + emit partsChanged(); + } + } + +//--------------------------------------------------------- +// recordBeat +// gui context +// update current recording +//--------------------------------------------------------- + +void WaveTrack::recordBeat() + { + if (partCreated) { + int cpos = song->cpos(); + int ptick = recordPart->tick(); + recordPart->setLenTick(cpos - ptick); + song->addUpdateFlags(SC_PART_MODIFIED); + } + } + +//--------------------------------------------------------- +// stopRecording +// gui context +//--------------------------------------------------------- + +void WaveTrack::stopRecording(const Pos& s, const Pos& e) + { + int updateFlags = 0; + + while(audioWriteback->active()) + sleep(1); + _recFile->update(); + + // create Event + Event event(Wave); + SndFileR sf(_recFile); + event.setSndFile(sf); + event.setPos(s - *recordPart); + event.setSpos(0); + event.setLenFrame(e.frame() - s.frame()); + // recordPart->addEvent(event); + audio->msgAddEvent(event, recordPart, false); + + _recFile = 0; + + // + // adjust part len && song len + // + unsigned etick = e.upSnaped(muse->raster()).tick(); + unsigned len = etick - recordPart->tick(); + + if (recordPart->lenTick() < len) { + recordPart->setLenTick(len); + updateFlags |= SC_PART_MODIFIED; + } + + if (song->len() < etick) + song->setLen(etick); + song->update(updateFlags); + } + +//--------------------------------------------------------- +// canEnableRecord +//--------------------------------------------------------- + +bool WaveTrack::canEnableRecord() const + { + return (!noInRoute() || (this == song->bounceTrack)); + } + +//--------------------------------------------------------- +// collectInputData +//--------------------------------------------------------- + +void WaveTrack::collectInputData() + { + bufferEmpty = false; + if (recordFlag() && (audio->isRecording() || !audio->isPlaying())) { + if (song->bounceTrack == this && audio->isPlaying()) { + OutputList* ol = song->outputs(); + if (!ol->empty()) { +//TODO AudioOutput* out = ol->front(); + } + } + else + AudioTrack::collectInputData(); + return; + } + if (!audio->isPlaying()) { + for (int i = 0; i < channels(); ++i) + memset(buffer[i], 0, sizeof(float) * segmentSize); + return; + } + + if (audio->freewheel()) { + // when freewheeling, read data direct from file: + // TODO: fetchData(framePos, segmentSize, buffer); + } + else { + int idx = audio->curReadIndex(); + if (idx == -1) { + for (int i = 0; i < channels(); ++i) + memset(buffer[i], 0, sizeof(float) * segmentSize); + } + else { + float** bpp = readBuffer[idx]; + for (int i = 0; i < channels(); ++i) + AL::dsp->cpy(buffer[i], bpp[i], segmentSize); + } + } + } + +//--------------------------------------------------------- +// process +//--------------------------------------------------------- + +void WaveTrack::process() + { + AudioTrack::process(); + + // + // record collected data for track + // + if (recordFlag() && audio->isRecording() && recFile()) { + unsigned framePos = audio->seqTime()->pos.frame(); + if (audio->freewheel()) { + // write data directly to file + _recFile->write(channels(), buffer, framePos); + } + else { + if (fifo.put(channels(), segmentSize, buffer, framePos)) { + printf("WaveTrack(%s)::getData: fifo overrun\n", + name().toLatin1().data()); + } + } + if (!_monitor) { + // + // end data processing here if monitor is not on + // + bufferEmpty = true; + } + return; + } + if (!audio->isPlaying() && !_monitor) + bufferEmpty = true; + } + +//--------------------------------------------------------- +// clone +//--------------------------------------------------------- + +void WaveTrack::clone(WaveTrack* t) + { + QString name; + for (int i = 1; ; ++i) { + name.sprintf("%s-%d", t->name().toLatin1().data(), i); + TrackList* tl = song->tracks(); + bool found = false; + for (iTrack it = tl->begin(); it != tl->end(); ++it) { + if ((*it)->name() == name) { + found = true; + break; + } + } + if (!found) + break; + } + setName(name); + + _recordFlag = t->_recordFlag; + _mute = t->_mute; + _solo = t->_solo; + _off = t->_off; + _monitor = t->_monitor; + _channels = t->_channels; + _locked = t->_locked; + _inRoutes = t->_inRoutes; + _outRoutes = t->_outRoutes; + _controller = t->_controller; + _autoRead = t->_autoRead; + _autoWrite = t->_autoWrite; + setPrefader(t->prefader()); + } + + diff --git a/attic/muse_qt4_evolution/muse/wavetrack.h b/attic/muse_qt4_evolution/muse/wavetrack.h new file mode 100644 index 00000000..0e195ddb --- /dev/null +++ b/attic/muse_qt4_evolution/muse/wavetrack.h @@ -0,0 +1,84 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __WAVETRACK_H__ +#define __WAVETRACK_H__ + +#include "audiotrack.h" + +namespace AL { + class Pos; + }; + +class Part; + +//--------------------------------------------------------- +// WaveTrack +//--------------------------------------------------------- + +class WaveTrack : public AudioTrack { + Q_OBJECT + + float** readBuffer[FIFO_BUFFER]; + + Part* recordPart; // part we are recording into + bool partCreated; + + void getDummyInput(int, unsigned); + + protected: + virtual void collectInputData(); + + public: + static bool firstWaveTrack; + + WaveTrack(); + ~WaveTrack(); + virtual TrackType type() const { return WAVE; } + + void clone(WaveTrack*); + + virtual Part* newPart(Part*p=0, bool clone=false); + + virtual void read(QDomNode); + virtual void write(Xml&) const; + + virtual void fetchData(unsigned pos, unsigned frames, int); + + virtual void setChannels(int n); + virtual bool hasAuxSend() const { return true; } + bool canEnableRecord() const; + virtual bool canRecord() const { return true; } + + virtual void startRecording(); + void recordBeat(); + virtual void stopRecording(const AL::Pos&, const AL::Pos&); + virtual void process(); + }; + + +typedef QList WaveTrackList; +typedef WaveTrackList::iterator iWaveTrack; +typedef WaveTrackList::const_iterator ciWaveTrack; + +#endif + + + diff --git a/attic/muse_qt4_evolution/muse/widgets/CMakeLists.txt b/attic/muse_qt4_evolution/muse/widgets/CMakeLists.txt new file mode 100644 index 00000000..03866a0c --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/CMakeLists.txt @@ -0,0 +1,88 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +QT4_WRAP_CPP (widget_mocs + doublelabel.h + noteinfo.h + dentry.h + siglabel.h + simplebutton.h + tb1.h + tools.h + fontsel.h + ctrlcombo.h + filedialog.h + outportcombo.h splitter.h + quantcombo.h rastercombo.h + comboQuant.h bigtime.h + midisync.h + mixdowndialog.h + comment.h + shortcutconfig.h + shortcutcapturedialog.h + greendotbutton.h recordbutton.h + ) + +QT4_WRAP_UI (widget_ui_headers + comment.ui + midisync.ui + mixdowndialog.ui + shortcutcapturedialog.ui + shortcutconfig.ui + ) + +# add_custom_command(OUTPUT ui_midisync.h +# COMMAND ${QT_UIC_EXECUTABLE} +# ARGS -o ${CMAKE_CURRENT_BINARY_DIR}/ui_midisync.h ${CMAKE_CURRENT_SOURCE_DIR}/midisync.ui +# DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/midisync.ui +# ) + +# ADD_FILE_DEPENDENCIES(moc_midisync.cxx ${CMAKE_CURRENT_BINARY_DIR}/ui_midisync.h) + +add_library ( widgets STATIC + ${widget_ui_headers} + ${widget_mocs} + + utils.cpp + shortcutconfig.cpp + shortcutconfig.h + shortcutcapturedialog.cpp + midisync.cpp + comment.cpp + mixdowndialog.cpp + tools.cpp + doublelabel.cpp + noteinfo.cpp + dentry.cpp + siglabel.cpp + simplebutton.cpp + tb1.cpp + fontsel.cpp + ctrlcombo.cpp + filedialog.cpp + outportcombo.cpp splitter.cpp + quantcombo.cpp rastercombo.cpp + comboQuant.cpp bigtime.cpp + ) + +set_target_properties( widgets + PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h" + ) + diff --git a/attic/muse_qt4_evolution/muse/widgets/action.h b/attic/muse_qt4_evolution/muse/widgets/action.h new file mode 100644 index 00000000..c71ac1bb --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/action.h @@ -0,0 +1,42 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __ACTION_H__ +#define __ACTION_H__ + +//--------------------------------------------------------- +// Action +//--------------------------------------------------------- + +class Action : public QAction { + int _id; + + public: + Action(QObject* parent, int i, const char* name = 0, bool toggle = false) + : QAction(parent, name, toggle) { + _id = i; + } + void setId(int i) { _id = i; } + int id() const { return _id; } + }; + + +#endif + diff --git a/attic/muse_qt4_evolution/muse/widgets/bigtime.cpp b/attic/muse_qt4_evolution/muse/widgets/bigtime.cpp new file mode 100644 index 00000000..3d1c7b21 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/bigtime.cpp @@ -0,0 +1,267 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "globals.h" +#include "bigtime.h" +#include "song.h" +#include "gconfig.h" + +#include "al/al.h" +#include "al/sig.h" +#include "al/tempo.h" + +// +// the bigtime widget +// display is split into several parts to avoid flickering. +// + +//--------------------------------------------------------- +// BigTime +//--------------------------------------------------------- + +BigTime::BigTime(QWidget* parent) + : QWidget(parent) + { + setWindowFlags(Qt::WindowStaysOnTopHint); + + barLabel = new QLabel(this); + beatLabel = new QLabel(this); + tickLabel = new QLabel(this); + hourLabel = new QLabel(this); + minLabel = new QLabel(this); + secLabel = new QLabel(this); + frameLabel = new QLabel(this); + sep1 = new QLabel(QString("."), this); + sep2 = new QLabel(QString("."), this); + sep3 = new QLabel(QString(":"), this); + sep4 = new QLabel(QString(":"), this); + sep5 = new QLabel(QString(":"), this); + + oldbar = oldbeat = oldtick = oldhour = oldmin = oldsec = oldframe = -1; + + setString(song->cPos()); + + configChanged(); + + QFont f(QString("Courier")); + f.setPixelSize(10); + setFont(f); + setWindowTitle(tr("MusE: Bigtime")); + } + +//--------------------------------------------------------- +// configChanged +//--------------------------------------------------------- + +void BigTime::configChanged() + { + setBgColor(config.bigTimeBackgroundColor); + setFgColor(config.bigTimeForegroundColor); + } + +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void BigTime::closeEvent(QCloseEvent *ev) + { + emit closed(); + QWidget::closeEvent(ev); + } + +//--------------------------------------------------------- +// setString +//--------------------------------------------------------- + +bool BigTime::setString(AL::Pos pos) + { + int bar, beat, tick; + pos.mbt(&bar, &beat, &tick); + int min, sec, hour, frame, subframe; + pos.msf(&min, &sec, &frame, &subframe); + + hour = min / 60; + min %= 60; + + QString s; + + if(oldbar != bar) { + s.sprintf("%04d", bar+1); + barLabel->setText(s); + oldbar = bar; + } + + if(oldbeat != beat) { + s.sprintf("%02d", beat+1); + beatLabel->setText(s); + oldbeat = beat; + } + + if(oldtick != tick) { + s.sprintf("%03d", tick); + tickLabel->setText(s); + oldtick = tick; + } + + if(oldhour != hour) { + s.sprintf("%02d", hour); + hourLabel->setText(s); + oldhour = hour; + } + + if(oldmin != min) { + s.sprintf("%02d", min); + minLabel->setText(s); + oldmin = min; + } + + if(oldsec != sec) { + s.sprintf("%02d", sec); + secLabel->setText(s); + oldsec = sec; + } + + if(oldframe != frame) { + s.sprintf("%02d", frame); + frameLabel->setText(s); + oldframe = frame; + } + + return false; + } + +//--------------------------------------------------------- +// setPos +//--------------------------------------------------------- + +void BigTime::setPos(int idx, AL::Pos pos, bool) + { + if (idx == 0) + setString(pos); + } + +//--------------------------------------------------------- +// resizeEvent +//--------------------------------------------------------- + +void BigTime::resizeEvent(QResizeEvent *ev) + { + QFont f = font(); + QFontMetrics fm(f); + int fs = f.pixelSize(); + int hspace = 20; + int tw = fm.width(QString("00:00:00:00")); + fs = ((ev->size().width() - hspace*2)*fs) / tw; + +// printf("resize BigTime %d -> %d, w %d\n", fs, nfs, ev->size().width()); + + // set min/max + if (fs < 10) + fs = 10; + else if (fs > 256) + fs = 256; + f.setPixelSize(fs); + setFont(f); + + int digitWidth = fontMetrics().width(QString("0")); + + int vspace = (ev->size().height() - (fs*2)) / 3; + int tickY = vspace; + int timeY = vspace*2 + fs; + + barLabel->resize(digitWidth*4, fs); + beatLabel->resize(digitWidth*2, fs); + tickLabel->resize(digitWidth*3, fs); + hourLabel->resize(digitWidth*2, fs); + minLabel->resize(digitWidth*2, fs); + secLabel->resize(digitWidth*2, fs); + frameLabel->resize(digitWidth*2, fs); + + sep1->resize(digitWidth, fs); + sep2->resize(digitWidth, fs); + sep3->resize(digitWidth, fs); + sep4->resize(digitWidth, fs); + sep5->resize(digitWidth, fs); + + barLabel->move( hspace + (digitWidth*0), tickY); + sep1->move( hspace + (digitWidth*4), tickY); + beatLabel->move( hspace + (digitWidth*5), tickY); + sep2->move( hspace + (digitWidth*7), tickY); + tickLabel->move( hspace + (digitWidth*8), tickY); + + hourLabel->move( hspace + (digitWidth*0), timeY); + sep3->move( hspace + (digitWidth*2), timeY); + minLabel->move( hspace + (digitWidth*3), timeY); + sep4->move( hspace + (digitWidth*5), timeY); + secLabel->move( hspace + (digitWidth*6), timeY); + sep5->move( hspace + (digitWidth*8), timeY); + frameLabel->move( hspace + (digitWidth*9), timeY); + } + +//--------------------------------------------------------- +// setForegroundColor +//--------------------------------------------------------- + +void BigTime::setFgColor(QColor c) + { + QPalette cg = palette(); + cg.setColor(QPalette::Foreground, c); + setPalette(cg); + + barLabel->setPalette(cg); + beatLabel->setPalette(cg); + tickLabel->setPalette(cg); + hourLabel->setPalette(cg); + minLabel->setPalette(cg); + secLabel->setPalette(cg); + frameLabel->setPalette(cg); + + sep1->setPalette(cg); + sep2->setPalette(cg); + sep3->setPalette(cg); + sep4->setPalette(cg); + sep5->setPalette(cg); + } + +//--------------------------------------------------------- +// setBackgroundColor +//--------------------------------------------------------- + +void BigTime::setBgColor(QColor c) + { + QPalette cg = palette(); + cg.setColor(QPalette::Background, c); + setPalette(cg); + + barLabel->setPalette(cg); + beatLabel->setPalette(cg); + tickLabel->setPalette(cg); + hourLabel->setPalette(cg); + minLabel->setPalette(cg); + secLabel->setPalette(cg); + frameLabel->setPalette(cg); + + sep1->setPalette(cg); + sep2->setPalette(cg); + sep3->setPalette(cg); + sep4->setPalette(cg); + sep5->setPalette(cg); + } + diff --git a/attic/muse_qt4_evolution/muse/widgets/bigtime.h b/attic/muse_qt4_evolution/muse/widgets/bigtime.h new file mode 100644 index 00000000..82b054bf --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/bigtime.h @@ -0,0 +1,64 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __BIGTIME_H__ +#define __BIGTIME_H__ + +#include "al/pos.h" + +class MusE; +class AL::Pos; + +//--------------------------------------------------------- +// BigTime +//--------------------------------------------------------- + +class BigTime : public QWidget { + bool tickmode; + MusE* seq; + Q_OBJECT + + bool setString(AL::Pos); + + QLabel *barLabel, *beatLabel, *tickLabel, + *hourLabel, *minLabel, *secLabel, *frameLabel, + *sep1, *sep2, *sep3, *sep4, *sep5; + int oldbar, oldbeat, oldhour, oldmin, oldsec, oldframe; + int oldtick; + + void setFgColor(QColor c); + void setBgColor(QColor c); + + protected: + virtual void resizeEvent(QResizeEvent*); + virtual void closeEvent(QCloseEvent*); + + public slots: + void setPos(int, AL::Pos, bool); + void configChanged(); + + signals: + void closed(); + + public: + BigTime(QWidget* parent); + }; + +#endif diff --git a/attic/muse_qt4_evolution/muse/widgets/cliplisteditorbase.h b/attic/muse_qt4_evolution/muse/widgets/cliplisteditorbase.h new file mode 100644 index 00000000..789edac6 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/cliplisteditorbase.h @@ -0,0 +1,138 @@ +#ifndef CLIPLISTEDITORBASE_H +#define CLIPLISTEDITORBASE_H + +#include + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "awl/posedit.h" +#include +#include + +class Ui_ClipListEditorBase +{ +public: + QVBoxLayout *vboxLayout; + Q3ListView *view; + Q3GroupBox *GroupBox1; + QHBoxLayout *hboxLayout; + QLabel *TextLabel1; + Awl::PosEdit *start; + QLabel *TextLabel2; + Awl::PosEdit *len; + QSpacerItem *spacerItem; + + void setupUi(QWidget *ClipListEditorBase) + { + ClipListEditorBase->setObjectName(QString::fromUtf8("ClipListEditorBase")); + ClipListEditorBase->resize(QSize(600, 480).expandedTo(ClipListEditorBase->minimumSizeHint())); + vboxLayout = new QVBoxLayout(ClipListEditorBase); + vboxLayout->setSpacing(6); + vboxLayout->setMargin(11); + vboxLayout->setObjectName(QString::fromUtf8("vboxLayout")); + view = new Q3ListView(ClipListEditorBase); + view->addColumn(QApplication::translate("ClipListEditorBase", "Name", 0, QApplication::UnicodeUTF8)); + view->header()->setClickEnabled(true, view->header()->count() - 1); + view->addColumn(QApplication::translate("ClipListEditorBase", "Refs", 0, QApplication::UnicodeUTF8)); + view->header()->setClickEnabled(true, view->header()->count() - 1); + view->addColumn(QApplication::translate("ClipListEditorBase", "Start", 0, QApplication::UnicodeUTF8)); + view->header()->setClickEnabled(true, view->header()->count() - 1); + view->addColumn(QApplication::translate("ClipListEditorBase", "Len", 0, QApplication::UnicodeUTF8)); + view->header()->setClickEnabled(true, view->header()->count() - 1); + view->addColumn(QApplication::translate("ClipListEditorBase", "Data", 0, QApplication::UnicodeUTF8)); + view->header()->setClickEnabled(true, view->header()->count() - 1); + view->setObjectName(QString::fromUtf8("view")); + view->setAllColumnsShowFocus(true); + view->setRootIsDecorated(true); + + vboxLayout->addWidget(view); + + GroupBox1 = new Q3GroupBox(ClipListEditorBase); + GroupBox1->setObjectName(QString::fromUtf8("GroupBox1")); + GroupBox1->setColumnLayout(0, Qt::Vertical); + GroupBox1->layout()->setSpacing(6); + GroupBox1->layout()->setMargin(11); + hboxLayout = new QHBoxLayout(GroupBox1->layout()); + hboxLayout->setAlignment(Qt::AlignTop); + hboxLayout->setObjectName(QString::fromUtf8("hboxLayout")); + hboxLayout->setMargin(11); + hboxLayout->setSpacing(6); + TextLabel1 = new QLabel(GroupBox1); + TextLabel1->setObjectName(QString::fromUtf8("TextLabel1")); + + hboxLayout->addWidget(TextLabel1); + + start = new Awl::PosEdit(GroupBox1); + start->setObjectName(QString::fromUtf8("start")); + start->setSmpte(true); + + hboxLayout->addWidget(start); + + TextLabel2 = new QLabel(GroupBox1); + TextLabel2->setObjectName(QString::fromUtf8("TextLabel2")); + + hboxLayout->addWidget(TextLabel2); + + len = new Awl::PosEdit(GroupBox1); + len->setObjectName(QString::fromUtf8("len")); + len->setSmpte(true); + + hboxLayout->addWidget(len); + + spacerItem = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + + hboxLayout->addItem(spacerItem); + + + vboxLayout->addWidget(GroupBox1); + + retranslateUi(ClipListEditorBase); + + QMetaObject::connectSlotsByName(ClipListEditorBase); + } // setupUi + + void retranslateUi(QWidget *ClipListEditorBase) + { + ClipListEditorBase->setWindowTitle(QApplication::translate("ClipListEditorBase", "MusE: ClipList", 0, QApplication::UnicodeUTF8)); + view->header()->setLabel(0, QApplication::translate("ClipListEditorBase", "Name", 0, QApplication::UnicodeUTF8)); + view->header()->setLabel(1, QApplication::translate("ClipListEditorBase", "Refs", 0, QApplication::UnicodeUTF8)); + view->header()->setLabel(2, QApplication::translate("ClipListEditorBase", "Start", 0, QApplication::UnicodeUTF8)); + view->header()->setLabel(3, QApplication::translate("ClipListEditorBase", "Len", 0, QApplication::UnicodeUTF8)); + view->header()->setLabel(4, QApplication::translate("ClipListEditorBase", "Data", 0, QApplication::UnicodeUTF8)); + GroupBox1->setTitle(QApplication::translate("ClipListEditorBase", "Clip Properties", 0, QApplication::UnicodeUTF8)); + TextLabel1->setText(QApplication::translate("ClipListEditorBase", "Pos:", 0, QApplication::UnicodeUTF8)); + TextLabel2->setText(QApplication::translate("ClipListEditorBase", "Len:", 0, QApplication::UnicodeUTF8)); + Q_UNUSED(ClipListEditorBase); + } // retranslateUi + +}; + +namespace Ui { + class ClipListEditorBase: public Ui_ClipListEditorBase {}; +} // namespace Ui + +class ClipListEditorBase : public QWidget, public Ui::ClipListEditorBase +{ + Q_OBJECT + +public: + ClipListEditorBase(QWidget* parent = 0, const char* name = 0, Qt::WFlags fl = 0); + ~ClipListEditorBase(); + +protected slots: + virtual void languageChange(); + +}; + +#endif // CLIPLISTEDITORBASE_H diff --git a/attic/muse_qt4_evolution/muse/widgets/cliplisteditorbase.ui b/attic/muse_qt4_evolution/muse/widgets/cliplisteditorbase.ui new file mode 100644 index 00000000..0dab43be --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/cliplisteditorbase.ui @@ -0,0 +1,146 @@ + + + + + ClipListEditorBase + + + + 0 + 0 + 600 + 480 + + + + MusE: ClipList + + + + 11 + + + 6 + + + + + true + + + true + + + + Name + + + + + Refs + + + + + Start + + + + + Len + + + + + Data + + + + + + + + Clip Properties + + + Qt::Vertical + + + + 11 + + + 6 + + + + + Pos: + + + + + + + + + + Len: + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 20 + 20 + + + + + + + + + + + qPixmapFromMimeSource + + + Q3ListView + +
q3listview.h
+ 0 + +
+ + Q3GroupBox + +
Qt3Support/Q3GroupBox
+ 1 + +
+ + Awl::PosEdit + QWidget +
awl::posedit.h
+ 1 + +
+
+ + awl/posedit.h + + + +
diff --git a/attic/muse_qt4_evolution/muse/widgets/comboQuant.cpp b/attic/muse_qt4_evolution/muse/widgets/comboQuant.cpp new file mode 100644 index 00000000..1a95e3b6 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/comboQuant.cpp @@ -0,0 +1,69 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "comboQuant.h" + +static int quantTable[] = { + 1, 16, 32, 64, 128, 256, 512, 1024, + 1, 24, 48, 96, 192, 384, 768, 1536, + 1, 36, 72, 144, 288, 576, 1152, 2304 + }; + +static const char* quantStrings[] = { + QT_TR_NOOP("Off"), "64T", "32T", "16T", "8T", "4T", "2T", "1T", + QT_TR_NOOP("Off"), "64", "32", "16", "8", "4", "2", "1", + QT_TR_NOOP("Off"), "64.", "32.", "16.", "8.", "4.", "2.", "1." + }; + +//--------------------------------------------------------- +// ComboQuant +//--------------------------------------------------------- + +ComboQuant::ComboQuant(QWidget* parent) + : QComboBox(parent) + { + for (int i = 0; i < 24; i++) + addItem(tr(quantStrings[i]), i); + connect(this, SIGNAL(activated(int)), SLOT(activated(int))); + } + +//--------------------------------------------------------- +// activated +//--------------------------------------------------------- + +void ComboQuant::activated(int index) + { + emit valueChanged(quantTable[index]); + } + +//--------------------------------------------------------- +// setQuant +//--------------------------------------------------------- + +void ComboQuant::setValue(int val) + { + for (int i = 0; i < 24; i++) { + if (val == quantTable[i]) { + setCurrentIndex(i); + return; + } + } + } + diff --git a/attic/muse_qt4_evolution/muse/widgets/comboQuant.h b/attic/muse_qt4_evolution/muse/widgets/comboQuant.h new file mode 100644 index 00000000..de2a8d82 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/comboQuant.h @@ -0,0 +1,43 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __COMBOQUANT_H__ +#define __COMBOQUANT_H__ + +//--------------------------------------------------------- +// ComboQuant +//--------------------------------------------------------- + +class ComboQuant : public QComboBox { + Q_OBJECT + + private slots: + void activated(int); + + signals: + void valueChanged(int); + + public: + ComboQuant(QWidget* parent = 0); + void setValue(int val); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/widgets/combobox.cpp b/attic/muse_qt4_evolution/muse/widgets/combobox.cpp new file mode 100644 index 00000000..8b6a5ea2 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/combobox.cpp @@ -0,0 +1,81 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "combobox.h" + +//--------------------------------------------------------- +// ComboBox +//--------------------------------------------------------- + +ComboBox::ComboBox(QWidget* parent, const char* name) + : QLabel(parent, name) + { + _currentItem = 0; + _id = -1; + list = new Q3PopupMenu(0, "comboPopup"); + connect(list, SIGNAL(activated(int)), SLOT(activatedIntern(int))); + setFrameStyle(Q3Frame::Panel | Q3Frame::Raised); + setLineWidth(2); + } + +ComboBox::~ComboBox() + { + delete list; + } + +//--------------------------------------------------------- +// mousePressEvent +//--------------------------------------------------------- + +void ComboBox::mousePressEvent(QMouseEvent*) + { + list->exec(QCursor::pos()); + } + +//--------------------------------------------------------- +// activated +//--------------------------------------------------------- + +void ComboBox::activatedIntern(int n) + { + _currentItem = n; + emit activated(n, _id); + setText(list->text(_currentItem)); + } + +//--------------------------------------------------------- +// setCurrentItem +//--------------------------------------------------------- + +void ComboBox::setCurrentItem(int i) + { + _currentItem = i; + setText(list->text(list->idAt(_currentItem))); + } + +//--------------------------------------------------------- +// insertItem +//--------------------------------------------------------- + +void ComboBox::insertItem(const QString& s, int id, int idx) + { + list->insertItem(s, id, idx); + } + diff --git a/attic/muse_qt4_evolution/muse/widgets/combobox.h b/attic/muse_qt4_evolution/muse/widgets/combobox.h new file mode 100644 index 00000000..70d71030 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/combobox.h @@ -0,0 +1,57 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __COMBOBOX_H__ +#define __COMBOBOX_H__ + +class Q3PopupMenu; + +//--------------------------------------------------------- +// ComboBox +//--------------------------------------------------------- + +class ComboBox : public QLabel { + Q_OBJECT + Q_PROPERTY(int id READ id WRITE setId) + + int _id; + int _currentItem; + Q3PopupMenu* list; + virtual void mousePressEvent(QMouseEvent*); + + private slots: + void activatedIntern(int); + + signals: + void activated(int val, int id); + + public: + ComboBox(QWidget* parent, const char* name = 0); + ~ComboBox(); + void setCurrentItem(int); + void insertItem(const QString& s, int id = -1, int idx=-1); + int id() const { return _id; } + void setId(int i) { _id = i; } + }; + +#endif + + + diff --git a/attic/muse_qt4_evolution/muse/widgets/comment.cpp b/attic/muse_qt4_evolution/muse/widgets/comment.cpp new file mode 100644 index 00000000..2bb981eb --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/comment.cpp @@ -0,0 +1,91 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "comment.h" +#include "song.h" +#include "track.h" + +//--------------------------------------------------------- +// Comment +//--------------------------------------------------------- + +Comment::Comment(QWidget* parent) + : QWidget(parent) + { + setupUi(this); + } + +//--------------------------------------------------------- +// textChanged +//--------------------------------------------------------- + +void Comment::textChanged() + { + setText(textentry->document()->toPlainText()); + } + +//--------------------------------------------------------- +// TrackComment +//--------------------------------------------------------- + +TrackComment::TrackComment(Track* t, QWidget* parent) + : Comment(parent) + { + setWindowTitle(tr("MusE: Track Comment")); + track = t; + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + textentry->setPlainText(track->comment()); + connect(textentry, SIGNAL(textChanged()), SLOT(textChanged())); + label1->setText(tr("Track Comment:")); + label2->setText(track->name()); + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void TrackComment::songChanged(int flags) + { + if ((flags & (SC_TRACK_INSERTED|SC_TRACK_REMOVED|SC_TRACK_MODIFIED)) == 0) + return; + if (!song->trackExists(track)) { + close(); + return; + } + label2->setText(track->name()); + QString txt(textentry->document()->toPlainText()); + if (track->comment() != txt) { + disconnect(textentry, SIGNAL(textChanged()), this, SLOT(textChanged())); + textentry->setPlainText(track->comment()); +// textentry->setCursorPosition(1000, 1000); + connect(textentry, SIGNAL(textChanged()), this, SLOT(textChanged())); + } + } + +//--------------------------------------------------------- +// setText +//--------------------------------------------------------- + +void TrackComment::setText(const QString& s) + { + track->setComment(s); + song->update(SC_TRACK_MODIFIED); + } + diff --git a/attic/muse_qt4_evolution/muse/widgets/comment.h b/attic/muse_qt4_evolution/muse/widgets/comment.h new file mode 100644 index 00000000..9d356d7a --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/comment.h @@ -0,0 +1,69 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __COMMENT_H__ +#define __COMMENT_H__ + +#include "ui_comment.h" + +namespace AL { + class Xml; + }; +using AL::Xml; + +class Track; + +//--------------------------------------------------------- +// Comment +//--------------------------------------------------------- + +class Comment : public QWidget, public Ui::CommentBase { + Q_OBJECT + + private: + virtual void setText(const QString& s) = 0; + + private slots: + void textChanged(); + + public: + Comment(QWidget* parent); + }; + +//--------------------------------------------------------- +// TrackComment +//--------------------------------------------------------- + +class TrackComment : public Comment { + Track* track; + Q_OBJECT + + private: + virtual void setText(const QString& s); + + private slots: + void songChanged(int); + + public: + TrackComment(Track*, QWidget*); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/widgets/comment.ui b/attic/muse_qt4_evolution/muse/widgets/comment.ui new file mode 100644 index 00000000..fc1b8d64 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/comment.ui @@ -0,0 +1,97 @@ + + + + + CommentBase + + + + 0 + 0 + 387 + 205 + + + + Form1 + + + + 11 + + + 6 + + + + + 0 + + + 6 + + + + + + 4 + 1 + 0 + 0 + + + + Track Comment + + + + + + + + Arial + 12 + 75 + false + true + false + false + + + + QFrame::Box + + + QFrame::Sunken + + + 1 + + + Track 1 + + + + + + + + + + Arial + 12 + 75 + false + true + false + false + + + + + + + qPixmapFromMimeSource + + + diff --git a/attic/muse_qt4_evolution/muse/widgets/ctrlcombo.cpp b/attic/muse_qt4_evolution/muse/widgets/ctrlcombo.cpp new file mode 100644 index 00000000..3139265a --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/ctrlcombo.cpp @@ -0,0 +1,68 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "ctrlcombo.h" + +//--------------------------------------------------------- +// CtrlComboBox +//--------------------------------------------------------- + +CtrlComboBox::CtrlComboBox(QWidget* parent) + : QComboBox(parent) + { + const char* ctxt[] = { + "No Ctrl", "BankSelMSB", "Modulation", "BreathCtrl", + "Control 3", "Foot Ctrl", "Porta Time", "DataEntMSB", + "MainVolume", "Balance", "Control 9", "Pan", + "Expression", "Control 12", "Control 13", "Control 14", + "Control 15", "Gen.Purp.1", "Gen.Purp.2", "Gen.Purp.3", + "Gen.Purp.4", "Control 20", "Control 21", "Control 22", + "Control 23", "Control 24", "Control 25", "Control 26", + "Control 27", "Control 28", "Control 29", "Control 30", + "Control 31", "BankSelLSB", "Modul. LSB", "BrthCt.LSB", + "Control 35", "FootCt.LSB", "Port.T LSB", "DataEntLSB", + "MainVolLSB", "BalanceLSB", "Control 41", "Pan LSB", + "Expr. LSB", "Control 44", "Control 45", "Control 46", + "Control 47", "Gen.P.1LSB", "Gen.P.2LSB", "Gen.P.3LSB", + "Gen.P.4LSB", "Control 52", "Control 53", "Control 54", + "Control 55", "Control 56", "Control 57", "Control 58", + "Control 59", "Control 60", "Control 61", "Control 62", + "Control 63", "Sustain", "Porta Ped", "Sostenuto", + "Soft Pedal", "Control 68", "Hold 2", "Control 70", + "HarmonicCo", "ReleaseTime", "Attack Time", "Brightness", + "Control 75", "Control 76", "Control 77", "Control 78", + "Control 79", "Gen.Purp.5", "Gen.Purp.6", "Gen.Purp.7", + "Gen.Purp.8", "Porta Ctrl", "Control 85", "Control 86", + "Control 87", "Control 88", "Control 89", "Control 90", + "Effect1Dep", "Effect2Dep", "Effect3Dep", "Effect4Dep", + "Phaser Dep", "Data Incr", "Data Decr", "NRPN LSB", + "NRPN MSB", "RPN LSB", "RPN MSB", "Control102", + "Control103", "Control104", "Control105", "Control106", + "Control107", "Control108", "Control109", "Control110", + "Control111", "Control112", "Control113", "Control114", + "Control115", "Control116", "Control117", "Control118", + "Control119", "AllSndOff", "Reset Ctrl", "Local Ctrl", + "AllNoteOff", "OmniModOff", "OmniModeOn", "MonoModeOn", + "PolyModeOn" + }; + for (unsigned int i = 0; i < sizeof(ctxt)/sizeof(*ctxt); ++i) + addItem(QString(ctxt[i])); + } + diff --git a/attic/muse_qt4_evolution/muse/widgets/ctrlcombo.h b/attic/muse_qt4_evolution/muse/widgets/ctrlcombo.h new file mode 100644 index 00000000..1eb59ab0 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/ctrlcombo.h @@ -0,0 +1,32 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __CTRLGRP_H__ +#define __CTRLGRP_H__ + +class CtrlComboBox : public QComboBox { + Q_OBJECT + public: + CtrlComboBox(QWidget* parent); + }; + + +#endif + diff --git a/attic/muse_qt4_evolution/muse/widgets/dentry.cpp b/attic/muse_qt4_evolution/muse/widgets/dentry.cpp new file mode 100644 index 00000000..b52d4363 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/dentry.cpp @@ -0,0 +1,208 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "dentry.h" +#include "globals.h" + +#define TIMER1 400 +#define TIMER2 200 +#define TIMEC 7 +#define TIMER3 100 +#define TIMEC2 20 +#define TIMER4 50 + +//--------------------------------------------------------- +// Dentry +// lineedit double values +//--------------------------------------------------------- + +Dentry::Dentry(QWidget* parent) + : QLineEdit(parent) + { + _id = -1; + drawFrame = false; + QLineEdit::setFrame(drawFrame); + timer = new QTimer(this); + connect(timer, SIGNAL(timeout()), SLOT(repeat())); + val = 0.01; + connect(this, SIGNAL(returnPressed()), SLOT(endEdit())); + setCursor(QCursor(Qt::ArrowCursor)); + evx = 1.0; + } + +//--------------------------------------------------------- +// setFrame +//--------------------------------------------------------- + +void Dentry::setFrame(bool flag) + { + drawFrame = flag; + QLineEdit::setFrame(drawFrame); + update(); + } + +//--------------------------------------------------------- +// endEdit +//--------------------------------------------------------- + +void Dentry::endEdit() + { + if (isModified()) { + if (setSValue(text())) { + setString(val); + return; + } + } + setString(val); + clearFocus(); + if (!drawFrame) + QLineEdit::setFrame(false); + } + +//--------------------------------------------------------- +// mousePressEvent +//--------------------------------------------------------- + +void Dentry::mousePressEvent(QMouseEvent* event) + { + button = event->button(); + starty = event->y(); + evx = double(event->x()); + timecount = 0; + repeat(); + timer->start(TIMER1); + } + +//--------------------------------------------------------- +// wheelEvent +//--------------------------------------------------------- + +void Dentry::wheelEvent(QWheelEvent* event) + { + int delta = event->delta(); + + if (delta < 0) + decValue(-1.0); + else if (delta > 0) + incValue(1.0); + } + +//--------------------------------------------------------- +// repeat +//--------------------------------------------------------- + +void Dentry::repeat() + { + if (timecount == 1) { + ++timecount; + timer->stop(); + timer->start(TIMER2); + return; + } + ++timecount; + if (timecount == TIMEC) { + timer->stop(); + timer->start(TIMER3); + } + if (timecount == TIMEC2) { + timer->stop(); + timer->start(TIMER4); + } + + switch (button) { + case Qt::LeftButton: + return; + case Qt::MidButton: + decValue(evx); + break; + case Qt::RightButton: + incValue(evx); + break; + default: + break; + } + } + +//--------------------------------------------------------- +// mouseReleaseEvent +//--------------------------------------------------------- + +void Dentry::mouseReleaseEvent(QMouseEvent*) + { + button = Qt::NoButton; + timer->stop(); + } + +//--------------------------------------------------------- +// mouseMoveEvent +//--------------------------------------------------------- + +void Dentry::mouseMoveEvent(QMouseEvent*) + { + switch (button) { + case Qt::LeftButton: + break; + case Qt::MidButton: + break; + case Qt::RightButton: + break; + default: + break; + } + } + +//--------------------------------------------------------- +// mouseDoubleClickEvent +//--------------------------------------------------------- + +void Dentry::mouseDoubleClickEvent(QMouseEvent* event) + { + if (event->button() != Qt::LeftButton) { + mousePressEvent(event); + return; + } + setFocus(); + QLineEdit::setFrame(true); + update(); + } + +//--------------------------------------------------------- +// setValue +//--------------------------------------------------------- + +void Dentry::setValue(double v) + { + if (v == val) + return; + setString(v); +#if 0 + if (setString(v)) { + clearFocus(); + if (!drawFrame) + QLineEdit::setFrame(false); + setEnabled(false); + } + else { + setEnabled(true); + } +#endif + val = v; + } + diff --git a/attic/muse_qt4_evolution/muse/widgets/dentry.h b/attic/muse_qt4_evolution/muse/widgets/dentry.h new file mode 100644 index 00000000..5e2ba724 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/dentry.h @@ -0,0 +1,79 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __DENTRY_H__ +#define __DENTRY_H__ + +class QTimer; + +//--------------------------------------------------------- +// Dentry +//--------------------------------------------------------- + +class Dentry : public QLineEdit { + Q_OBJECT + + Q_PROPERTY( int id READ id WRITE setId ) + Q_PROPERTY( double value READ value WRITE setValue ) + Q_PROPERTY( bool frame READ frame WRITE setFrame ) + + int button; + int starty; + bool drawFrame; + QTimer* timer; + double evx; + int timecount; + + virtual void wheelEvent(QWheelEvent*); + virtual void mousePressEvent(QMouseEvent*); + virtual void mouseMoveEvent(QMouseEvent*); + virtual void mouseDoubleClickEvent(QMouseEvent*); + virtual void mouseReleaseEvent(QMouseEvent*); + + protected: + int _id; + double val; + + virtual void incValue(double x) = 0; + virtual void decValue(double x) = 0; + virtual bool setString(double) = 0; + virtual bool setSValue(const QString&) = 0; + + private slots: + void repeat(); + + protected slots: + void endEdit(); + + signals: + void valueChanged(double, int); + + public slots: + virtual void setValue(double); + + public: + Dentry(QWidget* parent = 0); + double value() const { return val; } + bool frame() const { return drawFrame; } + void setFrame(bool); + int id() const { return _id; } + void setId(int i) { _id = i; } + }; +#endif diff --git a/attic/muse_qt4_evolution/muse/widgets/doublelabel.cpp b/attic/muse_qt4_evolution/muse/widgets/doublelabel.cpp new file mode 100644 index 00000000..4026800b --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/doublelabel.cpp @@ -0,0 +1,144 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "doublelabel.h" +#include "utils.h" + +//--------------------------------------------------------- +// DoubleLabel +//--------------------------------------------------------- + +DoubleLabel::DoubleLabel(QWidget* parent) + : Dentry(parent), _specialText("---") + { + min = 0.0; + max = 1.0; + _precision = 3; + setValue(0.0); + } + +DoubleLabel::DoubleLabel(double _val, double m, double mx, QWidget* parent) + : Dentry(parent), _specialText("---") + { + min = m; + max = mx; + _precision = 3; + setValue(_val); + } + +//--------------------------------------------------------- +// setString +//--------------------------------------------------------- + +bool DoubleLabel::setString(double v) + { + QString s; + if (v < min || v > max) { + setText(_specialText); + return true; + } + s.setNum(v, 'f', _precision); + if (!_suffix.isEmpty()) { + s += " "; + s += _suffix; + } + + setText(s); + return false; + } + +//--------------------------------------------------------- +// setSValue +//--------------------------------------------------------- + +bool DoubleLabel::setSValue(const QString& s) + { + bool ok; + double v = s.toDouble(&ok); + if (ok && (v != val)) { + if (v < min) + v = min; + if (v > max) + v = max; + setValue(v); + emit valueChanged(val, _id); + } + return false; + } + +//--------------------------------------------------------- +// incValue +//--------------------------------------------------------- + +void DoubleLabel::incValue(double) + { + if (val + 1.0 < max) { + setValue(val + 1.0); + emit valueChanged(val, _id); + } + } + +//--------------------------------------------------------- +// decValue +//--------------------------------------------------------- + +void DoubleLabel::decValue(double) + { + if (val - 1.0 > min) { + setValue(val - 1.0); + emit valueChanged(val, _id); + } + } + +//--------------------------------------------------------- +// setPrecision +//--------------------------------------------------------- + +void DoubleLabel::setPrecision(int v) + { + _precision = v; + setString(val); + } + +//--------------------------------------------------------- +// sizeHint +//--------------------------------------------------------- + +QSize DoubleLabel::sizeHint() const + { + QFontMetrics fm = fontMetrics(); + int h = fm.height() + 4; + int n = _precision + 3; +#if 0 + double aval = fabs(val); + if (aval >= 10.0) + ++n; + if (aval >= 100.0) + ++n; + if (aval >= 1000.0) + ++n; + if (aval >= 10000.0) + ++n; + if (aval >= 100000.0) + ++n; +#endif + int w = fm.width(QString("-0.")) + fm.width('0') * n + 6; + return QSize(w, h); + } diff --git a/attic/muse_qt4_evolution/muse/widgets/doublelabel.h b/attic/muse_qt4_evolution/muse/widgets/doublelabel.h new file mode 100644 index 00000000..0ed72514 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/doublelabel.h @@ -0,0 +1,68 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __DOUBLELABEL_H__ +#define __DOUBLELABEL_H__ + +#include "dentry.h" + +//--------------------------------------------------------- +// DoubleLabel +//--------------------------------------------------------- + +class DoubleLabel : public Dentry { + Q_PROPERTY( double minValue READ minValue WRITE setMinValue ) + Q_PROPERTY( double maxValue READ maxValue WRITE setMaxValue ) + Q_PROPERTY( QString specialText READ specialText WRITE setSpecialText ) + Q_PROPERTY( QString suffix READ suffix WRITE setSuffix ) + Q_PROPERTY( int precision READ precision WRITE setPrecision ) + + double min, max; + QString _specialText; // text to show if value outside min,max + QString _suffix; + int _precision; + Q_OBJECT + + virtual bool setSValue(const QString&); + virtual bool setString(double val); + virtual void incValue(double); + virtual void decValue(double); + + public: + DoubleLabel(QWidget* parent = 0); + DoubleLabel(double val, double min, double max, QWidget*); + virtual QSize sizeHint() const; + double minValue() const { return min; } + double maxValue() const { return max; } + void setMinValue(double v) { min = v; } + void setMaxValue(double v) { max = v; } + void setRange(double a, double b) { min = a; max = b; } + int precision() const { return _precision; } + void setPrecision(int val); + QString specialText() const { return _specialText; } + void setSpecialText(const QString& s) { + _specialText = s; + update(); + } + QString suffix() const { return _suffix; } + void setSuffix(const QString& s) { _suffix = s; } + }; + +#endif diff --git a/attic/muse_qt4_evolution/muse/widgets/editmetadialogbase.cpp b/attic/muse_qt4_evolution/muse/widgets/editmetadialogbase.cpp new file mode 100644 index 00000000..0bbe8dd1 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/editmetadialogbase.cpp @@ -0,0 +1,110 @@ +#include "editmetadialogbase.h" + +#include +#include +/* + * Constructs a EditMetaDialogBase as a child of 'parent', with the + * name 'name' and widget flags set to 'f'. + * + * The dialog will by default be modeless, unless you set 'modal' to + * true to construct a modal dialog. + */ +EditMetaDialogBase::EditMetaDialogBase(QWidget* parent, const char* name, bool modal, Qt::WFlags fl) + : QDialog(parent, name, modal, fl) +{ + setupUi(this); + + + // signals and slots connections + connect(buttonOk, SIGNAL(clicked()), this, SLOT(accept())); + connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject())); +} + +/* + * Destroys the object and frees any allocated resources + */ +EditMetaDialogBase::~EditMetaDialogBase() +{ + // no need to delete child widgets, Qt does it all for us +} + +/* + * Sets the strings of the subwidgets using the current + * language. + */ +void EditMetaDialogBase::languageChange() +{ + retranslateUi(this); +} + +/**************************************************************************** +** Meta object code from reading C++ file 'editmetadialogbase.h' +** +** Created: Fri Sep 23 12:43:18 2005 +** by: The Qt Meta Object Compiler version 58 (Qt 4.0.1) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "editmetadialogbase.h" +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'editmetadialogbase.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 58 +#error "This file was generated using the moc from 4.0.1. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +static const uint qt_meta_data_EditMetaDialogBase[] = { + + // content: + 1, // revision + 0, // classname + 0, 0, // classinfo + 1, 10, // methods + 0, 0, // properties + 0, 0, // enums/sets + + // slots: signature, parameters, type, tag, flags + 20, 19, 19, 19, 0x09, + + 0 // eod +}; + +static const char qt_meta_stringdata_EditMetaDialogBase[] = { + "EditMetaDialogBase\0\0languageChange()\0" +}; + +const QMetaObject EditMetaDialogBase::staticMetaObject = { + { &QDialog::staticMetaObject, qt_meta_stringdata_EditMetaDialogBase, + qt_meta_data_EditMetaDialogBase, 0 } +}; + +const QMetaObject *EditMetaDialogBase::metaObject() const +{ + return &staticMetaObject; +} + +void *EditMetaDialogBase::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_EditMetaDialogBase)) + return static_cast(const_cast(this)); + if (!strcmp(_clname, "Ui::EditMetaDialogBase")) + return static_cast(const_cast(this)); + return QDialog::qt_metacast(_clname); +} + +int EditMetaDialogBase::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QDialog::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: languageChange(); break; + } + _id -= 1; + } + return _id; +} diff --git a/attic/muse_qt4_evolution/muse/widgets/editmetadialogbase.ui b/attic/muse_qt4_evolution/muse/widgets/editmetadialogbase.ui new file mode 100644 index 00000000..3f5730de --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/editmetadialogbase.ui @@ -0,0 +1,137 @@ + + + + + EditMetaDialogBase + + + + 0 + 0 + 400 + 300 + + + + Dialog + + + + 8 + + + 6 + + + + + + + + 0 + + + 6 + + + + + Qt::Horizontal + + + + 131 + 31 + + + + + + + + OK + + + + + + + Cancel + + + + + + + + + + + + + + + Enter Hex + + + + + + + Meta Type: + + + + + + + Time Position: + + + + + + + TextLabel + + + + + + + + + + okButton + clicked() + EditMetaDialogBase + accept() + + + 278 + 253 + + + 96 + 254 + + + + + cancelButton + clicked() + EditMetaDialogBase + reject() + + + 369 + 253 + + + 179 + 282 + + + + + diff --git a/attic/muse_qt4_evolution/muse/widgets/fdialogbuttons.ui b/attic/muse_qt4_evolution/muse/widgets/fdialogbuttons.ui new file mode 100644 index 00000000..9d46cb59 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/fdialogbuttons.ui @@ -0,0 +1,167 @@ + + + + + FileDialogButtons + + + + 0 + 0 + 175 + 438 + + + + + 5 + 5 + 0 + 0 + + + + Form1 + + + + 11 + + + 6 + + + + + + + + true + + + Qt::Vertical + + + true + + + + 11 + + + 6 + + + + + Global + + + image0 + + + true + + + + + + + User + + + image1 + + + true + + + + + + + Project + + + image2 + + + true + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 60 + + + + + + + + Load: + + + Qt::Vertical + + + true + + + + 11 + + + 6 + + + + + Songdata + +Cofiguration + + + + + + + only +Songdata + + + true + + + + + + + + + + + + + Q3ButtonGroup + +
Qt3Support/Q3ButtonGroup
+ 1 + +
+
+ + +
diff --git a/attic/muse_qt4_evolution/muse/widgets/filedialog.cpp b/attic/muse_qt4_evolution/muse/widgets/filedialog.cpp new file mode 100644 index 00000000..eec678f5 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/filedialog.cpp @@ -0,0 +1,193 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "filedialog.h" +#include "../globals.h" + +//--------------------------------------------------------- +// MFileDialog +//--------------------------------------------------------- + +MFileDialog::MFileDialog(const QString& dir, + const QString& filter, QWidget* parent, bool /*writeFlag*/) + : QFileDialog(parent, QString(), dir, filter) + { + } + +//--------------------------------------------------------- +// getOpenFileName +//--------------------------------------------------------- + +QString getOpenFileName(const QString &startWith, + const QStringList& filters, QWidget* parent, const QString& name) + { + MFileDialog *dlg = new MFileDialog(startWith, QString::null, parent); + dlg->setFilters(filters); + dlg->setWindowTitle(name); + dlg->setFileMode(QFileDialog::ExistingFile); + QString result; + if (dlg->exec() == QDialog::Accepted) { + QStringList sl = dlg->selectedFiles(); + result = sl.at(0); + } + delete dlg; + return result; + } + +//--------------------------------------------------------- +// getSaveFileName +//--------------------------------------------------------- + +QString getSaveFileName(const QString &startWith, + const QStringList& filters, QWidget* parent, const QString& name) + { + MFileDialog *dlg = new MFileDialog(startWith, QString::null, parent, true); + dlg->setFilters(filters); + dlg->setWindowTitle(name); + dlg->setFileMode(QFileDialog::AnyFile); + QString result; + if (dlg->exec() == QDialog::Accepted) { + QStringList sl = dlg->selectedFiles(); + result = sl.at(0); + } + delete dlg; + return result; + } + +//--------------------------------------------------------- +// getImageFileName +//--------------------------------------------------------- + +QString getImageFileName(const QString& startWith, + const QStringList& filters, QWidget* parent, const QString& name) + { + QString initialSelection; + QString* workingDirectory = new QString(QDir::current().absolutePath()); + if (!startWith.isEmpty() ) { + QFileInfo fi(startWith); + if (fi.exists() && fi.isDir()) { + *workingDirectory = startWith; + } + else if (fi.exists() && fi.isFile()) { + *workingDirectory = fi.absolutePath(); + initialSelection = fi.absolutePath(); + } + } + MFileDialog *dlg = new MFileDialog(*workingDirectory, QString::null, + parent); + +//TD dlg->setContentsPreviewEnabled(true); +// ContentsPreview* preview = new ContentsPreview(dlg); +// dlg->setContentsPreview(preview, preview); +// dlg->setPreviewMode(QFileDialog::Contents); + + dlg->setWindowTitle(name); + dlg->setFilters(filters); + dlg->setFileMode(QFileDialog::ExistingFile); + QString result; + if (!initialSelection.isEmpty()) + dlg->selectFile(initialSelection); + if (dlg->exec() == QDialog::Accepted) { + QStringList sl = dlg->selectedFiles(); + result = sl.at(0); + } + delete dlg; + return result; + } + +//--------------------------------------------------------- +// fileOpen +// opens file "name" with extension "ext" in mode "mode" +// +// mode = "r" or "w" +// noError show no error if file was not found in "r" +// mode. Has no effect in "w" mode +// overwriteWarning +// warn in "w" mode, if file exists +//--------------------------------------------------------- + +QFile* fileOpen(QWidget* parent, QString name, const QString& ext, + QIODevice::OpenMode mode, bool overwriteWarning) + { + QFileInfo info(name); + + if (info.completeSuffix() == "") { + name += ext; + info.setFile(name); + } + if (mode == QIODevice::WriteOnly && overwriteWarning && info.exists()) { + QString s(QWidget::tr("File\n") + name + QWidget::tr("\nexists")); + int rv = QMessageBox::warning(parent, + QWidget::tr("MusE: write"), + s, + QWidget::tr("Overwrite"), + QWidget::tr("Quit"), QString::null, 0, 1); + switch(rv) { + case 0: // overwrite + break; + case 1: // quit + return 0; + } + } + QFile* file = new QFile(name); + if (!file->open(mode)) { + QString s(QWidget::tr("Open File\n") + name + QWidget::tr("\nfailed: ") + + QString(strerror(errno))); + QMessageBox::critical(parent, QWidget::tr("MusE: Open File"), s); + } + return file; + } + +//--------------------------------------------------------- +// MFile +//--------------------------------------------------------- + +MFile::MFile(const QString& _path, const QString& _ext) + : path(_path), ext(_ext) + { + f = 0; + } + +MFile::~MFile() + { + if (f) { + f->close(); + delete f; + } + } + +//--------------------------------------------------------- +// open +//--------------------------------------------------------- + +QFile* MFile::open(QIODevice::OpenMode mode, const QStringList& pattern, + QWidget* parent, bool warnIfOverwrite, const QString& caption) + { + QString name; + if (mode == QIODevice::ReadOnly) + name = getOpenFileName(path, pattern, parent, caption); + else + name = getSaveFileName(path, pattern, parent, caption); + if (name.isEmpty()) + return 0; + f = fileOpen(parent, name, ext, mode, warnIfOverwrite); + return f; + } + diff --git a/attic/muse_qt4_evolution/muse/widgets/filedialog.h b/attic/muse_qt4_evolution/muse/widgets/filedialog.h new file mode 100644 index 00000000..cb906e00 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/filedialog.h @@ -0,0 +1,65 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +class FileDialogButtons; + +//--------------------------------------------------------- +// MFileDialog +//--------------------------------------------------------- + +class MFileDialog : public QFileDialog { + bool showButtons; + QString baseDir; + Q_OBJECT + + public: + MFileDialog(const QString& dir, const QString& filter = QString::null, + QWidget* parent = 0, bool writeFlag = false); + }; + +QString getSaveFileName(const QString& startWidth, const QStringList& filter, + QWidget* parent, const QString& name); +QString getOpenFileName(const QString& startWidth, const QStringList& filter, + QWidget* parent, const QString& name); +QString getImageFileName(const QString& startWith, const QStringList& filter, + QWidget* parent, const QString& name); + +QFile* fileOpen(QWidget*, QString, const QString&, + QIODevice::OpenMode, bool = false); + + +//--------------------------------------------------------- +// MFile +// "Muse" File +//--------------------------------------------------------- + +class MFile { + QFile* f; + QString path; + QString ext; + + public: + MFile(const QString& path, const QString& ext); + ~MFile(); + QFile* open(QIODevice::OpenMode, const QStringList& pattern, + QWidget* parent, + bool warnIfOverwrite, const QString& caption); + }; + diff --git a/attic/muse_qt4_evolution/muse/widgets/floatlabel.cpp b/attic/muse_qt4_evolution/muse/widgets/floatlabel.cpp new file mode 100644 index 00000000..75e81419 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/floatlabel.cpp @@ -0,0 +1,144 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "doublelabel.h" +#include "utils.h" + +//--------------------------------------------------------- +// DoubleLabel +//--------------------------------------------------------- + +DoubleLabel::DoubleLabel(QWidget* parent, const char* name) + : Dentry(parent, name), _specialText("---") + { + min = 0.0; + max = 1.0; + _precision = 3; + setValue(0.0); + } + +DoubleLabel::DoubleLabel(double _val, double m, double mx, QWidget* parent) + : Dentry(parent), _specialText("---") + { + min = m; + max = mx; + _precision = 3; + setValue(_val); + } + +//--------------------------------------------------------- +// setString +//--------------------------------------------------------- + +bool DoubleLabel::setString(double v) + { + QString s; + if (v < min || v > max) { + setText(_specialText); + return true; + } + s.setNum(v, 'f', _precision); + if (!_suffix.isEmpty()) { + s += " "; + s += _suffix; + } + + setText(s); + return false; + } + +//--------------------------------------------------------- +// setSValue +//--------------------------------------------------------- + +bool DoubleLabel::setSValue(const QString& s) + { + bool ok; + double v = s.toDouble(&ok); + if (ok && (v != val)) { + if (v < min) + v = min; + if (v > max) + v = max; + setValue(v); + emit valueChanged(val, _id); + } + return false; + } + +//--------------------------------------------------------- +// incValue +//--------------------------------------------------------- + +void DoubleLabel::incValue(double) + { + if (val + 1.0 < max) { + setValue(val + 1.0); + emit valueChanged(val, _id); + } + } + +//--------------------------------------------------------- +// decValue +//--------------------------------------------------------- + +void DoubleLabel::decValue(double) + { + if (val - 1.0 > min) { + setValue(val - 1.0); + emit valueChanged(val, _id); + } + } + +//--------------------------------------------------------- +// setPrecision +//--------------------------------------------------------- + +void DoubleLabel::setPrecision(int v) + { + _precision = v; + setString(val); + } + +//--------------------------------------------------------- +// sizeHint +//--------------------------------------------------------- + +QSize DoubleLabel::sizeHint() const + { + QFontMetrics fm = fontMetrics(); + int h = fm.height() + 4; + int n = _precision + 3; +#if 0 + double aval = fabs(val); + if (aval >= 10.0) + ++n; + if (aval >= 100.0) + ++n; + if (aval >= 1000.0) + ++n; + if (aval >= 10000.0) + ++n; + if (aval >= 100000.0) + ++n; +#endif + int w = fm.width(QString("-0.")) + fm.width('0') * n + 6; + return QSize(w, h); + } diff --git a/attic/muse_qt4_evolution/muse/widgets/floatlabel.h b/attic/muse_qt4_evolution/muse/widgets/floatlabel.h new file mode 100644 index 00000000..9f51d7d4 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/floatlabel.h @@ -0,0 +1,68 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __FLOATLABEL_H__ +#define __FLOATLABEL_H__ + +#include "dentry.h" + +//--------------------------------------------------------- +// FloatLabel +//--------------------------------------------------------- + +class FloatLabel : public Dentry { + Q_PROPERTY(float minValue READ minValue WRITE setMinValue ) + Q_PROPERTY(float maxValue READ maxValue WRITE setMaxValue ) + Q_PROPERTY(QString specialText READ specialText WRITE setSpecialText ) + Q_PROPERTY(QString suffix READ suffix WRITE setSuffix ) + Q_PROPERTY(int precision READ precision WRITE setPrecision ) + + float min, max; + QString _specialText; // text to show if value outside min,max + QString _suffix; + int _precision; + Q_OBJECT + + virtual bool setSValue(const QString&); + virtual bool setString(double val); + virtual void incValue(double); + virtual void decValue(double); + + public: + DoubleLabel(QWidget*, const char* name = 0); + DoubleLabel(double val, double min, double max, QWidget*); + virtual QSize sizeHint() const; + double minValue() const { return min; } + double maxValue() const { return max; } + void setMinValue(double v) { min = v; } + void setMaxValue(double v) { max = v; } + void setRange(double a, double b) { min = a; max = b; } + int precision() const { return _precision; } + void setPrecision(int val); + QString specialText() const { return _specialText; } + void setSpecialText(const QString& s) { + _specialText = s; + update(); + } + QString suffix() const { return _suffix; } + void setSuffix(const QString& s) { _suffix = s; } + }; + +#endif diff --git a/attic/muse_qt4_evolution/muse/widgets/fontsel.cpp b/attic/muse_qt4_evolution/muse/widgets/fontsel.cpp new file mode 100644 index 00000000..b0d6c95b --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/fontsel.cpp @@ -0,0 +1,138 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "icons.h" +#include "fontsel.h" + +//--------------------------------------------------------- +// FontSel +//--------------------------------------------------------- + +FontSel::FontSel(QWidget* parent, const QFont& f, const QString& name) + : QWidget(parent) + { + _font = f; + QHBoxLayout* box = new QHBoxLayout(this); + + cb = new QComboBox(this); + cb->setFixedWidth(80); + cb->addItem(QString("arial")); + cb->addItem(QString("avantgarde")); + cb->addItem(QString("charter")); + cb->addItem(QString("garamond")); + cb->addItem(QString("gillsans")); + cb->addItem(QString("helvetica")); + cb->addItem(QString("times")); + cb->addItem(QString("terminal")); + cb->addItem(QString("utopia")); + cb->addItem(QString("new century schoolbook")); + + QLabel* l1 = new QLabel(tr("Size:"), this); + s1 = new QSpinBox(this); + s1->setRange(8, 48); + + fcb1 = new QToolButton(this); + fcb1->setCheckable(true); + fcb1->setIcon(*boldIcon); + + fcb2 = new QToolButton(this); + fcb2->setCheckable(true); + fcb2->setIcon(*italicIcon); + + fcb3 = new QToolButton(this); + fcb3->setCheckable(true); + fcb3->setIcon(*underlinedIcon); + + QToolButton* pb = new QToolButton(this); + connect(pb, SIGNAL(pressed()), SLOT(fontSelect())); + pb->setText(QString("??")); + + QLabel* l2 = new QLabel(name, this); + + box->addWidget(cb); + box->addSpacing(8); + box->addWidget(l1); + box->addSpacing(5); + box->addWidget(s1); + box->addSpacing(5); + box->addWidget(fcb1); + box->addWidget(fcb2); + box->addWidget(fcb3); + box->addSpacing(2); + box->addWidget(pb); + box->addSpacing(5); + box->addWidget(l2); + box->addStretch(100); + setFixedHeight(18); + setFont(); + } + +//--------------------------------------------------------- +// fontSelect +//--------------------------------------------------------- + +void FontSel::fontSelect() + { + bool ok; + QFont f = QFontDialog::getFont(&ok, _font, this); + if (ok) { + _font = f; + setFont(); + } + } + +//--------------------------------------------------------- +// setFont +//--------------------------------------------------------- + +void FontSel::setFont() + { + s1->setValue(_font.pointSize()); + fcb1->setChecked(_font.weight() == QFont::Bold); + fcb2->setChecked(_font.italic()); + fcb3->setChecked(_font.underline()); + int i; + for (i = 0; i < cb->count(); ++i) { + QString s = cb->itemText(i); + if (s == _font.family()) { + cb->setCurrentIndex(i); + break; + } + } + if (i == cb->count()) { + cb->addItem(_font.family()); + cb->setCurrentIndex(i); + } + } + +//--------------------------------------------------------- +// font +//--------------------------------------------------------- + +const QFont& FontSel::font() + { + _font.setPointSize(s1->value()); + _font.setWeight(fcb1->isChecked() ? QFont::Bold : QFont::Normal); + _font.setItalic(fcb2->isChecked()); + _font.setUnderline(fcb3->isChecked()); + _font.setFamily(cb->currentText()); + return _font; + } + diff --git a/attic/muse_qt4_evolution/muse/widgets/fontsel.h b/attic/muse_qt4_evolution/muse/widgets/fontsel.h new file mode 100644 index 00000000..92d076b6 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/fontsel.h @@ -0,0 +1,57 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __FONTSEL_H__ +#define __FONTSEL_H__ + +#include "song.h" + +class QFont; +class QSpinBox; +class QToolButton; +class QComboBox; + +//--------------------------------------------------------- +// FontSel +//--------------------------------------------------------- + +class FontSel : public QWidget { + QFont _font; + QSpinBox* s1; + QToolButton* fcb1; + QToolButton* fcb2; + QToolButton* fcb3; + QComboBox* cb; + + Q_OBJECT + + void setFont(); + + private slots: + void fontSelect(); + + public: + FontSel(QWidget* parent, const QFont&, const QString&); + const QFont& font(); + }; + + +#endif + diff --git a/attic/muse_qt4_evolution/muse/widgets/greendotbutton.h b/attic/muse_qt4_evolution/muse/widgets/greendotbutton.h new file mode 100644 index 00000000..84bfab96 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/greendotbutton.h @@ -0,0 +1,38 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __GREENDOTBUTTON_H__ +#define __GREENDOTBUTTON_H__ + +#include "simplebutton.h" + +//--------------------------------------------------------- +// GreendotButton +//--------------------------------------------------------- + +class GreendotButton : public SimpleButton { + Q_OBJECT + + public: + GreendotButton(QWidget* parent = 0); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/widgets/intlabel.h b/attic/muse_qt4_evolution/muse/widgets/intlabel.h new file mode 100644 index 00000000..c8919735 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/intlabel.h @@ -0,0 +1,56 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __INTLABEL_H__ +#define __INTLABEL_H__ + +#include "nentry.h" + +class QString; + +//--------------------------------------------------------- +// IntLabel +//--------------------------------------------------------- + +class IntLabel : public Nentry { + int min, max, off; + QString suffix; + QString specialValue; + Q_OBJECT + + void init(); + + virtual bool setSValue(const QString&); + virtual bool setString(int val, bool editable = false); + virtual void incValue(int); + virtual void decValue(int); + + signals: + void valueChanged(int); + + public: + IntLabel(int, int, int, QWidget*, int _off = MAXINT, + const QString& = QString(""), int lpos = 0); + void setOff(int v); + void setSuffix(const QString& s) { suffix = s; } + void setSpecialValueText(const QString& s); + }; + +#endif diff --git a/attic/muse_qt4_evolution/muse/widgets/menutitle.cpp b/attic/muse_qt4_evolution/muse/widgets/menutitle.cpp new file mode 100644 index 00000000..0dd7ddab --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/menutitle.cpp @@ -0,0 +1,50 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "menutitle.h" + +//--------------------------------------------------------- +// MenuTitleItem +//--------------------------------------------------------- + +MenuTitleItem::MenuTitleItem(QString ss) + : s(ss) + { + } + +//--------------------------------------------------------- +// sizeHint +//--------------------------------------------------------- + +QSize MenuTitleItem::sizeHint() + { + return QSize(60, 20); + } + +//--------------------------------------------------------- +// drawItem +//--------------------------------------------------------- + +void MenuTitleItem::paint(QPainter* p, const QColorGroup&, bool, + bool, int x, int y, int w, int h) + { + p->fillRect(x, y, w, h, QBrush(lightGray)); + p->drawText(x, y, w, h, AlignCenter, s); + } diff --git a/attic/muse_qt4_evolution/muse/widgets/menutitle.h b/attic/muse_qt4_evolution/muse/widgets/menutitle.h new file mode 100644 index 00000000..f3e85849 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/menutitle.h @@ -0,0 +1,41 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MENUTITLE_H__ +#define __MENUTITLE_H__ + +//--------------------------------------------------------- +// MenuTitleItem +//--------------------------------------------------------- + +class MenuTitleItem : public QCustomMenuItem { + QString s; + virtual bool fullSpan() const { return true; } + virtual bool isSeparator() const { return true; } + virtual void paint(QPainter* p, const QColorGroup& cg, bool act, + bool, int, int, int, int); + virtual QSize sizeHint(); + + public: + MenuTitleItem(QString s); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/widgets/midisync.cpp b/attic/muse_qt4_evolution/muse/widgets/midisync.cpp new file mode 100644 index 00000000..7b6f69df --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/midisync.cpp @@ -0,0 +1,128 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "al/al.h" +#include "midisync.h" +#include "sync.h" + +//--------------------------------------------------------- +// MidiSyncConfig +// Midi Sync Config +//--------------------------------------------------------- + +MidiSyncConfig::MidiSyncConfig(QWidget* parent) + : QDialog(parent) + { + setupUi(this); + connect(okButton, SIGNAL(clicked()), SLOT(ok())); + connect(applyButton, SIGNAL(clicked()), SLOT(apply())); + connect(cancelButton, SIGNAL(clicked()), SLOT(cancel())); + + connect(syncMaster, SIGNAL(toggled(bool)), SLOT(syncMasterChanged(bool))); + connect(syncSlave, SIGNAL(toggled(bool)), SLOT(syncSlaveChanged(bool))); + +// dstDevId->setValue(txDeviceId); +// srcDevId->setValue(rxDeviceId); + + mtcSync->setChecked(genMTCSync); + mcSync->setChecked(genMCSync); + midiMachineControl->setChecked(genMMC); + + acceptMTCCheckbox->setChecked(acceptMTC); + acceptMCCheckbox->setChecked(acceptMC); + acceptMMCCheckbox->setChecked(acceptMMC); + + mtcSyncType->setCurrentIndex(AL::mtcType); + + mtcOffH->setValue(mtcOffset.h()); + mtcOffM->setValue(mtcOffset.m()); + mtcOffS->setValue(mtcOffset.s()); + mtcOffF->setValue(mtcOffset.f()); + mtcOffSf->setValue(mtcOffset.sf()); + + syncSlaveChanged(extSyncFlag); + } + +//--------------------------------------------------------- +// ok Pressed +//--------------------------------------------------------- + +void MidiSyncConfig::ok() + { + apply(); + cancel(); + } + +//--------------------------------------------------------- +// cancel Pressed +//--------------------------------------------------------- + +void MidiSyncConfig::cancel() + { + close(); + } + +//--------------------------------------------------------- +// apply Pressed +//--------------------------------------------------------- + +void MidiSyncConfig::apply() + { +// txDeviceId = dstDevId->value(); +// rxDeviceId = srcDevId->value(); + + genMTCSync = mtcSync->isChecked(); + genMCSync = mcSync->isChecked(); + genMMC = midiMachineControl->isChecked(); + + AL::mtcType = mtcSyncType->currentIndex(); + extSyncFlag = syncSlave->isChecked(); + + mtcOffset.setH(mtcOffH->value()); + mtcOffset.setM(mtcOffM->value()); + mtcOffset.setS(mtcOffS->value()); + mtcOffset.setF(mtcOffF->value()); + mtcOffset.setSf(mtcOffSf->value()); + + acceptMC = acceptMCCheckbox->isChecked(); + acceptMMC = acceptMMCCheckbox->isChecked(); + acceptMTC = acceptMTCCheckbox->isChecked(); + emit syncChanged(); + } + +//--------------------------------------------------------- +// syncMasterChanged +//--------------------------------------------------------- + +void MidiSyncConfig::syncMasterChanged(bool val) + { + syncSlave->setChecked(!val); + } + +//--------------------------------------------------------- +// syncSlaveChanged +//--------------------------------------------------------- + +void MidiSyncConfig::syncSlaveChanged(bool val) + { + syncMaster->setChecked(!val); + } + + diff --git a/attic/muse_qt4_evolution/muse/widgets/midisync.h b/attic/muse_qt4_evolution/muse/widgets/midisync.h new file mode 100644 index 00000000..c1db5fdd --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/midisync.h @@ -0,0 +1,49 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MIDISYNC_H__ +#define __MIDISYNC_H__ + +#include "ui_midisync.h" + +//--------------------------------------------------------- +// MidiSyncConfig +//--------------------------------------------------------- + +class MidiSyncConfig : public QDialog, private Ui::MidiSyncConfigBase { + Q_OBJECT + + private slots: + void syncMasterChanged(bool); + void syncSlaveChanged(bool); + void ok(); + void cancel(); + void apply(); + + signals: + void syncChanged(); + + public: + MidiSyncConfig(QWidget* parent=0); + MidiSyncConfig(); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/widgets/midisync.ui b/attic/muse_qt4_evolution/muse/widgets/midisync.ui new file mode 100644 index 00000000..6ea9ef1a --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/midisync.ui @@ -0,0 +1,711 @@ + + werner schweer + midi sync +configuration dialog + + MidiSyncConfigBase + + + + 0 + 0 + 530 + 359 + + + + + 4 + 4 + 0 + 0 + + + + MusE: Midi Sync + + + + 9 + + + 6 + + + + + Master + + + true + + + true + + + + 11 + + + 6 + + + + + true + + + Midi Time Code (MTC) + + + + + + + true + + + Midi Clock + + + + + + + true + + + Midi Machine Control (MMC) + + + + + + + 0 + + + 6 + + + + + true + + + + 5 + 0 + 0 + 0 + + + + Id: + + + + + + + true + + + + 5 + 0 + 0 + 0 + + + + device id + + + 127 + + + 0 + + + 127 + + + + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 30 + 20 + + + + + + + + + + + + + Slave + + + true + + + false + + + + 11 + + + 6 + + + + + false + + + accept MTC + + + + + + + false + + + accept Midi Clock + + + + + + + false + + + accept MMC + + + + + + + 0 + + + 6 + + + + + + 5 + 0 + 0 + 0 + + + + Id: + + + + + + + + 5 + 0 + 0 + 0 + + + + device id + + + 127 + + + 0 + + + 127 + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 40 + 20 + + + + + + + + + + + + + 0 + + + 6 + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 20 + 20 + + + + + + + + Apply + + + + + + + Ok + + + true + + + + + + + Cancel + + + + + + + + + true + + + + 5 + 5 + 0 + 0 + + + + MTC + + + + 9 + + + 6 + + + + + 0 + + + 6 + + + + + + 5 + 0 + 0 + 0 + + + + Type: + + + + + + + + 5 + 0 + 0 + 0 + + + + + 24 + + + + + 25 + + + + + 30D + + + + + 30N + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 407 + 69 + + + + + + + + + + 0 + + + 6 + + + + + Offset: + + + + + + + false + + + hour + + + 23 + + + + + + + h + + + + + + + false + + + minute + + + 59 + + + + + + + m + + + + + + + false + + + second + + + 59 + + + + + + + s + + + + + + + false + + + frame + + + 30 + + + + + + + f + + + + + + + false + + + subframe + + + + + + + + + + + + qPixmapFromMimeSource + + acceptMTCCheckbox + acceptMCCheckbox + mtcSync + mcSync + midiMachineControl + dstDevId + mtcOffH + mtcOffM + mtcOffS + mtcOffF + mtcOffSf + applyButton + okButton + cancelButton + + + + + syncSlave + toggled(bool) + acceptMTCCheckbox + setEnabled(bool) + + + 377 + 79 + + + 341 + 67 + + + + + syncSlave + toggled(bool) + acceptMCCheckbox + setEnabled(bool) + + + 365 + 102 + + + 361 + 94 + + + + + syncSlave + toggled(bool) + acceptMMCCheckbox + setEnabled(bool) + + + 392 + 132 + + + 328 + 121 + + + + + syncSlave + toggled(bool) + srcDevId + setEnabled(bool) + + + 366 + 103 + + + 375 + 147 + + + + + mcSync + toggled(bool) + mcSync + setEnabled(bool) + + + 255 + 94 + + + 255 + 94 + + + + + mtcSync + toggled(bool) + mtcSync + setEnabled(bool) + + + 255 + 67 + + + 255 + 67 + + + + + syncMaster + toggled(bool) + midiMachineControl + setEnabled(bool) + + + 268 + 131 + + + 255 + 121 + + + + + syncMaster + toggled(bool) + dstDevId + setEnabled(bool) + + + 268 + 129 + + + 175 + 147 + + + + + syncMaster + toggled(bool) + mtcSync + setEnabled(bool) + + + 268 + 40 + + + 255 + 67 + + + + + syncMaster + toggled(bool) + GroupBox13 + setEnabled(bool) + + + 53 + 17 + + + 41 + 256 + + + + + diff --git a/attic/muse_qt4_evolution/muse/widgets/mittransposebase.h b/attic/muse_qt4_evolution/muse/widgets/mittransposebase.h new file mode 100644 index 00000000..531cb200 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/mittransposebase.h @@ -0,0 +1,111 @@ +#ifndef MITTRANSPOSEBASE_H +#define MITTRANSPOSEBASE_H + +#include + + +#include +#include +#include +#include +#include +#include +#include +#include +#include "awl/pitchedit.h" +#include +#include + +class Ui_MITTransposeBase +{ +public: + QHBoxLayout *hboxLayout; + QCheckBox *onCheckBox; + QLabel *TextLabel1; + Awl::PitchEdit *triggerKeySpinBox; + QLabel *TextLabel2; + QLabel *transposeLabel; + + void setupUi(QWidget *MITTransposeBase) + { + MITTransposeBase->setObjectName(QString::fromUtf8("MITTransposeBase")); + MITTransposeBase->resize(QSize(423, 50).expandedTo(MITTransposeBase->minimumSizeHint())); + hboxLayout = new QHBoxLayout(MITTransposeBase); + hboxLayout->setSpacing(6); + hboxLayout->setMargin(11); + hboxLayout->setObjectName(QString::fromUtf8("hboxLayout")); + onCheckBox = new QCheckBox(MITTransposeBase); + onCheckBox->setObjectName(QString::fromUtf8("onCheckBox")); + + hboxLayout->addWidget(onCheckBox); + + TextLabel1 = new QLabel(MITTransposeBase); + TextLabel1->setObjectName(QString::fromUtf8("TextLabel1")); + TextLabel1->setAlignment(Qt::AlignVCenter|Qt::AlignRight); + TextLabel1->setIndent(5); + + hboxLayout->addWidget(TextLabel1); + + triggerKeySpinBox = new Awl::PitchEdit(MITTransposeBase); + triggerKeySpinBox->setObjectName(QString::fromUtf8("triggerKeySpinBox")); + + hboxLayout->addWidget(triggerKeySpinBox); + + TextLabel2 = new QLabel(MITTransposeBase); + TextLabel2->setObjectName(QString::fromUtf8("TextLabel2")); + TextLabel2->setAlignment(Qt::AlignVCenter|Qt::AlignRight); + TextLabel2->setIndent(5); + + hboxLayout->addWidget(TextLabel2); + + transposeLabel = new QLabel(MITTransposeBase); + transposeLabel->setObjectName(QString::fromUtf8("transposeLabel")); + QSizePolicy sizePolicy((QSizePolicy::Policy)5, (QSizePolicy::Policy)0); + sizePolicy.setHorizontalStretch(0); + sizePolicy.setVerticalStretch(0); + sizePolicy.setHeightForWidth(transposeLabel->sizePolicy().hasHeightForWidth()); + transposeLabel->setSizePolicy(sizePolicy); + transposeLabel->setFrameShape(QFrame::Panel); + transposeLabel->setLineWidth(2); + transposeLabel->setMargin(2); + transposeLabel->setMidLineWidth(2); + transposeLabel->setAlignment(Qt::AlignVCenter|Qt::AlignRight); + transposeLabel->setIndent(5); + + hboxLayout->addWidget(transposeLabel); + + retranslateUi(MITTransposeBase); + + QMetaObject::connectSlotsByName(MITTransposeBase); + } // setupUi + + void retranslateUi(QWidget *MITTransposeBase) + { + MITTransposeBase->setWindowTitle(QApplication::translate("MITTransposeBase", "MusE: Midi Input Plugin: Transpose", 0, QApplication::UnicodeUTF8)); + onCheckBox->setText(QApplication::translate("MITTransposeBase", "On", 0, QApplication::UnicodeUTF8)); + TextLabel1->setText(QApplication::translate("MITTransposeBase", "TriggerKey", 0, QApplication::UnicodeUTF8)); + TextLabel2->setText(QApplication::translate("MITTransposeBase", "Transpose:", 0, QApplication::UnicodeUTF8)); + transposeLabel->setText(QApplication::translate("MITTransposeBase", "+0", 0, QApplication::UnicodeUTF8)); + Q_UNUSED(MITTransposeBase); + } // retranslateUi + +}; + +namespace Ui { + class MITTransposeBase: public Ui_MITTransposeBase {}; +} // namespace Ui + +class MITTransposeBase : public QWidget, public Ui::MITTransposeBase +{ + Q_OBJECT + +public: + MITTransposeBase(QWidget* parent = 0, const char* name = 0, Qt::WFlags fl = 0); + ~MITTransposeBase(); + +protected slots: + virtual void languageChange(); + +}; + +#endif // MITTRANSPOSEBASE_H diff --git a/attic/muse_qt4_evolution/muse/widgets/mittransposebase.ui b/attic/muse_qt4_evolution/muse/widgets/mittransposebase.ui new file mode 100644 index 00000000..c1aad75a --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/mittransposebase.ui @@ -0,0 +1,112 @@ + + + + + MITTransposeBase + + + + 0 + 0 + 423 + 50 + + + + MusE: Midi Input Plugin: Transpose + + + + 11 + + + 6 + + + + + On + + + + + + + TriggerKey + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 5 + + + + + + + + + + Transpose: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 5 + + + + + + + + 5 + 0 + 0 + 0 + + + + QFrame::Panel + + + 2 + + + 2 + + + +0 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 5 + + + + + + + qPixmapFromMimeSource + + + Awl::PitchEdit + QWidget +
awl::pitchedit.h
+ 1 + +
+
+ + awl/pitchedit.h + + + +
diff --git a/attic/muse_qt4_evolution/muse/widgets/mixdowndialog.cpp b/attic/muse_qt4_evolution/muse/widgets/mixdowndialog.cpp new file mode 100644 index 00000000..ac517d30 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/mixdowndialog.cpp @@ -0,0 +1,133 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "al/al.h" +#include "mixdowndialog.h" +#include "globals.h" +#include "wave.h" +#include "song.h" +#include "gconfig.h" + +//--------------------------------------------------------- +// sndFileOpen +// sf - old soundfile, used to preset file parameters +//--------------------------------------------------------- + +SndFile* getSndFile(SndFile* sf, QWidget* parent) + { + MixdownFileDialog* dialog = new MixdownFileDialog(sf, parent); + dialog->exec(); + SndFile* sndFile = dialog->sndFile(); + delete dialog; + return sndFile; + } + +//--------------------------------------------------------- +// MixdownFileDialog +//--------------------------------------------------------- + +MixdownFileDialog::MixdownFileDialog(SndFile* _sf, QWidget* parent) + : QDialog(parent) + { + setupUi(this); + sf = 0; + connect(buttonPath, SIGNAL(clicked()), SLOT(fdialog())); + if (_sf) { + int channels = _sf->channels(); + int format = _sf->format(); + switch(channels) { + case 1: channels = 1; break; + case 2: channels = 0; break; + case 6: channels = 2; break; + } + editPath->setText(_sf->finfo()->filePath()); + comboChannel->setCurrentIndex(channels); + comboFormat->setCurrentIndex(format); + } + else { + // create unique mixdown file path + QString path = QDir::homePath() + "/" + config.projectPath + "/" + song->projectPath(); + + QDir dir(path); + for (int i = 1; i < 1000; ++i) { + QString fp = QString("md%2.wav").arg(i); + if (!dir.exists(fp)) { + path = dir.filePath(fp); + break; + } + } + editPath->setText(path); + } + } + +//--------------------------------------------------------- +// accept +//--------------------------------------------------------- + +void MixdownFileDialog::accept() + { + QString oldpath; + unsigned channel = comboChannel->currentIndex(); + unsigned format = comboFormat->currentIndex(); + switch (channel) { + case 0: channel = 2; break; + case 1: channel = 1; break; + case 2: channel = 6; break; // not implemented! + } + switch (format) { + case 0: // 16 bit wave + format = SF_FORMAT_WAV | SF_FORMAT_PCM_16; + break; + case 1: // 24 bit wave + format = SF_FORMAT_WAV | SF_FORMAT_PCM_24; + break; + case 2: // 32 bit float wave + format = SF_FORMAT_WAV | SF_FORMAT_FLOAT; + break; + } + QString path = editPath->text(); + if (path.isEmpty()) { + sf = 0; + reject(); + return; + } + if (path.right(4) != ".wav") + path += ".wav"; + sf = new SndFile(path); + sf->setFormat(format, channel, AL::sampleRate); + done(1); + } + +//--------------------------------------------------------- +// fdialog +//--------------------------------------------------------- + +void MixdownFileDialog::fdialog() + { + QString path = QFileDialog::getSaveFileName( + this, + tr("MusE: set mixdown file name"), + editPath->text(), + tr("Wave Files (*.wav);;All Files (*)") + ); + if (!path.isEmpty()) + editPath->setText(path); + } + diff --git a/attic/muse_qt4_evolution/muse/widgets/mixdowndialog.h b/attic/muse_qt4_evolution/muse/widgets/mixdowndialog.h new file mode 100644 index 00000000..58d1b970 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/mixdowndialog.h @@ -0,0 +1,48 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __MIXDOWNDIALOG_H__ +#define __MIXDOWNDIALOG_H__ + +#include "ui_mixdowndialog.h" + +class SndFile; + +extern SndFile* getSndFile(SndFile* sf, QWidget* parent); + +//--------------------------------------------------------- +// MixdownFileDialog +//--------------------------------------------------------- + +class MixdownFileDialog : public QDialog, private Ui::MixdownFileDialogBase { + Q_OBJECT + SndFile* sf; + + private slots: + void fdialog(); + virtual void accept(); + + public: + MixdownFileDialog(SndFile* f, QWidget* parent = 0); + SndFile* sndFile() { return sf; } + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/widgets/mixdowndialog.ui b/attic/muse_qt4_evolution/muse/widgets/mixdowndialog.ui new file mode 100644 index 00000000..c1c3d4fa --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/mixdowndialog.ui @@ -0,0 +1,212 @@ + + MixdownFileDialogBase + + + + 0 + 0 + 381 + 116 + + + + MusE: Set Mixdown Wavefile + + + true + + + + 11 + + + 6 + + + + + 0 + + + 6 + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 20 + 20 + + + + + + + + &OK + + + true + + + true + + + + + + + &Cancel + + + true + + + + + + + + + File Path + + + + + + + Channel + + + + + + + 0 + + + 6 + + + + + + + + + + + :/xpm/fileopen.png + + + + + + + + + + Stereo + + + + + Mono + + + + + 5.1 + + + + + + + + + wav,16 Bit + + + + + wav, 24 Bit + + + + + wav, 32 Bit (float) + + + + + + + + Format + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 20 + 20 + + + + + + + + + + + + + buttonOk + clicked() + MixdownFileDialogBase + accept() + + + 248 + 93 + + + 99 + 89 + + + + + buttonCancel + clicked() + MixdownFileDialogBase + reject() + + + 318 + 94 + + + 170 + 105 + + + + + diff --git a/attic/muse_qt4_evolution/muse/widgets/noteinfo.cpp b/attic/muse_qt4_evolution/muse/widgets/noteinfo.cpp new file mode 100644 index 00000000..9ae02ab0 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/noteinfo.cpp @@ -0,0 +1,207 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "noteinfo.h" +#include "song.h" +#include "globals.h" +#include "awl/posedit.h" +#include "awl/pitchedit.h" + +//--------------------------------------------------- +// NoteInfo +// ToolBar +// Start, Len, Note, Velo on, Velo off, Channel +//--------------------------------------------------- + +NoteInfo::NoteInfo(QMainWindow* parent) + : QToolBar(tr("Note Info"), parent) + { + deltaMode = false; + + QLabel* label = new QLabel(tr("Start")); + label->setAlignment(Qt::AlignRight | Qt::AlignVCenter); + label->setIndent(3); + addWidget(label); + + selTime = new Awl::PosEdit; + selTime->setFixedHeight(24); + addWidget(selTime); + + label = new QLabel(tr("Len"), this); + label->setAlignment(Qt::AlignRight | Qt::AlignVCenter); + label->setIndent(3); + addWidget(label); + + selLen = new QSpinBox(this); + selLen->setRange(0, 100000); + selLen->setFixedHeight(24); + addWidget(selLen); + + label = new QLabel(tr("Pitch"), this); + label->setAlignment(Qt::AlignRight | Qt::AlignVCenter); + label->setIndent(3); + addWidget(label); + selPitch = new Awl::PitchEdit(this); + selPitch->setFixedHeight(24); + addWidget(selPitch); + + label = new QLabel(tr("Velo On"), this); + label->setAlignment(Qt::AlignRight | Qt::AlignVCenter); + label->setIndent(3); + addWidget(label); + selVelOn = new QSpinBox(this); + selVelOn->setRange(0, 127); + selVelOn->setFixedHeight(24); + addWidget(selVelOn); + + label = new QLabel(tr("Velo Off"), this); + label->setAlignment(Qt::AlignRight | Qt::AlignVCenter); + label->setIndent(3); + addWidget(label); + selVelOff = new QSpinBox(this); + selVelOff->setRange(0, 127); + selVelOff->setFixedHeight(24); + addWidget(selVelOff); + + connect(selLen, SIGNAL(valueChanged(int)), SLOT(lenChanged(int))); + connect(selPitch, SIGNAL(valueChanged(int)), SLOT(pitchChanged(int))); + connect(selVelOn, SIGNAL(valueChanged(int)), SLOT(velOnChanged(int))); + connect(selVelOff, SIGNAL(valueChanged(int)), SLOT(velOffChanged(int))); + connect(selTime, SIGNAL(valueChanged(const Pos&)), SLOT(timeChanged(const Pos&))); + } + +//--------------------------------------------------------- +// setDeltaMode +//--------------------------------------------------------- + +void NoteInfo::setDeltaMode(bool val) + { + deltaMode = val; + selPitch->setDeltaMode(val); + if (val) { + selLen->setRange(-100000, 100000); + selVelOn->setRange(-127, 127); + selVelOff->setRange(-127, 127); + } + else { + selLen->setRange(0, 100000); + selVelOn->setRange(0, 127); + selVelOff->setRange(0, 127); + } + } + +//--------------------------------------------------------- +// lenChanged +//--------------------------------------------------------- + +void NoteInfo::lenChanged(int val) + { + if (!signalsBlocked()) + emit valueChanged(VAL_LEN, val); + } + +//--------------------------------------------------------- +// velOnChanged +//--------------------------------------------------------- + +void NoteInfo::velOnChanged(int val) + { + if (!signalsBlocked()) + emit valueChanged(VAL_VELON, val); + } + +//--------------------------------------------------------- +// velOffChanged +//--------------------------------------------------------- + +void NoteInfo::velOffChanged(int val) + { + if (!signalsBlocked()) + emit valueChanged(VAL_VELOFF, val); + } + +//--------------------------------------------------------- +// pitchChanged +//--------------------------------------------------------- + +void NoteInfo::pitchChanged(int val) + { + if (!signalsBlocked()) + emit valueChanged(VAL_PITCH, val); + } + +//--------------------------------------------------------- +// setValue +//--------------------------------------------------------- + +void NoteInfo::setValue(ValType type, int val) + { + blockSignals(true); + switch(type) { + case VAL_TIME: + selTime->setValue(val); + break; + case VAL_LEN: + selLen->setValue(val); + break; + case VAL_VELON: + selVelOn->setValue(val); + break; + case VAL_VELOFF: + selVelOff->setValue(val); + break; + case VAL_PITCH: + selPitch->setValue(val); + break; + } + blockSignals(false); + } + +//--------------------------------------------------------- +// setValue +//--------------------------------------------------------- + +void NoteInfo::setValues(unsigned tick, int val2, int val3, int val4, + int val5) + { + blockSignals(true); + if (selTime->pos().tick() != tick) + selTime->setValue(tick); + if (selLen->value() != val2) + selLen->setValue(val2); + if (selPitch->value() != val3) + selPitch->setValue(val3); + if (selVelOn->value() != val4) + selVelOn->setValue(val4); + if (selVelOff->value() != val5) + selVelOff->setValue(val5); + blockSignals(false); + } + +//--------------------------------------------------------- +// timeChanged +//--------------------------------------------------------- + +void NoteInfo::timeChanged(const Pos& pos) + { + if (!signalsBlocked()) + emit valueChanged(VAL_TIME, pos.tick()); + } + diff --git a/attic/muse_qt4_evolution/muse/widgets/noteinfo.h b/attic/muse_qt4_evolution/muse/widgets/noteinfo.h new file mode 100644 index 00000000..afcb6d1f --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/noteinfo.h @@ -0,0 +1,68 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __NOTE_INFO_H__ +#define __NOTE_INFO_H__ + +namespace Awl { + class PosEdit; + class PitchEdit; + }; +namespace AL { + class Pos; + } + +using AL::Pos; + +//--------------------------------------------------------- +// NoteInfo +//--------------------------------------------------------- + +class NoteInfo : public QToolBar { + Awl::PosEdit* selTime; + QSpinBox* selLen; + Awl::PitchEdit* selPitch; + QSpinBox* selVelOn; + QSpinBox* selVelOff; + bool deltaMode; + + Q_OBJECT + + public: + enum ValType {VAL_TIME, VAL_LEN, VAL_VELON, VAL_VELOFF, VAL_PITCH }; + NoteInfo(QMainWindow* parent); + void setValues(unsigned, int, int, int, int); + void setDeltaMode(bool); + + private slots: + void lenChanged(int); + void velOnChanged(int); + void velOffChanged(int); + void pitchChanged(int); + void timeChanged(const Pos&); + + public slots: + void setValue(ValType, int); + + signals: + void valueChanged(NoteInfo::ValType, int); + }; +#endif + diff --git a/attic/muse_qt4_evolution/muse/widgets/outportcombo.cpp b/attic/muse_qt4_evolution/muse/widgets/outportcombo.cpp new file mode 100644 index 00000000..a3e55adc --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/outportcombo.cpp @@ -0,0 +1,52 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "outportcombo.h" +#include "song.h" +#include "midioutport.h" + +//--------------------------------------------------------- +// OutportCombo +//--------------------------------------------------------- + +OutportCombo::OutportCombo(QWidget* parent) + : QComboBox(parent) + { + setToolTip(tr("Midi Output Port")); + populate(); + // midiPort names may change, when inserting/deleting syntis + connect(song, SIGNAL(trackAdded(Track*,int)), SLOT(populate())); + connect(song, SIGNAL(trackRemoved(Track*)), SLOT(populate())); + } + +//--------------------------------------------------------- +// populate +//--------------------------------------------------------- + +void OutportCombo::populate() + { + int cur = currentIndex(); + clear(); + MidiOutPortList* mpl = song->midiOutPorts(); + for (iMidiOutPort i = mpl->begin(); i != mpl->end(); ++i) + addItem((*i)->name()); + setCurrentIndex(cur); + } + diff --git a/attic/muse_qt4_evolution/muse/widgets/outportcombo.h b/attic/muse_qt4_evolution/muse/widgets/outportcombo.h new file mode 100644 index 00000000..8a49fc53 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/outportcombo.h @@ -0,0 +1,39 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __OUTPORTCOMBO_H__ +#define __OUTPORTCOMBO_H__ + +//--------------------------------------------------------- +// OutportCombo +//--------------------------------------------------------- + +class OutportCombo : public QComboBox { + Q_OBJECT + + private slots: + void populate(); + + public: + OutportCombo(QWidget* parent = 0); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/widgets/quantcombo.cpp b/attic/muse_qt4_evolution/muse/widgets/quantcombo.cpp new file mode 100644 index 00000000..89cd27fc --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/quantcombo.cpp @@ -0,0 +1,80 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "quantcombo.h" + +static int quantTable[] = { + 1, 24, 48, 96, 192, 384, 768, 1536, + 16, 32, 64, 128, 256, 512, 1024, + 36, 72, 144, 288, 576, 1152, 2304 + }; + +static const char* quantStrings[] = { + QT_TR_NOOP("Off"), "64", "32", "16", "8", "4", "2", "1", + "64T", "32T", "16T", "8T", "4T", "2T", "1T", + "64.", "32.", "16.", "8.", "4.", "2.", "1." + }; + +//--------------------------------------------------------- +// QuantCombo +//--------------------------------------------------------- + +QuantCombo::QuantCombo(QWidget* parent) + : QComboBox(parent) + { + for (unsigned i = 0; i < sizeof(quantStrings)/sizeof(*quantStrings); i++) + addItem(tr(quantStrings[i]), i); + connect(this, SIGNAL(activated(int)), SLOT(_quantChanged(int))); + } + +//--------------------------------------------------------- +// _quantChanged +//--------------------------------------------------------- + +void QuantCombo::_quantChanged(int idx) + { + emit quantChanged(quantTable[idx]); + } + +//--------------------------------------------------------- +// quant +//--------------------------------------------------------- + +int QuantCombo::quant() const + { + return quantTable[currentIndex()]; + } + +//--------------------------------------------------------- +// setQuant +//--------------------------------------------------------- + +void QuantCombo::setQuant(int val) + { + for (unsigned i = 0; i < sizeof(quantTable)/sizeof(*quantTable); i++) { + if (val == quantTable[i]) { + setCurrentIndex(i); + return; + } + } + printf("setQuant(%d) not defined\n", val); +abort(); + setCurrentIndex(0); + } diff --git a/attic/muse_qt4_evolution/muse/widgets/quantcombo.h b/attic/muse_qt4_evolution/muse/widgets/quantcombo.h new file mode 100644 index 00000000..6cdfb69d --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/quantcombo.h @@ -0,0 +1,46 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __QUANTCOMBO_H__ +#define __QUANTCOMBO_H__ + +//--------------------------------------------------------- +// QuantCombo +//--------------------------------------------------------- + +class QuantCombo : public QComboBox { + Q_OBJECT + + private slots: + void _quantChanged(int); + + public slots: + void setQuant(int); + + signals: + void quantChanged(int); + + public: + QuantCombo(QWidget* parent = 0); + int quant() const; + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/widgets/rastercombo.cpp b/attic/muse_qt4_evolution/muse/widgets/rastercombo.cpp new file mode 100644 index 00000000..f5b3c7e6 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/rastercombo.cpp @@ -0,0 +1,82 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "rastercombo.h" + +static int rasterTable[] = { + //------ 8 4 2 + 1, 6, 12, 24, 48, 96, 192, 384, 768, 1536, + 4, 8, 16, 32, 64, 128, 256, 512, 1024, + 9, 18, 36, 72, 144, 288, 576, 1152, 2304 + }; + +static const char* rasterStrings[] = { + QT_TR_NOOP("Off"), "3pp", "6pp", "64", "32", "16", "8", "4", "2", "1", + "2pp", "5pp", "64T", "32T", "16T", "8T", "4T", "2T", "1T", + "4pp", "7pp", "64.", "32.", "16.", "8.", "4.", "2.", "1." + }; + +//--------------------------------------------------------- +// RasterCombo +//--------------------------------------------------------- + +RasterCombo::RasterCombo(QWidget* parent) + : QComboBox(parent) + { + for (unsigned i = 0; i < sizeof(rasterStrings)/sizeof(*rasterStrings); i++) + addItem(tr(rasterStrings[i]), i); + connect(this, SIGNAL(activated(int)), SLOT(_rasterChanged(int))); + } + +//--------------------------------------------------------- +// _rasterChanged +//--------------------------------------------------------- + +void RasterCombo::_rasterChanged(int idx) + { + emit rasterChanged(rasterTable[idx]); + } + +//--------------------------------------------------------- +// raster +//--------------------------------------------------------- + +int RasterCombo::raster() const + { + return rasterTable[currentIndex()]; + } + +//--------------------------------------------------------- +// setRaster +//--------------------------------------------------------- + +void RasterCombo::setRaster(int val) + { + for (unsigned i = 0; i < sizeof(rasterTable)/sizeof(*rasterTable); i++) { + if (val == rasterTable[i]) { + setCurrentIndex(i); + return; + } + } + printf("setRaster(%d) not defined\n", val); + setCurrentIndex(0); + } + + diff --git a/attic/muse_qt4_evolution/muse/widgets/rastercombo.h b/attic/muse_qt4_evolution/muse/widgets/rastercombo.h new file mode 100644 index 00000000..9ae48ba6 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/rastercombo.h @@ -0,0 +1,46 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __RASTERCOMBO_H__ +#define __RASTERCOMBO_H__ + +//--------------------------------------------------------- +// RasterCombo +//--------------------------------------------------------- + +class RasterCombo : public QComboBox { + Q_OBJECT + + private slots: + void _rasterChanged(int); + + public slots: + void setRaster(int); + + signals: + void rasterChanged(int); + + public: + RasterCombo(QWidget* parent = 0); + int raster() const; + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/widgets/recordbutton.h b/attic/muse_qt4_evolution/muse/widgets/recordbutton.h new file mode 100644 index 00000000..9b30de01 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/recordbutton.h @@ -0,0 +1,38 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __RECORDBUTTON_H__ +#define __RCORDBUTTON_H__ + +#include "simplebutton.h" + +//--------------------------------------------------------- +// RecordButton +//--------------------------------------------------------- + +class RecordButton : public SimpleButton { + Q_OBJECT + + public: + RecordButton(QWidget* parent = 0); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/widgets/shortcutcapturedialog.cpp b/attic/muse_qt4_evolution/muse/widgets/shortcutcapturedialog.cpp new file mode 100644 index 00000000..dab3330f --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/shortcutcapturedialog.cpp @@ -0,0 +1,97 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2003 Mathias Lundgren (lunar_shuttle@users.sourceforge.net) +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "shortcutcapturedialog.h" +#include "shortcuts.h" + +//--------------------------------------------------------- +// ShortcutCaptureDialog +//--------------------------------------------------------- + +ShortcutCaptureDialog::ShortcutCaptureDialog(Shortcut* _s, QWidget* parent) + : QDialog(parent) + { + setupUi(this); + s = _s; + + oshrtLabel->setText(s->key.toString(QKeySequence::NativeText)); + connect(clearButton, SIGNAL(clicked()), SLOT(clearClicked())); + clearClicked(); + grabKeyboard(); + } + +//--------------------------------------------------------- +// ShortcutCaptureDialog +//--------------------------------------------------------- + +ShortcutCaptureDialog::~ShortcutCaptureDialog() + { + releaseKeyboard(); + } + +//--------------------------------------------------------- +// keyPressEvent +//--------------------------------------------------------- + +void ShortcutCaptureDialog::keyPressEvent(QKeyEvent* e) + { + if (key.count() >= 4) + return; + int k = e->key(); + if (k == 0 || k == Qt::Key_Shift || k == Qt::Key_Control || + k == Qt::Key_Meta || k == Qt::Key_Alt || k == Qt::Key_AltGr + || k == Qt::Key_CapsLock || k == Qt::Key_NumLock + || k == Qt::Key_ScrollLock) + return; + + k += e->modifiers(); + switch(key.count()) { + case 0: key = QKeySequence(k); break; + case 1: key = QKeySequence(key[0], k); break; + case 2: key = QKeySequence(key[0], key[1], k); break; + case 3: key = QKeySequence(key[0], key[1], key[2], k); break; + } + + // Check against conflicting shortcuts + bool conflict = false; + QString msgString; + foreach (Shortcut* ss, shortcuts) { + if ((s != ss) && (ss->key == key) + && (ss->type & (s->type | GLOBAL_SHRT | INVIS_SHRT))) { + msgString = tr("Shortcut conflicts with ") + ss->descr; + conflict = true; + break; + } + } + messageLabel->setText(msgString); + okButton->setEnabled(conflict == false); + nshrtLabel->setText(key.toString(QKeySequence::NativeText)); + } + +//--------------------------------------------------------- +// clearClicked +//--------------------------------------------------------- + +void ShortcutCaptureDialog::clearClicked() + { + nshrtLabel->setText(tr("Undefined")); + key = 0; + } + diff --git a/attic/muse_qt4_evolution/muse/widgets/shortcutcapturedialog.h b/attic/muse_qt4_evolution/muse/widgets/shortcutcapturedialog.h new file mode 100644 index 00000000..4c2b5b6c --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/shortcutcapturedialog.h @@ -0,0 +1,52 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2003 Mathias Lundgren +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +// +// C++ Interface: shortcutcapturedialog +// +// Description: +// Dialog window for capturing keyboard shortcuts +// + +#include "shortcuts.h" +#include "filedialog.h" +#include "ui_shortcutcapturedialog.h" + +//--------------------------------------------------------- +// ShortcutCaptureDialog +//--------------------------------------------------------- + +class ShortcutCaptureDialog : public QDialog, public Ui::ShortcutCaptureDialogBase + { + Q_OBJECT + private: + Shortcut* s; + void keyPressEvent(QKeyEvent* e); + QKeySequence key; + + private slots: + void clearClicked(); + + public: + ShortcutCaptureDialog(Shortcut* s = 0, QWidget* parent = 0); + ~ShortcutCaptureDialog(); + QKeySequence getKey() const { return key; } + }; + diff --git a/attic/muse_qt4_evolution/muse/widgets/shortcutcapturedialog.ui b/attic/muse_qt4_evolution/muse/widgets/shortcutcapturedialog.ui new file mode 100644 index 00000000..0df2338f --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/shortcutcapturedialog.ui @@ -0,0 +1,162 @@ + + ShortcutCaptureDialogBase + + + + 0 + 0 + 461 + 214 + + + + Enter shortcut sequence + + + true + + + + 9 + + + 6 + + + + + Press up to 4 keys to enter shortcut sequence! + + + Qt::AlignCenter + + + + + + + + + + + + + + Old shortcut: + + + + + + + true + + + + + + + New shortcut: + + + + + + + true + + + + + + + 0 + + + 6 + + + + + Clear + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + false + + + OK + + + + + + + + + + Cancel + + + + + + + + + + + + qPixmapFromMimeSource + + + + okButton + clicked() + ShortcutCaptureDialogBase + accept() + + + 337 + 189 + + + 242 + 194 + + + + + cancelButton + clicked() + ShortcutCaptureDialogBase + reject() + + + 425 + 194 + + + 350 + 153 + + + + + diff --git a/attic/muse_qt4_evolution/muse/widgets/shortcutconfig.cpp b/attic/muse_qt4_evolution/muse/widgets/shortcutconfig.cpp new file mode 100644 index 00000000..025f1494 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/shortcutconfig.cpp @@ -0,0 +1,167 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2003 Mathias Lundgren (lunar_shuttle@users.sourceforge.net) +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "shortcutconfig.h" +#include "shortcutcapturedialog.h" +#include "shortcuts.h" + +//--------------------------------------------------------- +// ShortcutConfig +//--------------------------------------------------------- + +ShortcutConfig::ShortcutConfig(QWidget* parent) + : QDialog(parent) + { + setupUi(this); + connect(cgListView, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), + this, SLOT(categorySelChanged(QTreeWidgetItem*))); + connect(scListView, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), + this, SLOT(shortcutSelChanged(QTreeWidgetItem*))); + connect(defineButton, SIGNAL(pressed()), this, SLOT(assignShortcut())); + connect(clearButton, SIGNAL(pressed()), this, SLOT(clearShortcut())); + connect(applyButton, SIGNAL(pressed()), this, SLOT(assignAll())); + connect(scListView, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), this, SLOT(assignShortcut())); + + current_category = ALL_SHRT; +//TD cgListView->setSorting(SHRT_CATEGORY_COL, -1); + _config_changed = false; + + //Fill up category listview: + for (int i=0; i < SHRT_NUM_OF_CATEGORIES; i++) { + QTreeWidgetItem* newItem = new QTreeWidgetItem; + newItem->setText(SHRT_CATEGORY_COL, tr(shortcut_category[i].name)); + newItem->setData(0, Qt::UserRole, i); + cgListView->addTopLevelItem(newItem); + } + updateSCListView(); + } + +//--------------------------------------------------------- +// updateSCListView +//--------------------------------------------------------- + +void ShortcutConfig::updateSCListView(int category) + { + scListView->clear(); + foreach (Shortcut* s, shortcuts) { + if (s && (s->type & category)) { + QTreeWidgetItem* newItem; + newItem = new QTreeWidgetItem; + newItem->setText(SHRT_DESCR_COL, tr(s->descr)); + QKeySequence seq = s->key; + newItem->setText(SHRT_SHRTCUT_COL, s->key.toString(QKeySequence::NativeText)); + newItem->setData(0, Qt::UserRole, s->xml); + scListView->addTopLevelItem(newItem); + } + } + } + +//--------------------------------------------------------- +// assignShortcut +//--------------------------------------------------------- + +void ShortcutConfig::assignShortcut() + { + QTreeWidgetItem* active = scListView->currentItem(); + Shortcut* s = shortcuts[active->data(0, Qt::UserRole).toString()]; + ShortcutCaptureDialog sc(s, this); + if (sc.exec()) { + s->key = sc.getKey(); + active->setText(SHRT_SHRTCUT_COL, s->key.toString(QKeySequence::NativeText)); + _config_changed = true; + } + clearButton->setEnabled(true); + } + +//--------------------------------------------------------- +// clearShortcut +//--------------------------------------------------------- + +void ShortcutConfig::clearShortcut() + { + QTreeWidgetItem* active = scListView->currentItem(); + Shortcut* s = shortcuts[active->data(0, Qt::UserRole).toString()]; + s->key = 0; + active->setText(SHRT_SHRTCUT_COL, ""); + clearButton->setEnabled(false); + _config_changed = true; + } + +//--------------------------------------------------------- +// categorySelChanged +//--------------------------------------------------------- + +void ShortcutConfig::categorySelChanged(QTreeWidgetItem* i) + { + int idx = i->data(0, Qt::UserRole).toInt(); + current_category = shortcut_category[idx].id_flag; + updateSCListView(current_category); + } + +//--------------------------------------------------------- +// shortcutSelChanged +//--------------------------------------------------------- + +void ShortcutConfig::shortcutSelChanged(QTreeWidgetItem* active) + { + defineButton->setEnabled(active != 0); + if (active == 0) { + clearButton->setEnabled(false); + return; + } + Shortcut* s = shortcuts[active->data(0, Qt::UserRole).toString()]; + clearButton->setEnabled(s && !s->key.isEmpty()); + } + +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void ShortcutConfig::closeEvent(QCloseEvent*) + { + done(_config_changed); + } + +//--------------------------------------------------------- +// assignAll +//--------------------------------------------------------- + +void ShortcutConfig::assignAll() + { + foreach(QWidget* w, QApplication::allWidgets()) { + foreach(QAction* a, w->actions()) { + QVariant v(a->data()); + if (v.type() == QVariant::String) { + QString name = v.toString(); + foreach (Shortcut* s, shortcuts) { + if (s->xml == name) { + if (a->shortcut() != s->key) { + printf("shortcut <%s> changed\n", s->xml); + a->setShortcuts(QList()); + a->setShortcut(s->key); + } + } + } + } + } + } + done(_config_changed); + } + diff --git a/attic/muse_qt4_evolution/muse/widgets/shortcutconfig.h b/attic/muse_qt4_evolution/muse/widgets/shortcutconfig.h new file mode 100644 index 00000000..0e9e24b2 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/shortcutconfig.h @@ -0,0 +1,50 @@ +// +// C++ Interface: shortcutconfig +// +// Description: +// Dialog for configuring keyboard shortcuts +// +// Author: Mathias Lundgren , (C) 2003 +// +// Copyright: Mathias Lundgren (lunar_shuttle@users.sourceforge.net) (C) 2003 +// +// +#ifndef __SHORTCUTCONFIG_H +#define __SHORTCUTCONFIG_H + +#include "ui_shortcutconfig.h" +#include "shortcuts.h" + +#define SHRT_CATEGORY_COL 0 +enum { + SHRT_DESCR_COL = 0, + SHRT_SHRTCUT_COL + }; + +//--------------------------------------------------------- +// ShortcutConfig +//--------------------------------------------------------- + +class ShortcutConfig : public QDialog, public Ui::ShortcutConfigBase { + Q_OBJECT + private: + int current_category; + void updateSCListView(int category); + void updateSCListView() { updateSCListView(current_category); } + void closeEvent(QCloseEvent *e); + + private slots: + void categorySelChanged(QTreeWidgetItem*); + void shortcutSelChanged(QTreeWidgetItem*); + void assignShortcut(); + void clearShortcut(); + void assignAll(); + + public: + ShortcutConfig(QWidget* parent = 0); + bool _config_changed; + static const shortcut_cg shortcut_category[]; + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/widgets/shortcutconfig.ui b/attic/muse_qt4_evolution/muse/widgets/shortcutconfig.ui new file mode 100644 index 00000000..901e2cac --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/shortcutconfig.ui @@ -0,0 +1,180 @@ + + ShortcutConfigBase + + + + 0 + 0 + 661 + 403 + + + + Configure Keyboard Shortcuts + + + true + + + + 9 + + + 6 + + + + + Qt::Horizontal + + + + + 5 + 7 + 1 + 0 + + + + + 105 + 200 + + + + 0 + + + false + + + true + + + 1 + + + + Category + + + + + + + 7 + 7 + 2 + 0 + + + + + 170 + 230 + + + + true + + + 0 + + + false + + + true + + + true + + + true + + + 2 + + + + Description + + + + + Shortcut + + + + + + + + + 0 + + + 6 + + + + + false + + + &Clear + + + Alt+C + + + + + + + false + + + &Define + + + Alt+D + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 30 + 21 + + + + + + + + Ok + + + Alt+A + + + + + + + + + qPixmapFromMimeSource + + + diff --git a/attic/muse_qt4_evolution/muse/widgets/siglabel.cpp b/attic/muse_qt4_evolution/muse/widgets/siglabel.cpp new file mode 100644 index 00000000..2f8d3e84 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/siglabel.cpp @@ -0,0 +1,165 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "siglabel.h" + +#define TIMER1 400 +#define TIMER2 200 +#define TIMEC 7 +#define TIMER3 100 +#define TIMEC2 20 +#define TIMER4 50 + +#include "globals.h" + +//--------------------------------------------------------- +// SigLabel +// edit Signature Values (4/4) +//--------------------------------------------------------- + +SigLabel::SigLabel(QWidget* parent) + : QLabel(parent) + { + z = n = 0; + setFocusPolicy(Qt::NoFocus); + setAlignment(Qt::AlignCenter); + } + +//--------------------------------------------------------- +// mousePressEvent +//--------------------------------------------------------- + +void SigLabel::mousePressEvent(QMouseEvent* event) + { + int button = event->button(); + bool zaehler = event->x() < width() /2; + + int zz = z, nn = n; + switch (button) { + case Qt::LeftButton: + return; + case Qt::MidButton: + incValue(zaehler, false, zz, nn); + break; + case Qt::RightButton: + incValue(zaehler, true, zz, nn); + break; + default: + break; + } + if ((zz != z) || (nn != n)) { + setValue(zz, nn); + emit valueChanged(zz, nn); + } + } + +//--------------------------------------------------------- +// incValue +//--------------------------------------------------------- + +void SigLabel::incValue(bool zaehler, bool up, int& zz, int& nn) + { + if (!up) { + if (zaehler) { + --zz; + if (zz < 1) + zz = 1; + } + else { + switch (nn) { + case 1: break; + case 2: nn = 1; break; + case 4: nn = 2; break; + case 8: nn = 4; break; + case 16: nn = 8; break; + case 32: nn = 16; break; + case 64: nn = 32; break; + case 128: nn = 64; break; + } + } + } + else { + if (zaehler) { + ++zz; + if (zz > 16) + zz = 16; + } + else { + switch (nn) { + case 1: nn = 2; break; + case 2: nn = 4; break; + case 4: nn = 8; break; + case 8: nn = 16; break; + case 16: nn = 32; break; + case 32: nn = 64; break; + case 64: nn = 128; break; + case 128: break; + } + } + } + } + +//--------------------------------------------------------- +// wheelEvent +//--------------------------------------------------------- + +void SigLabel::wheelEvent(QWheelEvent* event) + { + bool zaehler = event->x() < width() /2; + int delta = event->delta(); + int zz = z, nn = n; + + bool inc = delta >= 0; + incValue(zaehler, inc, zz, nn); + if ((zz != z) || (nn != n)) { + setValue(zz, nn); + emit valueChanged(zz, nn); + } + } + +//--------------------------------------------------------- +// setValue +//--------------------------------------------------------- + +void SigLabel::setValue(int a, int b) + { + if (a == z && b == n) + return; + z = a; + n = b; + QString sa; + sa.setNum(a); + + QString sb; + sb.setNum(b); + + QString s = sa + QString("/") + sb; + setText(s); + } + +//--------------------------------------------------------- +// setFrame +//--------------------------------------------------------- + +void SigLabel::setFrame(bool flag) + { + setFrameStyle(flag ? Panel | Sunken : NoFrame); + setLineWidth(2); + } diff --git a/attic/muse_qt4_evolution/muse/widgets/siglabel.h b/attic/muse_qt4_evolution/muse/widgets/siglabel.h new file mode 100644 index 00000000..8ffa317e --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/siglabel.h @@ -0,0 +1,50 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __SIGLABEL_H__ +#define __SIGLABEL_H__ + +//--------------------------------------------------------- +// SigLabel +// show/edit time signature +//--------------------------------------------------------- + +class SigLabel : public QLabel { + Q_OBJECT + virtual void mousePressEvent(QMouseEvent*); + virtual void wheelEvent(QWheelEvent*); + void incValue(bool zaehler, bool inc, int&, int&); + + protected: + int z, n; + + signals: + void valueChanged(int, int); + + public slots: + virtual void setValue(int, int); + + public: + SigLabel(QWidget* parent = 0); + void value(int& a, int& b) const { a = z; b = n; } + void setFrame(bool); + }; +#endif + diff --git a/attic/muse_qt4_evolution/muse/widgets/simplebutton.cpp b/attic/muse_qt4_evolution/muse/widgets/simplebutton.cpp new file mode 100644 index 00000000..36ab7097 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/simplebutton.cpp @@ -0,0 +1,65 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "simplebutton.h" +#include "gui.h" + +//--------------------------------------------------------- +// SimpleButton +//--------------------------------------------------------- + +SimpleButton::SimpleButton(const QString& on, const QString& off, QWidget* parent) + : QToolButton(parent) + { + setAutoRaise(true); + QIcon icon; + icon.addFile(on, ICON_SIZE, QIcon::Normal, QIcon::On); + icon.addFile(off, ICON_SIZE, QIcon::Normal, QIcon::Off); + QAction* a = new QAction(this); + a->setIcon(icon); + setDefaultAction(a); + } + +//--------------------------------------------------------- +// SimpleButton +//--------------------------------------------------------- + +SimpleButton::SimpleButton(QPixmap* on, QPixmap* off, QWidget* parent) + : QToolButton(parent) + { + setAutoRaise(true); + QIcon icon(*off); + icon.addPixmap(*on, QIcon::Normal, QIcon::On); + QAction* a = new QAction(this); + a->setIcon(icon); + setDefaultAction(a); + } + +//--------------------------------------------------------- +// SimpleButton +//--------------------------------------------------------- + +SimpleButton::SimpleButton(const QString& s, QWidget* parent) + : QToolButton(parent) + { + setAutoRaise(false); + setText(s); + } + diff --git a/attic/muse_qt4_evolution/muse/widgets/simplebutton.h b/attic/muse_qt4_evolution/muse/widgets/simplebutton.h new file mode 100644 index 00000000..469767ac --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/simplebutton.h @@ -0,0 +1,41 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __SIMPLE_BUTTON_H__ +#define __SIMPLE_BUTTON_H__ + +//--------------------------------------------------------- +// SimpleButton +//--------------------------------------------------------- + +class SimpleButton : public QToolButton { + Q_OBJECT + + int _id; + virtual QSize minimumSizeHint() const { return QSize(0, 0); } + + public: + SimpleButton(QPixmap* on, QPixmap* off, QWidget* parent = 0); + SimpleButton(const QString& on, const QString& off, QWidget* parent = 0); + SimpleButton(const QString& s, QWidget* parent = 0); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/widgets/splitter.cpp b/attic/muse_qt4_evolution/muse/widgets/splitter.cpp new file mode 100644 index 00000000..b95750ab --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/splitter.cpp @@ -0,0 +1,107 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "splitter.h" +#include "utils.h" +#include "al/xml.h" + +//--------------------------------------------------------- +// SplitterHandle +//--------------------------------------------------------- + +void SplitterHandle::paintEvent(QPaintEvent* ev) + { + QPainter p(this); + QRect r(ev->rect()); + if (orientation() == Qt::Horizontal) { + int x = 0; + int y1 = r.y(); + int y2 = y1 + r.height(); + if (y1 == 0) + y1 = 1; + if (y2 == height()) + y2 = height() - 2; + for (int i = 0; i < splitWidth; ++i) { + p.setPen(lineColor[i]); + p.drawLine(x, y1, x, y2); + ++x; + } + p.setPen(lineColor[0]); + p.drawLine(1, 0, splitWidth - 2, 0); + p.drawLine(1, height()-1, splitWidth - 2, height()-1); + } + else { + int y = 0; + int x1 = r.x(); + int x2 = x1 + r.width(); + for (int i = 0; i < splitWidth; ++i) { + p.setPen(lineColor[i]); + p.drawLine(x1, y, x2, y); + ++y; + } + } + } + +//--------------------------------------------------------- +// Splitter +//--------------------------------------------------------- + +Splitter::Splitter(Qt::Orientation o) + : QSplitter(o) + { + setHandleWidth(splitWidth); + } + +//--------------------------------------------------------- +// writeStatus +//--------------------------------------------------------- + +void Splitter::writeStatus(const char* name, Xml& xml) + { + QList sl = sizes(); + xml.stag(name); + int n = sl.size(); + for (int i = 0; i < n; ++i) { + int n = sl.at(i); + xml.tag("size", n); + } + xml.etag(name); + } + +//--------------------------------------------------------- +// readStatus +//--------------------------------------------------------- + +void Splitter::readStatus(QDomNode node) + { + QList sl; + for (QDomNode n = node.firstChild(); !n.isNull(); n = n.nextSibling()) { + QDomElement e = n.toElement(); + QString tag(e.tagName()); + int i = e.text().toInt(); + if (tag == "size") { + sl.push_back(i); + } + else + printf("Splitter::unknown tag <%s>\n", tag.toLatin1().data()); + } + setSizes(sl); + } + diff --git a/attic/muse_qt4_evolution/muse/widgets/splitter.h b/attic/muse_qt4_evolution/muse/widgets/splitter.h new file mode 100644 index 00000000..238031c3 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/splitter.h @@ -0,0 +1,62 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __SPLITTER_H__ +#define __SPLITTER_H__ + +namespace AL { + class Xml; + }; + +using AL::Xml; + +//--------------------------------------------------------- +// SplitterHandle +//--------------------------------------------------------- + +class SplitterHandle : public QSplitterHandle { + Q_OBJECT + virtual void paintEvent(QPaintEvent*); + + public: + SplitterHandle(Qt::Orientation o, QSplitter* parent) + : QSplitterHandle(o, parent) { + } + }; + +//--------------------------------------------------------- +// Splitter +//--------------------------------------------------------- + +class Splitter : public QSplitter { + Q_OBJECT + + protected: + virtual QSplitterHandle* createHandle() { + return new SplitterHandle(orientation(), this); + } + public: + Splitter(Qt::Orientation); + void writeStatus(const char* name, Xml&); + void readStatus(QDomNode node); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/widgets/synthwizardbase.h b/attic/muse_qt4_evolution/muse/widgets/synthwizardbase.h new file mode 100644 index 00000000..590ff789 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/synthwizardbase.h @@ -0,0 +1,58 @@ +/**************************************************************************** +** Form interface generated from reading ui file 'synthwizardbase.ui' +** +** Created: Wed Nov 12 10:38:24 2003 +** by: The User Interface Compiler ($Id: synthwizardbase.h,v 1.6 2005/09/22 20:13:39 wschweer Exp $) +** +** WARNING! All changes made in this file will be lost! +****************************************************************************/ + +#ifndef SYNTHCONFIGBASE_H +#define SYNTHCONFIGBASE_H + +#include +#include +//Added by qt3to4: +#include +#include +#include + +class QVBoxLayout; +class QHBoxLayout; +class QGridLayout; +class QWidget; +class Q3GroupBox; +class Q3ListView; +class Q3ListViewItem; +class QPushButton; + +class SynthConfigBase : public Q3Wizard +{ + Q_OBJECT + +public: + SynthConfigBase( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, Qt::WFlags fl = 0 ); + ~SynthConfigBase(); + + QWidget* WizardPage; + Q3GroupBox* GroupBox2; + Q3ListView* synthList; + QPushButton* addInstance; + Q3GroupBox* GroupBox3; + Q3ListView* instanceList; + QPushButton* removeInstance; + QWidget* WizardPage_2; + +protected: + QVBoxLayout* WizardPageLayout; + QVBoxLayout* GroupBox2Layout; + QHBoxLayout* Layout1; + QVBoxLayout* GroupBox3Layout; + QHBoxLayout* Layout3; + +protected slots: + virtual void languageChange(); + +}; + +#endif // SYNTHCONFIGBASE_H diff --git a/attic/muse_qt4_evolution/muse/widgets/tb1.cpp b/attic/muse_qt4_evolution/muse/widgets/tb1.cpp new file mode 100644 index 00000000..33400420 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/tb1.cpp @@ -0,0 +1,180 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "tb1.h" +#include "globals.h" +#include "awl/poslabel.h" +#include "awl/pitchlabel.h" +#include "rastercombo.h" +#include "quantcombo.h" + +//--------------------------------------------------------- +// genToolbar +// solo time pitch raster quant +//--------------------------------------------------------- + +Toolbar1::Toolbar1(int r, int q, bool showPitch) + { + solo = new QToolButton; + solo->setText(tr("Solo")); + solo->setCheckable(true); + addWidget(solo); + + //--------------------------------------------------- + // Cursor Position + //--------------------------------------------------- + + QLabel* label = new QLabel; + label->setText(tr("Cursor")); + label->setIndent(3); + addWidget(label); + pos = new Awl::PosLabel; + pos->setFixedHeight(24); + addWidget(pos); + if (showPitch) { + pitch = new Awl::PitchLabel; + pitch->setEnabled(false); + pitch->setFixedHeight(24); + addWidget(pitch); + } + else + pitch = 0; + + //--------------------------------------------------- + // Raster, Quant. + //--------------------------------------------------- + + QLabel* l = new QLabel(tr("Snap")); + l->setIndent(5); + addWidget(l); + raster = new RasterCombo; + addWidget(raster); + + l = new QLabel(tr("Quantize")); + l->setIndent(5); + addWidget(l); + quant = new QuantCombo; + addWidget(quant); + + raster->setFixedHeight(24); + quant->setFixedHeight(24); + + setRaster(r); + setQuant(q); + + //--------------------------------------------------- + // To Menu + //--------------------------------------------------- + + addWidget(new QLabel(tr("To"))); + toList = new QComboBox; + toList->setFixedHeight(24); + addWidget(toList); + toList->addItem(tr("All Events"), RANGE_ALL); + toList->addItem(tr("Looped Ev."), RANGE_LOOPED); + toList->addItem(tr("Selected Ev."), RANGE_SELECTED); + toList->addItem(tr("Looped+Sel."), RANGE_LOOPED | RANGE_SELECTED); + + connect(raster, SIGNAL(rasterChanged(int)), SIGNAL(rasterChanged(int))); + connect(quant, SIGNAL(quantChanged(int)), SIGNAL(quantChanged(int))); + connect(toList, SIGNAL(activated(int)), SIGNAL(toChanged(int))); + connect(solo, SIGNAL(toggled(bool)), SIGNAL(soloChanged(bool))); + pos->setEnabled(false); + } + +//--------------------------------------------------------- +// setApplyTo +//--------------------------------------------------------- + +void Toolbar1::setApplyTo(int val) + { + toList->setCurrentIndex(toList->findData(val)); + } + +//--------------------------------------------------------- +// setPitch +//--------------------------------------------------------- + +void Toolbar1::setPitch(int val) + { + if (pitch) { + pitch->setEnabled(val != -1); + pitch->setPitch(val); + } + } + +//--------------------------------------------------------- +// setInt +//--------------------------------------------------------- + +void Toolbar1::setInt(int val) + { + if (pitch) { + pitch->setEnabled(val != -1); + pitch->setInt(val); + } + } + +//--------------------------------------------------------- +// setTime +//--------------------------------------------------------- + +void Toolbar1::setTime(const AL::Pos& val, bool enable) + { + pos->setValue(val, enable); + } + +//--------------------------------------------------------- +// setRaster +//--------------------------------------------------------- + +void Toolbar1::setRaster(int val) + { + raster->setRaster(val); + } + +//--------------------------------------------------------- +// setQuant +//--------------------------------------------------------- + +void Toolbar1::setQuant(int val) + { + quant->setQuant(val); + } + +//--------------------------------------------------------- +// setSolo +//--------------------------------------------------------- + +void Toolbar1::setSolo(bool flag) + { + solo->setChecked(flag); + } + +//--------------------------------------------------------- +// setPitchMode +//--------------------------------------------------------- + +void Toolbar1::setPitchMode(bool flag) + { + if (pitch) + pitch->setPitchMode(flag); + } + diff --git a/attic/muse_qt4_evolution/muse/widgets/tb1.h b/attic/muse_qt4_evolution/muse/widgets/tb1.h new file mode 100644 index 00000000..e10884d2 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/tb1.h @@ -0,0 +1,71 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __TB1_H__ +#define __TB1_H__ + +namespace Awl { + class PosLabel; + class PitchLabel; + }; +namespace AL { + class Pos; + }; + +class RasterCombo; +class QuantCombo; + +enum { RANGE_ALL, RANGE_SELECTED, RANGE_LOOPED }; + +//--------------------------------------------------------- +// Toolbar1 +//--------------------------------------------------------- + +class Toolbar1 : public QToolBar { + QToolButton* solo; + Awl::PosLabel* pos; + Awl::PitchLabel* pitch; + QuantCombo* quant; + QComboBox* toList; + RasterCombo* raster; + Q_OBJECT + + public slots: + void setTime(const AL::Pos&, bool); + void setPitch(int); + void setInt(int); + void setRaster(int); + void setQuant(int); + + signals: + void rasterChanged(int); + void quantChanged(int); + void soloChanged(bool); + void toChanged(int); + + public: + Toolbar1(int r=96, int q=96, bool showPitch=true); + void setSolo(bool val); + void setPitchMode(bool flag); + void setApplyTo(int); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/widgets/tools.cpp b/attic/muse_qt4_evolution/muse/widgets/tools.cpp new file mode 100644 index 00000000..39d7aa4d --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/tools.cpp @@ -0,0 +1,100 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "tools.h" +#include "icons.h" +#include "shortcuts.h" + +const char* toolList[TOOLS] = { + "pointer", "pencil", "eraser", "scissor", "glue", + "quantize", "draw", "mute_parts" + }; + +//--------------------------------------------------------- +// EditToolBar +//--------------------------------------------------------- + +EditToolBar::EditToolBar(QMainWindow* parent, int tools) + : QToolBar(tr("Edit Tools")) + { + actionGroup = new QActionGroup(parent); + actionGroup->setExclusive(true); + + bool first = true; + for (unsigned i = 0; i < sizeof(toolList)/sizeof(*toolList); ++i) { + if ((tools & (1 << i))==0) + continue; + QAction* a = getAction(toolList[i], this); + a->setData(1 << i); + a->setCheckable(true); + actionGroup->addAction(a); + addAction(a); + if (first) { + a->setChecked(true); + first = false; + } + } + connect(actionGroup, SIGNAL(triggered(QAction*)), SLOT(toolChanged(QAction*))); + } + +//--------------------------------------------------------- +// toolChanged +//--------------------------------------------------------- + +void EditToolBar::toolChanged(QAction* action) + { + emit toolChanged(action->data().toInt()); + } + +//--------------------------------------------------------- +// set +//--------------------------------------------------------- + +void EditToolBar::set(int id) + { + QList actions = actionGroup->actions(); + int n = actions.size(); + + for (int i = 0; i < n; ++i) { + QAction* action = actions.at(i); + if (action->data().toInt() == id) { + action->setChecked(true); + return; + } + } + } + +//--------------------------------------------------------- +// curTool +//--------------------------------------------------------- + +int EditToolBar::curTool() + { + QList actions = actionGroup->actions(); + int n = actions.size(); + + for (int i = 0; i < n; ++i) { + QAction* a = actions.at(i); + if (a->isChecked()) + return a->data().toInt(); + } + return -1; + } + diff --git a/attic/muse_qt4_evolution/muse/widgets/tools.h b/attic/muse_qt4_evolution/muse/widgets/tools.h new file mode 100644 index 00000000..f05e1095 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/tools.h @@ -0,0 +1,58 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __TOOLS_H__ +#define __TOOLS_H__ + +class Action; + +#include "awl/tcanvas.h" + +const int arrangerTools = PointerTool | PencilTool | RubberTool | DrawTool + | CutTool | GlueTool | MuteTool; + +const int TOOLS = 8; + +//--------------------------------------------------------- +// EditToolBar +//--------------------------------------------------------- + +class EditToolBar : public QToolBar { + Q_OBJECT + QActionGroup* actionGroup; + + private slots: + void toolChanged(QAction* action); + + signals: + void toolChanged(int); + + public slots: + void set(int id); + + public: + EditToolBar(QMainWindow*, int); + int curTool(); + }; + +extern const char* toolList[]; + +#endif + diff --git a/attic/muse_qt4_evolution/muse/widgets/transformbase.ui b/attic/muse_qt4_evolution/muse/widgets/transformbase.ui new file mode 100644 index 00000000..1365a0c9 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/transformbase.ui @@ -0,0 +1,993 @@ + + + + + MidiTransformDialogBase + + + + 0 + 0 + 843 + 659 + + + + MusE: Midi Transformator + + + true + + + + 11 + + + 6 + + + + + 0 + + + 6 + + + + + &New + + + true + + + + + + + &Delete + + + true + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 20 + 20 + + + + + + + + &Apply + + + true + + + + + + + &OK + + + true + + + true + + + + + + + &Cancel + + + true + + + + + + + + + 0 + + + 6 + + + + + PresetList + + + + + + + + 3 + 3 + 0 + 0 + + + + + + + + + + Processing + + + Qt::Vertical + + + + 11 + + + 6 + + + + + Event Type + + + + + + + + Keep + + + + + Fix + + + + + + + + + Note + + + + + Poly Pressure + + + + + Control Change + + + + + Aftertouch + + + + + Pitch Bend + + + + + NRPN + + + + + RPN + + + + + + + + + Keep + + + + + Plus + + + + + Minus + + + + + Multiply + + + + + Divide + + + + + Fix + + + + + Value 2 + + + + + Invert + + + + + ScaleMap + + + + + Flip + + + + + Dyn + + + + + Random + + + + + + + + Value 1 + + + + + + + Value 2 + + + + + + + Length + + + + + + + Position + + + + + + + + Keep + + + + + Plus + + + + + Minus + + + + + Multiply + + + + + Divide + + + + + Fix + + + + + Value 1 + + + + + Invert + + + + + Dyn + + + + + Random + + + + + + + + + Keep + + + + + Plus + + + + + Minus + + + + + Multiply + + + + + Divide + + + + + Fix + + + + + + + + 9999 + + + + + + + 9999 + + + + + + + + + + + Keep + + + + + Plus + + + + + Minus + + + + + Multiply + + + + + Divide + + + + + + + + + + + + + + + + + + + + Filter + + + Qt::Vertical + + + + 11 + + + 6 + + + + + + All + + + + + Equal + + + + + Unequal + + + + + + + + + Note + + + + + Control Change + + + + + Sysex + + + + + Poly Pressure + + + + + Aftertouch + + + + + Meta + + + + + + + + Value 2 + + + + + + + Value 1 + + + + + + + Event Type + + + + + + + + Ignore + + + + + Equal + + + + + Unequal + + + + + Higher + + + + + Lower + + + + + Inside + + + + + Outside + + + + + + + + Length + + + + + + + Bar Range + + + + + + + + Ignore + + + + + Equal + + + + + Unequal + + + + + Higher + + + + + Lower + + + + + Inside + + + + + Outside + + + + + + + + + Ignore + + + + + Equal + + + + + Unequal + + + + + Higher + + + + + Lower + + + + + Inside + + + + + Outside + + + + + + + + + Ignore + + + + + Equal + + + + + Unequal + + + + + Higher + + + + + Lower + + + + + Inside + + + + + Outside + + + + + + + + 127 + + + + + + + 127 + + + + + + + 127 + + + + + + + 127 + + + + + + + 127 + + + + + + + 127 + + + + + + + + + + + + + + + + 0 + + + 6 + + + + + Preset + + + Qt::Vertical + + + + 11 + + + 6 + + + + + 0 + + + 6 + + + + + Name: + + + + + + + + + + + + Comment: + + + + + + + + + + + + + Range + + + Qt::Vertical + + + + 11 + + + 6 + + + + + process all events + + + + + + + selected tracks + + + + + + + inside loop + + + + + + + + + + Function + + + Qt::Vertical + + + + 11 + + + 6 + + + + + + Select + + + + + Quantize + + + + + Delete + + + + + Transform + + + + + Insert + + + + + Copy + + + + + Extract + + + + + + + + Quantize Value + + + + + + + + + + + + + + + + + + Q3GroupBox + +
Qt3Support/Q3GroupBox
+ 1 + +
+ + Q3MultiLineEdit + QWidget +
q3multilineedit.h
+ 1 + +
+ + ComboQuant + +
comboQuant.h
+ 0 + +
+ + Q3ListBox + +
q3listbox.h
+ 0 + +
+
+ + selEventOp + selType + selVal1Op + selVal1a + selVal1b + selVal2Op + selVal2a + selVal2b + selLenOp + selLenA + selLenB + selRangeOp + procEventOp + procType + procVal1Op + procVal1b + procVal2Op + procVal2b + procLenOp + procPosOp + nameEntry + commentEntry + processAll + selectedTracks + insideLoop + funcOp + presetList + buttonNew + buttonDelete + buttonApply + buttonOk + buttonCancel + + + +
diff --git a/attic/muse_qt4_evolution/muse/widgets/utils.cpp b/attic/muse_qt4_evolution/muse/widgets/utils.cpp new file mode 100644 index 00000000..b7fd9cee --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/utils.cpp @@ -0,0 +1,451 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include +#include "utils.h" +#include "icons.h" +#include "gconfig.h" +#include "greendotbutton.h" +#include "recordbutton.h" + +static const int BFONT = 4; // simple button font + +//--------------------------------------------------------- +// RecordButton +//--------------------------------------------------------- + +RecordButton::RecordButton(QWidget* parent) + : SimpleButton(":/xpm/recordOn.svg", ":/xpm/recordOff.svg", parent) + { + setCheckable(true); + setToolTip(tr("record")); + } + +//--------------------------------------------------------- +// GreendotButton +//--------------------------------------------------------- + +GreendotButton::GreendotButton(QWidget* parent) + : SimpleButton(":/xpm/greendot.svg", ":/xpm/darkgreendot.svg", parent) + { + setCheckable(true); + setToolTip(tr("record")); + } + +//--------------------------------------------------------- +// curTime +//--------------------------------------------------------- + +double curTime() + { + struct timeval t; + gettimeofday(&t, 0); + return (double)((double)t.tv_sec + (t.tv_usec / 1000000.0)); + } + +//--------------------------------------------------------- +// dump +// simple debug output +//--------------------------------------------------------- + +void dump(const unsigned char* p, int n) + { + printf("dump %d\n", n); + for (int i = 0; i < n; ++i) { + printf("%02x ", *p++); + if ((i > 0) && (i % 16 == 0) && (i+1 < n)) + printf("\n"); + } + printf("\n"); + } + +//--------------------------------------------------------- +// num2cols +//--------------------------------------------------------- + +int num2cols(int min, int max) + { + int amin = abs(min); + int amax = abs(max); + int l = amin > amax ? amin : amax; + return int(log10(l)) + 1; + } + +//--------------------------------------------------------- +// hLine +//--------------------------------------------------------- + +QFrame* hLine(QWidget* w) + { + QFrame* delim = new QFrame(w); + delim->setFrameStyle(QFrame::HLine | QFrame::Sunken); + return delim; + } + +//--------------------------------------------------------- +// vLine +//--------------------------------------------------------- + +QFrame* vLine(QWidget* w) + { + QFrame* delim = new QFrame(w); + delim->setFrameStyle(QFrame::VLine | QFrame::Sunken); + return delim; + } + +//--------------------------------------------------------- +// bitmap2String +// 5c -> 1-4 1-6 +// +// 01011100 +// +//--------------------------------------------------------- + +QString bitmap2String(int bm) + { + QString s; +//printf("bitmap2string: bm %04x", bm); + if (bm == 0xffff) + s = "all"; + else if (bm == 0) + s = "none"; + else { + bool range = false; + int first = 0; + bool needSpace = false; + bm &= 0xffff; + for (int i = 0; i < 17; ++i) { + if ((1 << i) & bm) { + if (!range) { + range = true; + first = i; + } + } + else { + if (range) { + if (needSpace) + s += " "; + QString ns; + if (first == i-1) + ns.sprintf("%d", first+1); + else + ns.sprintf("%d-%d", first+1, i); + s += ns; + needSpace = true; + } + range = false; + } + } + } +//printf(" -> <%s>\n", s.toLatin1().data()); + return s; + } + +//--------------------------------------------------------- +// string2bitmap +//--------------------------------------------------------- + +int string2bitmap(const QString& str) + { + int val = 0; + QString ss(str.simplified()); + const char* s = ss.toLatin1().data(); +//printf("string2bitmap <%s>\n", s); + + if (s == 0) + return 0; + if (strcmp(s, "all") == 0) + return 0xffff; + if (strcmp(s, "none") == 0) + return 0; +// printf("str2bitmap: <%s> ", str.toLatin1().data()); + int tval = 0; + bool range = false; + int sval = 0; + while (*s == ' ') + ++s; + while (*s) { + if (*s >= '0' && *s <= '9') { + tval *= 10; + tval += *s - '0'; + } + else if (*s == ' ' || *s == ',') { + if (range) { + for (int i = sval-1; i < tval; ++i) + val |= (1 << i); + range = false; + } + else { + val |= (1 << (tval-1)); + } + tval = 0; + } + else if (*s == '-') { + range = true; + sval = tval; + tval = 0; + } + ++s; + } + if (range && tval) { + for (int i = sval-1; i < tval; ++i) + val |= (1 << i); + } + else if (tval) { + val |= (1 << (tval-1)); + } + return val & 0xffff; + } + +//--------------------------------------------------------- +// muteButton +//--------------------------------------------------------- + +SimpleButton* newMuteButton() + { + // SimpleButton* mute = new SimpleButton(parent, muteIconOff, muteIconOn); + SimpleButton* mute = new SimpleButton(QT_TR_NOOP("m")); + mute->setCheckable(true); + mute->setToolTip(QT_TR_NOOP("mute")); + mute->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); + return mute; + } + +//--------------------------------------------------------- +// soloButton +//--------------------------------------------------------- + +SimpleButton* newSoloButton() + { +// SimpleButton* solo = new SimpleButton(parent, soloIconOn, soloIconOff); + SimpleButton* solo = new SimpleButton(QT_TR_NOOP("s")); + solo->setCheckable(true); + solo->setToolTip(QT_TR_NOOP("solo")); + solo->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); + return solo; + } + +//--------------------------------------------------------- +// monitorButton +//--------------------------------------------------------- + +SimpleButton* newMonitorButton() + { + SimpleButton* monitor = new SimpleButton(QT_TR_NOOP("Mo")); + monitor->setCheckable(true); + monitor->setToolTip(QT_TR_NOOP("monitor")); + monitor->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); + return monitor; + } + +//--------------------------------------------------------- +// drumMapButton +//--------------------------------------------------------- + +SimpleButton* newDrumMapButton() + { + SimpleButton* dm = new SimpleButton(QT_TR_NOOP("Dr")); + dm->setCheckable(true); + dm->setToolTip(QT_TR_NOOP("use drum map")); + return dm; + } + +//--------------------------------------------------------- +// newOffButton +//--------------------------------------------------------- + +SimpleButton* newOffButton() + { + SimpleButton* off = new SimpleButton(":/xpm/off.svg", ":/xpm/on.svg"); + off->setCheckable(true); + off->setToolTip(QT_TR_NOOP("off")); + return off; + } + +//--------------------------------------------------------- +// newRecordButton +//--------------------------------------------------------- + +SimpleButton* newRecordButton() + { + SimpleButton* record = new RecordButton(); + record->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); + return record; + } + +//--------------------------------------------------------- +// newAutoReadButton +//--------------------------------------------------------- + +SimpleButton* newAutoReadButton() + { + SimpleButton* ar = new SimpleButton(QT_TR_NOOP("aR")); + ar->setCheckable(true); + ar->setToolTip(QT_TR_NOOP("automation read")); + return ar; + } + +//--------------------------------------------------------- +// newAutoWriteButton +//--------------------------------------------------------- + +SimpleButton* newAutoWriteButton() + { + SimpleButton* aw = new SimpleButton(QT_TR_NOOP("aW")); + aw->setCheckable(true); + aw->setToolTip(QT_TR_NOOP("automation write")); + return aw; + } + +//--------------------------------------------------------- +// syncButton +//--------------------------------------------------------- + +SimpleButton* newSyncButton() + { + SimpleButton* sync = new SimpleButton(QT_TR_NOOP("sync")); + sync->setCheckable(true); + sync->setToolTip(QT_TR_NOOP("send sync events")); + return sync; + } + +//--------------------------------------------------------- +// newMinusButton +//--------------------------------------------------------- + +SimpleButton* newMinusButton() + { + return new SimpleButton(minusIcon, minusIcon); + } + +//--------------------------------------------------------- +// newPlusButton +//--------------------------------------------------------- + +SimpleButton* newPlusButton() + { + SimpleButton* sync = new SimpleButton(plusIcon, plusIcon); + return sync; + } + +//--------------------------------------------------------- +// newStereoButton +//--------------------------------------------------------- + +SimpleButton* newStereoButton() + { + SimpleButton* stereo = new SimpleButton(":/xpm/stereo.svg", ":/xpm/mono.svg"); + stereo->setCheckable(true); + stereo->setToolTip(QT_TR_NOOP("1/2 channel")); + return stereo; + } + +//--------------------------------------------------------- +// newOutRouteButton +//--------------------------------------------------------- + +QToolButton* newOutRouteButton() + { + QToolButton* oR = new QToolButton; + oR->setObjectName("routeButton"); + oR->setFixedHeight(BUTTON_HEIGHT); + oR->setText(QT_TR_NOOP("oR")); + oR->setCheckable(false); + oR->setToolTip(QT_TR_NOOP("output routing")); + oR->setMenu(new QMenu); + oR->setPopupMode(QToolButton::InstantPopup); + oR->menu()->setSeparatorsCollapsible(false); + oR->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + return oR; + } + +//--------------------------------------------------------- +// newInRouteButton +//--------------------------------------------------------- + +QToolButton* newInRouteButton() + { + QToolButton* iR = new QToolButton; + iR->setObjectName("routeButton"); + iR->setFixedHeight(BUTTON_HEIGHT); + iR->setText(QT_TR_NOOP("iR")); + iR->setCheckable(false); + iR->setToolTip(QT_TR_NOOP("input routing")); + iR->setMenu(new QMenu); + iR->setPopupMode(QToolButton::InstantPopup); + iR->menu()->setSeparatorsCollapsible(false); + iR->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + return iR; + } + +//--------------------------------------------------------- +// fatalError +//--------------------------------------------------------- + +void fatalError(const char* s) + { + fprintf(stderr, "%s\n", s); + exit(-1); + } + +//--------------------------------------------------------- +// lineColor +//--------------------------------------------------------- + +QColor lineColor[splitWidth] = { + QColor(0x55, 0x55, 0x52), + QColor(0xc6, 0xc6, 0xbf), + QColor(0xee, 0xee, 0xe6), + QColor(0xff, 0xff, 0xfc), + QColor(0xff, 0xff, 0xff), + QColor(0x55, 0x55, 0x52), + }; + +//--------------------------------------------------------- +// paintHLine +//--------------------------------------------------------- + +void paintHLine(QPainter& p, int x1, int x2, int y) + { + for (int i = 0; i < splitWidth; ++i) { + p.setPen(lineColor[i]); + p.drawLine(x1, y, x2, y); + ++y; + } + } + +//--------------------------------------------------------- +// paintVLine +//--------------------------------------------------------- + +void paintVLine(QPainter& p, int y1, int y2, int x) + { + static QColor color[splitWidth] = { + QColor(0x55, 0x55, 0x52), + QColor(0xff, 0xff, 0xff), + }; + x -= 2; + for (int i = 0; i < 2; ++i) { + p.setPen(color[i]); + p.drawLine(x, y1, x, y2); + ++x; + } + } + diff --git a/attic/muse_qt4_evolution/muse/widgets/utils.h b/attic/muse_qt4_evolution/muse/widgets/utils.h new file mode 100644 index 00000000..360dd28e --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/utils.h @@ -0,0 +1,58 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __UTILS_H__ +#define __UTILS_H__ + +#include "gui.h" + +class SimpleButton; + +extern QString bitmap2String(int bm); +extern int string2bitmap(const QString& str); + +extern int num2cols(int min, int max); +extern QFrame* hLine(QWidget* parent); +extern QFrame* vLine(QWidget* parent); +extern void dump(const unsigned char* p, int n); +extern double curTime(); +extern SimpleButton* newMuteButton(); +extern SimpleButton* newSoloButton(); +extern SimpleButton* newMonitorButton(); +extern SimpleButton* newDrumMapButton(); +extern SimpleButton* newOffButton(); +extern SimpleButton* newRecordButton(); +extern SimpleButton* newAutoWriteButton(); +extern SimpleButton* newAutoReadButton(); +extern SimpleButton* newSyncButton(); +extern SimpleButton* newPlusButton(); +extern SimpleButton* newMinusButton(); +extern SimpleButton* newStereoButton(); +QToolButton* newOutRouteButton(); +QToolButton* newInRouteButton(); + +extern void fatalError(const char*); + +extern QColor lineColor[splitWidth]; +extern void paintHLine(QPainter& p, int x1, int x2, int y); +extern void paintVLine(QPainter& p, int y1, int y2, int x); + +#endif + diff --git a/attic/muse_qt4_evolution/muse/widgets/wtrackinfobase.ui b/attic/muse_qt4_evolution/muse/widgets/wtrackinfobase.ui new file mode 100644 index 00000000..da341c74 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/widgets/wtrackinfobase.ui @@ -0,0 +1,166 @@ + + + + + WaveTrackInfoBase + + + + 0 + 0 + 129 + 548 + + + + + 3 + 3 + 0 + 0 + + + + + 0 + 0 + + + + + 32767 + 32767 + + + + MusE: TrackInfo + + + + + + + + + + 1 + + + 1 + + + + + + 7 + 0 + 0 + 0 + + + + QFrame::WinPanel + + + QFrame::Raised + + + 1 + + + 0 + + + Track Info + + + Qt::AlignCenter + + + + + + + + 7 + 0 + 0 + 0 + + + + Track Name + + + Track Name + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 30 + + + + + + + + + 5 + 0 + 0 + 0 + + + + Track Delay (ticks) + + + off + + + 1000 + + + -1000 + + + + + + + + 5 + 0 + 0 + 0 + + + + Delay (Frames) + + + Delay + + + + + + + qPixmapFromMimeSource + + iName + + + + diff --git a/attic/muse_qt4_evolution/muse/xpm/activeoff.svg b/attic/muse_qt4_evolution/muse/xpm/activeoff.svg new file mode 100644 index 00000000..8449f988 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/activeoff.svg @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/attic/muse_qt4_evolution/muse/xpm/activeon.svg b/attic/muse_qt4_evolution/muse/xpm/activeon.svg new file mode 100644 index 00000000..c6426e54 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/activeon.svg @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/attic/muse_qt4_evolution/muse/xpm/addtrack_addmiditrack.xpm b/attic/muse_qt4_evolution/muse/xpm/addtrack_addmiditrack.xpm new file mode 100644 index 00000000..cfeb255b --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/addtrack_addmiditrack.xpm @@ -0,0 +1,26 @@ +/* XPM */ +static const char *addtrack_addmiditrack_xpm[]={ +"16 16 7 1", +"a c #000000", +"e c #404000", +". c #800000", +"c c #808080", +"b c #c00000", +"d c #dcdcdc", +"# c #ffffff", +".......##aa###..", +".bbbbb###aaa#bb.", +".b#######aaaa#b.", +".b#######a#aa#b.", +".bc#c#c#dad#a#b.", +".eeeeeeedadeeee.", +".bc#c#c#dad#c#b.", +".bc#c#c#dad#c#b.", +".bc#c#d#dad#c#b.", +".bc#c#aaaad#c#b.", +".eeedaaaaadeeee.", +".bc#caaaaa##c#b.", +".b####aaa#####b.", +".b############b.", +".bbbbbbbbbbbbbb.", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/addtrack_audiogroup.xpm b/attic/muse_qt4_evolution/muse/xpm/addtrack_audiogroup.xpm new file mode 100644 index 00000000..52a0b082 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/addtrack_audiogroup.xpm @@ -0,0 +1,35 @@ +/* XPM */ +static const char * addtrack_audiogroup_xpm[] = { +"16 16 16 1", +" c None", +". c #800000", +"+ c #C20000", +"@ c #FFFFFF", +"# c #363736", +"$ c #000100", +"% c #616161", +"& c #DBDDDA", +"* c #828282", +"= c #313231", +"- c #222322", +"; c #545454", +"> c #4E4F4E", +", c #323332", +"' c #454645", +") c #2E2F2E", +"................", +".++@@##$$$#@@++.", +".+@@#%@@@@#$&@+.", +".@@##@@@@@@##@@.", +"&&@$@@&@&@@@$@&&", +"@@***@@&@&@***@@", +"@*%$%@&&&@@%$$*@", +"*=-$*@@&&@@;$$$%", +">$#$#@&@&@@,$#$#", +"'$#$#@@&@@@#$#$#", +"*)$$%@@@&@@%$$$*", +"@*%$%@&&&@@*$$*@", +".@***@&&@&@***@.", +".+@@@@@@&&@@@@+.", +".++++++++++++++.", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/addtrack_audioinput.xpm b/attic/muse_qt4_evolution/muse/xpm/addtrack_audioinput.xpm new file mode 100644 index 00000000..1f5cfd9a --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/addtrack_audioinput.xpm @@ -0,0 +1,33 @@ +/* XPM */ +static const char * addtrack_audioinput_xpm[] = { +"16 16 14 1", +" c None", +". c #800000", +"+ c #DBDDDA", +"@ c #555652", +"# c #FEFFFC", +"$ c #8D8E88", +"% c #9FA19E", +"& c #FCFCF5", +"* c #C2C4C0", +"= c #C20000", +"- c #313230", +"; c #BEBFBA", +"> c #000100", +", c #565856", +".+@##....###@+#.", +".#$%+#####+%$##.", +".+#@%@&##*%@+#=.", +".####++##+####=.", +".######-######=.", +"###+$$+-#+$%+##.", +"#+#$;##-##%$%##.", +"##$;+##-###+$%#.", +".#@###>>>######.", +".#####>>>#+####.", +".=####>>>##+##+#", +".=##+#>>>#######", +".=#+###,###+#,,,", +".=###+#,####,,##", +".==####,,##,,#=.", +"......##,,,,#..."}; diff --git a/attic/muse_qt4_evolution/muse/xpm/addtrack_audiooutput.xpm b/attic/muse_qt4_evolution/muse/xpm/addtrack_audiooutput.xpm new file mode 100644 index 00000000..9b3780c6 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/addtrack_audiooutput.xpm @@ -0,0 +1,44 @@ +/* XPM */ +static const char * addtrack_audiooutput_xpm[] = { +"16 16 25 1", +" c None", +". c #800000", +"+ c #FEFFFC", +"@ c #C20000", +"# c #DBDDDA", +"$ c #656664", +"% c #FDF7F6", +"& c #545654", +"* c #626361", +"= c #767775", +"- c #000100", +"; c #7B7C7A", +"> c #7C7D7A", +", c #838481", +"' c #D8D9D7", +") c #CFD0CE", +"! c #D6D8D5", +"~ c #FBFCF9", +"{ c #C0C1BE", +"] c #E7E8E5", +"^ c #F3F4F1", +"/ c #B7B8B6", +"( c #F8FEFF", +"_ c #B4B5B3", +": c #B3B0AF", +"................", +".+@@@@@@@@@@@@@.", +"##+$$$$$$$$$$#@.", +"$$$$++#++++#$$+.", +"$++++++++++%#$#.", +"++++++&*&++%=$+.", +"##+&*&---;>,=++.", +".++'''---)!=~+#.", +".@++##{{'##=#++.", +".@#+%+#+]-;=+++.", +".@++++%^---+++@.", +".@++++^---/++(@.", +".@++++*--_%++%@.", +".@+++&-:_++++(@.", +".@@@#-#%++@@@@@.", +"....+#+........."}; diff --git a/attic/muse_qt4_evolution/muse/xpm/addtrack_auxsend.xpm b/attic/muse_qt4_evolution/muse/xpm/addtrack_auxsend.xpm new file mode 100644 index 00000000..d3528418 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/addtrack_auxsend.xpm @@ -0,0 +1,28 @@ +/* XPM */ +static const char * addtrack_auxsend_xpm[] = { +"16 16 9 1", +" c None", +". c #FFFFFF", +"+ c #F4F4F4", +"@ c #9FA19E", +"# c #797D7C", +"$ c #DEDFDE", +"% c #000000", +"& c #C9CAC8", +"* c #F1F1F1", +".+@..........@+.", +"+#$.+@....@..$#+", +"#%$+#$....$#.$%#", +"%&.#%$....$%#.&%", +"%$+%........%.$%", +"%$#%.$@..@$.%#$%", +"%$%$.#$..$#.$%$%", +"%$%$.#.%%.#.$%$%", +"%$%$.#$%%$#.$%$%", +"%$%$.#$.%$#.$%$%", +"%$#%.$@.%@$.%#$%", +"%$+%....%...%.$%", +"%&.#%$..%.$%#.&%", +"#%$+#$..%.$#.$##", +"+#$.*@..%.@..$%+", +"..@.....%....@+."}; diff --git a/attic/muse_qt4_evolution/muse/xpm/addtrack_drumtrack.xpm b/attic/muse_qt4_evolution/muse/xpm/addtrack_drumtrack.xpm new file mode 100644 index 00000000..a2841740 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/addtrack_drumtrack.xpm @@ -0,0 +1,41 @@ +/* XPM */ +static const char * addtrack_drumtrack_xpm[] = { +"16 16 22 1", +" c None", +". c #800000", +"+ c #000100", +"@ c #C20000", +"# c #9FA19E", +"$ c #F8FEFF", +"% c #A29FA3", +"& c #FDF7F6", +"* c #FEFFFC", +"= c #2F312E", +"- c #797D7C", +"; c #FBF5F4", +"> c #C2C4C0", +", c #DBDDDA", +"' c #ACA5B1", +") c #DDE2E5", +"! c #D3D8DA", +"~ c #7F817E", +"{ c #E0CEC3", +"] c #F0F5F8", +"^ c #DEE0DD", +"/ c #CED7DF", +"...........+....", +".@@@@@@@@@++#@@.", +".@$$$$$$$++%%$+.", +".@&&&&&&++##*++.", +".@*****++%%$++#.", +".$*==+++==*++#%.", +"&*+-&++;;+++%#@.", +"*=>&,*--+++##$@.", +"&==->>>-++=%&$@.", +"&='=====++=%**$*", +"&=%))&)),%+++++*", +".=%-;);!%++>#>~+", +".&=){]^,~=+->>++", +".@/======%++++++", +".@@&'%%%%%+%~~+*", +"........**&+++**"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/addtrack_wavetrack.xpm b/attic/muse_qt4_evolution/muse/xpm/addtrack_wavetrack.xpm new file mode 100644 index 00000000..c67befb9 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/addtrack_wavetrack.xpm @@ -0,0 +1,36 @@ +/* XPM */ +static const char * addtrack_wavetrack_xpm[] = { +"16 16 17 1", +" c None", +". c #800000", +"+ c #FEFFFC", +"@ c #FDF7F6", +"# c #A29FA3", +"$ c #9FA19E", +"% c #C20000", +"& c #F9FBF8", +"* c #C2C4C0", +"= c #BAC5C6", +"- c #7F817E", +"; c #FFFFFF", +"> c #F8FEFF", +", c #000100", +"' c #797D7C", +") c #DBDDDA", +"! c #DDE2E5", +".........+++@#$#", +".%%%%%%%+++@+++#", +".%++&&&&++*=#-++", +".;>>>++,>@@@@$@+", +">>+@@+,,+=**@$++", +"+,,+,,,,++@#@-@+", +"+,,+,,+,**+#+'-@", +"+,,+,++,+#@-+@'@", +"+,,+,++,+$+'@+'@", +"+,,+,,+,**@$@--@", +"+,,+,,,,@@+#+#@+", +"++++)),,+***+*++", +".+)+@!),+@@@+*@+", +".%+@+@)!;+**#'@$", +".%%%%%%%;+@@+@+#", +".........@@+++$$"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/audio_bounce_to_file.xpm b/attic/muse_qt4_evolution/muse/xpm/audio_bounce_to_file.xpm new file mode 100644 index 00000000..ee645fdc --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/audio_bounce_to_file.xpm @@ -0,0 +1,24 @@ +/* XPM */ +static const char * audio_bounce_to_file_xpm[] = { +"16 16 5 1", +" c None", +". c #000000", +"+ c #C3C3C3", +"@ c #DCDCDC", +"# c #A0A0A0", +" ... ", +" ..+.. ", +" ..+@@.. ", +" ..+@#@@.. ", +" ..+@###@@.. ", +" ..+@####+@+.. ", +"..@@###+@+@.... ", +".+@###+@++.##...", +"..+##@@++.####..", +" ..++@++.###### ", +" ..+++..##### ", +" ..+.##.### ", +" ....##.# ", +" ....## ", +" ... ", +" . "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/audio_bounce_to_track.xpm b/attic/muse_qt4_evolution/muse/xpm/audio_bounce_to_track.xpm new file mode 100644 index 00000000..3708b6bf --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/audio_bounce_to_track.xpm @@ -0,0 +1,27 @@ +/* XPM */ +static const char * audio_bounce_to_track_xpm[] = { +"16 16 8 1", +" c None", +". c #CECECE", +"+ c #FB0000", +"@ c #8A5C04", +"# c #9E772E", +"$ c #000000", +"% c #AE8E51", +"& c #2B2B2B", +" .++ ", +" .++ ", +" ...++ ", +" .++++++ ", +" ..++++ . ", +" ..++ . ", +" .... ", +" ", +" ", +" @# @# @# @# ", +"$$$$$$$$$$$$$$$$", +"@#. @%..@#..@#. ", +"#. @%..@#..@#. @", +". ##. @#. @#. @#", +"$$$$$$$&$$$$$$$$", +" @#. @#. @#. @# "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/audio_restartaudio.xpm b/attic/muse_qt4_evolution/muse/xpm/audio_restartaudio.xpm new file mode 100644 index 00000000..f74a3050 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/audio_restartaudio.xpm @@ -0,0 +1,69 @@ +/* XPM */ +static const char * audio_restartaudio_xpm[] = { +"16 16 50 1", +" c None", +". c #F5A630", +"+ c #F8B657", +"@ c #A98F5C", +"# c #F2B64F", +"$ c #BBBBBB", +"% c #323232", +"& c #0A0A0A", +"* c #D2D2D2", +"= c #292929", +"- c #101010", +"; c #191916", +"> c #B6B1AF", +", c #5C5C5C", +"' c #1C1C1D", +") c #C4C4C5", +"! c #B0B0B0", +"~ c #DADADA", +"{ c #C9C9C9", +"] c #808080", +"^ c #5A5A5A", +"/ c #3A3A3B", +"( c #929292", +"_ c #A4A4A4", +": c #949494", +"< c #39393B", +"[ c #1F1E22", +"} c #5A5A59", +"| c #3E3E3D", +"1 c #353537", +"2 c #18171B", +"3 c #060606", +"4 c #363636", +"5 c #393939", +"6 c #272727", +"7 c #29292B", +"8 c #141417", +"9 c #0B0B0B", +"0 c #1C1C1C", +"a c #252527", +"b c #2E2D2F", +"c c #262628", +"d c #1D1D1E", +"e c #19191B", +"f c #0A0A0B", +"g c #111114", +"h c #0F0F13", +"i c #0F0E11", +"j c #0E0E10", +"k c #0D0D0F", +" .. + ", +" ++...+++ ", +" ++.++ ", +" ++++@+#++ ", +" $%&&+ ++ ", +" * = -;>++ ", +" * ,'' ) + ", +" * ! ''&!+ ", +"* ~ {]^/'& ", +" (_: <[&& ", +"= }|123& ", +"=45 6789( ", +"!&0abcdef9! ", +" !&ghijk&! ", +" !&&&&&! ", +" !&& ! "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/back.xpm b/attic/muse_qt4_evolution/muse/xpm/back.xpm new file mode 100644 index 00000000..917213c0 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/back.xpm @@ -0,0 +1,27 @@ +/* XPM */ +/* Drawn by Mark Donohoe for the K Desktop Environment */ +/* See http://www.kde.org */ +static const char*back_xpm[]={ +"16 16 5 1", +"# c #000000", +"a c #ffffff", +"c c #808080", +"b c #c0c0c0", +". c None", +"................", +".......#........", +"......##........", +".....#a#........", +"....#aa########.", +"...#aabaaaaaaa#.", +"..#aabbbbbbbbb#.", +"...#abbbbbbbbb#.", +"...c#ab########.", +"....c#a#ccccccc.", +".....c##c.......", +"......c#c.......", +".......cc.......", +"........c.......", +"................", +"......................"}; + diff --git a/attic/muse_qt4_evolution/muse/xpm/bold.xpm b/attic/muse_qt4_evolution/muse/xpm/bold.xpm new file mode 100644 index 00000000..b5d786ac --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/bold.xpm @@ -0,0 +1,16 @@ +/* XPM */ +static const char * bold_xpm[] = { +"11 11 2 1", +" g None", +". g #000000", +" ", +" ....... ", +" .. ... ", +" .. .. ", +" .. .. ", +" ..... ", +" .. ... ", +" .. .. ", +" .. ... ", +" ....... ", +" "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/buttondown.xpm b/attic/muse_qt4_evolution/muse/xpm/buttondown.xpm new file mode 100644 index 00000000..a8cff668 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/buttondown.xpm @@ -0,0 +1,27 @@ +/* XPM */ +static const char * buttondown_xpm[] = { +"16 18 6 1", +" c None", +". c #F0F0F0", +"+ c #000000", +"@ c #F8FCF8", +"# c #484C48", +"$ c #D8DCD8", +"...............+", +".@@@@@@@@@@@@@#+", +".@$$$$$$$$$$$$#+", +".@$$$$$$$$$$$$#+", +".@$$$$$$$$$$$$#+", +".@$$$$$$$$$$$$#+", +".@$$$$$$$$$$$$#+", +".@$$+++++++$$$#+", +".@$$$+++++$$$$#+", +".@$$$$+++$$$$$#+", +".@$$$$$+$$$$$$#+", +".@$$$$$$$$$$$$#+", +".@$$$$$$$$$$$$#+", +".@$$$$$$$$$$$$#+", +".@$$$$$$$$$$$$#+", +".@$$$$$$$$$$$$#+", +".##############+", +"++++++++++++++++"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/cafter.xpm b/attic/muse_qt4_evolution/muse/xpm/cafter.xpm new file mode 100644 index 00000000..3ab12692 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/cafter.xpm @@ -0,0 +1,29 @@ +/* XPM */ +static const char *cafter_xpm[] = { +"22 22 2 1", +". c None", +"# c #000000", +"######################", +"##...................#", +"#.#..................#", +"#..#.................#", +"#...#................#", +"#....#...............#", +"#.....#..............#", +"#......#.............#", +"#.......#............#", +"#........#...........#", +"#.........#..........#", +"#..........#.........#", +"#...........#........#", +"#............#.......#", +"#.............#......#", +"#..............#.....#", +"#...............#....#", +"#................#...#", +"#.................#..#", +"#..................#.#", +"#...................##", +"######################" +}; + diff --git a/attic/muse_qt4_evolution/muse/xpm/cliplistS.xpm b/attic/muse_qt4_evolution/muse/xpm/cliplistS.xpm new file mode 100644 index 00000000..6ba516fc --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/cliplistS.xpm @@ -0,0 +1,28 @@ +/* XPM */ +static const char *cliplistS_xpm[]={ +"16 16 9 1", +"# c #000000", +"f c #585858", +"e c #808080", +"d c #a0a0a0", +"c c #c000c0", +"g c #c3c3c3", +"a c #dcdcdc", +". c #ff00ff", +"b c #ffffff", +"................", +"..############..", +"..#aaaaaaaaaa#..", +"..#abbbbbbbba#c.", +"..#bbdeeeedbb#c.", +"..#bdbbbbbbdb#c.", +"..#bbbdffdbbb#c.", +"..#bbbbbbbbbb#c.", +"..#b#gggggg#b#c.", +"..#bb######gb#c.", +"..#bbb####gbb#c.", +"..#bbbb##gbbb#c.", +"..#bbbbggbbbb#c.", +"..############c.", +"....ccccccccccc.", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/cmark.xpm b/attic/muse_qt4_evolution/muse/xpm/cmark.xpm new file mode 100644 index 00000000..5c8cf1fc --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/cmark.xpm @@ -0,0 +1,23 @@ +/* XPM */ +static const char* cmark_xpm[]={ +"18 18 2 1", +"# c #ff0000", +". c None", +"..................", +"..................", +"..................", +"..................", +"..................", +"..................", +"..................", +"##################", +".################.", +"..##############..", +"...############...", +"....##########....", +".....########.....", +"......######......", +".......####.......", +"........##........", +"........##........", +"........##........"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/config.xpm b/attic/muse_qt4_evolution/muse/xpm/config.xpm new file mode 100644 index 00000000..727c4095 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/config.xpm @@ -0,0 +1,36 @@ +/* XPM */ +static const char * config_xpm[] = { +"16 16 17 1", +" c None", +". c #000000", +"+ c #808080", +"@ c #646464", +"# c #DCDCDC", +"$ c #C3C3C3", +"% c #A0A0A0", +"& c #B8B8B8", +"* c #787878", +"= c #FFFFFF", +"- c #EDEDED", +"; c #585858", +"> c #C2C2C2", +", c #B7B7B7", +"' c #E7E7E7", +") c #303030", +"! c #CFCFCF", +" ...... ", +" .+@#$%.. ", +" .&*@#$%. ", +"... ..&@#$. ", +".=$.. .@##%. ", +".=-#$.;@>##,. ", +".@=-######'$%.. ", +")=@*=--##'$!$%%.", +".$#=@@@*%$-#!$,%", +" ..$#$$$*@*=-#!$", +" ...%#$$%@*=-#", +" ....-#%@*=", +" ..-#%@", +" ..-#", +" ..", +" "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/configure.xpm b/attic/muse_qt4_evolution/muse/xpm/configure.xpm new file mode 100644 index 00000000..5bcb079f --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/configure.xpm @@ -0,0 +1,36 @@ +/* XPM */ +static const char * configure_xpm[] = { +"16 16 17 1", +" c None", +". c #000000", +"+ c #808080", +"@ c #646464", +"# c #DCDCDC", +"$ c #C3C3C3", +"% c #A0A0A0", +"& c #B8B8B8", +"* c #787878", +"= c #FFFFFF", +"- c #EDEDED", +"; c #585858", +"> c #C2C2C2", +", c #B7B7B7", +"' c #E7E7E7", +") c #303030", +"! c #CFCFCF", +" ...... ", +" .+@#$%.. ", +" .&*@#$%. ", +"... ..&@#$. ", +".=$.. .@##%. ", +".=-#$.;@>##,. ", +".@=-######'$%.. ", +")=@*=--##'$!$%%.", +".$#=@@@*%$-#!$,%", +" ..$#$$$*@*=-#!$", +" ...%#$$%@*=-#", +" ....-#%@*=", +" ..-#%@", +" ..-#", +" ..", +" "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/ctrl.xpm b/attic/muse_qt4_evolution/muse/xpm/ctrl.xpm new file mode 100644 index 00000000..01124b02 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/ctrl.xpm @@ -0,0 +1,27 @@ +/* XPM */ +static const char * ctrl_xpm[] = { +"22 22 2 1", +" c #FFFFFFFFFFFF", +". c #000000000000", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ... . .. ", +" .. .. . ", +" . . . . ", +" . ..... .. . ", +" . . .. . ", +" . . . . ", +" . . . . . ", +" .. .. . . . ", +" .... ..... ... ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/cut.xpm b/attic/muse_qt4_evolution/muse/xpm/cut.xpm new file mode 100644 index 00000000..b104bd1c --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/cut.xpm @@ -0,0 +1,29 @@ +/* XPM */ +static const char*cut_xpm[]={ +"18 18 7 1", +"# c #a0a0a4", +"a c #585858", +"b c #303030", +"d c #dcdcdc", +"e c #ffffff", +"c c #c0c0c0", +". c None", +"..................", +"..................", +"..#aba#...........", +"..bccca#.....ab#..", +"..accccb...#abaa#.", +"..#aacaa..#aba#...", +"...#bab#.#ab#.....", +".....#aaaba#......", +"aaaaaaaada#aaaaaa.", +".....#baaaaeeeeed.", +"...#aaa#.#dd#.....", +"..#abcba..daba#...", +"..accccb..e#abab#.", +"..bccca#.....aa#..", +"..#aba#...........", +"..................", +"..................", +".................."}; + diff --git a/attic/muse_qt4_evolution/muse/xpm/darkgreendot.svg b/attic/muse_qt4_evolution/muse/xpm/darkgreendot.svg new file mode 100644 index 00000000..b673f1ae --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/darkgreendot.svg @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/attic/muse_qt4_evolution/muse/xpm/delete.xpm b/attic/muse_qt4_evolution/muse/xpm/delete.xpm new file mode 100644 index 00000000..7c337199 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/delete.xpm @@ -0,0 +1,27 @@ +/* XPM */ +static const char* delete_xpm[]={ +"18 18 5 1", +"# c #000000", +"a c #ffffff", +"b c #a0a0a4", +"c c #dcdcdc", +". c None", +"..................", +"..................", +"..................", +"..................", +"........########..", +".......#aaaaaa##b.", +"......#aaaaaa#c#b.", +".....#aaaaaa#cc#b.", +"....#aaaaaa#cc#bb.", +"...#aaaaaa#cc#bb..", +"..#aaaaaa#cc#bb...", +".########cc#bb....", +".#cccccc#c#bb.....", +".#cccccc##bb......", +".########bb.......", +"..bbbbbbbb........", +"..................", +".................."}; + diff --git a/attic/muse_qt4_evolution/muse/xpm/down.xpm b/attic/muse_qt4_evolution/muse/xpm/down.xpm new file mode 100644 index 00000000..9ac9f1f9 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/down.xpm @@ -0,0 +1,15 @@ +/* XPM */ +static const char* down_xpm[]={ +"14 10 2 1", +"# c #000000", +". c None", +"..............", +"......##......", +"......##......", +"......##......", +"......##......", +"...##.##.##...", +"....######....", +".....####.....", +"......##......", +".............."}; diff --git a/attic/muse_qt4_evolution/muse/xpm/draw.xpm b/attic/muse_qt4_evolution/muse/xpm/draw.xpm new file mode 100644 index 00000000..5bb771a3 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/draw.xpm @@ -0,0 +1,25 @@ +/* XPM */ +static const char *draw_xpm[]={ +"18 18 4 1", +". c None", +"# c #000040", +"b c #c3c3c3", +"a c #ffffff", +"..................", +"..........###.....", +"..........#a#.....", +".........####.....", +"........#b..#.....", +".......#b....#....", +"......#b.....#....", +".....#bb......#...", +"....#bb.......###.", +".###bb........#a#.", +".#a#b.........###.", +".###b.............", +"..................", +"..................", +"..................", +"..................", +"..................", +".................."}; diff --git a/attic/muse_qt4_evolution/muse/xpm/edit_drumms.xpm b/attic/muse_qt4_evolution/muse/xpm/edit_drumms.xpm new file mode 100644 index 00000000..8738f267 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/edit_drumms.xpm @@ -0,0 +1,45 @@ +/* XPM */ +static const char * edit_drumms_xpm[] = { +"16 16 26 1", +" c None", +". c #13A913", +"+ c #000100", +"@ c #0AD700", +"# c #496447", +"$ c #FEFFFC", +"% c #F8FEFF", +"& c #A29FA3", +"* c #9FA19E", +"= c #FDF7F6", +"- c #2F312E", +"; c #797D7C", +"> c #FBF5F4", +", c #C2C4C0", +"' c #DBDDDA", +") c #F9FBF8", +"! c #ACA5B1", +"~ c #DDE2E5", +"{ c #D3D8DA", +"] c #7F817E", +"^ c #E0CEC3", +"/ c #F0F5F8", +"( c #DEE0DD", +"_ c #CED7DF", +": c #078002", +"< c #00C100", +"...........+....", +".@@@@@@@@@++#@@.", +".@$$$$$$%++&*%+.", +".@======++**%++.", +".@%$%$%++&&$++*.", +".@$--+++--$++**.", +".@+;=++>>+++&&@.", +".-,='$;;+++**)@.", +".--;,,,;++-&%$@.", +".-!-----++-&%=@.", +".-&~~=~~'&+++++.", +".-&;>~>{&++,&,]+", +".@-~^/(']-+],,++", +".@_------&++++++", +".@@@::::::+*]]+.", +"...........+++<."}; diff --git a/attic/muse_qt4_evolution/muse/xpm/edit_list.xpm b/attic/muse_qt4_evolution/muse/xpm/edit_list.xpm new file mode 100644 index 00000000..19b62b41 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/edit_list.xpm @@ -0,0 +1,31 @@ +/* XPM */ +static const char * edit_list_xpm[] = { +"16 16 12 1", +" c None", +". c #13A913", +"+ c #0AD700", +"@ c #000100", +"# c #DBDDDA", +"$ c #FDF7F6", +"% c #D3D8DA", +"& c #078002", +"* c #F9FBF8", +"= c #F8FEFF", +"- c #DDE2E5", +"; c #DEE0DD", +"................", +".+@@@@@@@@@@@@+.", +".+@##########@+.", +".+@$@$@$@$@$%@&.", +".+@*=@=@=@=@#@&.", +".+@$$*$*$*$$%@&.", +".+@=@-@-@-@;#@&.", +".+@**@#@-@#@%@&.", +".+@$*$*$*$$$#@&.", +".+@=@-@#@-@#-@&.", +".+@**@#@#@-@#@&.", +".+@$$*$*$$$$%@&.", +".+@=$=$==*=$#@&.", +".+@@@@@@@@@@@@&.", +".+++&&&&&&&&&&&.", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/edit_mastertrack.xpm b/attic/muse_qt4_evolution/muse/xpm/edit_mastertrack.xpm new file mode 100644 index 00000000..e4f1a948 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/edit_mastertrack.xpm @@ -0,0 +1,38 @@ +/* XPM */ +static const char * edit_mastertrack_xpm[] = { +"16 16 19 1", +" c None", +". c #13A913", +"+ c #000100", +"@ c #0AD700", +"# c #F9FBF8", +"$ c #F8FEFF", +"% c #FEFFFC", +"& c #FDF7F6", +"* c #ED9E9D", +"= c #EA8B8B", +"- c #5B6062", +"; c #D78080", +"> c #EC9594", +", c #DA8A8A", +"' c #797D7C", +") c #747573", +"! c #FF9797", +"~ c #1C1D1C", +"{ c #C2C4C0", +"................", +"++@@@@@@@@@@@@@.", +".++##$%#%$%%&%@.", +".@++&&&&&&&&$&@.", +".@&++$**%$$%$%@.", +".@%%++%=*%%%$&@.", +".@%%%+-;;==++++.", +".@%%%%>,;;;+'++.", +".@%&&%%*=;;++++.", +".@%$%$%)*=!++++.", +".@%%&%$%%~$++++.", +".@%%%%%%%%%{{{{.", +".@%%%%%%%%&&&&@.", +".@%%%%%%%%%%%%@.", +".@@@@@@@@@@@@@@.", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/edit_midi.xpm b/attic/muse_qt4_evolution/muse/xpm/edit_midi.xpm new file mode 100644 index 00000000..3c7071c0 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/edit_midi.xpm @@ -0,0 +1,26 @@ +/* XPM */ +static const char * edit_midi_xpm[] = { +"16 16 7 1", +" c None", +". c #57A8FE", +"+ c #A6DDFD", +"@ c #000100", +"# c #FDF7F6", +"$ c #2F312E", +"% c #FEFFFC", +"................", +".++++@@@@@@++++.", +".+##@$$$$$$@##+.", +".+%@$######$@#+.", +".+@$#%%$$%#%$@+.", +".@$#%%#$$%%%#$@.", +".@$%$$###%$$#$@.", +".@$#$$%%%#$$#$@.", +".@$###%%%####$@.", +".@$%$$%%%%$$#$@.", +".@$#$$#%%#$$#$@.", +".+@$##%%%###$@+.", +".+#@$%%%%%%$@#+.", +".+%%@$$$$$$@%#+.", +".++++@@@@@@++++.", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/edit_pianoroll.xpm b/attic/muse_qt4_evolution/muse/xpm/edit_pianoroll.xpm new file mode 100644 index 00000000..c2672271 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/edit_pianoroll.xpm @@ -0,0 +1,28 @@ +/* XPM */ +static const char * edit_pianoroll_xpm[] = { +"16 16 9 1", +" c None", +". c #13A913", +"+ c #0AD700", +"@ c #000100", +"# c #F8FEFF", +"$ c #FDF7F6", +"% c #FEFFFC", +"& c #DBDDDA", +"* c #006B00", +"................", +".++++++++++++++.", +".+@@@@@@@@@###+.", +".+@@@@@@@@@$$$+.", +".+%&&&&&&&&&%#+.", +".+@@@@@@@@@$%$+.", +".+@@@@@@@@@%%%+.", +".+%&&&&&&&&&#$+.", +".+@@@@@@@@@%##+.", +".+@@@@@@@@@%%$+.", +".+%&&&&&&&&&%%+.", +".+%$$$$$$$$$#$+.", +".+@@@@@@@@@%#%+.", +".+@@@@@@@@@%#$+.", +".++*********+++.", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/edit_track_add.xpm b/attic/muse_qt4_evolution/muse/xpm/edit_track_add.xpm new file mode 100644 index 00000000..6f659f7f --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/edit_track_add.xpm @@ -0,0 +1,24 @@ +/* XPM */ +static const char *edit_track_add_xpm[]={ +"16 16 5 1", +"c c #404000", +". c #800000", +"b c #808080", +"# c #c00000", +"a c #ffffff", +"................", +".##############.", +".#aaaaaaaaaaaa#.", +".#aaaaaaaaaaaa#.", +".#babababababa#.", +".cccccccccccccc.", +".#babababababa#.", +".#babababababa#.", +".#babababababa#.", +".#babababababa#.", +".cccccccccccccc.", +".#babababababa#.", +".#aaaaaaaaaaaa#.", +".#aaaaaaaaaaaa#.", +".##############.", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/edit_track_del.xpm b/attic/muse_qt4_evolution/muse/xpm/edit_track_del.xpm new file mode 100644 index 00000000..4ead97ff --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/edit_track_del.xpm @@ -0,0 +1,25 @@ +/* XPM */ +static const char * edit_track_del_xpm[] = { +"16 16 6 1", +" c None", +". c #800000", +"+ c #C00000", +"@ c #FFFFFF", +"# c #808080", +"$ c #404000", +"................", +".++++++++++++++.", +".+++@@@@@@@@@@+.", +".++++@@@@@@@@@+.", +".+#+++#@#@#@#@+.", +".$$$+++$$$$$$$$.", +".+#@#+++#@#@#@+.", +".+#@#@+++@#@#@+.", +".+#@#@#+++#@#@+.", +".+#@#@#@+++@#@+.", +".$$$$$$$$+++$$$.", +".+#@#@#@#@+++@+.", +".+@@@@@@@@@++++.", +".+@@@@@@@@@@+++.", +".++++++++++++++.", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/editcopy.xpm b/attic/muse_qt4_evolution/muse/xpm/editcopy.xpm new file mode 100644 index 00000000..7823c06b --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/editcopy.xpm @@ -0,0 +1,102 @@ +/* XPM */ +static const char * editcopy_xpm[] = { +"22 22 77 1", +" c None", +". c #121212", +"+ c #FFFFFF", +"@ c #313131", +"# c #898989", +"$ c #3C3B3C", +"% c #C9C9C9", +"& c #828282", +"* c #C6C6C6", +"= c #474646", +"- c #5C5B5B", +"; c #FEFCFB", +"> c #A4A4A4", +", c #747474", +"' c #FDFBF9", +") c #FCF7F3", +"! c #FAF4EE", +"~ c #F0EAE6", +"{ c #C1BAB3", +"] c #C3C3C3", +"^ c #5A5552", +"/ c #7E7873", +"( c #9F958D", +"_ c #7D746E", +": c #D8D0C8", +"< c #FCF8F5", +"[ c #FBF5F0", +"} c #F9F1EA", +"| c #F8EEE5", +"1 c #F7EADF", +"2 c #F5E7DA", +"3 c #D6CABF", +"4 c #5B5959", +"5 c #C4C0BD", +"6 c #807C79", +"7 c #5A5653", +"8 c #C0B5AC", +"9 c #998778", +"0 c #7B6F65", +"a c #7A6D62", +"b c #D3C3B4", +"c c #FBF6F2", +"d c #FAF2EC", +"e c #F9EFE7", +"f c #F7EBE1", +"g c #F6E8DC", +"h c #F4E4D6", +"i c #F3E0D0", +"j c #F2DDCB", +"k c #D1BCAA", +"l c #4D4D4D", +"m c #7F7A76", +"n c #595551", +"o c #7B6F64", +"p c #564C45", +"q c #786A5C", +"r c #CEB6A0", +"s c #F8EDE3", +"t c #F6E9DD", +"u c #F5E5D8", +"v c #F3E2D2", +"w c #F2DECD", +"x c #F1DAC7", +"y c #EFD7C2", +"z c #EED3BC", +"A c #CCAF97", +"B c #DEDEDE", +"C c #D7CCC1", +"D c #D5C7BA", +"E c #D3C2B3", +"F c #D1BEAC", +"G c #CFB9A5", +"H c #CEB49F", +"I c #CCB097", +"J c #CAAB90", +"K c #C9A88C", +"L c #000000", +" ", +" ......... ", +" .++++++@#. ", +" .++++++$+%. ", +" .+&%&*+=%+#. ", +" .++++++==$@. ", +" .+&-%&%;*>,...... ", +" .+++++')!~{.]++@#. ", +" .+-&*&^/(_:.]++$+%. ", +" .++;<[}|123.&*+=%+#. ", +" .+4567890ab.]++==$@. ", +" .+cdefghijk.l&%+*>&. ", +" .+mn89op9qr.]+++++*. ", +" .+stuvwxyzA.>&-&>&B. ", +" .:CDEFGHIJK.]+++++B. ", +" ..........LL&-*>&&B. ", +" .]]]]+++++B. ", +" .+&-*>&->&B. ", +" .+++++++++B. ", +" .BBBBBBBBBB. ", +" ............ ", +" "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/editcut.xpm b/attic/muse_qt4_evolution/muse/xpm/editcut.xpm new file mode 100644 index 00000000..4efcb43c --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/editcut.xpm @@ -0,0 +1,33 @@ +/* XPM */ +static const char * editcut_xpm[] = { +"22 22 8 1", +" c None", +". c #000000", +"+ c #080203", +"@ c #FFFFFF", +"# c #C3C3C3", +"$ c #010101", +"% c #A0A0A0", +"& c #303030", +" ", +" ", +" ..+. ", +" ... .. ... ", +" .. .. .@@#. ", +" .. .. .@@#. ", +" .. . .@@#. ", +" ... .. .@@#. ", +" ....$ .@@#. ", +" .....@@#. ", +" %.@@#. ", +" .@&#. ", +" ....@.#. ", +" ....$..@@#. ", +" ... .. .@@#. ", +" .. . .@@#. ", +" .. .. .@@#. ", +" .. .. .@@#. ", +" .. .. .@@#. ", +" ..+. ... ", +" ", +" "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/editcutS.xpm b/attic/muse_qt4_evolution/muse/xpm/editcutS.xpm new file mode 100644 index 00000000..06031f4a --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/editcutS.xpm @@ -0,0 +1,24 @@ +/* XPM */ +static const char * editcutS_xpm[] = { +"16 16 5 1", +" g None", +". g #000000", +"+ g #FFFFFF", +"@ g #DCDCDC", +"# g #808080", +" ", +" .... .. ", +".. .. .+@.", +".. .. .+@. ", +" .. . .+@. ", +" ...... .+@. ", +" .....+@. ", +" ..+@. ", +" .+@.. ", +" .....#@. ", +" ...... .+@. ", +" .. . .+@. ", +".. .. .+@. ", +".. .. .+@.", +" .... .. ", +" "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/editmute.xpm b/attic/muse_qt4_evolution/muse/xpm/editmute.xpm new file mode 100644 index 00000000..ff0e22ac --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/editmute.xpm @@ -0,0 +1,33 @@ +/* XPM */ +static const char * editmute_xpm[] = { +"22 22 8 1", +" c None", +". c #000000", +"+ c #080203", +"@ c #FFFFFF", +"# c #C3C3C3", +"$ c #010101", +"% c #A0A0A0", +"& c #303030", +" ", +" ", +" ", +" ... ... ", +" .@@#. .@@#. ", +" .@@#. .@@#. ", +" .@@#. .@@#. ", +" .@@#. .@@#. ", +" .@@#. .@@#. ", +" .@@#..@@#. ", +" .@@@@@#. ", +" .#&&#. ", +" .@@@@@#. ", +" .@@#..@@#. ", +" .@@#. .@@#. ", +" .@@#. .@@#. ", +" .@@#. .@@#. ", +" .@@#. .@@#. ", +" .@@#. .@@#. ", +" ... ... ", +" ", +" "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/editpaste.xpm b/attic/muse_qt4_evolution/muse/xpm/editpaste.xpm new file mode 100644 index 00000000..8793a955 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/editpaste.xpm @@ -0,0 +1,210 @@ +/* XPM */ +static const char * editpaste_xpm[] = { +"22 22 185 2", +" c None", +". c #161616", +"+ c #3A3616", +"@ c #6F681E", +"# c #625607", +"$ c #575006", +"% c #020202", +"& c #060A06", +"* c #262206", +"= c #807529", +"- c #FEFEFD", +"; c #CAC682", +"> c #A69E62", +", c #362E16", +"' c #EAEAEA", +") c #EEEEEE", +"! c #574D0A", +"~ c #FFFFFF", +"{ c #F6F6DE", +"] c #EEEECA", +"^ c #CECA96", +"/ c #9E964A", +"( c #4A462E", +"_ c #C5C5C5", +": c #C9C9C9", +"< c #CCCCCC", +"[ c #D4D4D4", +"} c #DBDBDB", +"| c #3A3636", +"1 c #D6D6D6", +"2 c #A6A6A6", +"3 c #989898", +"4 c #D6D29E", +"5 c #CAC686", +"6 c #B6B26A", +"7 c #AAA65A", +"8 c #7E721E", +"9 c #818181", +"0 c #888885", +"a c #8C8C8C", +"b c #262626", +"c c #DADADA", +"d c #A2A2A2", +"e c #A9A9A9", +"f c #B2B6B6", +"g c #3E3A32", +"h c #2E2E26", +"i c #26261A", +"j c #22221A", +"k c #222216", +"l c #161612", +"m c #626266", +"n c #727272", +"o c #6E6E6E", +"p c #7A7A7A", +"q c #222222", +"r c #D5D5D5", +"s c #999999", +"t c #9E9E9E", +"u c #AAAAAA", +"v c #BEBEBE", +"w c #9A9A9A", +"x c #828282", +"y c #6C6C6C", +"z c #5E5E5E", +"A c #656565", +"B c #5B5B5B", +"C c #2E2E2E", +"D c #B5B5B1", +"E c #AFAFAF", +"F c #9A9E9E", +"G c #969696", +"H c #7E7E7E", +"I c #432E1A", +"J c #372617", +"K c #2C1F14", +"L c #201711", +"M c #15110D", +"N c #1B1B1B", +"O c #1E1E1E", +"P c #939393", +"Q c #9F9F9F", +"R c #A4A4A4", +"S c #A2A29E", +"T c #313131", +"U c #898989", +"V c #121212", +"W c #B6B6B6", +"X c #9F9FA3", +"Y c #979797", +"Z c #8A8A8A", +"` c #797979", +" . c #676767", +".. c #3C3B3C", +"+. c #AEAEAE", +"@. c #949494", +"#. c #C6C6C6", +"$. c #474646", +"%. c #8E8E8E", +"&. c #D2D2D2", +"*. c #A2A2A6", +"=. c #868686", +"-. c #717171", +";. c #5C5B5B", +">. c #FEFCFB", +",. c #747474", +"'. c #868682", +"). c #FDFBF9", +"!. c #FCF7F3", +"~. c #FAF4EE", +"{. c #F0EAE6", +"]. c #C1BAB3", +"^. c #CACACA", +"/. c #6A6A6A", +"(. c #3A2818", +"_. c #5A5552", +":. c #7E7873", +"<. c #9F958D", +"[. c #7D746E", +"}. c #D8D0C8", +"|. c #CECECE", +"1. c #767676", +"2. c #636363", +"3. c #322316", +"4. c #FCF8F5", +"5. c #FBF5F0", +"6. c #F9F1EA", +"7. c #F8EEE5", +"8. c #F7EADF", +"9. c #F5E7DA", +"0. c #D6CABF", +"a. c #2A1E14", +"b. c #5B5959", +"c. c #C4C0BD", +"d. c #807C79", +"e. c #5A5653", +"f. c #C0B5AC", +"g. c #998778", +"h. c #7B6F65", +"i. c #7A6D62", +"j. c #D3C3B4", +"k. c #707070", +"l. c #595959", +"m. c #221811", +"n. c #FBF6F2", +"o. c #FAF2EC", +"p. c #F9EFE7", +"q. c #F7EBE1", +"r. c #F6E8DC", +"s. c #F4E4D6", +"t. c #F3E0D0", +"u. c #F2DDCB", +"v. c #D1BCAA", +"w. c #808080", +"x. c #4F4F4F", +"y. c #19140F", +"z. c #7F7A76", +"A. c #595551", +"B. c #7B6F64", +"C. c #564C45", +"D. c #786A5C", +"E. c #CEB6A0", +"F. c #6A6666", +"G. c #565656", +"H. c #494949", +"I. c #120F0C", +"J. c #F8EDE3", +"K. c #F6E9DD", +"L. c #F5E5D8", +"M. c #F3E2D2", +"N. c #F2DECD", +"O. c #F1DAC7", +"P. c #EFD7C2", +"Q. c #EED3BC", +"R. c #CCAF97", +"S. c #D7CCC1", +"T. c #D5C7BA", +"U. c #D3C2B3", +"V. c #D1BEAC", +"W. c #CFB9A5", +"X. c #CEB49F", +"Y. c #CCB097", +"Z. c #CAAB90", +"`. c #C9A88C", +" + c #000000", +" . + @ # $ ", +" % % % % % & * = - ; > , % % % % % % ", +"% ' ) ) ) ) ) ! ~ { ] ^ / ( _ : < [ } | ", +"% 1 2 2 2 3 = ~ 4 5 6 7 / 8 ( 9 0 9 a b ", +"% c d e f 2 g h i i j i j k l m n o p q ", +"% r s t u v u w x y z A B A z B A y w C ", +"% 1 D E u F t G H I I I J K L M N N y O ", +"% r P Q R S w G H I ~ ~ ~ ~ ~ ~ T U V O ", +"% 1 W u X Y Z ` .I ~ ~ ~ ~ ~ ~ ..~ : V ", +"% 1 G t t u +.@.x I ~ x : x #.~ $.: ~ U V ", +"% 1 w 2 t %.x x o I ~ ~ ~ ~ ~ ~ $.$...T V ", +"% &.%.G w 2 *.=.-.I ~ x ;.: x : >.#.R ,.V ", +"% &.2 u 2 '.=.=.-.I ~ ~ ~ ~ ~ ).!.~.{.].V ", +"% ^.H =.Z w G H /.(.~ ;.x #.x _.:.<.[.}.V ", +"% |.w G =.H p 1.2.3.~ ~ >.4.5.6.7.8.9.0.V ", +"% ^.=.%.%.=.x p .a.~ b.c.d.e.f.g.h.i.j.V ", +"% ^.H x H p k./.l.m.~ n.o.p.q.r.s.t.u.v.V ", +"% #.x =.=.w.w.z x.y.~ z.A.f.g.B.C.g.D.E.V ", +"% u o o o o F.G.H.I.~ J.K.L.M.N.O.P.Q.R.V ", +" % % % % % % % V N }.S.T.U.V.W.X.Y.Z.`.V ", +" V V V V V V V V V V + + ", +" "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/fforward.xpm b/attic/muse_qt4_evolution/muse/xpm/fforward.xpm new file mode 100644 index 00000000..11bf7523 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/fforward.xpm @@ -0,0 +1,17 @@ +/* XPM */ +static const char * fforward_xpm[] = { +"17 12 2 1", +" c None", +". c #000000", +" . . ", +" ... ... ", +" ... ... ", +" .... .... ", +" .... .... ", +" ..... ..... ", +" ..... ..... ", +" .... .... ", +" .... .... ", +" ... ... ", +" ... ... ", +" . . "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/filenew.png b/attic/muse_qt4_evolution/muse/xpm/filenew.png new file mode 100644 index 00000000..1214837b Binary files /dev/null and b/attic/muse_qt4_evolution/muse/xpm/filenew.png differ diff --git a/attic/muse_qt4_evolution/muse/xpm/filenewS.xpm b/attic/muse_qt4_evolution/muse/xpm/filenewS.xpm new file mode 100644 index 00000000..1980070a --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/filenewS.xpm @@ -0,0 +1,29 @@ +/* XPM */ +static const char * filenewS_xpm[] = { +"16 16 10 1", +" c None", +". c #000000", +"+ c #303030", +"@ c #DCDCDC", +"# c #C3C3C3", +"$ c #FFFFFF", +"% c #585858", +"& c #A0A0A0", +"* c #FFFFC0", +"= c #400000", +" ..+...+.. ", +" +@@@@@#+#. ", +" .@$$$$$%$@. ", +" .@$$$$$%@$#. ", +" .@$$$$$%%%+. ", +" .@$$$$$$@#&. ", +" .@$$$$$$*$@. ", +" .@$$$$$$$$$. ", +" .@$$$$*$*$*. ", +" .@$$$$$$$*$. ", +" .@$$*$*$*$*. ", +" .@$$$$$*$*$. ", +" +@*$*$*$*$*. ", +" .@$$$*$*$**. ", +" .@*$*$*$***. ", +" ......=..+.. "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/fileopen.png b/attic/muse_qt4_evolution/muse/xpm/fileopen.png new file mode 100644 index 00000000..bb35ee03 Binary files /dev/null and b/attic/muse_qt4_evolution/muse/xpm/fileopen.png differ diff --git a/attic/muse_qt4_evolution/muse/xpm/filesave.png b/attic/muse_qt4_evolution/muse/xpm/filesave.png new file mode 100644 index 00000000..d69158ee Binary files /dev/null and b/attic/muse_qt4_evolution/muse/xpm/filesave.png differ diff --git a/attic/muse_qt4_evolution/muse/xpm/flag.xpm b/attic/muse_qt4_evolution/muse/xpm/flag.xpm new file mode 100644 index 00000000..f8bcf244 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/flag.xpm @@ -0,0 +1,28 @@ +/* XPM */ +static const char* flag_xpm[] = { +"22 22 3 1", +". c None", +"+ c #000000", +"@ c #00FF00", +"......................", +"......................", +"......................", +"......................", +"........++............", +"........+@++..........", +"........+@@@+.........", +"........+@@@@+........", +"........+@@@@@+.......", +"........+@@@@+........", +"........+@@@+.........", +"........+@++..........", +"........++............", +"........+.............", +"........+.............", +"........+.............", +"........+.............", +"........+.............", +"........+.............", +"......................", +"......................", +"......................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/flagS.xpm b/attic/muse_qt4_evolution/muse/xpm/flagS.xpm new file mode 100644 index 00000000..741528e1 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/flagS.xpm @@ -0,0 +1,19 @@ +/* XPM */ +static const char* flagS_xpm[] = { +"8 12 3 1", +". c None", +"+ c #000000", +"@ c #00FF00", +"+.......", +"+@+.....", +"+@@@+...", +"+@@@@@+.", +"+@@@@+..", +"+@@@+...", +"+@+.....", +"+.......", +"+.......", +"+.......", +"+.......", +"+......."}; + diff --git a/attic/muse_qt4_evolution/muse/xpm/folder_new.png b/attic/muse_qt4_evolution/muse/xpm/folder_new.png new file mode 100644 index 00000000..1277281f Binary files /dev/null and b/attic/muse_qt4_evolution/muse/xpm/folder_new.png differ diff --git a/attic/muse_qt4_evolution/muse/xpm/forward.xpm b/attic/muse_qt4_evolution/muse/xpm/forward.xpm new file mode 100644 index 00000000..c2104314 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/forward.xpm @@ -0,0 +1,28 @@ +/* XPM */ +/* Drawn by Mark Donohoe for the K Desktop Environment */ +/* See http://www.kde.org */ +static const char*forward_xpm[]={ +"16 16 5 1", +"# c #000000", +"a c #ffffff", +"c c #808080", +"b c #c0c0c0", +". c None", +"................", +"................", +".........#......", +".........##.....", +".........#a#....", +"..########aa#...", +"..#aaaaaaabaa#..", +"..#bbbbbbbbbaa#.", +"..#bbbbbbbbba#..", +"..########ba#c..", +"..ccccccc#a#c...", +"........c##c....", +"........c#c.....", +"........cc......", +"........c.......", +"................", +"................"}; + diff --git a/attic/muse_qt4_evolution/muse/xpm/frewind.xpm b/attic/muse_qt4_evolution/muse/xpm/frewind.xpm new file mode 100644 index 00000000..8c11fc3a --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/frewind.xpm @@ -0,0 +1,17 @@ +/* XPM */ +static const char * frewind_xpm[] = { +"17 12 2 1", +" c None", +". c #000000", +" . . ", +" ... ... ", +" ... ... ", +" .... .... ", +" .... .... ", +" ..... ..... ", +" ..... ..... ", +" .... .... ", +" .... .... ", +" ... ... ", +" ... ... ", +" . . "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/glue.xpm b/attic/muse_qt4_evolution/muse/xpm/glue.xpm new file mode 100644 index 00000000..caff2484 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/glue.xpm @@ -0,0 +1,49 @@ +/* XPM */ +static const char * glue_xpm[] = { +"22 22 24 1", +" c None", +". c #A0A0A4", +"+ c #8C9BBA", +"@ c #BBC4D6", +"# c #7C8BAA", +"$ c #A3ACBE", +"% c #7D8EAE", +"& c #98A6C0", +"* c #8895B0", +"= c #4F6693", +"- c #0D1628", +"; c #7586A6", +"> c #4A566E", +", c #000000", +"' c #6D7FA2", +") c #63779D", +"! c #9B9B9F", +"~ c #6A7A99", +"{ c #687B9F", +"] c #374664", +"^ c #424F6A", +"/ c #5C7199", +"( c #3B4967", +"_ c #3E4C68", +" ", +" ", +" . ", +" . ", +" .+. ", +" .+.. ", +" .@+#. ", +" .@+#.. ", +" .@@@$#. ", +" .@@@@@##. ", +" .@@@@@$%.. ", +" .&@@@@$*#=- ", +" .&@@@@$;#>,. ", +" .'*@@@*;'),. ", +" !~;$$*{')],. ", +" ,^;{*//(,.. ", +" ,_#))_,.. ", +" ,,,,,.. ", +" ..... ", +" ", +" ", +" "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/greendot.svg b/attic/muse_qt4_evolution/muse/xpm/greendot.svg new file mode 100644 index 00000000..823240de --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/greendot.svg @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/attic/muse_qt4_evolution/muse/xpm/gv.xpm b/attic/muse_qt4_evolution/muse/xpm/gv.xpm new file mode 100644 index 00000000..cf4a2ed1 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/gv.xpm @@ -0,0 +1,23 @@ +/* XPM */ +static const char * gv_xpm[] = { +"16 16 4 1", +" g None", +". g #000000", +"+ g #FFFFFF", +"@ g #C0C0C0", +" ........... ", +".+++++++++++. ", +".+@@@@+@@@++. ", +".+++++++++++. ", +".+@++@...@++. ", +".+++@.+++.@+. ", +".+@+.++@++.+. ", +".+++.++@@+.+. ", +".+++.+++++.+. ", +".+++@.+++..+. ", +".@@+@@....+.. ", +".@+@@@++++.+. ", +".@@++@+++++.+. ", +".@+@@+++++++.+. ", +" ........... .+.", +" . "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/home.xpm b/attic/muse_qt4_evolution/muse/xpm/home.xpm new file mode 100644 index 00000000..de96eea3 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/home.xpm @@ -0,0 +1,27 @@ +/* XPM */ +/* Drawn by Mark Donohoe for the K Desktop Environment */ +/* See http://www.kde.org */ +static const char *home_xpm[]={ +"16 16 4 1", +"# c #000000", +"a c #ffffff", +"b c #c0c0c0", +". c None", +"........... ....", +" ....##.......", +"..#...####......", +"..#..#aabb#.....", +"..#.#aaaabb#....", +"..##aaaaaabb#...", +"..#aaaaaaaabb#..", +".#aaaaaaaaabbb#.", +"###aaaaaaaabb###", +"..#aaaaaaaabb#..", +"..#aaa###aabb#..", +"..#aaa#.#aabb#..", +"..#aaa#.#aabb#..", +"..#aaa#.#aabb#..", +"..#aaa#.#aabb#..", +"..#####.######..", +"................"}; + diff --git a/attic/muse_qt4_evolution/muse/xpm/initS.xpm b/attic/muse_qt4_evolution/muse/xpm/initS.xpm new file mode 100644 index 00000000..998b02fe --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/initS.xpm @@ -0,0 +1,23 @@ +/* XPM */ +static const char * initS_xpm[] = { +"16 16 4 1", +" c None", +". c #C00000", +"+ c #FFFFFF", +"@ c #000000", +"................", +"................", +"..++++++++++++..", +"..+@@++++++@@+..", +"..+@@@++++@@@+..", +"..++@@@++@@@++..", +"..+++@@@@@@+++..", +"..++++@@@@++++..", +"..++++@@@@++++..", +"..+++@@@@@@+++..", +"..++@@@++@@@++..", +"..+@@@++++@@@+..", +"..+@@++++++@@+..", +"..++++++++++++..", +"................", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/inputpluginS.xpm b/attic/muse_qt4_evolution/muse/xpm/inputpluginS.xpm new file mode 100644 index 00000000..33e8e578 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/inputpluginS.xpm @@ -0,0 +1,22 @@ +/* XPM */ +static const char *inputpluginS_xpm[]={ +"16 16 3 1", +"a c #000000", +". c #00ff00", +"# c #ffffff", +"................", +"................", +"..############..", +"..#aaaaa######a.", +".aaaaaaaaaa##a.a", +"a.#aaaaa######a.", +"..############..", +"..#aaaaa######a.", +"aaaaaaaaaaa##a.a", +"..#aaaaa######a.", +"..############..", +"a.#aaaaa######a.", +".aaaaaaaaaa##a.a", +"..#aaaaa######a.", +"................", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/italic.xpm b/attic/muse_qt4_evolution/muse/xpm/italic.xpm new file mode 100644 index 00000000..e21ebbff --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/italic.xpm @@ -0,0 +1,16 @@ +/* XPM */ +static const char * italic_xpm[] = { +"11 11 2 1", +" g None", +". g #000000", +" ", +" .... ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .. ", +" .... ", +" "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/listS.xpm b/attic/muse_qt4_evolution/muse/xpm/listS.xpm new file mode 100644 index 00000000..cc561f06 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/listS.xpm @@ -0,0 +1,26 @@ +/* XPM */ +static const char *listS_xpm[]={ +"16 16 7 1", +"# c #000000", +"e c #008000", +". c #00ff00", +"b c #dbdbdb", +"a c #dcdcdc", +"d c #fafafa", +"c c #fbfbfb", +"................", +"..############..", +"..#aaaaaaaabb#..", +"..#c#c#c#c#db#e.", +"..#cc#c#c#c#b#e.", +"..#cccccccccb#e.", +"..#c#a#a#a#ab#e.", +"..#cc#a#a#a#b#e.", +"..#cccccccccb#e.", +"..#c#a#a#a#ab#e.", +"..#cc#a#a#a#b#e.", +"..#cccccccccb#e.", +"..#cccccccccb#e.", +"..############e.", +"....eeeeeeeeeee.", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/lmark.xpm b/attic/muse_qt4_evolution/muse/xpm/lmark.xpm new file mode 100644 index 00000000..2da119b9 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/lmark.xpm @@ -0,0 +1,23 @@ +/* XPM */ +static const char* lmark_xpm[]={ +"18 18 2 1", +"# c #0000ff", +". c None", +"..................", +"..................", +"..................", +"..................", +"..................", +"..................", +"..................", +"##########........", +".#########........", +"..########........", +"...#######........", +"....######........", +".....#####........", +"......####........", +".......###........", +"........##........", +"........##........", +"........##........"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/localoffS.xpm b/attic/muse_qt4_evolution/muse/xpm/localoffS.xpm new file mode 100644 index 00000000..312793a5 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/localoffS.xpm @@ -0,0 +1,22 @@ +/* XPM */ +static const char *localoffS_xpm[]={ +"16 16 3 1", +"a c #000000", +". c #c00000", +"# c #ffffff", +"................", +"................", +"..############..", +"..############..", +"..####aaaa####..", +"..##aaaaaaaa##..", +"..##aaaaaaaa##..", +"..############..", +"..############..", +"..##aaaaaaaa##..", +"..##aaaaaaaa##..", +"..####aaaa####..", +"..############..", +"..############..", +"................", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/lock.xpm b/attic/muse_qt4_evolution/muse/xpm/lock.xpm new file mode 100644 index 00000000..9c38103b --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/lock.xpm @@ -0,0 +1,86 @@ +/* XPM */ +static const char * lock_xpm[] = { +"15 15 68 1", +" c None", +". c #747474", +"+ c #838383", +"@ c #727272", +"# c #808080", +"$ c #929292", +"% c #7F7F7F", +"& c #7A7A7A", +"* c #6A6A6A", +"= c #8C8C8C", +"- c #F3F3F3", +"; c #DEDEDE", +"> c #2F2F2F", +", c #2C2C2C", +"' c #191919", +") c #242424", +"! c #3A3A3A", +"~ c #6D6D6D", +"{ c #CBCBCB", +"] c #212121", +"^ c #B6B6B6", +"/ c #D1D1D1", +"( c #C6C6C6", +"_ c #1D1D1D", +": c #787878", +"< c #C1C1C1", +"[ c #757575", +"} c #1F1F1F", +"| c #404040", +"1 c #BDBDBD", +"2 c #878787", +"3 c #CFCFCF", +"4 c #282828", +"5 c #1C1C1C", +"6 c #DCDCDC", +"7 c #7C7C7C", +"8 c #B5B5B5", +"9 c #262626", +"0 c #202020", +"a c #232323", +"b c #A3A3A3", +"c c #2D2D2D", +"d c #C4C4C4", +"e c #1E1E1E", +"f c #D8D8D8", +"g c #272727", +"h c #292929", +"i c #E3E3E3", +"j c #D4D4D4", +"k c #B8B8B8", +"l c #EBEBEB", +"m c #444444", +"n c #323232", +"o c #3B3B3B", +"p c #414141", +"q c #383838", +"r c #434343", +"s c #EFEFEF", +"t c #ABABAB", +"u c #E7E7E7", +"v c #A0A0A0", +"w c #353535", +"x c #363636", +"y c #373737", +"z c #C3C3C3", +"A c #969696", +"B c #1B1B1B", +"C c #8F8F8F", +".+@#$.@%&+%%@+*", +"=--;;>,')!;;--$", +"~{;;]!^;/(_;{/:", +"=<;)[^}_)/+|1<2", +"&3/41);;;56}(/%", +"73;)89;;;06_(/+", +"2(5abc;;;]d)e/%", +"7f5)90g]g0ahe3+", +"+;ai<(j(<x|yp(g-+", +".jn6z6ukeiC", +"@%@%=22@@%&+#=~"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/loop.xpm b/attic/muse_qt4_evolution/muse/xpm/loop.xpm new file mode 100644 index 00000000..acd999c8 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/loop.xpm @@ -0,0 +1,29 @@ +/* XPM */ +static char *loop[]={ +"22 22 4 1", +". c None", +"a c #000000", +"b c #7f7f7f", +"# c #ffffff", +"......................", +"......................", +".......########.......", +"......#aaaaaaaab......", +".....#abbbbbbbbab.....", +"....#ab........#ab....", +"....#ab........#ab....", +"....#ab........#ab....", +"....#ab.......#aaa....", +"....#ab.......#aaab...", +"....#ab......#aaaaa...", +"....#ab......#aaaaa...", +"....#ab......#ababa...", +"....#ab........bab....", +"....#ab........#ab....", +"....#ab........#ab....", +"....#ab........#ab....", +".....ba......##ab.....", +"......baaaaaaaab......", +"........bbbbbbb.......", +"......................", +"......................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/master.xpm b/attic/muse_qt4_evolution/muse/xpm/master.xpm new file mode 100644 index 00000000..8d241c9f --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/master.xpm @@ -0,0 +1,15 @@ +/* XPM */ +static const char*master_xpm[]={ +"10 10 2 1", +"# c #000000", +". c None", +"..........", +".#.,....#.", +".##....##.", +".###..###.", +".########.", +".##.##.##.", +".##....##.", +".##....##.", +".##....##.", +".........."}; diff --git a/attic/muse_qt4_evolution/muse/xpm/mastertrackS.xpm b/attic/muse_qt4_evolution/muse/xpm/mastertrackS.xpm new file mode 100644 index 00000000..3f1dfcb9 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/mastertrackS.xpm @@ -0,0 +1,25 @@ +/* XPM */ +static const char *mastertrackS_xpm[]={ +"16 16 6 1", +"# c #000000", +". c #00ff00", +"c c #808080", +"d c #c3c3c3", +"b c #ffc0c0", +"a c #ffffff", +"................", +"................", +"..#aaaaaaaaaaa..", +"..##aaaaaaaaaa..", +"..a##abbaaaaaa..", +"..aa##abbaaaaa..", +"..aaa#cbbbb####.", +"..aaaabcbbb#c##.", +"..aaaaabbbb####.", +"..aaaaacbbb####.", +"..aaaaaaa#a####.", +"..aaaaaaaaadddd.", +"..aaaaaaaaaaaa..", +"..aaaaaaaaaaaa..", +"................", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/mastertrack_graphic.xpm b/attic/muse_qt4_evolution/muse/xpm/mastertrack_graphic.xpm new file mode 100644 index 00000000..0651619c --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/mastertrack_graphic.xpm @@ -0,0 +1,28 @@ +/* XPM */ +static const char * mastertrack_graphic_xpm[] = { +"16 16 9 1", +" c None", +". c #13A913", +"+ c #0AD700", +"@ c #800000", +"# c #FEFFFC", +"$ c #C2C4C0", +"% c #C20000", +"& c #FF0000", +"* c #078002", +"................", +".++@@++++++++++.", +".+#@@$########+.", +".+#%%$########+.", +".+#%%$########+.", +".+#&&$#@@#####+.", +".+#&&$#@@####@@.", +".@@&&$#%%####@@*", +".@@&&@@%%$###%%*", +".%%&&@@&&@@##%%*", +".%%&&%%&&@@@@&&*", +".&&&&%%&&%%@@&&*", +".&&&&&&&&%%%%&&*", +".&&&&&&&&&&%%&&*", +".+**************", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/mastertrack_list.xpm b/attic/muse_qt4_evolution/muse/xpm/mastertrack_list.xpm new file mode 100644 index 00000000..e8ed00db --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/mastertrack_list.xpm @@ -0,0 +1,27 @@ +/* XPM */ +static const char * mastertrack_list_xpm[] = { +"16 16 8 1", +" c None", +". c #13A913", +"+ c #0AD700", +"@ c #000100", +"# c #FEFFFC", +"$ c #DBDDDA", +"% c #078002", +"& c #C2C4C0", +"................", +".+@@@@@@@@@@@@+.", +".+@#$$$####$$@%.", +".+@$@&@&@&@&#@%.", +".+@##@&@&@&@#@%.", +".+@#$##$#####@%.", +".+@$@@#@#@#@#@%.", +".+@$@@#$@#@##@%.", +".+@$$##$#####@%.", +".+@#@@#@$@#@#@%.", +".+@#@@##@$@##@%.", +".+@$#@@#@#@##@%.", +".+@#@##@@#@@#@%.", +".+@$#####$$#$@%.", +".+@@@@@@@@@@@@%.", +"...%%%%%%%%%%%%."}; diff --git a/attic/muse_qt4_evolution/muse/xpm/meta.xpm b/attic/muse_qt4_evolution/muse/xpm/meta.xpm new file mode 100644 index 00000000..c424c23c --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/meta.xpm @@ -0,0 +1,27 @@ +/* XPM */ +static const char * meta_xpm[] = { +"22 22 2 1", +" c #FFFFFFFFFFFF", +". c #000000000000", +" ", +" ", +" ", +" ", +" ........ .... ", +" .. .. .. .. .. ", +" .. .. .. ...... ", +" .. .. .. .. ", +" .. .. .. .. . ", +" ... .. ... .... ", +" ", +" ", +" .. ", +" .. ", +" .... .... ", +" .. .. ", +" .. ..... ", +" .. .. .. ", +" .. .. .. ", +" ... ....... ", +" ", +" "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/midi_edit_instrument.xpm b/attic/muse_qt4_evolution/muse/xpm/midi_edit_instrument.xpm new file mode 100644 index 00000000..90e3df49 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/midi_edit_instrument.xpm @@ -0,0 +1,27 @@ +/* XPM */ +static const char * midi_edit_instrument_xpm[] = { +"16 16 8 1", +" c None", +". c #000000", +"+ c #FFFFFF", +"@ c #FF0000", +"# c #A0A0A0", +"$ c #808000", +"% c #404000", +"& c #585858", +" ", +" ........... ", +" .+++++++++. @@", +" .+########.@@@", +" .+++++++++$%@ ", +" .+#######$%$ ", +" .+++++++$%$ ", +" .+####+$%$. ", +" .+++++$%$+. ", +" .+#++$%$++. ", +" .+++&$$+++. ", +" .+++&&++++. ", +" .+++++++++. ", +" .+#######+. ", +" .+++++++++. ", +" ........... "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/midi_init_instr.xpm b/attic/muse_qt4_evolution/muse/xpm/midi_init_instr.xpm new file mode 100644 index 00000000..a64dc56f --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/midi_init_instr.xpm @@ -0,0 +1,28 @@ +/* XPM */ +static const char * midi_init_instr_xpm[] = { +"16 16 9 1", +" c None", +". c #800000", +"+ c #C00000", +"@ c #E1DDDA", +"# c #C7C0BB", +"$ c #FFFFFF", +"% c #0E0702", +"& c #080401", +"* c #000000", +"................", +".++++++++++++++.", +".+@###$$$$@##$+.", +".+@%&#@$$##&&#+.", +".+@%*&#@@@&*&#+.", +".+@#&*&#@&**##+.", +".+@$#&*&*&%@@@+.", +".+@$$#&***#@@@+.", +".+@$$#****#@$@+.", +".+@@#%*%&&%#@@+.", +".+@#&*%#@&*&#@+.", +".+#&*%##$@**%#+.", +".+#%%#@$$@#%%#+.", +".+@@@@$$$$$##$+.", +".++++++++++++++.", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/midi_local_off.xpm b/attic/muse_qt4_evolution/muse/xpm/midi_local_off.xpm new file mode 100644 index 00000000..80dd1268 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/midi_local_off.xpm @@ -0,0 +1,105 @@ +/* XPM */ +static const char * midi_local_off_xpm[] = { +"16 16 86 1", +" c None", +". c #800000", +"+ c #C00000", +"@ c #FFFFFF", +"# c #F2F2F2", +"$ c #3D3D3D", +"% c #414141", +"& c #FEFEFE", +"* c #F1F1F1", +"= c #BFBFBF", +"- c #E7E7E7", +"; c #EEEEEE", +"> c #363636", +", c #353535", +"' c #D1D1D1", +") c #B5B5B5", +"! c #FAFAFA", +"~ c #878787", +"{ c #040404", +"] c #636363", +"^ c #E9E9E9", +"/ c #6B6B6B", +"( c #0E0E0E", +"_ c #999999", +": c #C4C4C4", +"< c #1E1E1E", +"[ c #1C1C1C", +"} c #B7B7B7", +"| c #ECECEC", +"1 c #F7F7F7", +"2 c #9E9E9E", +"3 c #121212", +"4 c #2E2E2E", +"5 c #DFDFDF", +"6 c #535353", +"7 c #070707", +"8 c #EFEFEF", +"9 c #E5E5E5", +"0 c #4C4C4C", +"a c #0A0A0A", +"b c #949494", +"c c #212121", +"d c #B8B8B8", +"e c #979797", +"f c #454545", +"g c #171717", +"h c #3C3C3C", +"i c #DADADA", +"j c #494949", +"k c #BEBEBE", +"l c #292929", +"m c #242424", +"n c #101010", +"o c #A8A8A8", +"p c #4B4B4B", +"q c #FDFDFD", +"r c #868686", +"s c #373737", +"t c #828282", +"u c #090909", +"v c #5C5C5C", +"w c #F0F0F0", +"x c #F4F4F4", +"y c #FBFBFB", +"z c #404040", +"A c #0F0F0F", +"B c #A5A5A5", +"C c #111111", +"D c #4E4E4E", +"E c #B4B4B4", +"F c #EBEBEB", +"G c #ACACAC", +"H c #464646", +"I c #E8E8E8", +"J c #131313", +"K c #484848", +"L c #2D2D2D", +"M c #0D0D0D", +"N c #5A5A5A", +"O c #CECECE", +"P c #FCFCFC", +"Q c #CCCCCC", +"R c #7F7F7F", +"S c #262626", +"T c #A7A7A7", +"U c #E2E2E2", +"................", +".++++++++++++++.", +".+@@@@#$%&@@@@+.", +".+@*=-;>,&')!@+.", +".+!~{]^>,^/(_@+.", +".+:<[}|>,12345+.", +".+67/8;>,&90ab+.", +".+,&@eaf+.", +".+ghi@;>j&@k c #E1E1E1", +", c #AE0000", +"' c #A3A3A3", +") c #909090", +"! c #474747", +"~ c #D1D1D1", +"{ c #E6E6E6", +"] c #B3B3B3", +"^ c #B0B0B0", +"/ c #C0C0C0", +"( c #CBCBCB", +"_ c #B5B5B5", +": c #DCDCDC", +"< c #DBDBDB", +"[ c #E4E4E4", +"} c #2A2A2A", +"| c #1E1E1E", +"1 c #C2C2C2", +"2 c #D3D3D3", +"3 c #4E4E4E", +"4 c #252525", +"5 c #EAEAEA", +"6 c #D7D7D7", +"7 c #CCCCCC", +"................", +".++++++++++++++.", +".+@@@@#$#@@@@@+.", +".+@@@#%%#@@@@@+.", +".+&@#%%%#####@+.", +".+&*%%%%%%=$#@+.", +".+&-%%%%%%%%;>,.", +".+@@#%%%');%!~,.", +".+@@{]%%']^%%]+.", +".+@@@@]$/(_=%/+.", +".+@@@:<]##;%=@+.", +".+@@[}|%%%%=!1+.", +".+@@234%%!$$]@+.", +".+@@@5677777@{+.", +".++++++++++++++.", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/midi_transform.xpm b/attic/muse_qt4_evolution/muse/xpm/midi_transform.xpm new file mode 100644 index 00000000..d354191f --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/midi_transform.xpm @@ -0,0 +1,30 @@ +/* XPM */ +static const char * midi_transform_xpm[] = { +"16 16 11 1", +" c None", +". c #58A8FF", +"+ c #A8DCFF", +"@ c #363636", +"# c #FFFFFF", +"$ c #CACACA", +"% c #626262", +"& c #000000", +"* c #85AECA", +"= c #010101", +"- c #4685CA", +"................", +".+++++++++@@+++.", +".+##@#####@@##+.", +".+##@$####@@##+.", +".+##@$####@@##+.", +".+#%&%##%@&&@%+.", +".+#%&%$#%@&&@%*.", +".+#%&%$#%@&&@%*.", +".+#%&%$#%@&&@%*.", +".+##&$$#%@&&@%*.", +".+#&=$##%@&&@%*.", +".+&&$$###$=&$$*.", +".&&$$####&&&$#+.", +"&&$$####&&&$$#+.", +"&**++++&&&**+++.", +"--....&&&--....."}; diff --git a/attic/muse_qt4_evolution/muse/xpm/midi_transpose.xpm b/attic/muse_qt4_evolution/muse/xpm/midi_transpose.xpm new file mode 100644 index 00000000..0fdf5ac0 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/midi_transpose.xpm @@ -0,0 +1,31 @@ +/* XPM */ +static const char * midi_transpose_xpm[] = { +"16 16 12 1", +" c None", +". c #58A8FF", +"+ c #000000", +"@ c #A8DCFF", +"# c #FFFFFF", +"$ c #CACACA", +"% c #797C7E", +"& c #808080", +"* c #545454", +"= c #7E7F7F", +"- c #6F91A8", +"; c #3A6FA8", +"......+.........", +".@@@@++@@@@@@@@.", +".@##+++#######@.", +".@#++$+$######@.", +".@#+$$+$##++##@.", +".@##$#+$#++++#@.", +".%&&&&+*&++++*=.", +".@####+$#+++$$@.", +".@##+++$#+$$$#@.", +".@#++++$#+$###@.", +".&&++++*&+*&&&&.", +".@##++$$#+$#+#@.", +".@###$$##+$++$@.", +".@#######+++$$@.", +".@@@@@@@@++--@@.", +".........+;;...."}; diff --git a/attic/muse_qt4_evolution/muse/xpm/midiin.xpm b/attic/muse_qt4_evolution/muse/xpm/midiin.xpm new file mode 100644 index 00000000..15b906ac --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/midiin.xpm @@ -0,0 +1,23 @@ +/* XPM */ +static const char* midiin_xpm[] ={ +"18 18 2 1", +". c None", +"# c #000000", +"......#####.......", +"....##.....##.....", +"...#...##....#....", +"..#....##.....#...", +".#..##.....##..#..", +".#..##.....##..#..", +"#...............#.", +"#...............#.", +"#..##.......##..#.", +"#..##.......##..#.", +"#...............#.", +".#....#####....#..", +".#....#####....#..", +"..#...##.##...#...", +"...#.........#....", +"....##.....##.....", +"......#####.......", +".................."}; diff --git a/attic/muse_qt4_evolution/muse/xpm/miditransformS.xpm b/attic/muse_qt4_evolution/muse/xpm/miditransformS.xpm new file mode 100644 index 00000000..3e43e097 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/miditransformS.xpm @@ -0,0 +1,22 @@ +/* XPM */ +static const char *miditransformS_xpm[]={ +"16 16 3 1", +"a c #303030", +". c #58a8ff", +"# c #ffffff", +"................", +"................", +"..###aaaaaa###..", +"..##a######a##..", +"..#a###aa###a#..", +"..a####aa####a..", +"..a#aa####aa#a..", +"..a#aa####aa#a..", +"..a##########a..", +"..a#aa####aa#a..", +"..a#aa####aa#a..", +"..#a########a#..", +"..##a######a##..", +"..###aaaaaa###..", +"................", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/miditransposeS.xpm b/attic/muse_qt4_evolution/muse/xpm/miditransposeS.xpm new file mode 100644 index 00000000..fa4593f4 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/miditransposeS.xpm @@ -0,0 +1,25 @@ +/* XPM */ +static const char *miditransposeS_xpm[]={ +"16 16 6 1", +"a c #303030", +". c #58a8ff", +"c c #800000", +"b c #ff0000", +"d c #ffc0c0", +"# c #ffffff", +"................", +"................", +"..###aaaaab###..", +"..##a#####bb##..", +"..#a###aa#bbb#..", +"..a####aa#bbbb..", +"..a#aabbbbccbbb.", +"..a#aabbbbccbbb.", +"..a###bb##bbbbd.", +"..a#aabb##ccbd..", +"..a#aabb##ccda..", +"..#a##bb##bda#..", +"..##a#bb##da##..", +"..###abbaaa###..", +"......bb........", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/minus.xpm b/attic/muse_qt4_evolution/muse/xpm/minus.xpm new file mode 100644 index 00000000..7533722a --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/minus.xpm @@ -0,0 +1,24 @@ +/* XPM */ +static const char * minus_xpm[] = { +"16 16 5 1", +" c None", +". c #000000", +"+ c #FFFFFF", +"@ c #DCDCDC", +"# c #A0A0A4", +" ", +" ..... ", +" ..+++++.. ", +" .++@@@@@@@. ", +" .+@@@@@@@@. ", +" .+@@@@@@@@@#. ", +" .+@@@@@@@@@#. ", +" .+@.......@#. ", +" .+@@@@@@@@@#. ", +" .+@@@@@@@@@#. ", +" .@@@@@@@@#. ", +" .@@@@@@@##. ", +" ..#####.. ", +" ..... ", +" ", +" "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/mixerS.xpm b/attic/muse_qt4_evolution/muse/xpm/mixerS.xpm new file mode 100644 index 00000000..b7b19735 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/mixerS.xpm @@ -0,0 +1,21 @@ +/* XPM */ +static const char * mixerS_xpm[] = { +"16 16 2 1", +" c None", +". c #000000", +" ", +" ", +" ", +" . . . . ", +" ... . ... . ", +" ... . ... . ", +" . . . . ", +" . . . ... ", +" . . . ... ", +" . . . . ", +" . . . . ", +" . ... . . ", +" . ... . . ", +" ", +" ", +" "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/mixeraudioS.xpm b/attic/muse_qt4_evolution/muse/xpm/mixeraudioS.xpm new file mode 100644 index 00000000..bc02fc72 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/mixeraudioS.xpm @@ -0,0 +1,22 @@ +/* XPM */ +static const char *mixerAudioS_xpm[]={ +"16 16 3 1", +"a c #000000", +". c #ff00ff", +"# c #ffffff", +"................", +"................", +"..############..", +"..#a##a##a##a#..", +"..aaa#a#aaa#a#..", +"..aaa#a#aaa#a#..", +"..#a##a##a##a#..", +"..#a##a##a#aaa..", +"..#a##a##a#aaa..", +"..#a##a##a##a#..", +"..#a#aaa#a##a#..", +"..#a#aaa#a##a#..", +"..############..", +"..############..", +"................", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/mono.svg b/attic/muse_qt4_evolution/muse/xpm/mono.svg new file mode 100644 index 00000000..ac764181 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/mono.svg @@ -0,0 +1,70 @@ + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/attic/muse_qt4_evolution/muse/xpm/muse_icon.xpm b/attic/muse_qt4_evolution/muse/xpm/muse_icon.xpm new file mode 100644 index 00000000..a7621e34 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/muse_icon.xpm @@ -0,0 +1,411 @@ +/* XPM */ +static const char * muse_icon_xpm[] = { +"32 32 376 2", +" c None", +". c #616161", +"+ c #626262", +"@ c #8E4B33", +"# c #7C7B65", +"$ c #C6C4A3", +"% c #9F984E", +"& c #B46C17", +"* c #E6A34D", +"= c #EBB268", +"- c #E59F3C", +"; c #BC7A1B", +"> c #AB741E", +", c #B6AB8B", +"' c #E5E3B8", +") c #C4C07B", +"! c #BAAC17", +"~ c #778E33", +"{ c #87877C", +"] c #DA9235", +"^ c #E9B168", +"/ c #E9B97A", +"( c #E9AD5E", +"_ c #E8A855", +": c #E08B1D", +"< c #75584E", +"[ c #636363", +"} c #BF8E48", +"| c #EBDEB6", +"1 c #ECE9BB", +"2 c #C4BC75", +"3 c #D2981B", +"4 c #B57614", +"5 c #6C6C6C", +"6 c #6B6B6B", +"7 c #979560", +"8 c #FAFADD", +"9 c #F7F6E4", +"0 c #E3DAC2", +"a c #CEBC9F", +"b c #D59E56", +"c c #E69E41", +"d c #E0A045", +"e c #9D794A", +"f c #6A6A6A", +"g c #696969", +"h c #666666", +"i c #646464", +"j c #BE791F", +"k c #D2BF9B", +"l c #FDF9CE", +"m c #E2E0B1", +"n c #C2BC5D", +"o c #C6941B", +"p c #D1821C", +"q c #B76F1A", +"r c #6D6D6D", +"s c #A7A164", +"t c #C7C38F", +"u c #C5C074", +"v c #C5C06E", +"w c #C5C380", +"x c #CDCAA2", +"y c #C9C09E", +"z c #C5A772", +"A c #E29A3D", +"B c #E1AA5C", +"C c #C89347", +"D c #6F6A68", +"E c #957548", +"F c #C4A471", +"G c #F6EBC1", +"H c #F3F1C2", +"I c #CDCB9C", +"J c #C6BE3B", +"K c #B8C300", +"L c #CA8119", +"M c #D4831B", +"N c #BC7315", +"O c #6E6E6E", +"P c #6F6F6F", +"Q c #717171", +"R c #B7B342", +"S c #E5DD18", +"T c #EBE30C", +"U c #E2DA11", +"V c #E3DB0E", +"W c #E0D521", +"X c #CBC650", +"Y c #C6C38D", +"Z c #C7C19F", +"` c #C29B63", +" . c #E0A44F", +".. c #DEAA5F", +"+. c #D8953F", +"@. c #CEA25D", +"#. c #E7D7AC", +"$. c #F7F4C8", +"%. c #DDDAAA", +"&. c #B5AE36", +"*. c #6A6D62", +"=. c #8C643D", +"-. c #DA8B1B", +";. c #727272", +">. c #737373", +",. c #A69F55", +"'. c #BDB53E", +"). c #EAE30F", +"!. c #C1BB16", +"~. c #7C784F", +"{. c #ABA13C", +"]. c #CEC533", +"^. c #DDDBB0", +"/. c #E0DBBD", +"(. c #E6DBBB", +"_. c #F2E9C5", +":. c #FAFACF", +"<. c #E3E0B0", +"[. c #C5C180", +"}. c #CCC333", +"|. c #8F8B4E", +"1. c #686868", +"2. c #A8702D", +"3. c #D7861E", +"4. c #CC7F1B", +"5. c #B77813", +"6. c #747474", +"7. c #AEAA3F", +"8. c #B7AA10", +"9. c #9F9C48", +"0. c #C3BC4C", +"a. c #D0CD9D", +"b. c #CDCA9A", +"c. c #CFC634", +"d. c #A8A23D", +"e. c #B17126", +"f. c #CE7C1B", +"g. c #C07719", +"h. c #AF5A16", +"i. c #BFB730", +"j. c #D5CF28", +"k. c #A6411D", +"l. c #777664", +"m. c #7C7C7C", +"n. c #7B7B7B", +"o. c #797979", +"p. c #777777", +"q. c #8A8761", +"r. c #A39E4A", +"s. c #A5A148", +"t. c #91915A", +"u. c #73746F", +"v. c #9F692A", +"w. c #B77210", +"x. c #C13200", +"y. c #C9C430", +"z. c #C4BB31", +"A. c #A7621E", +"B. c #8D8A5C", +"C. c #7A7A7A", +"D. c #787878", +"E. c #757575", +"F. c #C6801D", +"G. c #CCC337", +"H. c #BDAF34", +"I. c #B2771B", +"J. c #928E63", +"K. c #767676", +"L. c #707070", +"M. c #8D734E", +"N. c #C2B669", +"O. c #BDB048", +"P. c #A29B45", +"Q. c #968E3B", +"R. c #7F7248", +"S. c #CCC43B", +"T. c #C2B635", +"U. c #BF971E", +"V. c #81826D", +"W. c #BC9E4D", +"X. c #C8C25D", +"Y. c #CFC746", +"Z. c #DFD424", +"`. c #D6CB1F", +" + c #6B754E", +".+ c #CDC538", +"++ c #C9BA36", +"@+ c #BF9D28", +"#+ c #997448", +"$+ c #C0B65F", +"%+ c #CEC949", +"&+ c #D9CF30", +"*+ c #EADD0B", +"=+ c #A49D2B", +"-+ c #CFC632", +";+ c #CDC13C", +">+ c #BF9B2C", +",+ c #B29743", +"'+ c #CAC355", +")+ c #D4CE3B", +"!+ c #E7E016", +"~+ c #EEE609", +"{+ c #C2BC19", +"]+ c #CDC42E", +"^+ c #CEC343", +"/+ c #C09B2B", +"(+ c #95764A", +"_+ c #C6B44F", +":+ c #D1C840", +"<+ c #DDD328", +"[+ c #D9D110", +"}+ c #656565", +"|+ c #C5BC2E", +"1+ c #D3CA3C", +"2+ c #C6A32B", +"3+ c #7C7B5F", +"4+ c #BA9337", +"5+ c #CDC54A", +"6+ c #D8CE31", +"7+ c #E7DF0A", +"8+ c #867C47", +"9+ c #B7AC34", +"0+ c #D8D231", +"a+ c #C8AA2F", +"b+ c #8B8754", +"c+ c #676767", +"d+ c #9D7940", +"e+ c #C6B949", +"f+ c #D6CC35", +"g+ c #E5D918", +"h+ c #ABA32C", +"i+ c #9E9945", +"j+ c #CFBB34", +"k+ c #977F46", +"l+ c #837056", +"m+ c #B99A3C", +"n+ c #D2C93F", +"o+ c #DFD824", +"p+ c #CCC617", +"q+ c #7C7C5B", +"r+ c #E4D819", +"s+ c #D4CB37", +"t+ c #B27A2B", +"u+ c #A47A39", +"v+ c #CCC441", +"w+ c #DAD02D", +"x+ c #DED20F", +"y+ c #756E58", +"z+ c #D8CD17", +"A+ c #DCD629", +"B+ c #C99F2C", +"C+ c #80744D", +"D+ c #976E3E", +"E+ c #C0AF3B", +"F+ c #E8DB15", +"G+ c #EAE20B", +"H+ c #989B34", +"I+ c #BFB622", +"J+ c #E5D91A", +"K+ c #D4BE2D", +"L+ c #BC7C21", +"M+ c #73625C", +"N+ c #AF8E36", +"O+ c #D3CA3A", +"P+ c #BFBA1E", +"Q+ c #847C4B", +"R+ c #E7DB10", +"S+ c #DCD129", +"T+ c #C89025", +"U+ c #AB742C", +"V+ c #A1793A", +"W+ c #E0D523", +"X+ c #EADD0F", +"Y+ c #D3CD16", +"Z+ c #D3C812", +"`+ c #E8DB13", +" @ c #CD7F1A", +".@ c #A78034", +"+@ c #6A6D60", +"@@ c #8A7451", +"#@ c #C4B941", +"$@ c #E8E013", +"%@ c #77755E", +"&@ c #89864A", +"*@ c #E9DC0E", +"=@ c #C4AC57", +"-@ c #DD8E28", +";@ c #C3A358", +">@ c #ADA86E", +",@ c #8F8E78", +"'@ c #8C7E69", +")@ c #BEB591", +"!@ c #DBD8A8", +"~@ c #DCD127", +"{@ c #95944A", +"]@ c #B7AF30", +"^@ c #DDD728", +"/@ c #C6C06B", +"(@ c #C7B17C", +"_@ c #DC963B", +":@ c #D99A38", +"<@ c #B6AC75", +"[@ c #BDB592", +"}@ c #E8E6B5", +"|@ c #D8D6A7", +"1@ c #C6C367", +"2@ c #AFA946", +"3@ c #6F716A", +"4@ c #CCC625", +"5@ c #D5CF38", +"6@ c #C5C384", +"7@ c #DBD0A4", +"8@ c #D3A966", +"9@ c #C3AF7A", +"0@ c #DCD9AB", +"a@ c #C3BB3E", +"b@ c #757671", +"c@ c #7E7E7E", +"d@ c #7F7F7F", +"e@ c #7D7D7D", +"f@ c #717467", +"g@ c #D4C521", +"h@ c #C5C288", +"i@ c #EFECC6", +"j@ c #EFEED0", +"k@ c #C2C0A1", +"l@ c #B4AE6F", +"m@ c #C4A92F", +"n@ c #A77D3A", +"o@ c #837766", +"p@ c #818181", +"q@ c #838383", +"r@ c #707366", +"s@ c #D0C621", +"t@ c #C5C078", +"u@ c #E1DEB2", +"v@ c #C6BBA1", +"w@ c #DA9945", +"x@ c #DE9639", +"y@ c #E19426", +"z@ c #D4881B", +"A@ c #937C5E", +"B@ c #808080", +"C@ c #858585", +"D@ c #888888", +"E@ c #696D5C", +"F@ c #D0C50B", +"G@ c #D8D21F", +"H@ c #B2A945", +"I@ c #AB7622", +"J@ c #A57536", +"K@ c #746863", +"L@ c #848484", +"M@ c #828282", +"N@ c #8B8B8B", +"O@ c #8E8E8E", +"P@ c #919191", +"Q@ c #959595", +"R@ c #979797", +"S@ c #898989", +"T@ c #878787", +"U@ c #868686", +"V@ c #8C8C8C", +"W@ c #9A9A9A", +"X@ c #9E9E9E", +"Y@ c #A3A3A3", +"Z@ c #A8A8A8", +"`@ c #ABABAB", +" # c #A0A0A0", +".# c #989898", +"+# c #9C9C9C", +"@# c #969696", +"## c #949494", +"$# c #939393", +"%# c #9B9B9B", +"&# c #8F8F8F", +". . . . . . . . . . . . . . . . . . . . . . . . . . + + . . . . ", +". . . . . . . . @ . . . . . . . . . . . . . . . . # $ % . . . . ", +". . . . . . & * = - ; . . . . . . . . . . . . > , ' ) ! . . . . ", +". . . . ~ { ] ^ / ( _ : < [ [ + . . . . . . } | 1 2 3 4 . . . . ", +"5 5 5 6 7 8 9 0 a b c * d e 5 6 f g h i j k l m n o p q . . . . ", +"r r r 5 s t u v w x y z A B C D 5 f E F G H I J K L M N . . . . ", +"O O P Q R S T U V W X Y Z ` ...+.@.#.$.%.v &.*.=.-.p q . . . . ", +"P ;.;.>.,.'.).!.. ~.{.].u ^./.(._.:.<.[.}.|.1.5 2.3.4.5.. . . . ", +"Q ;.;.>.6.7.S 8.i ;.Q Q 9.0.[.a.b.u c.d.*.r r 5 e.f.g.h.. . . . ", +"Q ;.;.>.6.i.j.k.l.m.n.n.o.p.q.r.s.t.u.P r O 5 6 v.N w.x.+ + . . ", +"Q ;.;.>.6.y.z.A.B.m.m.C.n.o.D.p.E.6.;.;.Q P r 6 F.A.. + + + + + ", +"Q Q ;.;.>.G.H.I.J.C.o.n.o.D.p.K.E.6.;.Q L.P r M.N.O.P.Q.R.+ + + ", +"Q Q Q ;.;.S.T.U.V.D.o.p.o.p.K.E.6.>.;.Q P 5 5 W.X.Y.Z.S `. ++ + ", +"L.L.Q Q Q .+++@+>.>.;.>.>.K.K.6.>.;.Q P O 5 #+$+%+&+T *+=+[ + + ", +"P P L.Q Q -+;+>+Q 5 Q Q ;.Q ;.>.;.Q L.P O r ,+'+)+!+~+{+i i [ + ", +"P P P P L.]+^+/+O g 5 L.P Q L.L.Q L.P O r (+_+:+<+~+[+}+i i [ [ ", +"P O O P P |+1+2+3+1.g O P P P O O P O r D 4+5+6+).7+8+}+i i i [ ", +"O r O O O 9+0+a+b+c+1.f 5 O O r 5 5 r 5 d+e+f+g+~+h+}+}+i i [ [ ", +"O 5 r r r i+<+j+k+c+c+g f f 5 5 5 6 6 l+m+n+o+~+p+h }+}+i i [ [ ", +"r 5 5 5 5 q+r+s+t+c+c+c+g g g g f f f u+v+w+).x+y+}+}+i i [ [ [ ", +"r 6 6 6 5 g z+A+B+C+h h 1.1.g 1.c+c+D+E+6+F+G+H+i i i [ i i i i ", +"5 f f f 6 1.I+J+K+L+}+}+h 1.c+c+c+M+N+O+W ~+P+h c+c+c+c+c+h h }+", +"5 g f f f 1.Q+R+S+T+U+}+}+c+c+h c+V+;+W+X+Y+g f f f f g g 1.c+c+", +"5 g g g f c+c+Z+`+K+ @.@+@g f 5 @@#@S+$@V %@f f g f 6 6 f g g 1.", +"6 1.1.g g c+h &@*@6+=@-@;@>@,@'@)@!@[.~@{@r 5 r 5 5 O O 6 6 f f ", +"6 f 5 P Q O 5 5 ]@^@/@(@_@:@<@[@}@|@1@2@>.;.;.Q ;.O O f f f f f ", +"K.D.p.p.D.K.5 O 3@4@5@6@7@8@9@m 0@[.a@b@K.6.6.;.;.L.O 5 6 f f g ", +"D.n.c@d@c@e@K.O 5 f@g@:+h@i@j@k@l@m@n@o@>.6.6.6.6.;.Q L.P P 6 f ", +"p.o.n.c@p@q@p@n.E.P r@s@5@t@u@v@w@x@y@z@A@B@d@n.D.K.6.;.Q L.O r ", +"C.m.c@B@q@C@D@D@q@o.Q E@F@G@H@I@L J@K@;.6.o.L@d@d@m.m.n.o.o.p.K.", +"e@d@M@L@D@N@O@P@Q@R@P@S@m.5 + g [ h ;.m.p@T@N@S@D@U@L@p@d@m.n.o.", +"B@q@U@S@V@P@Q@W@X@Y@Z@`@Z@ #.#+#.#@###$#W@%#.#$#&#N@D@L@M@d@e@n."}; diff --git a/attic/muse_qt4_evolution/muse/xpm/muse_icon_64x64.png b/attic/muse_qt4_evolution/muse/xpm/muse_icon_64x64.png new file mode 100644 index 00000000..5a1acb96 Binary files /dev/null and b/attic/muse_qt4_evolution/muse/xpm/muse_icon_64x64.png differ diff --git a/attic/muse_qt4_evolution/muse/xpm/mutebutton_off.xpm b/attic/muse_qt4_evolution/muse/xpm/mutebutton_off.xpm new file mode 100644 index 00000000..37c50f1c --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/mutebutton_off.xpm @@ -0,0 +1,165 @@ +/* XPM */ +static const char * mutebutton_off_xpm[] = { +"22 22 140 2", +" c #000000", +". c #720000", +"+ c #7B0000", +"@ c #810000", +"# c #840000", +"$ c #870000", +"% c #8D0000", +"& c #930000", +"* c #980000", +"= c #9C0000", +"- c #9B0000", +"; c #970000", +"> c #900000", +", c #8C0000", +"' c #850000", +") c #800000", +"! c #760000", +"~ c #730000", +"{ c #710000", +"] c #770000", +"^ c #A10000", +"/ c #A90000", +"( c #AE0000", +"_ c #B10000", +": c #B60000", +"< c #B50000", +"[ c #B30000", +"} c #AC0000", +"| c #A70000", +"1 c #9E0000", +"2 c #8F0000", +"3 c #890000", +"4 c #7F0000", +"5 c #7A0000", +"6 c #7C0000", +"7 c #8E0000", +"8 c #A00000", +"9 c #AD0000", +"0 c #B80000", +"a c #C00000", +"b c #C60000", +"c c #C80000", +"d c #CB0000", +"e c #C70000", +"f c #BB0000", +"g c #B20000", +"h c #A30000", +"i c #960000", +"j c #860000", +"k c #920000", +"l c #BA0000", +"m c #C50000", +"n c #CE0000", +"o c #D40000", +"p c #D80000", +"q c #D70000", +"r c #DA0000", +"s c #D10000", +"t c #C90000", +"u c #C30000", +"v c #B40000", +"w c #A40000", +"x c #910000", +"y c #7D0000", +"z c #950000", +"A c #AB0000", +"B c #BD0000", +"C c #CC0000", +"D c #D60000", +"E c #DF0000", +"F c #E30000", +"G c #E10000", +"H c #DC0000", +"I c #D00000", +"J c #C20000", +"K c #BC0000", +"L c #A50000", +"M c #AF0000", +"N c #E40000", +"O c #E70000", +"P c #E60000", +"Q c #3F3F3F", +"R c #DD0200", +"S c #D90300", +"T c #D40200", +"U c #CD0000", +"V c #B90000", +"W c #AA0000", +"X c #9A0000", +"Y c #D20000", +"Z c #D90000", +"` c #DE0000", +" . c #E20000", +".. c #3B3B3B", +"+. c #313131", +"@. c #E00300", +"#. c #DD0300", +"$. c #D10100", +"%. c #A80000", +"&. c #880000", +"*. c #C40000", +"=. c #454545", +"-. c #E40200", +";. c #E10300", +">. c #DC0100", +",. c #D50100", +"'. c #D50000", +"). c #121212", +"!. c #E90000", +"~. c #CA0000", +"{. c #4C4C4C", +"]. c #525252", +"^. c #1E0700", +"/. c #E80000", +"(. c #BE0000", +"_. c #030A1D", +":. c #000F00", +"<. c #7E0000", +"[. c #CF0000", +"}. c #DB0000", +"|. c #0B0017", +"1. c #000700", +"2. c #BF0000", +"3. c #DD0000", +"4. c #D30000", +"5. c #990000", +"6. c #B00000", +"7. c #C10000", +"8. c #E00000", +"9. c #940000", +"0. c #7A0100", +"a. c #A60000", +"b. c #9D0000", +"c. c #9D0101", +"d. c #7B0200", +"e. c #8C0100", +"f. c #9E0101", +"g. c #8F0101", +"h. c #7F0101", +"i. c #720101", +" ", +" . + @ # $ % & & * = - ; > , ' ) + ! ~ { ", +" ] $ & - ^ / ( _ : < [ } | 1 * 2 3 # 4 5 ", +" 6 7 8 9 0 a b b c d e a f g / h - i 7 j ", +" 6 k | l m n o p q r q s t u f v 9 w - x ", +" y z A B C D r E F F G H q I d J K g L z ", +" ) * M J n D H E N O P Q R S T U m V W i ", +" # X _ u C Y Z ` .P ..+.@.#.S $.t f %.& ", +" &.8 : *.n Y p r E Q =. -.;.>.,.C f L % ", +" % L l c n '.Z r Q Q ). !.P F q d 0 ^ 3 ", +" > / K ~.s p Q {.].).^. /./.F p ~.< - @ ", +" > / (.U q H Q +. _.:. P /. .Z t g X <. ", +" x %.(.[.q }.+. |.1. E F ` p t [ i 6 ", +" 2 %.2.U '.}. 3.3.}.q c _ i y ", +" % w f d 4.p }.D r H 3.q t g i <. ", +" &.8 : c I 4.D 4.s H E ` D e g ; <. ", +" # 5.6.7.~.U n n U n H 8.3.o e 6.; <. ", +" 4 & / l a J m e t c n r }.Z n J 9 9.y ", +" 0.x h g l f 2.(.a m t U 4.4.I c f a.> + ", +" 0.% b.W M [ [ v 0 f 2.u e b u l 6.c.$ ! ", +" d.e.5.8 a.L L a.W A 6.[ < v M %.f.g.h.i. ", +" "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/mutebutton_on.xpm b/attic/muse_qt4_evolution/muse/xpm/mutebutton_on.xpm new file mode 100644 index 00000000..d66647d5 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/mutebutton_on.xpm @@ -0,0 +1,352 @@ +/* XPM */ +static const char * mutebutton_on_xpm[] = { +"22 22 327 2", +" c #000000", +". c #066714", +"+ c #056613", +"@ c #076915", +"# c #076A15", +"$ c #076A16", +"% c #086B17", +"& c #096C18", +"* c #066B15", +"= c #066B14", +"- c #076F17", +"; c #0C751C", +"> c #107B20", +", c #0F7C1F", +"' c #0D791D", +") c #097318", +"! c #066E15", +"~ c #066C14", +"{ c #066814", +"] c #086B16", +"^ c #0A6F19", +"/ c #0B711A", +"( c #0B721B", +"_ c #0C731C", +": c #0C731B", +"< c #0A731A", +"[ c #097219", +"} c #077318", +"| c #0A781B", +"1 c #0E7E1F", +"2 c #118522", +"3 c #128722", +"4 c #0F8321", +"5 c #0B7D1B", +"6 c #077517", +"7 c #067016", +"8 c #056713", +"9 c #066914", +"0 c #086D17", +"a c #0A721A", +"b c #0F771E", +"c c #107A20", +"d c #117D21", +"e c #127E21", +"f c #117F21", +"g c #0E7D1F", +"h c #0D801E", +"i c #0F8620", +"j c #128F25", +"k c #159627", +"l c #169828", +"m c #159427", +"n c #0F8B21", +"o c #0B821C", +"p c #087718", +"q c #086E17", +"r c #0B731A", +"s c #0F791F", +"t c #138223", +"u c #168727", +"v c #188A29", +"w c #178D28", +"x c #168D27", +"y c #158C26", +"z c #128D25", +"A c #129125", +"B c #313131", +"C c #17A22B", +"D c #19AA2D", +"E c #1AAC2E", +"F c #19A82C", +"G c #159E29", +"H c #119122", +"I c #0C831D", +"J c #066D15", +"K c #0A7119", +"L c #0C7A1D", +"M c #118323", +"N c #178D29", +"O c #1B952E", +"P c #1B9C2E", +"Q c #1A9E2E", +"R c #199C2B", +"S c #3F3F3F", +"T c #189E2B", +"U c #17A32C", +"V c #18AC2E", +"W c #222222", +"X c #1CC033", +"Y c #1DC334", +"Z c #1BBE32", +"` c #18B22F", +" . c #16A22A", +".. c #129025", +"+. c #097519", +"@. c #0F801F", +"#. c #158E27", +"$. c #1A992E", +"%. c #1DA633", +"&. c #1EAD35", +"*. c #1CAE32", +"=. c #3B3B3B", +"-. c #19AF2F", +";. c #1ABE32", +">. c #1CC835", +",. c #1DD537", +"'. c #1DCF37", +"). c #1CC335", +"!. c #19B130", +"~. c #179C2A", +"{. c #067015", +"]. c #097A1A", +"^. c #108922", +"/. c #17982A", +"(. c #1CA831", +"_. c #1DB636", +":. c #1DBB35", +"<. c #454545", +"[. c #1ABD31", +"}. c #1AC332", +"|. c #1BD435", +"1. c #1BDE37", +"2. c #1CDA38", +"3. c #1DD038", +"4. c #1BB832", +"5. c #19A22D", +"6. c #067215", +"7. c #0A7F1B", +"8. c #119124", +"9. c #18A22D", +"0. c #1BB635", +"a. c #1BC336", +"b. c #121212", +"c. c #18C833", +"d. c #18CC33", +"e. c #19D934", +"f. c #1AE236", +"g. c #1BDF37", +"h. c #1CD136", +"i. c #1CBD35", +"j. c #19A42E", +"k. c #087618", +"l. c #0B821D", +"m. c #129725", +"n. c #4C4C4C", +"o. c #525252", +"p. c #1E0700", +"q. c #19CE33", +"r. c #17D232", +"s. c #18DA34", +"t. c #19E036", +"u. c #070707", +"v. c #19DB36", +"w. c #1ACF36", +"x. c #1BBB33", +"y. c #1AA22E", +"z. c #087818", +"A. c #0C861E", +"B. c #129B26", +"C. c #18B12F", +"D. c #030A1D", +"E. c #000F00", +"F. c #17D231", +"G. c #17D733", +"H. c #18DB35", +"I. c #19D534", +"J. c #1ACB34", +"K. c #1AB832", +"L. c #199F2D", +"M. c #087918", +"N. c #0D891F", +"O. c #129C26", +"P. c #17B22F", +"Q. c #0B0017", +"R. c #000700", +"S. c #16D230", +"T. c #16D531", +"U. c #16D731", +"V. c #010101", +"W. c #19D034", +"X. c #18C432", +"Y. c #19B230", +"Z. c #169A2A", +"`. c #087A19", +" + c #0D881F", +".+ c #139C27", +"++ c #17AF2D", +"@+ c #17CF30", +"#+ c #14CF2F", +"$+ c #14D130", +"%+ c #15D330", +"&+ c #16CC31", +"*+ c #18C132", +"=+ c #18B02E", +"-+ c #159828", +";+ c #0A7A1A", +">+ c #149C27", +",+ c #17AE2D", +"'+ c #18BB31", +")+ c #18C232", +"!+ c #16CD31", +"~+ c #14CC2F", +"{+ c #14CE30", +"]+ c #14CD2F", +"^+ c #17CA31", +"/+ c #15BF2F", +"(+ c #15AE2B", +"_+ c #129624", +":+ c #0E8821", +"<+ c #17AD2E", +"[+ c #18BA31", +"}+ c #19C331", +"|+ c #17C730", +"1+ c #15CC30", +"2+ c #15CA30", +"3+ c #14CB2E", +"4+ c #15CD2F", +"5+ c #14C72E", +"6+ c #14BD2C", +"7+ c #11AD29", +"8+ c #0F9423", +"9+ c #0B7B1A", +"0+ c #0F8720", +"a+ c #139B26", +"b+ c #16AA2B", +"c+ c #17B82D", +"d+ c #17C130", +"e+ c #17C72F", +"f+ c #15CB30", +"g+ c #16C730", +"h+ c #15C82F", +"i+ c #12C82B", +"j+ c #11C52C", +"k+ c #10BA29", +"l+ c #0FA825", +"m+ c #0C9020", +"n+ c #0B791C", +"o+ c #0D871F", +"p+ c #119625", +"q+ c #15A82A", +"r+ c #16B52C", +"s+ c #17C12E", +"t+ c #16C82E", +"u+ c #14CA30", +"v+ c #15C92F", +"w+ c #15C52F", +"x+ c #14C42F", +"y+ c #10C32A", +"z+ c #10C02A", +"A+ c #0EB526", +"B+ c #0DA322", +"C+ c #0A8D1D", +"D+ c #097419", +"E+ c #0E9121", +"F+ c #11A126", +"G+ c #14AF29", +"H+ c #14BC2C", +"I+ c #14C12D", +"J+ c #14C32D", +"K+ c #13C32E", +"L+ c #14C22D", +"M+ c #13C12D", +"N+ c #13BA2B", +"O+ c #10B928", +"P+ c #10B828", +"Q+ c #0EB426", +"R+ c #0DAA23", +"S+ c #0B9A20", +"T+ c #08871B", +"U+ c #077217", +"V+ c #0A871D", +"W+ c #0D9521", +"X+ c #10A425", +"Y+ c #11AE27", +"Z+ c #11B228", +"`+ c #12B529", +" @ c #11B628", +".@ c #10B429", +"+@ c #10B227", +"@@ c #10AF27", +"#@ c #10AC27", +"$@ c #0FAB26", +"%@ c #0EA824", +"&@ c #0DA624", +"*@ c #0CA221", +"=@ c #0B9C20", +"-@ c #088F1C", +";@ c #068018", +">@ c #056D13", +",@ c #057214", +"'@ c #067A17", +")@ c #09841B", +"!@ c #0C911E", +"~@ c #0D9921", +"{@ c #0E9F22", +"]@ c #0EA123", +"^@ c #0DA222", +"/@ c #0DA123", +"(@ c #0C9C21", +"_@ c #0B981F", +":@ c #0C971F", +"<@ c #0C951F", +"[@ c #0B931F", +"}@ c #0A911E", +"|@ c #088E1C", +"1@ c #07891A", +"2@ c #058218", +"3@ c #047715", +"4@ c #036812", +"5@ c #046C12", +"6@ c #047014", +"7@ c #057615", +"8@ c #077D19", +"9@ c #09831B", +"0@ c #09871C", +"a@ c #08891C", +"b@ c #088A1B", +"c@ c #078619", +"d@ c #078419", +"e@ c #078018", +"f@ c #067D18", +"g@ c #067C18", +"h@ c #067D17", +"i@ c #057B16", +"j@ c #047815", +"k@ c #037313", +"l@ c #036D12", +" ", +" . + + . @ # $ % & % * = - ; > , ' ) ! ~ ", +" . + { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 ", +" 8 9 0 a b c d e f g 1 h i j k l m n o p ", +" { q r s t u v w x y z A B C D E F G H I ", +" J K L M N O P Q R S T U V W X Y Z ` ... ", +" J +.@.#.$.%.&.*.=.B -.B ;.>.B ,.'.).!.~. ", +" {.].^./.(._.:.S <. [.}.S |.1.B 2.3.4.5. ", +" 6.7.8.9.0.a.S S b. c.d.W e.f. g.h.i.j. ", +" k.l.m.V S n.o.b.p. q.r. s.t.u.v.w.x.y. ", +" z.A.B.C.S B D.E. r.F. G.H. I.J.K.L. ", +" M.N.O.P.B Q.R. F.S. T.U.V.W.X.Y.Z. ", +" `. +.+++ @+#+ $+%+ &+*+=+-+ ", +" ;+N.>+,+'+)+ !+~+ {+]+ ^+/+(+_+ ", +" ;+:+>+<+[+}+|+ 1+2+ 3+4+ 5+6+7+8+ ", +" 9+0+a+b+c+d+e+f+ 2+ g+h+ i+j+k+l+m+ ", +" n+o+p+q+r+s+t+u+v+ v+w+x+ j+y+z+A+B+C+ ", +" D+l.E+F+G+H+I+J+K+L+M+6+ N+O+P+Q+R+S+T+ ", +" U+`.V+W+X+Y+Z+`+ @.@+@@@#@$@%@&@*@=@-@;@ ", +" >@,@'@)@!@~@{@]@^@/@(@_@:@<@[@}@|@1@2@3@ ", +" 4@5@6@7@8@9@0@a@b@1@c@d@e@f@g@h@i@j@k@l@ ", +" "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/newmutebutton.xpm b/attic/muse_qt4_evolution/muse/xpm/newmutebutton.xpm new file mode 100644 index 00000000..994e3321 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/newmutebutton.xpm @@ -0,0 +1,69 @@ +/* XPM */ +static const char * newmutebutton_xpm[] = { +"22 22 44 1", +" c None", +". c #000000", +"+ c #313131", +"@ c #E5141A", +"# c #E1180D", +"$ c #3F3F3F", +"% c #222222", +"& c #9E000D", +"* c #FB1300", +"= c #E91900", +"- c #3B3B3B", +"; c #EB1420", +"> c #A9010C", +", c #454545", +"' c #E10E08", +") c #DD1F0F", +"! c #121212", +"~ c #ED0014", +"{ c #FF0603", +"] c #F7001C", +"^ c #4C4C4C", +"/ c #525252", +"( c #1E0700", +"_ c #ED021A", +": c #F00018", +"< c #E21C19", +"[ c #070707", +"} c #030A1D", +"| c #000F00", +"1 c #E90412", +"2 c #0B0017", +"3 c #000700", +"4 c #010101", +"5 c #EC141D", +"6 c #EA0900", +"7 c #DE0B09", +"8 c #E01000", +"9 c #E81400", +"0 c #F10E1C", +"a c #EE0E16", +"b c #E50300", +"c c #FF0316", +"d c #E70816", +"e c #FF1901", +"......................", +". .", +". .", +". .", +". + @# .", +". $ %&*= .", +". -+ + ;+> .", +". $,. $')+ .", +". $$!. ~%{]. .", +". $^/!(._:.< [ .", +". $+.}|.'1. . .", +". +..23.{]. 4 .", +". ......< . . .", +". .... . . .", +". 56... . . .", +". 7890.. . . .", +". abcd . . .", +". 6e~ . .", +". .", +". .", +". .", +"......................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/off.svg b/attic/muse_qt4_evolution/muse/xpm/off.svg new file mode 100644 index 00000000..7b24c60c --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/off.svg @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/attic/muse_qt4_evolution/muse/xpm/off.xpm b/attic/muse_qt4_evolution/muse/xpm/off.xpm new file mode 100644 index 00000000..64ddd452 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/off.xpm @@ -0,0 +1,25 @@ +/* XPM */ +static const char * off_xpm[] = { +"16 16 6 1", +" c None", +". c #000000", +"+ c #FFFFFF", +"@ c #DCDCDC", +"# c #A0A0A4", +"$ c #808080", +" ", +" ..... ", +" ..+++++.. ", +" .++@@@@@@@. ", +" .+@@@.@@@@. ", +" .+@@@@.@@@@#. ", +" .+@@@@.@@@@#. ", +" .+@@@@.@@@@#. ", +" .+@@@@.@@@@#. ", +" .+@@@@.@@@@#. ", +" .@@@@.@@@#.$ ", +" .@@@@@@@##. ", +" ..#####.. ", +" ..... ", +" ", +" "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/on.svg b/attic/muse_qt4_evolution/muse/xpm/on.svg new file mode 100644 index 00000000..5bb8ef4e --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/on.svg @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/attic/muse_qt4_evolution/muse/xpm/pafter.xpm b/attic/muse_qt4_evolution/muse/xpm/pafter.xpm new file mode 100644 index 00000000..a39ed901 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/pafter.xpm @@ -0,0 +1,29 @@ +/* XPM */ +static const char *pafter_xpm[] = { +"22 22 2 1", +". c None", +"# c #000000", +"######################", +"##...................#", +"#.#..................#", +"#..#.................#", +"#...#................#", +"#....#...............#", +"#.....#..............#", +"#......#.............#", +"#.......#............#", +"#........#...........#", +"#.........#..........#", +"#..........#.........#", +"#...........#........#", +"#............#.......#", +"#.............#......#", +"#..............#.....#", +"#...............#....#", +"#................#...#", +"#.................#..#", +"#..................#.#", +"#...................##", +"######################" +}; + diff --git a/attic/muse_qt4_evolution/muse/xpm/panic.xpm b/attic/muse_qt4_evolution/muse/xpm/panic.xpm new file mode 100644 index 00000000..9b8f937c --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/panic.xpm @@ -0,0 +1,50 @@ +/* XPM */ +static const char * panic_xpm[] = { +"18 18 29 1", +" c None", +". c #F7001C", +"+ c #EB1420", +"@ c #FB1300", +"# c #E10E08", +"$ c #E21C19", +"% c #DD1F0F", +"& c #313131", +"* c #ED0014", +"= c #FF0603", +"- c #F00018", +"; c #3F3F3F", +"> c #222222", +", c #ED021A", +"' c #3B3B3B", +") c #E90412", +"! c #454545", +"~ c #000000", +"{ c #525252", +"] c #121212", +"^ c #4C4C4C", +"/ c #1E0700", +"( c #070707", +"_ c #030A1D", +": c #0B0017", +"< c #000700", +"[ c #010101", +"} c #E1180D", +"| c #E50300", +".. +@", +"#.$ +#%", +"$... & *#=.", +" .-$ ; >#-=$ ", +" #,. '& & .&) ", +" # ;!~ ;#=& ", +" {;]~ > ~ ", +" ;^{~/~ ~ ( ", +" ;&~_~~ ~ ~ ", +" &~~:<~ ~ [ ", +" ~~~~~~ ~ ~ ", +" ~~~~ ~ ~ ", +" }~~~ ~##~ ", +" #% ~~ ~ #~# ", +" *|$ ~ ~#$. ", +" ,-% ~ $... ", +"*$). $$$.", +"-$. .$$"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/pencil.xpm b/attic/muse_qt4_evolution/muse/xpm/pencil.xpm new file mode 100644 index 00000000..16c06603 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/pencil.xpm @@ -0,0 +1,27 @@ +/* XPM */ +static const char*pencil_xpm[]={ +"18 18 5 1", +"# c #000000", +"c c #ffffff", +"b c #a0a0a4", +"a c #dcdcdc", +". c None", +"..................", +"........####......", +"........#aaa#.....", +".......#aaaa#b....", +".......##aa#bb....", +"......#cc###b.....", +"......#caa#bb.....", +".....#ccaa#b......", +".....#caa#bb......", +"....#ccaa#b.......", +"....#caa#bb.......", +"....##aa#b........", +"....####bb........", +"....###bb.........", +"....##bb..........", +"....#bb...........", +".....b............", +".................."}; + diff --git a/attic/muse_qt4_evolution/muse/xpm/piano.xpm b/attic/muse_qt4_evolution/muse/xpm/piano.xpm new file mode 100644 index 00000000..3649919e --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/piano.xpm @@ -0,0 +1,24 @@ +/* XPM */ +static const char *pianoS_xpm[]={ +"16 16 5 1", +"# c #000000", +"c c #00c000", +". c #00ff00", +"b c #dcdcdc", +"a c #ffffff", +"................", +"................", +"..#########aaa..", +"..#########aaa..", +"..abbbbbbbbaaa..", +"..#########aaa..", +"..#########aaa..", +"..abbbbbbbbaaa..", +"..#########aaa..", +"..#########aaa..", +"..abbbbbbbbaaa..", +"..aaaaaaaaaaaa..", +"..#########aaa..", +"..#########aaa..", +"...ccccccccc....", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/pitch.xpm b/attic/muse_qt4_evolution/muse/xpm/pitch.xpm new file mode 100644 index 00000000..e8f67efb --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/pitch.xpm @@ -0,0 +1,28 @@ +/* XPM */ +static const char *pitch_xpm[]={ +"22 22 3 1", +"a c #303030", +"# c #808080", +". c None", +"..............#..#....", +"...............#..#...", +"................#.#...", +".......a......a.#.#...", +".......a......a.#.#...", +".......a......a.#.#...", +".......a......a.#.#...", +".......a......a.#.#...", +".......a......a#..#...", +".......a......a..#....", +"........a....a..#.....", +".........aaaa.........", +"..........aa..........", +"..........aa..........", +"..........aa..........", +".........aaaa.........", +"........aaaaaa........", +"........aaaaaa........", +".........aaaa.........", +"..........aa..........", +"......................", +"......................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/play.xpm b/attic/muse_qt4_evolution/muse/xpm/play.xpm new file mode 100644 index 00000000..b38afc78 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/play.xpm @@ -0,0 +1,17 @@ +/* XPM */ +static const char * play_xpm[] = { +"12 12 2 1", +" c None", +". c #000000", +" . ", +" ... ", +" ... ", +" .... ", +" .... ", +" ..... ", +" ..... ", +" .... ", +" .... ", +" ... ", +" ... ", +" . "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/plus.xpm b/attic/muse_qt4_evolution/muse/xpm/plus.xpm new file mode 100644 index 00000000..e68e8db2 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/plus.xpm @@ -0,0 +1,21 @@ +/* XPM */ +static const char * plus_xpm[] = { +"13 13 5 1", +" c None", +". c #000000", +"+ c #FFFFFF", +"@ c #DCDCDC", +"# c #A0A0A4", +" ..... ", +" ..+++++.. ", +" .++@@@@@@@. ", +" .+@@@.@@@@. ", +".+@@@@.@@@@#.", +".+@@@@.@@@@#.", +".+@.......@#.", +".+@@@@.@@@@#.", +".+@@@@.@@@@#.", +" .@@@@.@@@#. ", +" .@@@@@@@##. ", +" ..#####.. ", +" ..... " }; diff --git a/attic/muse_qt4_evolution/muse/xpm/pointer.xpm b/attic/muse_qt4_evolution/muse/xpm/pointer.xpm new file mode 100644 index 00000000..87801aa7 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/pointer.xpm @@ -0,0 +1,28 @@ +/* XPM */ +/* Drawn by Mark Donohoe for the K Desktop Environment */ +/* See http://www.kde.org */ +static const char*pointer_xpm[]={ +"18 18 4 1", +"# c #000000", +"a c #000080", +"b c #808080", +". c None", +"..................", +"..................", +".....#............", +".....##...........", +".....###..........", +".....####.........", +".....#####........", +".....######.......", +".....#######......", +".....########.....", +".....#####........", +".....##.##........", +".....#...##.......", +".........##.......", +"..........##......", +"..........##......", +"..................", +".................."}; + diff --git a/attic/muse_qt4_evolution/muse/xpm/punchin.xpm b/attic/muse_qt4_evolution/muse/xpm/punchin.xpm new file mode 100644 index 00000000..2bd3ce7f --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/punchin.xpm @@ -0,0 +1,17 @@ +/* XPM */ +static char *punchin[]={ +"12 12 2 1", +". c None", +"# c #000000", +"............", +"####........", +"######......", +"....##......", +"....##......", +"....##......", +"....##......", +"....##......", +"....########", +"......######", +"............", +"............"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/punchout.xpm b/attic/muse_qt4_evolution/muse/xpm/punchout.xpm new file mode 100644 index 00000000..d176ed5d --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/punchout.xpm @@ -0,0 +1,18 @@ +/* XPM */ +static const char* punchout_xpm[]={ +"12 12 3 1", +"a c #c0c0c0", +"# c #000000", +". c None", +"............", +"............", +"......######", +"....########", +"....##......", +"....##......", +"....##......", +"....##......", +"######......", +"####........", +"............", +"............"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/quant.xpm b/attic/muse_qt4_evolution/muse/xpm/quant.xpm new file mode 100644 index 00000000..70d763dd --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/quant.xpm @@ -0,0 +1,28 @@ +/* XPM */ +static const char* quant_xpm[]={ +"22 22 2 1", +"x c #000000", +". c None", +"......................", +"......................", +"......................", +".........xxxx.........", +".......xx....xx.......", +".....xx........xx.....", +"....x............x....", +"...x..............x...", +"...x..............x...", +"..x................x..", +"..x................x..", +"..x................x..", +"..x................x..", +"...x..............x...", +"...x.......x......x...", +"....x.......x....x....", +".....xx......x.xx.....", +".......xx....xx.......", +".........xxxx..x......", +"................x.....", +"......................", +"......................"}; + diff --git a/attic/muse_qt4_evolution/muse/xpm/recordOff.svg b/attic/muse_qt4_evolution/muse/xpm/recordOff.svg new file mode 100644 index 00000000..05c88a04 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/recordOff.svg @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/attic/muse_qt4_evolution/muse/xpm/recordOn.svg b/attic/muse_qt4_evolution/muse/xpm/recordOn.svg new file mode 100644 index 00000000..d97f8249 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/recordOn.svg @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/attic/muse_qt4_evolution/muse/xpm/redo.xpm b/attic/muse_qt4_evolution/muse/xpm/redo.xpm new file mode 100644 index 00000000..24771785 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/redo.xpm @@ -0,0 +1,92 @@ +/* XPM */ +static const char * redo_xpm[] = { +"22 22 67 1", +" c None", +". c #275F0B", +"+ c #9AC589", +"@ c #CDE2C1", +"# c #E5EEDF", +"$ c #FFFFFF", +"% c #91D56B", +"& c #79BE53", +"* c #C7E0BA", +"= c #F5F9F4", +"- c #1C4408", +"; c #47AB29", +"> c #3FA21C", +", c #4AA721", +"' c #87C86A", +") c #C8E1BE", +"! c #000000", +"~ c #020202", +"{ c #53B529", +"] c #5BC930", +"^ c #6FD63D", +"/ c #8AC963", +"( c #35691B", +"_ c #2B6A0E", +": c #E4ECDF", +"< c #79B658", +"[ c #41821F", +"} c #0E2005", +"| c #060D03", +"1 c #102806", +"2 c #42A01E", +"3 c #A7C49A", +"4 c #7FAA67", +"5 c #3A8816", +"6 c #1C4508", +"7 c #0B1B05", +"8 c #72C24F", +"9 c #7FCC67", +"0 c #67A050", +"a c #40A513", +"b c #275E0D", +"c c #122B06", +"d c #469D24", +"e c #51B929", +"f c #38AA18", +"g c #3F9524", +"h c #173807", +"i c #081204", +"j c #63C53E", +"k c #41AE20", +"l c #48B227", +"m c #53A82F", +"n c #071003", +"o c #5B973A", +"p c #50932F", +"q c #4A8D2D", +"r c #428727", +"s c #428525", +"t c #15260E", +"u c #070D04", +"v c #0F1C09", +"w c #102009", +"x c #12230A", +"y c #13250A", +"z c #234413", +"A c #15270C", +"B c #13200C", +" ", +" ", +" ..... ", +" ..+@#@+.. ", +" .+$%&&&&*=-- ", +" .#%;>>>>,,')=! ~ ", +" .+%>{]^^^^]>,/=! -! ", +" .$>{(_!!!!{^]>/=!-:! ", +"-+<[_}| 1!{^2/3:4! ", +"-$567 !{^2890! ", +"-abc !de2fg! ", +" -hi -:jklm! ", +" !-n -:opqrs! ", +" -t ~!!!!!!!! ", +" u-v ", +" w-x ", +" yzA ", +" !-B ", +" !!! ", +" ", +" ", +" "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/resetS.xpm b/attic/muse_qt4_evolution/muse/xpm/resetS.xpm new file mode 100644 index 00000000..261af17e --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/resetS.xpm @@ -0,0 +1,22 @@ +/* XPM */ +static const char *resetS_xpm[]={ +"16 16 3 1", +"a c #000000", +". c #c00000", +"# c #ffffff", +"................", +"................", +"..############..", +"..####aa######..", +"..###aaa######..", +"..##aaaaaaaa##..", +"..##aaaaaaaaa#..", +"..###aaa##aaa#..", +"..####aa###aa#..", +"..#########aa#..", +"..########aaa#..", +"..##aaaaaaaaa#..", +"..##aaaaaaaa##..", +"..############..", +"................", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/rmark.xpm b/attic/muse_qt4_evolution/muse/xpm/rmark.xpm new file mode 100644 index 00000000..c0dbd780 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/rmark.xpm @@ -0,0 +1,23 @@ +/* XPM */ +static const char* rmark_xpm[]={ +"18 18 2 1", +"# c #0000ff", +". c None", +"..................", +"..................", +"..................", +"..................", +"..................", +"..................", +"..................", +"........##########", +"........#########.", +"........########..", +"........#######...", +"........######....", +"........#####.....", +"........####......", +"........###.......", +"........##........", +"........##........", +"........##........"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/select.xpm b/attic/muse_qt4_evolution/muse/xpm/select.xpm new file mode 100644 index 00000000..a29f3370 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/select.xpm @@ -0,0 +1,21 @@ +/* XPM */ +static const char *select_xpm[]={ +"16 16 2 1", +". c #000000", +"# c #ffffff", +"..#..#..#..#..#.", +"###############.", +".###############", +".##############.", +"###############.", +".###############", +".##############.", +"###############.", +".###############", +".##############.", +"###############.", +".###############", +".##############.", +"###############.", +".###############", +".#..#..#..#..#.."}; diff --git a/attic/muse_qt4_evolution/muse/xpm/select_all.xpm b/attic/muse_qt4_evolution/muse/xpm/select_all.xpm new file mode 100644 index 00000000..b0133636 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/select_all.xpm @@ -0,0 +1,21 @@ +/* XPM */ +static const char *select_all_xpm[]={ +"16 16 2 1", +". c #000000", +"# c #ffffff", +"..#..#..#..#..#.", +"###############.", +".###############", +".##############.", +"###############.", +".###############", +".##############.", +"###############.", +".###############", +".##############.", +"###############.", +".###############", +".##############.", +"###############.", +".###############", +".#..#..#..#..#.."}; diff --git a/attic/muse_qt4_evolution/muse/xpm/select_all_parts_on_track.xpm b/attic/muse_qt4_evolution/muse/xpm/select_all_parts_on_track.xpm new file mode 100644 index 00000000..4761a256 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/select_all_parts_on_track.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static const char * select_all_parts_on_track_xpm[] = { +"16 16 20 1", +" c None", +". c #000100", +"+ c #FEFFFC", +"@ c #FDF7F6", +"# c #FFFFFF", +"$ c #F8FEFF", +"% c #F4F1E9", +"& c #AA8747", +"* c #9E772E", +"= c #8A5C04", +"- c #0F0F0F", +"; c #000000", +"> c #95702B", +", c #CECECE", +"' c #F3F3F3", +") c #AE8E51", +"! c #FDFDFD", +"~ c #FCFCFC", +"{ c #926716", +"] c #2B2B2B", +"..+..+..+..+..+.", +"+++++++++++++++.", +".@#############+", +".+#############.", +"$%#############.", +".&*##=*##=*##=*#", +"-;;;;;;;;;;;;;;;", +">*,'=),,=*,,=*,#", +"*,!=),,=*,,=*,#=", +",~{*,#=*,#=*##=;", +";;;;;;;];;;;;;;;", +"#=*,#=*,#=*##=*#", +".##############;", +"###############;", +".###############", +".+..+..+..+..+.."}; diff --git a/attic/muse_qt4_evolution/muse/xpm/select_deselect_all.xpm b/attic/muse_qt4_evolution/muse/xpm/select_deselect_all.xpm new file mode 100644 index 00000000..d3a9bce9 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/select_deselect_all.xpm @@ -0,0 +1,22 @@ +/* XPM */ +static const char *select_deselect_all[]={ +"16 16 3 1", +". c #000000", +"a c #ff0000", +"# c #ffffff", +"..#..#..#..#..#.", +"###############.", +".#aa########aa##", +".#aaa######aaa#.", +"###aaa####aaa##.", +".###aaa##aaa####", +".####aaaaaa####.", +"######aaaa#####.", +".#####aaaa######", +".####aaaaaa####.", +"####aaa##aaa###.", +".##aaa####aaa###", +".#aaa######aaa#.", +"##aa########aa#.", +".###############", +".#..#..#..#..#.."}; diff --git a/attic/muse_qt4_evolution/muse/xpm/select_inside_loop.xpm b/attic/muse_qt4_evolution/muse/xpm/select_inside_loop.xpm new file mode 100644 index 00000000..46d57b28 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/select_inside_loop.xpm @@ -0,0 +1,21 @@ +/* XPM */ +static const char *select_inside_loop_xpm[]={ +"16 16 2 1", +". c #000000", +"# c #ffffff", +"................", +"................", +"....########....", +"....#......#....", +"....#......#....", +".#######...#....", +"..#####....#....", +"...###.....#....", +"....#.....###...", +"....#....#####..", +"....#...#######.", +"....#......#....", +"....#......#....", +"....########....", +"................", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/select_invert_selection.xpm b/attic/muse_qt4_evolution/muse/xpm/select_invert_selection.xpm new file mode 100644 index 00000000..c2f11b55 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/select_invert_selection.xpm @@ -0,0 +1,21 @@ +/* XPM */ +static const char *select_invert_selection[]={ +"16 16 2 1", +". c #000000", +"# c #ffffff", +"................", +"...............#", +"..............##", +"......#####..###", +".....#######.###", +"....#######..###", +"...#######....##", +"...######.....##", +"...#####......##", +"...####.......##", +"...###........##", +"....#........###", +"............####", +"...###.....#####", +"..##############", +".###############"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/select_outside_loop.xpm b/attic/muse_qt4_evolution/muse/xpm/select_outside_loop.xpm new file mode 100644 index 00000000..555b6157 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/select_outside_loop.xpm @@ -0,0 +1,21 @@ +/* XPM */ +static const char *select_outside_loop_xpm[]={ +"16 16 2 1", +"# c #000000", +". c #ffffff", +"................", +"................", +"....########....", +"....#......#....", +"....#......#....", +".#######...#....", +"..#####....#....", +"...###.....#....", +"....#.....###...", +"....#....#####..", +"....#...#######.", +"....#......#....", +"....#......#....", +"....########....", +"................", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/settings_appearance_settings.xpm b/attic/muse_qt4_evolution/muse/xpm/settings_appearance_settings.xpm new file mode 100644 index 00000000..46dcc335 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/settings_appearance_settings.xpm @@ -0,0 +1,66 @@ +/* XPM */ +static const char * settings_appearance_settings_xpm[] = { +"16 16 47 1", +" c None", +". c #000000", +"+ c #A80000", +"@ c #B60000", +"# c #D40000", +"$ c #93440B", +"% c #A44C0C", +"& c #B7550D", +"* c #E56A10", +"= c #CD5F0E", +"- c #C9CC00", +"; c #FCFF00", +"> c #B4B600", +", c #A1A300", +"' c #CC0000", +") c #E40000", +"! c #E1E400", +"~ c #909200", +"{ c #4E8F00", +"] c #61B300", +"^ c #57A000", +"/ c #B000B6", +"( c #6CC800", +"_ c #79E000", +": c #DC00E4", +"< c #C500CC", +"[ c #9D00A3", +"} c #009836", +"| c #468000", +"1 c #7D0083", +"2 c #1B687D", +"3 c #008830", +"4 c #22829D", +"5 c #00D44B", +"6 c #00AA3C", +"7 c #250492", +"8 c #3304CB", +"9 c #2E04B6", +"0 c #3905E3", +"a c #2904A3", +"b c #2691B0", +"c c #2AA2C5", +"d c #00ED54", +"e c #00BE43", +"f c #2FB5DC", +"g c #185D70", +"h c #1E748C", +"................", +".+@#.$%&*=.-;>,.", +".'').==*=.--!->.", +".')).===.~!-!;-.", +".))).=&.........", +"..)'.&....{]^]{.", +"./.).......((_].", +".:<.........(((.", +".:::.........]^.", +"./[::.......}.|.", +".1<:<[....2.}3..", +".........44.556.", +".78908a.bbc.d5e.", +".88888.4fbc.6de.", +".aa09.ghcc4.3e6.", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/settings_configureshortcuts.xpm b/attic/muse_qt4_evolution/muse/xpm/settings_configureshortcuts.xpm new file mode 100644 index 00000000..bd858629 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/settings_configureshortcuts.xpm @@ -0,0 +1,36 @@ +/* XPM */ +static const char *settings_configureshortcuts_xpm[] = { +"16 16 17 1", +" c None", +". c #000000", +"+ c #808080", +"@ c #646464", +"# c #DCDCDC", +"$ c #C3C3C3", +"% c #A0A0A0", +"& c #B8B8B8", +"* c #787878", +"= c #FFFFFF", +"- c #EDEDED", +"; c #585858", +"> c #C2C2C2", +", c #B7B7B7", +"' c #E7E7E7", +") c #303030", +"! c #CFCFCF", +" ...... ", +" .+@#$%.. ", +" .&*@#$%. ", +"... ..&@#$. ", +".=$.. .@##%. ", +".=-#$.;@>##,. ", +".@=-######'$%.. ", +")=@*=--##'$!$%%.", +".$#=@@@*%$-#!$,%", +" ..$#$$$*@*=-#!$", +" ...%#$$%@*=-#", +" ....-#%@*=", +" ..-#%@", +" ..-#", +" ..", +" "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/settings_follow_song.xpm b/attic/muse_qt4_evolution/muse/xpm/settings_follow_song.xpm new file mode 100644 index 00000000..9a066715 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/settings_follow_song.xpm @@ -0,0 +1,30 @@ +/* XPM */ +static const char * settings_follow_song_xpm[] = { +"16 16 11 1", +" c None", +". c #545454", +"+ c #202020", +"@ c #696969", +"# c #7C7C7C", +"$ c #000000", +"% c #3C3C3C", +"& c #C3C3C3", +"* c #CBCBCB", +"= c #8C8C8C", +"- c #DCDCDC", +" ", +" .+@ ", +" #$+%& ", +" .$$+&#%% ", +" .$$+&@$.. ", +" .$$$&%$+@& ", +" +$$$&%$+%& ", +" $$$$&$$+%& ", +" $$$+&+$$$& ", +" $+@&++$$& ", +" **&+$$$& ", +" .$@&=.+&& ", +" +$$& &&& ", +" &&&.$@ ", +" -- $++ ", +" --- -- "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/settings_globalsettings.xpm b/attic/muse_qt4_evolution/muse/xpm/settings_globalsettings.xpm new file mode 100644 index 00000000..2593ee83 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/settings_globalsettings.xpm @@ -0,0 +1,89 @@ +/* XPM */ +static const char * settings_globalsettings_xpm[] = { +"16 16 70 1", +" c None", +". c #BDBDBD", +"+ c #000000", +"@ c #B0B0B0", +"# c #ABABAB", +"$ c #CAC8C1", +"% c #B5B5B5", +"& c #EBEBE8", +"* c #D7D7D7", +"= c #D8D8D8", +"- c #C4C4C4", +"; c #F9F8F8", +"> c #BBBBBB", +", c #828282", +"' c #D2D0CC", +") c #F7F7F7", +"! c #DEDBD6", +"~ c #9C9C9C", +"{ c #7B7B7B", +"] c #7D7D7D", +"^ c #D2D2D2", +"/ c #D3D2CF", +"( c #E3E2E1", +"_ c #DFDEDC", +": c #DBDAD7", +"< c #A4A19C", +"[ c #5F5F5F", +"} c #292929", +"| c #D3D3D3", +"1 c #1C1C1C", +"2 c #D2D1D0", +"3 c #50504F", +"4 c #101010", +"5 c #3A3A3A", +"6 c #494746", +"7 c #D1D1D1", +"8 c #DADADA", +"9 c #363636", +"0 c #C8C7C6", +"a c #6C6967", +"b c #CCCCCC", +"c c #708295", +"d c #CFD6DD", +"e c #7C91A7", +"f c #D6D5D5", +"g c #8A8784", +"h c #C9C9C9", +"i c #7D8C9C", +"j c #788DA4", +"k c #7F99B3", +"l c #1F272F", +"m c #ECEBEA", +"n c #72706D", +"o c #CBCBCB", +"p c #8D99A5", +"q c #748AA2", +"r c #849EB9", +"s c #4D5F73", +"t c #D5D4D3", +"u c #6B6A69", +"v c #7D91A7", +"w c #849EBA", +"x c #D6D6D6", +"y c #525252", +"z c #717171", +"A c #484848", +"B c #66798F", +"C c #CACACA", +"D c #6F6F6F", +"E c #8D8D8D", +" ", +" .+@ #+#", +" +$+# #+%+", +" +&+* +=+#", +" -+ +;+> ,++# ", +" +'++)!+~ {+] ", +" ^+/(_:<+[}{ ", +" |+1++23+[ ", +" 456+78 ", +" +++9+0a+b ", +" +cde+ +fg+h8 ", +" +idjkl -+mn+o ", +" +pdqrs+ +tu+b", +" +dvws+^ x+2yz", +" AvBs+C ++D", +" EA++> "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/settings_metronome.xpm b/attic/muse_qt4_evolution/muse/xpm/settings_metronome.xpm new file mode 100644 index 00000000..985b1910 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/settings_metronome.xpm @@ -0,0 +1,99 @@ +/* XPM */ +static const char * settings_metronome_xpm[] = { +"16 16 80 1", +" c None", +". c #C4B71A", +"+ c #BAAE17", +"@ c #B4AA40", +"# c #D1C440", +"$ c #E0D123", +"% c #87824B", +"& c #E9D926", +"* c #F8E407", +"= c #F9E60D", +"- c #752D08", +"; c #9D3D0B", +"> c #82330A", +", c #6D2B08", +"' c #FCEE4E", +") c #612607", +"! c #813308", +"~ c #DCD05F", +"{ c #EADC49", +"] c #933A09", +"^ c #712D07", +"/ c #6F5E58", +"( c #2A1006", +"_ c #C04B0C", +": c #FCEB2D", +"< c #6D2B07", +"[ c #4E3826", +"} c #FCEF5D", +"| c #F7EA49", +"1 c #470A31", +"2 c #7A3108", +"3 c #752F07", +"4 c #704517", +"5 c #F1E132", +"6 c #FBED4A", +"7 c #F1E141", +"8 c #7C3B3A", +"9 c #BC6130", +"0 c #7F3F0A", +"a c #482B0E", +"b c #F5E537", +"c c #ECDB33", +"d c #51142E", +"e c #8E5C41", +"f c #A8420A", +"g c #612D07", +"h c #43260A", +"i c #50350F", +"j c #673013", +"k c #A95A2E", +"l c #693208", +"m c #281003", +"n c #341403", +"o c #C1500D", +"p c #B9541A", +"q c #B85C29", +"r c #706914", +"s c #120803", +"t c #331608", +"u c #774A33", +"v c #62290A", +"w c #B6AA20", +"x c #131307", +"y c #2C1103", +"z c #662F12", +"A c #743008", +"B c #7D3E1B", +"C c #251309", +"D c #331809", +"E c #BA6334", +"F c #B75D2C", +"G c #73300B", +"H c #793A17", +"I c #7F3208", +"J c #903909", +"K c #883609", +"L c #622809", +"M c #371908", +"N c #4D2108", +"O c #722E07", +" .+ ", +" @#$% ", +" &*=& ", +" -;;> ", +" ,'') ", +" !,~{]^ /( ", +" ^_:~_< [}|1", +" 2^_{~_345678", +" ^]9{{_0abcd ", +" e;_f'{_ghid ", +" jf_k{:lmno ", +" j_pq_{rstq_u ", +" vf_f_wxy]f_z ", +" AApqpBCDEFpqGA ", +" HHIJKLMNOOO^HH ", +" aaaaaaaaaaaaaa"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/settings_midifileexport.xpm b/attic/muse_qt4_evolution/muse/xpm/settings_midifileexport.xpm new file mode 100644 index 00000000..ec65b59d --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/settings_midifileexport.xpm @@ -0,0 +1,30 @@ +/* XPM */ +static const char * settings_midifileexport_xpm[] = { +"16 16 11 1", +" c None", +". c #292929", +"+ c #000000", +"@ c #676767", +"# c #C9C9C9", +"$ c #793C11", +"% c #994C15", +"& c #C2611B", +"* c #4F270B", +"= c #371B07", +"- c #5F2F0D", +" ", +" . ", +" ++ ", +" +@+ ", +" +#+# ", +" +### ", +" +# ++++++++", +" +# +$%&&%$++", +" +# +$%&&%$+$+", +" +++#++++++++$$+", +"++++#+$$%&%$+%&+", +"++++#+*$$$$%+&$+", +" ####+&$$=$%+$+#", +" +$$%&%-++##", +" ++++++++## ", +" ######## "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/settings_midiport_softsynths.xpm b/attic/muse_qt4_evolution/muse/xpm/settings_midiport_softsynths.xpm new file mode 100644 index 00000000..b637e5c1 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/settings_midiport_softsynths.xpm @@ -0,0 +1,29 @@ +/* XPM */ +static const char * settings_midiport_softsynths_xpm[] = { +"16 16 10 1", +" c None", +". c #000000", +"+ c #CECECE", +"@ c #313131", +"# c #939393", +"$ c #797979", +"% c #595959", +"& c #282828", +"* c #A6A6A6", +"= c #484848", +" .... ", +" . . ", +" .. ..+ ", +" @..@+ ", +" #..$+ ", +" ...... ", +" ..+++ ", +" ..+ ", +" $$ ..+$$ ", +" ... ..+ ... ", +" ..$ ..+ $.. ", +" $.%.. ..+..$.$ ", +" $ +&......@++$ ", +" *=....%++ ", +" =..=++ ", +" ++++ "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/settings_midisync.xpm b/attic/muse_qt4_evolution/muse/xpm/settings_midisync.xpm new file mode 100644 index 00000000..3bfdb180 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/settings_midisync.xpm @@ -0,0 +1,53 @@ +/* XPM */ +static const char * settings_midisync_xpm[] = { +"16 16 34 1", +" c None", +". c #7C7C7C", +"+ c #787878", +"@ c #818181", +"# c #747474", +"$ c #757575", +"% c #000000", +"& c #636363", +"* c #8C8C8C", +"= c #909090", +"- c #939393", +"; c #8A8A8A", +"> c #7F7F7F", +", c #9A9A9A", +"' c #777777", +") c #949494", +"! c #828282", +"~ c #9E9E9E", +"{ c #999999", +"] c #888888", +"^ c #979797", +"/ c #929292", +"( c #969696", +"_ c #9B9B9B", +": c #858585", +"< c #848484", +"[ c #898989", +"} c #7A7A7A", +"| c #7E7E7E", +"1 c #808080", +"2 c #838383", +"3 c #737373", +"4 c #6A6A6A", +"5 c #676767", +" ", +" ", +" .+@#$% ", +" & **% ", +" =% ", +" +% #% ", +" -;>% >% ", +" +;,'.% )!-~{)]%", +"^/(_{-]% :,<[!% ", +" }@% .|>% ", +" 12% <% ", +" }<%% ", +" 34% 4% ", +" }55}% ", +" ", +" "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/solobutton.xpm b/attic/muse_qt4_evolution/muse/xpm/solobutton.xpm new file mode 100644 index 00000000..e0c1002a --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/solobutton.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static const char * solobutton_xpm[] = { +"22 22 14 1", +" c None", +". c #000000", +"+ c #F10606", +"@ c #414141", +"# c #852A2A", +"$ c #473E3E", +"% c #723030", +"& c #CB1212", +"* c #4E3C3C", +"= c #E20A0A", +"- c #A51F1F", +"; c #9E2121", +"> c #832A2A", +", c #9C2222", +"......................", +". .", +". .", +". .", +". + .", +". ++ .", +". +++ .", +". @@@@@@@@@#+++ .", +". $@@@@@@@%++& .", +". *$ ++=@ .", +". +- +++;@ .", +". >++ ++++@@ .", +". @+++ +++ @@ .", +". @@+++++++ @@ .", +". @@ +++++ @@ .", +". @@ ++++ @@ .", +". @@ ++ @@ .", +". @@@@@,+@@@@@ .", +". @@@@@@@@@@@@ .", +". .", +". .", +"......................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/solobutton_off.xpm b/attic/muse_qt4_evolution/muse/xpm/solobutton_off.xpm new file mode 100644 index 00000000..31cc8e5a --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/solobutton_off.xpm @@ -0,0 +1,146 @@ +/* XPM */ +static const char * solobutton_off_xpm[] = { +"22 22 121 2", +" c #000000", +". c #720000", +"+ c #7B0000", +"@ c #810000", +"# c #840000", +"$ c #870000", +"% c #8D0000", +"& c #930000", +"* c #980000", +"= c #9C0000", +"- c #9B0000", +"; c #970000", +"> c #900000", +", c #8C0000", +"' c #850000", +") c #800000", +"! c #760000", +"~ c #730000", +"{ c #710000", +"] c #770000", +"^ c #A10000", +"/ c #A90000", +"( c #AE0000", +"_ c #B10000", +": c #B60000", +"< c #B50000", +"[ c #B30000", +"} c #AC0000", +"| c #A70000", +"1 c #9E0000", +"2 c #8F0000", +"3 c #890000", +"4 c #7F0000", +"5 c #7A0000", +"6 c #7C0000", +"7 c #8E0000", +"8 c #A00000", +"9 c #AD0000", +"0 c #B80000", +"a c #C00000", +"b c #C60000", +"c c #C80000", +"d c #CB0000", +"e c #C70000", +"f c #BB0000", +"g c #B20000", +"h c #A30000", +"i c #960000", +"j c #860000", +"k c #920000", +"l c #BA0000", +"m c #C50000", +"n c #CE0000", +"o c #D40000", +"p c #D80000", +"q c #D70000", +"r c #DA0000", +"s c #D10000", +"t c #C90000", +"u c #C30000", +"v c #B40000", +"w c #A40000", +"x c #910000", +"y c #7D0000", +"z c #950000", +"A c #AB0000", +"B c #BD0000", +"C c #CC0000", +"D c #D60000", +"E c #DF0000", +"F c #E30000", +"G c #E10000", +"H c #DC0000", +"I c #D00000", +"J c #C20000", +"K c #BC0000", +"L c #A50000", +"M c #AF0000", +"N c #414141", +"O c #CD0000", +"P c #B90000", +"Q c #AA0000", +"R c #9A0000", +"S c #473E3E", +"T c #D10100", +"U c #A80000", +"V c #880000", +"W c #D20000", +"X c #E50000", +"Y c #E80000", +"Z c #E40200", +"` c #D50100", +" . c #D50000", +".. c #D90000", +"+. c #DE0000", +"@. c #E20000", +"#. c #E40000", +"$. c #E70000", +"%. c #E90000", +"&. c #DB0000", +"*. c #CA0000", +"=. c #BE0000", +"-. c #E00000", +";. c #E60000", +">. c #7E0000", +",. c #DD0000", +"'. c #BF0000", +"). c #D30000", +"!. c #990000", +"~. c #B00000", +"{. c #940000", +"]. c #7A0100", +"^. c #A60000", +"/. c #9D0000", +"(. c #9D0101", +"_. c #7B0200", +":. c #8C0100", +"<. c #9E0101", +"[. c #8F0101", +"}. c #7F0101", +"|. c #720101", +" ", +" . + @ # $ % & & * = - ; > , ' ) + ! ~ { ", +" ] $ & - ^ / ( _ : < [ } | 1 * 2 3 # 4 5 ", +" 6 7 8 9 0 a b b c d e a f g / h - i 7 j ", +" 6 k | l m n o p q r q s t u f v 9 w - x ", +" y z A B C D r E F F G H q I d J K g L z ", +" ) * M N N N N N N N N N N N N O m P Q i ", +" # R _ S N N N N N N N N N N N T t f U & ", +" V 8 : N N W p r E X Y X Z N N ` C f L % ", +" % L l N N ...r +.@.#.$.%.N N q d 0 ^ 3 ", +" > / K N N p p r &.+.@.#.Y N N p *.< - @ ", +" > / =.N N H &.&.&.&.E -.;.N N ..t g R >. ", +" x U =.N N &.,.&.p ..r H E N N p t [ i 6 ", +" 2 U '.N N &.+...D . ...,.N N q c _ i y ", +" % w f N N p &.D ).).). .r N N q t g i >. ", +" V 8 : N N ).D ).s I ).D H N N D e g ; >. ", +" # !.~.N N N N N N N N N N N N o e ~.; >. ", +" 4 & / N N N N N N N N N N N N n J 9 {.y ", +" ].x h g l f '.=.a m t O ).).I c f ^.> + ", +" ].% /.Q M [ [ v 0 f '.u e b u l ~.(.$ ! ", +" _.:.!.8 ^.L L ^.Q A ~.[ < v M U <.[.}.|. ", +" "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/solobutton_on.xpm b/attic/muse_qt4_evolution/muse/xpm/solobutton_on.xpm new file mode 100644 index 00000000..c53e5884 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/solobutton_on.xpm @@ -0,0 +1,300 @@ +/* XPM */ +static const char * solobutton_on_xpm[] = { +"22 22 275 2", +" c #000000", +". c #066714", +"+ c #056613", +"@ c #076915", +"# c #076A15", +"$ c #076A16", +"% c #086B17", +"& c #096C18", +"* c #066B15", +"= c #066B14", +"- c #076F17", +"; c #0C751C", +"> c #107B20", +", c #0F7C1F", +"' c #0D791D", +") c #097318", +"! c #066E15", +"~ c #066C14", +"{ c #066814", +"] c #086B16", +"^ c #0A6F19", +"/ c #0B711A", +"( c #0B721B", +"_ c #0C731C", +": c #0C731B", +"< c #0A731A", +"[ c #097219", +"} c #077318", +"| c #0A781B", +"1 c #0E7E1F", +"2 c #118522", +"3 c #128722", +"4 c #0F8321", +"5 c #0B7D1B", +"6 c #077517", +"7 c #067016", +"8 c #056713", +"9 c #066914", +"0 c #086D17", +"a c #0A721A", +"b c #0F771E", +"c c #107A20", +"d c #117D21", +"e c #127E21", +"f c #117F21", +"g c #0E7D1F", +"h c #0D801E", +"i c #0F8620", +"j c #128F25", +"k c #159627", +"l c #169828", +"m c #159427", +"n c #F10606", +"o c #0B821C", +"p c #087718", +"q c #086E17", +"r c #0B731A", +"s c #0F791F", +"t c #138223", +"u c #168727", +"v c #188A29", +"w c #178D28", +"x c #168D27", +"y c #158C26", +"z c #128D25", +"A c #129125", +"B c #149926", +"C c #17A22B", +"D c #19AA2D", +"E c #1AAC2E", +"F c #119122", +"G c #0C831D", +"H c #066D15", +"I c #0A7119", +"J c #0C7A1D", +"K c #118323", +"L c #178D29", +"M c #1B952E", +"N c #1B9C2E", +"O c #1A9E2E", +"P c #199C2B", +"Q c #189D2B", +"R c #189E2B", +"S c #17A32C", +"T c #18AC2E", +"U c #19B630", +"V c #1CC033", +"W c #16A22A", +"X c #129025", +"Y c #097519", +"Z c #0F801F", +"` c #158E27", +" . c #414141", +".. c #852A2A", +"+. c #1CC335", +"@. c #19B130", +"#. c #179C2A", +"$. c #067015", +"%. c #097A1A", +"&. c #108922", +"*. c #17982A", +"=. c #473E3E", +"-. c #723030", +";. c #CB1212", +">. c #1CDA38", +",. c #1DD038", +"'. c #1BB832", +"). c #19A22D", +"!. c #067215", +"~. c #0A7F1B", +"{. c #119124", +"]. c #18A22D", +"^. c #4E3C3C", +"/. c #1BCB35", +"(. c #1ACD35", +"_. c #19CB34", +":. c #1AC932", +"<. c #18C833", +"[. c #18CC33", +"}. c #E20A0A", +"|. c #1BDF37", +"1. c #1CD136", +"2. c #1CBD35", +"3. c #19A42E", +"4. c #087618", +"5. c #0B821D", +"6. c #129725", +"7. c #A51F1F", +"8. c #18D435", +"9. c #18D433", +"0. c #18D333", +"a. c #18D033", +"b. c #19CE33", +"c. c #9E2121", +"d. c #19DB36", +"e. c #1ACF36", +"f. c #1BBB33", +"g. c #1AA22E", +"h. c #087818", +"i. c #0C861E", +"j. c #129B26", +"k. c #18B12F", +"l. c #832A2A", +"m. c #19D833", +"n. c #17D433", +"o. c #19D534", +"p. c #1ACB34", +"q. c #1AB832", +"r. c #199F2D", +"s. c #087918", +"t. c #0D891F", +"u. c #129C26", +"v. c #17B22F", +"w. c #17D232", +"x. c #16D531", +"y. c #19D034", +"z. c #18C432", +"A. c #19B230", +"B. c #169A2A", +"C. c #087A19", +"D. c #0D881F", +"E. c #139C27", +"F. c #17AF2D", +"G. c #14D130", +"H. c #16CC31", +"I. c #18C132", +"J. c #18B02E", +"K. c #159828", +"L. c #0A7A1A", +"M. c #149C27", +"N. c #17AE2D", +"O. c #16C830", +"P. c #14CD2E", +"Q. c #14CE30", +"R. c #17CA31", +"S. c #15BF2F", +"T. c #15AE2B", +"U. c #129624", +"V. c #0E8821", +"W. c #17AD2E", +"X. c #17C730", +"Y. c #16CA31", +"Z. c #15C92E", +"`. c #14CB2E", +" + c #14C72E", +".+ c #14BD2C", +"++ c #11AD29", +"@+ c #0F9423", +"#+ c #0B7B1A", +"$+ c #0F8720", +"%+ c #139B26", +"&+ c #16AA2B", +"*+ c #17C72F", +"=+ c #15CB30", +"-+ c #15CC31", +";+ c #15C82F", +">+ c #16C730", +",+ c #11C52C", +"'+ c #10BA29", +")+ c #0FA825", +"!+ c #0C9020", +"~+ c #0B791C", +"{+ c #0D871F", +"]+ c #119625", +"^+ c #15A82A", +"/+ c #9C2222", +"(+ c #10C02A", +"_+ c #0EB526", +":+ c #0DA322", +"<+ c #0A8D1D", +"[+ c #097419", +"}+ c #0E9121", +"|+ c #11A126", +"1+ c #0EB426", +"2+ c #0DAA23", +"3+ c #0B9A20", +"4+ c #08871B", +"5+ c #077217", +"6+ c #0A871D", +"7+ c #0D9521", +"8+ c #10A425", +"9+ c #11AE27", +"0+ c #11B228", +"a+ c #12B529", +"b+ c #11B628", +"c+ c #10B429", +"d+ c #10B227", +"e+ c #10AF27", +"f+ c #10AC27", +"g+ c #0FAB26", +"h+ c #0EA824", +"i+ c #0DA624", +"j+ c #0CA221", +"k+ c #0B9C20", +"l+ c #088F1C", +"m+ c #068018", +"n+ c #056D13", +"o+ c #057214", +"p+ c #067A17", +"q+ c #09841B", +"r+ c #0C911E", +"s+ c #0D9921", +"t+ c #0E9F22", +"u+ c #0EA123", +"v+ c #0DA222", +"w+ c #0DA123", +"x+ c #0C9C21", +"y+ c #0B981F", +"z+ c #0C971F", +"A+ c #0C951F", +"B+ c #0B931F", +"C+ c #0A911E", +"D+ c #088E1C", +"E+ c #07891A", +"F+ c #058218", +"G+ c #047715", +"H+ c #036812", +"I+ c #046C12", +"J+ c #047014", +"K+ c #057615", +"L+ c #077D19", +"M+ c #09831B", +"N+ c #09871C", +"O+ c #08891C", +"P+ c #088A1B", +"Q+ c #078619", +"R+ c #078419", +"S+ c #078018", +"T+ c #067D18", +"U+ c #067C18", +"V+ c #067D17", +"W+ c #057B16", +"X+ c #047815", +"Y+ c #037313", +"Z+ c #036D12", +" ", +" . + + . @ # $ % & % * = - ; > , ' ) ! ~ ", +" . + { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 ", +" 8 9 0 a b c d e f g 1 h i j k l m n o p ", +" { q r s t u v w x y z A B C D E n n F G ", +" H I J K L M N O P Q R S T U V n n n W X ", +" H Y Z ` . . . . . . . . ...n n n +.@.#. ", +" $.%.&.*.=. . . . . . . .-.n n ;.>.,.'.). ", +" !.~.{.].^.=./.(._.:.<.[.n n }. .|.1.2.3. ", +" 4.5.6.T n 7.8.9.0.a.b.n n n c. .d.e.f.g. ", +" h.i.j.k.l.n n m.n.0.n n n n . .o.p.q.r. ", +" s.t.u.v. .n n n w.w.n n n x. . .y.z.A.B. ", +" C.D.E.F. . .n n n n n n n G. . .H.I.J.K. ", +" L.t.M.N. . .O.n n n n n P.Q. . .R.S.T.U. ", +" L.V.M.W. . .X.Y.n n n n Z.`. . . +.+++@+ ", +" #+$+%+&+ . .*+=+-+n n ;+>+;+ . .,+'+)+!+ ", +" ~+{+]+^+ . . . . ./+n . . . . .(+_+:+<+ ", +" [+5.}+|+ . . . . . . . . . . . .1+2+3+4+ ", +" 5+C.6+7+8+9+0+a+b+c+d+e+f+g+h+i+j+k+l+m+ ", +" n+o+p+q+r+s+t+u+v+w+x+y+z+A+B+C+D+E+F+G+ ", +" H+I+J+K+L+M+N+O+P+E+Q+R+S+T+U+V+W+X+Y+Z+ ", +" "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/speaker.xpm b/attic/muse_qt4_evolution/muse/xpm/speaker.xpm new file mode 100644 index 00000000..1595e298 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/speaker.xpm @@ -0,0 +1,23 @@ +/* XPM */ +static const char * speaker_xpm[] = { +"18 18 2 1", +" c None", +". c #000000", +" ", +" .. ", +" . . ", +" . . ", +" . . ", +" ..... . ", +" . . ", +" . . ", +" . . ", +" . . ", +" . . ", +" . . ", +" ..... . ", +" . . ", +" . . ", +" . . ", +" .. ", +" "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/splash.png b/attic/muse_qt4_evolution/muse/xpm/splash.png new file mode 100644 index 00000000..077e305e Binary files /dev/null and b/attic/muse_qt4_evolution/muse/xpm/splash.png differ diff --git a/attic/muse_qt4_evolution/muse/xpm/start.xpm b/attic/muse_qt4_evolution/muse/xpm/start.xpm new file mode 100644 index 00000000..cc5b8f9c --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/start.xpm @@ -0,0 +1,17 @@ +/* XPM */ +static const char * start_xpm[] = { +"17 12 2 1", +" c None", +". c #000000", +" .... . ", +" .... ... ", +" .... ... ", +" .... .... ", +" .... .... ", +" .... ..... ", +" .... ..... ", +" .... .... ", +" .... .... ", +" .... ... ", +" .... ... ", +" .... . "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/steprec.xpm b/attic/muse_qt4_evolution/muse/xpm/steprec.xpm new file mode 100644 index 00000000..4c606c15 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/steprec.xpm @@ -0,0 +1,24 @@ +/* XPM */ +static const char* steprec_xpm[]={ +"18 18 3 1", +". c None", +"a c #ffffff", +"# c #ff0000", +"......#####.......", +"....##aaaaa##.....", +"...#aaa####aa#....", +"..#aa########a#...", +".#aaa##aaaa##aa#..", +".#aaa##aaaaaaaa#..", +"#aaaa##aaaaaaaaa#.", +"#aaaaa#####aaaaa#.", +"#aaaaaa#####aaaa#.", +"#aaaaaaaaaa##aaa#.", +"#aaaa#aaaaa##aaa#.", +".#aaa##aaaa##aa#..", +".#aaaa#######aa#..", +"..#aaaa#####aa#...", +"...#aaaaaaaaa#....", +"....##aaaaa##.....", +"......#####.......", +".................."}; diff --git a/attic/muse_qt4_evolution/muse/xpm/stereo.svg b/attic/muse_qt4_evolution/muse/xpm/stereo.svg new file mode 100644 index 00000000..2d222f61 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/stereo.svg @@ -0,0 +1,68 @@ + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/muse/xpm/stick.xpm b/attic/muse_qt4_evolution/muse/xpm/stick.xpm new file mode 100644 index 00000000..b5817f1f --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/stick.xpm @@ -0,0 +1,33 @@ +/* XPM */ +static const char * stick_xpm[] = { +"16 16 14 1", +" c None", +". c #000100", +"+ c #9FA19E", +"@ c #A29FA3", +"# c #2F312E", +"$ c #878A8A", +"% c #ABAFB0", +"& c #DDE2E5", +"* c #6D706F", +"= c #6D6F6C", +"- c #D3D8DA", +"; c #C2C4C0", +"> c #7F817E", +", c #868885", +" . ", +" ..+ ", +" ..@+ . ", +" ..++ ..+", +" ..@@ ..++", +" ##...## ..++ ", +" .$%..$$...@@ ", +" #$%&&&%...++ ", +" ##$%&%$..#@ ", +" #*#####..#@ ", +" #*$&&%$=#..... ", +" #*%&&&-*..;@;>.", +" #$&&%,##.>;;..", +" ###### ......", +" .+>>. ", +" ... "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/stop.xpm b/attic/muse_qt4_evolution/muse/xpm/stop.xpm new file mode 100644 index 00000000..c4c5dbe2 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/stop.xpm @@ -0,0 +1,17 @@ +/* XPM */ +static const char * stop_xpm[] = { +"12 12 2 1", +" c None", +". c #000000", +" ", +" .......... ", +" .......... ", +" .......... ", +" .......... ", +" .......... ", +" .......... ", +" .......... ", +" .......... ", +" .......... ", +" .......... ", +" "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/sysex.xpm b/attic/muse_qt4_evolution/muse/xpm/sysex.xpm new file mode 100644 index 00000000..3cc5734e --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/sysex.xpm @@ -0,0 +1,27 @@ +/* XPM */ +static const char * sysex_xpm[] = { +"22 22 2 1", +" c None", +". c #000000000000", +" ... . ", +" . .. ", +" . . ", +" .. .. .. ... ", +" ... . . . . ", +" .. . .. .. ", +" . . . . .. ", +" .. .. .. . . ", +" . ... . ... ", +" . ", +" . ", +" .. ", +" ....... ", +" . . ", +" . ", +" . . .. .. ", +" ..... . . ", +" . . . ", +" . . ", +" . . . . ", +" ....... .. .. ", +" "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/toc.xpm b/attic/muse_qt4_evolution/muse/xpm/toc.xpm new file mode 100644 index 00000000..e8791dbc --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/toc.xpm @@ -0,0 +1,27 @@ +/* XPM */ +static const char*toc_xpm[]={ +"18 18 6 1", +"d c #a0a0a0", +"# c #c0c0c0", +"a c #000000", +". c None", +"c c #00c000", +"b c #ffffff", +"..................", +"..................", +".#aaaaaaaaaaa.....", +".#a...abbba#a#....", +".#a#c#abbba#.aa#..", +".#a.c.abbba###a#..", +".#a.c.abbbaaaaa#..", +".#a#c#abbbbbbba#..", +".#a.c.abdddbbba#..", +".#a.c.abbbbbbba#..", +".#a#c.abbddddba##.", +".#a#c.abbbbbbba##.", +".#a#c.abbbbbbba##.", +".#a#c.abddddbba##.", +".#a...abbbbbbba#..", +".#aaaaaaaaaaaaa#..", +"..............###.", +".................."}; diff --git a/attic/muse_qt4_evolution/muse/xpm/track_add.xpm b/attic/muse_qt4_evolution/muse/xpm/track_add.xpm new file mode 100644 index 00000000..0d78d13b --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/track_add.xpm @@ -0,0 +1,23 @@ +/* XPM */ +static const char *track_add_xpm[]={ +"16 16 4 1", +"b c #404000", +"a c #808080", +". c #c00000", +"# c #ffffff", +"................", +"................", +"..############..", +"..############..", +"..a#a#a#a#a#a#..", +".bbbbbbbbbbbbbb.", +"..a#a#a#a#a#a#..", +"..a#a#a#a#a#a#..", +"..a#a#a#a#a#a#..", +"..a#a#a#a#a#a#..", +".bbbbbbbbbbbbbb.", +"..a#a#a#a#a#a#..", +"..############..", +"..############..", +"................", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/track_delete.xpm b/attic/muse_qt4_evolution/muse/xpm/track_delete.xpm new file mode 100644 index 00000000..e8a60338 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/track_delete.xpm @@ -0,0 +1,23 @@ +/* XPM */ +static const char *track_delete_xpm[]={ +"16 16 4 1", +"b c #404000", +"a c #808080", +". c #c00000", +"# c #ffffff", +"................", +"................", +"....##########..", +".....#########..", +"..a...a#a#a#a#..", +".bbb...bbbbbbbb.", +"..a#a...a#a#a#..", +"..a#a#...#a#a#..", +"..a#a#a...a#a#..", +"..a#a#a#...#a#..", +".bbbbbbbb...bbb.", +"..a#a#a#a#...#..", +"..#########.....", +"..##########....", +"................", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/underlined.xpm b/attic/muse_qt4_evolution/muse/xpm/underlined.xpm new file mode 100644 index 00000000..a84a1e7d --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/underlined.xpm @@ -0,0 +1,16 @@ +/* XPM */ +static const char * underlined_xpm[] = { +"11 11 2 1", +" g None", +". g #000000", +" .... ... ", +" .. . ", +" .. . ", +" .. . ", +" .. . ", +" .. . ", +" .. . ", +" ... .. ", +" ..... ", +" ", +" ......... "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/undo.xpm b/attic/muse_qt4_evolution/muse/xpm/undo.xpm new file mode 100644 index 00000000..4ba2b07b --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/undo.xpm @@ -0,0 +1,93 @@ +/* XPM */ +static const char * undo_xpm[] = { +"22 22 68 1", +" c None", +". c #275F0B", +"+ c #9AC589", +"@ c #CDE2C1", +"# c #E5EEDF", +"$ c #F5F9F4", +"% c #C7E0BA", +"& c #79BE53", +"* c #91D56B", +"= c #C8E1BE", +"- c #87C86A", +"; c #4AA721", +"> c #3FA21C", +", c #47AB29", +"' c #000000", +") c #8AC963", +"! c #5BC930", +"~ c #6FD63D", +"{ c #53B529", +"] c #D4E4CB", +"^ c #2B6A0E", +"/ c #35691B", +"( c #FFFFFF", +"_ c #E4ECDF", +": c #A7C49A", +"< c #42A01E", +"[ c #102806", +"} c #060D03", +"| c #0E2005", +"1 c #41821F", +"2 c #79B658", +"3 c #1C4408", +"4 c #ECF3E8", +"5 c #7FCC67", +"6 c #72C24F", +"7 c #0B1B05", +"8 c #1C4508", +"9 c #3A8816", +"0 c #38AA18", +"a c #34A814", +"b c #51B929", +"c c #469D24", +"d c #122B06", +"e c #275E0D", +"f c #40A513", +"g c #CCE5C2", +"h c #48B227", +"i c #4BB626", +"j c #79D54B", +"k c #081204", +"l c #173807", +"m c #88BE71", +"n c #3F8222", +"o c #478824", +"p c #5B923C", +"q c #3E8320", +"r c #529033", +"s c #071003", +"t c #020202", +"u c #15260E", +"v c #0F1C09", +"w c #070D04", +"x c #12230A", +"y c #102009", +"z c #15270C", +"A c #234413", +"B c #13250A", +"C c #13200C", +" ", +" ", +" ..... ", +" ..+@#@+.. ", +" ..$%&&&&*#+. ", +" . .$=-;;>>>>,*#' ", +" .. .$);>!~~~~!{>*+' ", +" .]..$)>!~{''''^/{>(' ", +" .]_:)<~{'[ }|^12+3", +" .456<~{' 789(3", +" .40abc' def3", +" .ghaij3 kl3 ", +" .mnopqr3 s3' ", +" .'''''''t u3 ", +" v3w ", +" x3y ", +" zAB ", +" C3' ", +" ''' ", +" ", +" ", +" "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/up.xpm b/attic/muse_qt4_evolution/muse/xpm/up.xpm new file mode 100644 index 00000000..94ad7cd5 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/up.xpm @@ -0,0 +1,15 @@ +/* XPM */ +static const char* up_xpm[]={ +"14 10 2 1", +"# c #000000", +". c None", +"..............", +"......##......", +".....####.....", +"....######....", +"...##.##.##...", +"......##......", +"......##......", +"......##......", +"......##......", +".............."}; diff --git a/attic/muse_qt4_evolution/muse/xpm/view_bigtime_window.xpm b/attic/muse_qt4_evolution/muse/xpm/view_bigtime_window.xpm new file mode 100644 index 00000000..9ff59a5a --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/view_bigtime_window.xpm @@ -0,0 +1,22 @@ +/* XPM */ +static const char * view_bigtime_window_xpm[] = { +"16 16 3 1", +" c None", +". c #D4D4D4", +"+ c #000000", +" .++. ", +" .++..++. ", +" +. ++ .+ ", +" +. ++ .+ ", +" .. ++. .. ", +" + ++. + ", +".+ ++. +.", +"+. ++. .+", +"+. + .. .+", +".+ + . +.", +" + + . + ", +" ..+ . .. ", +" +.. .+ ", +" +. .+ ", +" .++..++. ", +" .++. "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/view_cliplist.xpm b/attic/muse_qt4_evolution/muse/xpm/view_cliplist.xpm new file mode 100644 index 00000000..6217b397 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/view_cliplist.xpm @@ -0,0 +1,32 @@ +/* XPM */ +static const char * view_cliplist_xpm[] = { +"16 16 13 1", +" c None", +". c #5E2ABF", +"+ c #945BFD", +"@ c #000000", +"# c #DCDCDC", +"$ c #CACACA", +"% c #E6E6E6", +"& c #EAEAEA", +"* c #FFFFFF", +"= c #FCFCFC", +"- c #461F8E", +"; c #FBFBFB", +"> c #F9F9F9", +"................", +".+@@@@@@@@@@+++.", +".+@####$###@@++.", +".+@%&@***@*@@@+.", +".+@%@@#&@@#*=@-.", +".+@%@@#*@@#@=@-.", +".+@;&@#**@#*@@-.", +".+@;&&#&&*#@=@-.", +".+@;&@***@*=@@-.", +".+@%@@#&@@#@>@-.", +".+@%@@#*@@#=@@-.", +".+@%%@#;;@#@=@-.", +".+@;%%#;%;#;#@-.", +".+@@@@@@@@@@@@-.", +".++------------.", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/view_marker.xpm b/attic/muse_qt4_evolution/muse/xpm/view_marker.xpm new file mode 100644 index 00000000..26dba09a --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/view_marker.xpm @@ -0,0 +1,37 @@ +/* XPM */ +static const char * view_marker_xpm[] = { +"16 16 18 1", +" c None", +". c #DCDCDC", +"+ c #0C0C0C", +"@ c #253B52", +"# c #395B7F", +"$ c #588DC4", +"% c #531228", +"& c #C3B2E5", +"* c #240E16", +"= c #5F132A", +"- c #828282", +"; c #542838", +"> c #232323", +", c #020202", +"' c #BDBDBD", +") c #4C4C4C", +"! c #A6A6A6", +"~ c #331B5F", +" ... ", +" ... . ", +". ++++ . ", +".+@#$#++. ... ", +".+#$$$$#+. . ..", +" ++$$$$#++++++++", +"..+$$$$#+#$$#++.", +" .+$$##@%$$++ &", +" +**+=$$+. . ", +" +- . *; . ", +" -> ", +" ,' ", +" +) ", +" !+ ", +" ++ ", +" ~ "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/view_mixer.xpm b/attic/muse_qt4_evolution/muse/xpm/view_mixer.xpm new file mode 100644 index 00000000..ec64f3c8 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/view_mixer.xpm @@ -0,0 +1,26 @@ +/* XPM */ +static const char * view_mixer_xpm[] = { +"16 16 7 1", +" c None", +". c #5E2ABF", +"+ c #945BFD", +"@ c #FFFFFF", +"# c #000000", +"$ c #CACACA", +"% c #5727B0", +"................", +".++++++++++++++.", +".+@@@@@@@@@@@@+.", +".+@#@@#@@#@@#@+.", +".+###@#$###@#$+.", +".+###$#$###$#$+.", +".+@#$$#$@#$$#$+.", +".+@#$@#$@#$###+.", +".+@#$@#$@#$###%.", +".+@#$@#$@#$@#$%.", +".+@#$###@#$@#$+.", +".+@#$###$#$@#$+.", +".+@@$@@@$@$@@$+.", +".+@@@@@@@@@@@@+.", +".++++++++++++++.", +"................"}; diff --git a/attic/muse_qt4_evolution/muse/xpm/view_transport_window.xpm b/attic/muse_qt4_evolution/muse/xpm/view_transport_window.xpm new file mode 100644 index 00000000..fba8696f --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/view_transport_window.xpm @@ -0,0 +1,24 @@ +/* XPM */ +static const char * view_transport_window_xpm[] = { +"16 16 5 1", +" c None", +". c #575757", +"+ c #000000", +"@ c #D4D4D4", +"# c #D1CFD5", +" .+. ", +" .+++. ", +" .+++.@ ", +" .+.@@ ", +" ", +" ", +" .+++.@ ", +" .+++++@ ", +" .@++++@ ", +" @++.@@ ", +" ++ ", +" .++@@ ", +" +++@++ ", +" .+++++.@ ", +" .++++.@# ", +" @@@@@@ "}; diff --git a/attic/muse_qt4_evolution/muse/xpm/wave.xpm b/attic/muse_qt4_evolution/muse/xpm/wave.xpm new file mode 100644 index 00000000..f2a93c66 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/xpm/wave.xpm @@ -0,0 +1,33 @@ +/* XPM */ +static const char * wave_xpm[] = { +"16 16 14 1", +" c None", +". c #828282", +"+ c #000000", +"@ c #7F7F7F", +"# c #8A8A8A", +"$ c #4B4B4B", +"% c #444444", +"& c #E50000", +"* c #290000", +"= c #FF0000", +"- c #1E0000", +"; c #F20000", +"> c #1B0000", +", c #D50000", +" ", +" . ", +" .+. ", +" @@ #+@+# ", +" $++$ +@ @+ ", +" +@@+ + + @", +" + + + + %", +" + + + + +", +" + + + + +", +" + + + + +", +"&*==-&;&>,==+;=+", +"%+ + + + +", +"+@ +@ @+ + +", +"% #+@+# +@@+", +"@ .+. $++$", +" . @@ "}; diff --git a/attic/muse_qt4_evolution/packaging/muse_icon.png b/attic/muse_qt4_evolution/packaging/muse_icon.png new file mode 100644 index 00000000..5a1acb96 Binary files /dev/null and b/attic/muse_qt4_evolution/packaging/muse_icon.png differ diff --git a/attic/muse_qt4_evolution/packaging/muse_mdk.spec b/attic/muse_qt4_evolution/packaging/muse_mdk.spec new file mode 100755 index 00000000..1a7a68ff --- /dev/null +++ b/attic/muse_qt4_evolution/packaging/muse_mdk.spec @@ -0,0 +1,274 @@ +%define name muse +%define museversion 0.7.0pre3 +%define release 1thac +%define alsa_version 0.9.8 +%define jackit_version 0.93.11 +%define libjack0_version 0.93.11 +%define libsndfile1_version 1.0.5 +%define ladspa_version 1.12 +%define glib2_0_version 2.2.3 +%define qtversion 3.2 +%define dssslver 1.78 +%define musever 0.7.0pre3 +%define musedir 0.7.0pre3 +%define capver 1.0 +%define fluidsynth_version 1.0.3 +%define graphviz_version 1.9.0 +%define jade_version 1.3.1 +%define doxy_version 1.2.17 +%define ladccaver 0.4.0 + +%define major 0 +%define libname %mklibname %name %major + + +Name: %{name} +Summary: MusE is a MIDI/Audio sequencer with recording and editing capabilities. +Version: %{museversion} +Release: %{release} +URL: http://muse.sourceforge.net/ +Source0: %{name}-%{musever}.tar.bz2 +Source1: %{name}-ardour-tutorial.tar.bz2 +Group: Sound +BuildRoot: %{_tmppath}/%{name}-buildroot +License: GPL +Requires: libqt3 >= %{qtversion} +Requires: libsndfile1 >= %{libsndfile1_version} +Requires: libalsa2 >= %{alsa_version} +Requires: jackit >= %{jackit_version} +Requires: libjack0 >= %{libjack0_version} +BuildRequires: graphviz >= %{graphviz_version} +BuildRequires: libgraphviz7 >= %{graphviz_version} +BuildRequires: openjade >= %{jade_version} +BuildRequires: doxygen >= %{doxy_version} +BuildRequires: libfluidsynth1 >= %{fluidsynth_version} +BuildRequires: libfluidsynth1-devel >= %{fluidsynth_version} +BuildRequires: fluidsynth >= %{fluidsynth_version} +BuildRequires: libalsa2-devel >= %{alsa_version} +BuildRequires: docbook-style-dsssl >= %{dssslver} +BuildRequires: libjack0-devel >= %{libjack0_version} +BuildRequires: libsndfile1-devel >= %{libsndfile1_version} +BuildRequires: libgraphviz7-devel >= %{graphviz_version} +BuildRequires: libcap1-devel >= %{capver} +BuildRequires: ladcca >= %{ladccaver} +BuildRequires: docbook-dtd41-sgml +BuildRequires: libext2fs2-devel + +%description +MusE is a MIDI/Audio sequencer with recording and editing capabilities. +Some Highlights: + + * standard midifile (smf) import-/export + * organizes songs in tracks and parts which you can arrange + with the part editor + * midi editors: pianoroll, drum, list, controller + * score editor with high quality postscript printer output + * realtime: editing while playing + * unlimited number of open editors + * unlimited undo/redo + * realtime and step-recording + * multiple midi devices + * unlimited number of tracks + * audio playback/recording + * Sync to external devices: MTC/MMC, Midi Clock, + Master/Slave (currently only partial implemented) + * LADSPA host + * ALSA and JACK audio driver + * uses raw midi devices (ALSA, OSS & serial ports) + * XML project file + * project file contains complete app state (session data) + * Application spanning Cut/Paste Drag/Drop + * uses C++, QT2 GUI Library, STL + * GPL Licenced + +%package -n %libname +Summary: Main libraries for %name. +Group: System/Libraries + +%description -n %{libname} +This package contains the dynamic library of plugins from %name. + +%package -n %{libname}-static +Summary: Static libraries for %name plugins. +Group: System/Libraries + +%description -n %{libname}-static +This package contains the dynamic library of plugins from %name. + + +Group: Development/C++ +%package -n givertcap +Summary: Give applications real-time capabilities +Version: %{capver} +Group: Sound +URL: http://www.tml.hut.fi/~tilmonen/givertcap/ + +%description -n givertcap +Givertcap is a small Linux application that is used to give other +application real-time capabilities. With the aid of givertcap you can +run real-time applications (audio and video -processing apps for +example) with high priority without running the application as root. + +%prep +rm -rf $RPM_BUILD_ROOT + +%setup -n %{name}-%{musever} -a 1 +#perl -p -i -e 's|version="3.2.3"|version="3.1"||g' widgets/*.ui + + +%build + +export QTDIR=/usr/lib/qt3 +export KDEDIR=%_prefix +export LD_LIBRARY_PATH=$QTDIR/lib:$KDEDIR/lib:$LD_LIBRARY_PATH +export PATH=$QTDIR/bin:$KDEDIR/bin:$PATH + +%configure2_5x --prefix=%{_prefix} --datadir=%{_datadir} --libdir=%{_libdir} --with-jack \ + --disable-suid-install --disable-suid-build --enable-patchbay --disable-rtcap \ + --with-docbook-stylesheets=/usr/share/sgml/docbook/dsssl-stylesheets-%{dssslver} \ + --enable-arch=i586 --enable-laddca +# --disable-static --enable-shared --disable-qttest + +%make + +%install +rm -rf $RPM_BUILD_ROOT + +%makeinstall + +mkdir -p $RPM_BUILD_ROOT%_menudir + +# (mandrake) menu support +cat << EOF > %{buildroot}%{_menudir}/%{name} +?package(%{name}): longtitle="MusE audio editor" \ +command="/usr/bin/muse" title="MusE audio editor" needs="x11" \ +section="Multimedia/Sound" \ +icon="sound_section.png" +EOF + + +%post +%update_menus +/sbin/ldconfig + +%postun +%clean_menus + /sbin/ldconfig + +%post -n %{libname} -p /sbin/ldconfig + +%postun -n %{libname} -p /sbin/ldconfig + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(-,root,root,0755) +%doc AUTHORS COPYING INSTALL ChangeLog NEWS README* SECURITY +%doc html +%{_bindir}/muse +%{_bindir}/grepmidi +%{_libdir}/%name +%{_datadir}/%name +%{_menudir}/* + +%files -n %{libname} +%defattr(-,root,root) +%{_libdir}/%name/plugins/*.so* +%{_libdir}/%name/synthi/*.so* + +%files -n %{libname}-static +%defattr(-,root,root) +%{_libdir}/%name/plugins/*.la +%{_libdir}/%name/plugins/*.a +%{_libdir}/%name/synthi/*.a +%{_libdir}/%name/synthi/*.la + +#%files -n givertcap +#%attr(4755, root, root) +#%{_bindir}/givertcap + + + +%changelog +* Thu May 27 2004 Torbjorn Turpeinen 0.7.0pre3-1thac +- Updated to latest version + +* Wed May 05 2004 Torbjorn Turpeinen 0.7.0pre2-1thac +- Updated to latest version + +* Tue Apr 20 2004 Torbjorn Turpeinen 0.7.0pre1-1thac +- Updated to latest version + +* Tue Apr 20 2004 Torbjorn Turpeinen 0.6.3-2thac +- Rebuilt against Mandrake 10.0 official + +* Mon Jan 12 2004 Torbjorn Turpeinen 0.6.3-1thac +- Updated to latest version + +* Mon Nov 17 2003 Torbjorn Turpeinen 0.6.2-2thac +- Rebuilt for jackit-0.9.0 + +* Fri Nov 07 2003 Torbjorn Turpeinen 0.6.2-1thac +- Rebuilt for Mandrake 9.2 + +* Thu Oct 30 2003 Torbjorn Turpeinen 0.6.1-1thac +- Rebuilt for Mandrake 9.2 + +* Tue Sep 09 2003 Torbjorn Turpeinen 0.6.1-1thac +- Added muse-softsynth-fix + on muse 0.6.1, it results in a dead lock when muse starts a softsynth + without RT. the patch is an adhoc fix for this problem. +- Added jackit 0.80.0 type patch +- Changed naming to differ from Mandrake cooker + +* Fri Jul 25 2003 Torbjorn Turpeinen 0.6.1-1mdk +- Updated to 0.6.1 final built against fluidsynth-1.0.2 +- Built with qt-3.1.2 patch + +* Sat May 17 2003 Torbjorn Turpeinen 0.6.0-1mdk +- Updated to 0.6.0 final built against fluidsynth-1.0.1 + +* Sat May 03 2003 Torbjorn Turpeinen 0.6.0pre8.3mdk +- Rebuilt with rpmmacro patch that removes nvidia dependency. + +* Tue Apr 22 2003 Torbjorn Turpeinen 0.6.0pre8.2mdk +- Rebuilt against latest version of jackit 0.67.2 + +* Fri Apr 04 2003 Torbjorn Turpeinen 0.6.0pre8.1mdk +- Updated to latest version + +* Wed Mar 26 2003 Torbjorn Turpeinen 0.6.0pre7.2mdk +- Rebuilt for Mandrake 9.1 + +* Sun Mar 23 2003 Torbjorn Turpeinen 0.6.0pre7.2mdk +- Updated to latest version +- Compiled against jackit-0.62.0 and iiwusynth-0.2.5 + +* Sun Feb 16 2003 Torbjorn Turpeinen 0.6.0pre5.4mdk +- Recompiled against jackit-0.51.0. + +* Fri Feb 14 2003 Torbjorn Turpeinen 0.6.0pre5.3mdk +- Recompiled against libsndfile-1.0.4. + +* Sat Feb 08 2003 Torbjorn Turpeinen 0.6.0pre5.2mdk +- Recompiled against jack-0.44,graphviz and i586 optimized. + +* Wed Dec 11 2002 Torbjorn Turpeinen 0.6.0pre5.1mdk +- Removed jack dependency again + +* Mon Dec 09 2002 Torbjorn Turpeinen 0.6.0pre5mdk +- Rebuilt for Mandrake 9.0 + +* Fri Nov 15 2002 Lenny Cartier 0.6.0-0.pre3.2mdk +- remove jack dependency + +* Wed Nov 13 2002 Lenny Cartier 0.6.0-0.pre3.1mdk +- 0.6.0pre3 +- clean filelist +- disable-suid-build for now +- from James Gregory : + - fixed file locations to use macros rather than absolute paths + +* Thu Oct 3 2002 James Gregory 0.6.0-0.pre2.2mdk +- First version to build. diff --git a/attic/muse_qt4_evolution/pch.txt b/attic/muse_qt4_evolution/pch.txt new file mode 100644 index 00000000..11e9ab5f --- /dev/null +++ b/attic/muse_qt4_evolution/pch.txt @@ -0,0 +1,68 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2007 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +add_custom_command( + OUTPUT ${PROJECT_BINARY_DIR}/all.h + COMMAND cp ${PROJECT_SOURCE_DIR}/all.h ${PROJECT_BINARY_DIR}/all.h + DEPENDS ${PROJECT_SOURCE_DIR}/all.h + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + ) + +add_custom_command( + OUTPUT ${PROJECT_BINARY_DIR}/all-pic.h + COMMAND cp ${PROJECT_SOURCE_DIR}/all.h ${PROJECT_BINARY_DIR}/all-pic.h + DEPENDS ${PROJECT_SOURCE_DIR}/all.h + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + ) + +add_custom_command( + OUTPUT ${PROJECT_BINARY_DIR}/all.h.pch + COMMAND ${CMAKE_CXX_COMPILER} + -g -Wextra -fno-exceptions -Wall + -I${QT_INCLUDE_DIR} + -I${QT_QTCORE_INCLUDE_DIR} + -I${QT_QTGUI_INCLUDE_DIR} + -o all.h.pch all.h + DEPENDS ${PROJECT_BINARY_DIR}/all.h + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + ) + +add_custom_command( + OUTPUT ${PROJECT_BINARY_DIR}/all-pic.h.pch + COMMAND ${CMAKE_CXX_COMPILER} + -fPIC + -Dawlplugin_EXPORTS -DQT_CORE_LIB -DQT_GUI_LIB -DQT_XML_LIB + -DQT_PLUGIN -DQT_SHARED -DQT_NO_DEBUG + -g -Wextra -fno-exceptions -Wall + -I${QT_INCLUDE_DIR} + -I${QT_QTCORE_INCLUDE_DIR} + -I${QT_QTGUI_INCLUDE_DIR} + -o all-pic.h.pch all-pic.h + DEPENDS ${PROJECT_BINARY_DIR}/all-pic.h + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + ) + +set_source_files_properties( + ${PROJECT_BINARY_DIR}/all.h + ${PROJECT_BINARY_DIR}/all.h.pch + ${PROJECT_BINARY_DIR}/all-pic.h.pch + PROPERTIES generated true + ) + diff --git a/attic/muse_qt4_evolution/plugins/CMakeLists.txt b/attic/muse_qt4_evolution/plugins/CMakeLists.txt new file mode 100644 index 00000000..1293902f --- /dev/null +++ b/attic/muse_qt4_evolution/plugins/CMakeLists.txt @@ -0,0 +1,22 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +subdirs( freeverb doublechorus pandelay ) + diff --git a/attic/muse_qt4_evolution/plugins/doublechorus/CMakeLists.txt b/attic/muse_qt4_evolution/plugins/doublechorus/CMakeLists.txt new file mode 100644 index 00000000..ecb6dbe0 --- /dev/null +++ b/attic/muse_qt4_evolution/plugins/doublechorus/CMakeLists.txt @@ -0,0 +1,33 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +add_library ( doublechorus SHARED + doublechorus.cpp doublechorusmodel.cpp simplechorusmodel.cpp + ) + +# tell cmake to name the target doublechorus.so instead of +# libdoublechorus.so +# +set_target_properties (doublechorus + PROPERTIES PREFIX "" + #COMPILE_FLAGS "-O3" + ) + +install_targets ( /lib/${MusE_INSTALL_NAME}/plugins doublechorus) diff --git a/attic/muse_qt4_evolution/plugins/doublechorus/doublechorus.cpp b/attic/muse_qt4_evolution/plugins/doublechorus/doublechorus.cpp new file mode 100644 index 00000000..27d84336 --- /dev/null +++ b/attic/muse_qt4_evolution/plugins/doublechorus/doublechorus.cpp @@ -0,0 +1,173 @@ +//========================================================= +// DoubleChorus for MusE +// +// (C) Copyright 2006 Nil Geisweiller +//========================================================= + +#include "doublechorusmodel.h" +#include + +//--------------------------------------------------------- +// instantiate doublechorus +// Construct a new plugin instance. +//--------------------------------------------------------- + +LADSPA_Handle instantiate(const LADSPA_Descriptor* /*Descriptor*/, + unsigned long samplerate) +{ + return new DoubleChorusModel(samplerate); +} + +//--------------------------------------------------------- +// connect PortTo doublechorus +// Connect a port to a data location. +//--------------------------------------------------------- + +void connect(LADSPA_Handle Instance, unsigned long port, + LADSPA_Data* data) +{ + ((DoubleChorusModel *)Instance)->port[port] = data; +} + +//--------------------------------------------------------- +// activate +//--------------------------------------------------------- + +void activate(LADSPA_Handle instance) +{ + ((DoubleChorusModel *)instance)->activate(); +} + +//--------------------------------------------------------- +// deactivate +//--------------------------------------------------------- + +void deactivate(LADSPA_Handle /*Instance*/) +{ +} + +//--------------------------------------------------------- +// run doublechorus +//--------------------------------------------------------- + +void run(LADSPA_Handle Instance, unsigned long n) +{ + ((DoubleChorusModel *)Instance)->processReplace(n); +} + +//--------------------------------------------------------- +// runAdding doublechorus +// *ADD* the output to the output buffer. +//--------------------------------------------------------- + +void runAdding(LADSPA_Handle Instance, unsigned long n) +{ + ((DoubleChorusModel *)Instance)->processMix(n); +} + +//--------------------------------------------------------- +// set doublechorus RunAddingGain +//--------------------------------------------------------- + +void setGain(LADSPA_Handle /*Instance*/, LADSPA_Data /*Gain*/) +{ + printf("TEST setGain\n"); + // ((DoubleChorusModel *)Instance)->m_fRunAddingGain = Gain; +} + +//--------------------------------------------------------- +// cleanup doublechorus +//--------------------------------------------------------- + +void cleanup(LADSPA_Handle Instance) +{ + delete (DoubleChorusModel *)Instance; +} + +static const char* portNames[] = { + "Input (Left)", + "Input (Right)", + "Output (Left)", + "Output (Right)", + "Pan 1", + "LFOFreq 1", + "Depth 1", + "Pan 2", + "LFOFreq 2", + "Depth 2", + "Dry/Wet" +}; + +LADSPA_PortDescriptor portDescriptors[] = { + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL +}; + +LADSPA_PortRangeHint portRangeHints[] = { + { 0, 0.0, 0.0 }, + { 0, 0.0, 0.0 }, + { 0, 0.0, 0.0 }, + { 0, 0.0, 0.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_HIGH, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_DEFAULT_HIGH, MINFREQ, MAXFREQ }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_LOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_LOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_DEFAULT_MIDDLE, MINFREQ, MAXFREQ }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_LOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MIDDLE, 0.0, 1.0 }, +}; + +LADSPA_Descriptor descriptor = { + 1051, + "doublechorus1", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "DoubleChorus", + "Nil Geisweiller", + "GPL", + NBRPARAM + 4, + portDescriptors, + portNames, + portRangeHints, + 0, // impl. data + instantiate, + connect, + activate, + run, + runAdding, + setGain, + deactivate, + cleanup +}; + +//--------------------------------------------------------- +// _init +// called automatically when the plugin library is first +// loaded. +//--------------------------------------------------------- +void _init() { +} + +//--------------------------------------------------------- +// _fini +// called automatically when the library is unloaded. +//--------------------------------------------------------- +void _fini() { +} + +//--------------------------------------------------------- +// ladspa_descriptor +// Return a descriptor of the requested plugin type. +//--------------------------------------------------------- +const LADSPA_Descriptor* ladspa_descriptor(unsigned long i) { + return (i == 0) ? &descriptor : 0; +} + diff --git a/attic/muse_qt4_evolution/plugins/doublechorus/doublechorusmodel.cpp b/attic/muse_qt4_evolution/plugins/doublechorus/doublechorusmodel.cpp new file mode 100644 index 00000000..01def026 --- /dev/null +++ b/attic/muse_qt4_evolution/plugins/doublechorus/doublechorusmodel.cpp @@ -0,0 +1,214 @@ +//=========================================================================== +// +// doublechorusmodel +// +// Version 0.0.1 +// +// +// +// +// Copyright (c) 2006 Nil Geisweiller +// +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA or point your web browser to http://www.gnu.org. +//=========================================================================== + +#include "doublechorusmodel.h" + +//--------------------------------------------------------- +// DoubleChorusModel +//--------------------------------------------------------- + +DoubleChorusModel::DoubleChorusModel(unsigned long samplerate) { + _simpleChorus1 = new SimpleChorusModel((float)samplerate); + _simpleChorus2 = new SimpleChorusModel((float)samplerate); + + param[0] = getPan1(); + param[1] = getLFOFreq1(); + param[2] = getDepth1(); + param[3] = getPan2(); + param[4] = getLFOFreq2(); + param[5] = getDepth2(); + param[6] = getDryWet(); +} + +DoubleChorusModel::~DoubleChorusModel() { + delete(_simpleChorus1); + delete(_simpleChorus2); +} + +//--------------------------------------------------------- +// activate +//--------------------------------------------------------- + +void DoubleChorusModel::activate() { + *port[4] = param[0]; + *port[5] = param[1]; + *port[6] = param[2]; + *port[7] = param[3]; + *port[8] = param[4]; + *port[9] = param[5]; + *port[10] = param[6]; +} + +//--------------------------------------------------------- +// processReplace +//--------------------------------------------------------- + +void DoubleChorusModel::processReplace(long n) { + float tmpLeftOutput1; + float tmpRightOutput1; + float tmpLeftOutput2; + float tmpRightOutput2; + //update parameters + if (param[0] != *port[4]) { + param[0] = *port[4]; + setPan1(param[0]); + } + if (param[1] != *port[5]) { + param[1] = *port[5]; + setLFOFreq1(param[1]); + } + if (param[2] != *port[6]) { + param[2] = *port[6]; + setDepth1(param[2]); + } + if (param[3] != *port[7]) { + param[3] = *port[7]; + setPan2(param[3]); + } + if (param[4] != *port[8]) { + param[4] = *port[8]; + setLFOFreq2(param[4]); + } + if (param[5] != *port[9]) { + param[5] = *port[9]; + setDepth2(param[5]); + } + if (param[6] != *port[10]) { + param[6] = *port[10]; + setDryWet(param[6]); + } + //process the effect + for (int i = 0; i < n; ++i) { + _simpleChorus1->process_chorus(port[0][i], port[1][i], + &tmpLeftOutput1, &tmpRightOutput1); + _simpleChorus2->process_chorus(port[0][i], port[1][i], + &tmpLeftOutput2, &tmpRightOutput2); + port[2][i] = _dryWet * (tmpLeftOutput1 + tmpLeftOutput2) + + (1.0 - _dryWet) * port[0][i]; + port[3][i] = _dryWet * (tmpRightOutput1 + tmpRightOutput2) + + (1.0 - _dryWet) * port[1][i]; + } +} + +void DoubleChorusModel::processMix(long n) { + float tmpLeftOutput1; + float tmpRightOutput1; + float tmpLeftOutput2; + float tmpRightOutput2; + //update parameters + if (param[0] != *port[4]) { + param[0] = *port[4]; + setPan1(param[0]); + } + if (param[1] != *port[5]) { + param[1] = *port[5]; + setLFOFreq1(param[1]); + } + if (param[2] != *port[6]) { + param[2] = *port[6]; + setDepth1(param[2]); + } + if (param[3] != *port[7]) { + param[3] = *port[7]; + setPan2(param[3]); + } + if (param[4] != *port[8]) { + param[4] = *port[8]; + setLFOFreq2(param[4]); + } + if (param[5] != *port[9]) { + param[5] = *port[9]; + setDepth2(param[5]); + } + if (param[6] != *port[10]) { + param[6] = *port[10]; + setDryWet(param[6]); + } + //process the effect + for (int i = 0; i < n; ++i) { + _simpleChorus1->process_chorus(port[0][i], port[1][i], + &tmpLeftOutput1, &tmpRightOutput1); + _simpleChorus2->process_chorus(port[0][i], port[1][i], + &tmpLeftOutput2, &tmpRightOutput2); + port[2][i] += _dryWet * (tmpLeftOutput1 + tmpLeftOutput2) + + (1.0 - _dryWet) * port[0][i]; + port[3][i] += _dryWet * (tmpRightOutput1 + tmpRightOutput2) + + (1.0 - _dryWet) * port[1][i]; + } +} + +//------------------------------------------------------------------ +// set parameters +//------------------------------------------------------------------ +void DoubleChorusModel::setPan1(float value) { + _simpleChorus1->setPan(value); +} +void DoubleChorusModel::setLFOFreq1(float value) { + _simpleChorus1->setLFOFreq(value); +} +void DoubleChorusModel::setDepth1(float value) { + _simpleChorus1->setDepth(value); +} +void DoubleChorusModel::setPan2(float value) { + _simpleChorus2->setPan(value); +} +void DoubleChorusModel::setLFOFreq2(float value) { + _simpleChorus2->setLFOFreq(value); +} +void DoubleChorusModel::setDepth2(float value) { + _simpleChorus2->setDepth(value); +} +void DoubleChorusModel::setDryWet(float value) { + _dryWet = value; +} + +//---------------------------------------------------------------- +// get parameters +//---------------------------------------------------------------- +float DoubleChorusModel::getPan1() { + return _simpleChorus1->getPan(); +} +float DoubleChorusModel::getLFOFreq1() { + return _simpleChorus1->getLFOFreq(); +} +float DoubleChorusModel::getDepth1() { + return _simpleChorus1->getDepth(); +} +float DoubleChorusModel::getPan2() { + return _simpleChorus2->getPan(); +} +float DoubleChorusModel::getLFOFreq2() { + return _simpleChorus2->getLFOFreq(); +} +float DoubleChorusModel::getDepth2() { + return _simpleChorus2->getDepth(); +} +float DoubleChorusModel::getDryWet() { + return _dryWet; +} diff --git a/attic/muse_qt4_evolution/plugins/doublechorus/doublechorusmodel.h b/attic/muse_qt4_evolution/plugins/doublechorus/doublechorusmodel.h new file mode 100644 index 00000000..40ce9f3f --- /dev/null +++ b/attic/muse_qt4_evolution/plugins/doublechorus/doublechorusmodel.h @@ -0,0 +1,72 @@ +//=========================================================================== +// +// doublechorusmodel +// +// Version 0.0.1 +// +// +// +// +// Copyright (c) 2006 Nil Geisweiller +// +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA or point your web browser to http://www.gnu.org. +//=========================================================================== + +#ifndef __DOUBLECHORUSMODEL_H +#define __DOUBLECHORUSMODEL_H + +#include "simplechorusmodel.h" +#include "../../muse/ladspa.h" + +#define NBRPARAM 7 + +class SimpleChorusModel; + +class DoubleChorusModel { + SimpleChorusModel* _simpleChorus1; + SimpleChorusModel* _simpleChorus2; + + float _dryWet; //0.0 : dry, 1.0 : wet + + public: + LADSPA_Data* port[NBRPARAM + 4]; + float param[NBRPARAM]; + + DoubleChorusModel(unsigned long samplerate); + ~DoubleChorusModel(); + void processMix(long numsamples); + void processReplace(long numsamples); + void setPan1(float value); + void setLFOFreq1(float value); + void setDepth1(float value); + void setPan2(float value); + void setLFOFreq2(float value); + void setDepth2(float value); + void setDryWet(float value); + float getPan1(); + float getLFOFreq1(); + float getDepth1(); + float getPan2(); + float getLFOFreq2(); + float getDepth2(); + float getDryWet(); + + void activate(); +}; + +#endif diff --git a/attic/muse_qt4_evolution/plugins/doublechorus/simplechorusmodel.cpp b/attic/muse_qt4_evolution/plugins/doublechorus/simplechorusmodel.cpp new file mode 100644 index 00000000..72015465 --- /dev/null +++ b/attic/muse_qt4_evolution/plugins/doublechorus/simplechorusmodel.cpp @@ -0,0 +1,157 @@ +//=========================================================================== +// +// simplechorus +// +// Version 0.0.1 +// +// +// +// +// Copyright (c) 2006 Nil Geisweiller +// +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA or point your web browser to http://www.gnu.org. +//=========================================================================== + +#include "simplechorusmodel.h" +#include +#include + +#define ABS(x) (x>=0?x:-x) + +// Linearly interpolate [ = a * (1 - f) + b * f] +inline float lin_interp(float f, float a, float b) { + return a + f * (b - a); +} + +// Cubic interpolation function +inline float cube_interp(const float fr, + const float inm1, + const float in, + const float inp1, + const float inp2) { + return in + 0.5f * fr * (inp1 - inm1 + + fr * (4.0f * inp1 + 2.0f * inm1 - 5.0f * in - inp2 + + fr * (3.0f * (in - inp1) - inm1 + inp2))); +} + +float SimpleChorusModel::sinus[MAXSINUSRESOLUTION]; +int SimpleChorusModel::useCount = 0; + +SimpleChorusModel::SimpleChorusModel(float samplerate) { + _sampleRate = samplerate; + //sinus + if (useCount++ == 0) + for(int i = 0; i < MAXSINUSRESOLUTION; i++) + sinus[i] = (float)(sin(((double)i * 2.0 * M_PI) / + (double)MAXSINUSRESOLUTION)); + _index = 0.0; + //init buffer + for(int i = 0; i < MAXBUFFERLENGTH; i++) { + _leftBuffer[i] = 0.0; + _rightBuffer[i] = 0.0; + } + _position = 0; + //initial parameters + _pan = 0.5; + _LFOFreq = 1.0; + _depth = 0.5; + setChorus(); +} + +SimpleChorusModel::~SimpleChorusModel() { +} + +void SimpleChorusModel::process_chorus(float leftInput, float rightInput, + float* leftOutput, float* rightOutput) { + float ocsDiff; + + _ocsDistance = _depthAmp * sinus[(int)_index]; + + ocsDiff = _ocsDistance - floorf(_ocsDistance); + + _past_position_left = MAXBUFFERLENGTH //to be sure that _past_position_left>0 + + _position - _leftMidDistance + (int)_ocsDistance; + _past_position_right = MAXBUFFERLENGTH + + _position - _rightMidDistance + (int)_ocsDistance; + + *leftOutput = _leftAmp * + lin_interp(ocsDiff, _leftBuffer[_past_position_left%MAXBUFFERLENGTH], + _leftBuffer[(_past_position_left+1)%MAXBUFFERLENGTH]); + *rightOutput = _rightAmp * + lin_interp(ocsDiff, _rightBuffer[_past_position_right%MAXBUFFERLENGTH], + _rightBuffer[(_past_position_right+1)%MAXBUFFERLENGTH]); + + _leftBuffer[_position] = leftInput; + _rightBuffer[_position] = rightInput; + + _position++; + _position %= MAXBUFFERLENGTH; + + _index += _inct; + _index = (_index= bufsize) + bufidx = 0; +// bufidx = ++bufidx % bufsize; + return output; + } + void mute() { + for (int i=0; i= bufsize) + bufidx = 0; +// bufidx = ++bufidx % bufsize; + return output; + } + void mute() { + for (int i=0; iport[port] = data; + } + +//--------------------------------------------------------- +// activate +//--------------------------------------------------------- + +void activate(LADSPA_Handle instance) + { + ((Revmodel *)instance)->activate(); + } + +//--------------------------------------------------------- +// deactivate +//--------------------------------------------------------- + +void deactivate(LADSPA_Handle /*Instance*/) + { + } + +//--------------------------------------------------------- +// runFreeverb +//--------------------------------------------------------- + +void run(LADSPA_Handle Instance, unsigned long n) + { + ((Revmodel*)Instance)->processreplace(n); + } + +//--------------------------------------------------------- +// runAddingFreeverb +// *ADD* the output to the output buffer. +//--------------------------------------------------------- + +void runAdding(LADSPA_Handle Instance, unsigned long n) + { + ((Revmodel*)Instance)->processmix(n); + } + +//--------------------------------------------------------- +// setFreeverbRunAddingGain +//--------------------------------------------------------- + +void setGain(LADSPA_Handle /*Instance*/, LADSPA_Data /*Gain*/) + { +// ((Freeverb *)Instance)->m_fRunAddingGain = Gain; + } + +//--------------------------------------------------------- +// cleanupFreeverb +//--------------------------------------------------------- + +void cleanup(LADSPA_Handle Instance) + { + delete (Revmodel *)Instance; + } + +static const char* portNames[] = { + "Input (Left)", + "Input (Right)", + "Output (Left)", + "Output (Right)", + "Room Size", + "Damping", + "Wet Level", + }; + +LADSPA_PortDescriptor portDescriptors[] = { + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + }; + +LADSPA_PortRangeHint portRangeHints[] = { + { 0, 0.0, 0.0 }, + { 0, 0.0, 0.0 }, + { 0, 0.0, 0.0 }, + { 0, 0.0, 0.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_LOGARITHMIC, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_LOGARITHMIC, 0.0, 1.0 }, + }; + +LADSPA_Descriptor descriptor = { + 1050, + "freeverb1", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "Freeverb", + "Werner Schweer", + "None", + 7, + portDescriptors, + portNames, + portRangeHints, + 0, // impl. data + instantiate, + connect, + activate, + run, + runAdding, + setGain, + deactivate, + cleanup + }; + +//--------------------------------------------------------- +// _init +// called automatically when the plugin library is first +// loaded. +//--------------------------------------------------------- + +void _init() + { + } + +//--------------------------------------------------------- +// _fini +// called automatically when the library is unloaded. +//--------------------------------------------------------- + +void _fini() + { + } + +//--------------------------------------------------------- +// ladspa_descriptor +// Return a descriptor of the requested plugin type. +//--------------------------------------------------------- + +const LADSPA_Descriptor* ladspa_descriptor(unsigned long i) + { + return (i == 0) ? &descriptor : 0; + } + diff --git a/attic/muse_qt4_evolution/plugins/freeverb/readme.txt b/attic/muse_qt4_evolution/plugins/freeverb/readme.txt new file mode 100644 index 00000000..2c1349a3 --- /dev/null +++ b/attic/muse_qt4_evolution/plugins/freeverb/readme.txt @@ -0,0 +1,147 @@ +readme from original freeverb-source: +============================================== + + +Freeverb - Free, studio-quality reverb SOURCE CODE in the public domain +----------------------------------------------------------------------- + +Written by Jezar at Dreampoint - http://www.dreampoint.co.uk + + +Introduction +------------ + +Hello. + +I'll try to keep this "readme" reasonably small. +There are few things in the world that I hate more than long "readme" files. +Except "coding conventions" - but more on that later... + +In this zip file you will find two folders of C++ source code: + +"Components" - Contains files that should clean-compile + ON ANY TYPE OF COMPUTER OR SYSTEM WHATSOEVER. It should not be necessary + to make ANY changes to these files to get them to compile, except to make + up for inadequacies of certain compilers. These files create three classes + - a comb filter, an allpass filter, and a reverb model made up of a number + of instances of the filters, with some features to control the filters at + a macro level. You will need to link these classes into another program that + interfaces with them. The files in the components drawer are completely + independant, and can be built without dependancies on anything else. + Because of the simple interface, it should be possible to interface + these files to any system - VST, DirectX, anything - without changing + them AT ALL. + +"FreeverbVST" - Contains a Steinberg VST implementation of this version of + Freeverb, using the components in (surprise) the components folder. + It was built on a PC but may compile properly for the Macintosh with + no problems. I don't know - I don't have a Macintosh. If you've + figured out how to compile the examples in the Steinberg VST + Development Kit, then you should easilly figure out how to bring the + files into a project and get it working in a few minutes. It should + be very simple. + +Note that this version of Freeverb doesn't contain predelay, or any EQ. +I thought that might make it difficult to understand the "reverb" part of +the code. Once you figure out how Freeverb works, you should find it trivial +to add such features with little CPU overhead. + +Also, the code in this version of Freeverb has been optimised. This has changed +the sound *slightly*, but not significantly compared to how much processing +power it saves. + +Finally, note that there is also a built copy of this version of Freeverb called +"Freeverb3.dll" - this is a VST plugin for the PC. If you want a version for +the Mac or anything else, then you'll need to build it yourself from the code. + + +Technical Explanation +--------------------- + +Freeverb is a simple implementation of the standard Schroeder/Moorer reverb +model. I guess the only reason why it sounds better than other reverbs, +is simply because I spent a long while doing listening tests in order to create +the values found in "tuning.h". It uses 8 comb filters on both the left and right +channels), and you might possibly be able to get away with less if CPU power +is a serious constraint for you. It then feeds the result of the reverb through +4 allpass filters on both the left and right channels. These "smooth" the sound. +Adding more than four allpasses doesn't seem to add anything significant +to the sound, and if you use less, the sound gets a bit "grainy". +The filters on the right channel are slightly detuned compared to the left channel +in order to create a stereo effect. + +Hopefully, you should find the code in the components drawer a model of +brevity and clarity. Notice that I don't use any "coding conventions". +Personally, I think that coding conventions suck. They are meant to make +the code "clearer", but they inevitably do the complete opposite, making +the code completely unfathomable. Anyone whose done Windows programming +with its - frankly stupid - "Hungarian notation" will know exactly what +I mean. Coding conventions typically promote issues that are irrelevant +up to the status of appearing supremely important. It may have helped back +people in the days when compilers where somewhat feeble in their type-safety, +but not in the new millenium with advanced C++ compilers. + +Imagine if we rewrote the English language to conform to coding conventions. +After all, The arguments should be just as valid for the English language as +they are for a computer language. For example, we could put a lower-case "n" +in front of every noun, a lower-case "p" in front of a persons name, +a lower-case "v" in front of every verb, and a lower-case "a" in front +of every adjective. Can you imagine what the English language would look like? +All in the name of "clarity". It's just as stupid to do this for computer +code as it would be to do it for the English language. I hope that the +code for Freeverb in the components drawer demonstrates this, and helps start +a movement back towards sanity in coding practices. + + +Background +---------- + +Why is the Freeverb code now public domain? Simple. I only intended to create +Freeverb to provide me and my friends with studio-quality reverb for free. +I never intended to make any money out of it. However, I simply do not have the +time to develop it any further. I'm working on a "concept album" at the moment, +and I'll never finish it if I spend any more time programming. + +In any case, I make more far money as a contract programmer - making Mobile +Internet products - than I ever could writing plugins, so it simply doesn't +make financial sense for me to spend any more time on it. + +Rather than give Freeverb to any particular individual or organisation +to profit from it, I've decided to give it away to the internet community +at large, so that quality, FREE (or at the very least, low-cost) reverbs can +be developed for all platforms. + +Feel free to use the source code for Freeverb in any of your own products, +whether they are also available for free, or even if they are commercial - +I really don't mind. You may do with the code whatever you wish. If you use +it in a product (whether commercial or not), it would be very nice of you, +if you were to send me a copy of your product - although I appreciate that +this isn't always possible in all circumstances. + +HOWEVER, please don't bug me with questions about how to use this code. +I gave away Freeverb because I don't have time to maintain it. That means +I *certainly* don't have time to answer questions about the source code, so +please don't email questions to me. I *will* ignore them. If you can't figure +the code for Freeverb out - then find somebody who can. I hope that either +way, you enjoy experimenting with it. + + +Disclaimer +---------- + +This software and source code is given away for free, without any warranties +of any kind. It has been given away to the internet community as a free gift, +so please treat it in the same spirit. + + +I hope this code is useful and interesting to you all! +I hope you have lots of fun experimenting with it and make good products! + +Very best regards, +Jezar. +Technology Consultant +Dreampoint Design and Engineering +http://www.dreampoint.co.uk + + +//ends diff --git a/attic/muse_qt4_evolution/plugins/freeverb/revmodel.cpp b/attic/muse_qt4_evolution/plugins/freeverb/revmodel.cpp new file mode 100644 index 00000000..c72ee22b --- /dev/null +++ b/attic/muse_qt4_evolution/plugins/freeverb/revmodel.cpp @@ -0,0 +1,232 @@ +// Reverb model implementation +// +// Written by Jezar at Dreampoint, June 2000 +// http://www.dreampoint.co.uk +// This code is public domain + +#include +#include "revmodel.h" + +//--------------------------------------------------------- +// Revmodel +//--------------------------------------------------------- + +Revmodel::Revmodel() + { + // Tie the components to their buffers + combL[0].setbuffer(bufcombL1,combtuningL1); + combR[0].setbuffer(bufcombR1,combtuningR1); + combL[1].setbuffer(bufcombL2,combtuningL2); + combR[1].setbuffer(bufcombR2,combtuningR2); + combL[2].setbuffer(bufcombL3,combtuningL3); + combR[2].setbuffer(bufcombR3,combtuningR3); + combL[3].setbuffer(bufcombL4,combtuningL4); + combR[3].setbuffer(bufcombR4,combtuningR4); + combL[4].setbuffer(bufcombL5,combtuningL5); + combR[4].setbuffer(bufcombR5,combtuningR5); + combL[5].setbuffer(bufcombL6,combtuningL6); + combR[5].setbuffer(bufcombR6,combtuningR6); + combL[6].setbuffer(bufcombL7,combtuningL7); + combR[6].setbuffer(bufcombR7,combtuningR7); + combL[7].setbuffer(bufcombL8,combtuningL8); + combR[7].setbuffer(bufcombR8,combtuningR8); + allpassL[0].setbuffer(bufallpassL1,allpasstuningL1); + allpassR[0].setbuffer(bufallpassR1,allpasstuningR1); + allpassL[1].setbuffer(bufallpassL2,allpasstuningL2); + allpassR[1].setbuffer(bufallpassR2,allpasstuningR2); + allpassL[2].setbuffer(bufallpassL3,allpasstuningL3); + allpassR[2].setbuffer(bufallpassR3,allpasstuningR3); + allpassL[3].setbuffer(bufallpassL4,allpasstuningL4); + allpassR[3].setbuffer(bufallpassR4,allpasstuningR4); + + // Set default values + allpassL[0].setfeedback(0.5f); + allpassR[0].setfeedback(0.5f); + allpassL[1].setfeedback(0.5f); + allpassR[1].setfeedback(0.5f); + allpassL[2].setfeedback(0.5f); + allpassR[2].setfeedback(0.5f); + allpassL[3].setfeedback(0.5f); + allpassR[3].setfeedback(0.5f); + + param[0] = initialroom; + param[1] = initialdamp; + param[2] = initialwet; + + setroomsize(initialroom); + setdamp(initialdamp); + setwidth(initialwidth); + setmode(initialmode); + + // Buffer will be full of rubbish - so we MUST mute them + + for (int i = 0; i < numcombs; i++) { + combL[i].mute(); + combR[i].mute(); + } + for (int i=0;i= freezemode) { + roomsize1 = 1; + damp1 = 0; + gain = muted; + } + else { + roomsize1 = roomsize; + damp1 = damp; + gain = fixedgain; + } + + for (int i = 0; i < numcombs; i++) { + combL[i].setfeedback(roomsize1); + combR[i].setfeedback(roomsize1); + } + + for (int i = 0; i < numcombs; i++) { + combL[i].setdamp(damp1); + combR[i].setdamp(damp1); + } + } + +// The following get/set functions are not inlined, because +// speed is never an issue when calling them, and also +// because as you develop the reverb model, you may +// wish to take dynamic action when they are called. + +void Revmodel::setroomsize(float value) + { + roomsize = (value*scaleroom) + offsetroom; + update(); + } + +float Revmodel::getroomsize() + { + return (roomsize-offsetroom)/scaleroom; + } + +void Revmodel::setdamp(float value) + { + damp = value*scaledamp; + update(); + } + +void Revmodel::setwidth(float value) + { + width = value; + update(); + } + +void Revmodel::setmode(float value) + { + mode = value; + update(); + } + +float Revmodel::getmode() + { + return (mode >= freezemode) ? 1 : 0; + } diff --git a/attic/muse_qt4_evolution/plugins/freeverb/revmodel.h b/attic/muse_qt4_evolution/plugins/freeverb/revmodel.h new file mode 100644 index 00000000..bfa1f0b3 --- /dev/null +++ b/attic/muse_qt4_evolution/plugins/freeverb/revmodel.h @@ -0,0 +1,79 @@ +// Reverb model declaration +// +// Written by Jezar at Dreampoint, June 2000 +// http://www.dreampoint.co.uk +// This code is public domain + +#ifndef _revmodel_ +#define _revmodel_ + +#include "comb.h" +#include "allpass.h" +#include "tuning.h" +#include "../../muse/ladspa.h" + +//--------------------------------------------------------- +// Revmodel +//--------------------------------------------------------- + +class Revmodel { + float gain; + float roomsize,roomsize1; + float damp,damp1; + float width; + float mode; + + // Comb filters + comb combL[numcombs]; + comb combR[numcombs]; + + // Allpass filters + allpass allpassL[numallpasses]; + allpass allpassR[numallpasses]; + + // Buffers for the combs + float bufcombL1[combtuningL1]; + float bufcombR1[combtuningR1]; + float bufcombL2[combtuningL2]; + float bufcombR2[combtuningR2]; + float bufcombL3[combtuningL3]; + float bufcombR3[combtuningR3]; + float bufcombL4[combtuningL4]; + float bufcombR4[combtuningR4]; + float bufcombL5[combtuningL5]; + float bufcombR5[combtuningR5]; + float bufcombL6[combtuningL6]; + float bufcombR6[combtuningR6]; + float bufcombL7[combtuningL7]; + float bufcombR7[combtuningR7]; + float bufcombL8[combtuningL8]; + float bufcombR8[combtuningR8]; + + // Buffers for the allpasses + float bufallpassL1[allpasstuningL1]; + float bufallpassR1[allpasstuningR1]; + float bufallpassL2[allpasstuningL2]; + float bufallpassR2[allpasstuningR2]; + float bufallpassL3[allpasstuningL3]; + float bufallpassR3[allpasstuningR3]; + float bufallpassL4[allpasstuningL4]; + float bufallpassR4[allpasstuningR4]; + void update(); + + public: + LADSPA_Data* port[7]; + float param[3]; + + Revmodel(); + void processmix(long numsamples); + void processreplace(long numsamples); + void setroomsize(float value); + float getroomsize(); + void setdamp(float value); + void setwidth(float value); + void setmode(float value); + float getmode(); + void activate(); + }; + +#endif diff --git a/attic/muse_qt4_evolution/plugins/freeverb/tuning.h b/attic/muse_qt4_evolution/plugins/freeverb/tuning.h new file mode 100644 index 00000000..ced89252 --- /dev/null +++ b/attic/muse_qt4_evolution/plugins/freeverb/tuning.h @@ -0,0 +1,60 @@ +// Reverb model tuning values +// +// Written by Jezar at Dreampoint, June 2000 +// http://www.dreampoint.co.uk +// This code is public domain + +#ifndef _tuning_ +#define _tuning_ + +const int numcombs = 8; +const int numallpasses = 4; +const float muted = 0; +const float fixedgain = 0.015f; +const float scalewet = 3; +const float scaledry = 2; +const float scaledamp = 0.4f; +const float scaleroom = 0.28f; +const float offsetroom = 0.7f; +const float initialroom = 0.5f; +const float initialdamp = 0.5f; +const float initialwet = 1/scalewet; +const float initialdry = 0; +const float initialwidth = 1; +const float initialmode = 0; +const float freezemode = 0.5f; +const int stereospread = 23; + +// These values assume 44.1KHz sample rate +// they will probably be OK for 48KHz sample rate +// but would need scaling for 96KHz (or other) sample rates. +// The values were obtained by listening tests. +const int combtuningL1 = 1116; +const int combtuningR1 = 1116+stereospread; +const int combtuningL2 = 1188; +const int combtuningR2 = 1188+stereospread; +const int combtuningL3 = 1277; +const int combtuningR3 = 1277+stereospread; +const int combtuningL4 = 1356; +const int combtuningR4 = 1356+stereospread; +const int combtuningL5 = 1422; +const int combtuningR5 = 1422+stereospread; +const int combtuningL6 = 1491; +const int combtuningR6 = 1491+stereospread; +const int combtuningL7 = 1557; +const int combtuningR7 = 1557+stereospread; +const int combtuningL8 = 1617; +const int combtuningR8 = 1617+stereospread; +const int allpasstuningL1 = 556; +const int allpasstuningR1 = 556+stereospread; +const int allpasstuningL2 = 441; +const int allpasstuningR2 = 441+stereospread; +const int allpasstuningL3 = 341; +const int allpasstuningR3 = 341+stereospread; +const int allpasstuningL4 = 225; +const int allpasstuningR4 = 225+stereospread; + +#endif//_tuning_ + +//ends + diff --git a/attic/muse_qt4_evolution/plugins/pandelay/CMakeLists.txt b/attic/muse_qt4_evolution/plugins/pandelay/CMakeLists.txt new file mode 100644 index 00000000..5ebb08a0 --- /dev/null +++ b/attic/muse_qt4_evolution/plugins/pandelay/CMakeLists.txt @@ -0,0 +1,33 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +add_library ( pandelay SHARED + pandelay.cpp ladspapandelay.cpp pandelaymodel.cpp + ) + +# tell cmake to name the target pandelay.so instead of +# libpandelay.so +# +set_target_properties (pandelay + PROPERTIES PREFIX "" + #COMPILE_FLAGS "-O3" + ) + +install_targets ( /lib/${MusE_INSTALL_NAME}/plugins pandelay) diff --git a/attic/muse_qt4_evolution/plugins/pandelay/ladspapandelay.cpp b/attic/muse_qt4_evolution/plugins/pandelay/ladspapandelay.cpp new file mode 100644 index 00000000..b5680d3e --- /dev/null +++ b/attic/muse_qt4_evolution/plugins/pandelay/ladspapandelay.cpp @@ -0,0 +1,100 @@ +//=========================================================================== +// +// ladspapandelay +// +// Version 0.0.1 +// +// +// +// +// Copyright (c) 2006 Nil Geisweiller +// +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA or point your web browser to http://www.gnu.org. +//=========================================================================== + +#include "ladspapandelay.h" + +//--------------------------------------------------------- +// PanDelay +//--------------------------------------------------------- + +LADSPAPanDelay::LADSPAPanDelay(unsigned long samplerate) + : PanDelayModel(samplerate) { + //TODO init param +} + +LADSPAPanDelay::~LADSPAPanDelay() { +} + +//--------------------------------------------------------- +// activate +//--------------------------------------------------------- + +void LADSPAPanDelay::activate() { + *port[4] = param[0]; + *port[5] = param[1]; + *port[6] = param[2]; + *port[7] = param[3]; + *port[8] = param[4]; + *port[9] = param[5]; +} + +void LADSPAPanDelay::updateParameters() { + if (param[0] != *port[4]) { + param[0] = *port[4]; + setBPM(param[0]); + } + if (param[1] != *port[5]) { + param[1] = *port[5]; + setBeatRatio(param[1]); + } + if (param[2] != *port[6]) { + param[2] = *port[6]; + setFeedback(param[2]); + } + if (param[3] != *port[7]) { + param[3] = *port[7]; + setPanLFOFreq(param[3]); + } + if (param[4] != *port[8]) { + param[4] = *port[8]; + setPanLFODepth(param[4]); + } + if (param[5] != *port[9]) { + param[5] = *port[9]; + setDryWet(param[5]); + } +} + +//--------------------------------------------------------- +// processReplace +//--------------------------------------------------------- + +void LADSPAPanDelay::processReplace(long n) { + updateParameters(); + PanDelayModel::processReplace(port[0], port[1], port[2], port[3], n); +} + +//--------------------------------------------------------- +// processMix +//--------------------------------------------------------- + +void LADSPAPanDelay::processMix(long n) { + updateParameters(); + PanDelayModel::processMix(port[0], port[1], port[2], port[3], n); +} diff --git a/attic/muse_qt4_evolution/plugins/pandelay/ladspapandelay.h b/attic/muse_qt4_evolution/plugins/pandelay/ladspapandelay.h new file mode 100644 index 00000000..ab5427a1 --- /dev/null +++ b/attic/muse_qt4_evolution/plugins/pandelay/ladspapandelay.h @@ -0,0 +1,55 @@ +//=========================================================================== +// +// ladspapandelay +// +// Version 0.0.1 +// +// +// +// +// Copyright (c) 2006 Nil Geisweiller +// +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA or point your web browser to http://www.gnu.org. +//=========================================================================== + +#ifndef __LADSPAPANDELAY_H +#define __LADSPAPANDELAY_H + +#include "pandelaymodel.h" +#include "../../muse/ladspa.h" + +#define NBRPARAM 6 + +class LADSPAPanDelay : public PanDelayModel { + private: + + public: + LADSPAPanDelay(unsigned long samplerate); + ~LADSPAPanDelay(); + + LADSPA_Data* port[NBRPARAM + 4]; + float param[NBRPARAM]; + + void updateParameters(); + void processMix(long numsamples); + void processReplace(long numsamples); + + void activate(); +}; + +#endif diff --git a/attic/muse_qt4_evolution/plugins/pandelay/pandelay.cpp b/attic/muse_qt4_evolution/plugins/pandelay/pandelay.cpp new file mode 100644 index 00000000..18ce1a41 --- /dev/null +++ b/attic/muse_qt4_evolution/plugins/pandelay/pandelay.cpp @@ -0,0 +1,170 @@ +//========================================================= +// PanDelay for MusE +// +// (C) Copyright 2006 Nil Geisweiller +//========================================================= + +#include "ladspapandelay.h" +#include + +//--------------------------------------------------------- +// instantiate pandelay +// Construct a new plugin instance. +//--------------------------------------------------------- + +LADSPA_Handle instantiate(const LADSPA_Descriptor* /*Descriptor*/, + unsigned long samplerate) +{ + return new LADSPAPanDelay(samplerate); +} + +//--------------------------------------------------------- +// connect PortTo pandelay +// Connect a port to a data location. +//--------------------------------------------------------- + +void connect(LADSPA_Handle Instance, unsigned long port, + LADSPA_Data* data) +{ + ((LADSPAPanDelay*)Instance)->port[port] = data; +} + +//--------------------------------------------------------- +// activate +//--------------------------------------------------------- + +void activate(LADSPA_Handle instance) +{ + ((LADSPAPanDelay*)instance)->activate(); +} + +//--------------------------------------------------------- +// deactivate +//--------------------------------------------------------- + +void deactivate(LADSPA_Handle /*Instance*/) +{ +} + +//--------------------------------------------------------- +// run pandelay +//--------------------------------------------------------- + +void run(LADSPA_Handle Instance, unsigned long n) +{ + ((LADSPAPanDelay*)Instance)->processReplace(n); +} + +//--------------------------------------------------------- +// runAdding pandelay +// *ADD* the output to the output buffer. +//--------------------------------------------------------- + +void runAdding(LADSPA_Handle Instance, unsigned long n) +{ + ((LADSPAPanDelay*)Instance)->processMix(n); +} + +//--------------------------------------------------------- +// set pandelay RunAddingGain +//--------------------------------------------------------- + +void setGain(LADSPA_Handle /*Instance*/, LADSPA_Data /*Gain*/) +{ + printf("TEST setGain\n"); + // ((LADSPAPanDelay*)Instance)->m_fRunAddingGain = Gain; +} + +//--------------------------------------------------------- +// cleanup pandelay +//--------------------------------------------------------- + +void cleanup(LADSPA_Handle Instance) +{ + delete (LADSPAPanDelay*)Instance; +} + +static const char* portNames[] = { + "Input (Left)", + "Input (Right)", + "Output (Left)", + "Output (Right)", + "BMP", + "Beat Ratio", + "Feedback", + "Pan LFO Freq", + "Pan LFO Depth", + "Dry/Wet" +}; + +LADSPA_PortDescriptor portDescriptors[] = { + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL +}; + +LADSPA_PortRangeHint portRangeHints[] = { + { 0, 0.0, 0.0 }, + { 0, 0.0, 0.0 }, + { 0, 0.0, 0.0 }, + { 0, 0.0, 0.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_100, MINBPM, MAXBPM }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_1, MINBEATRATIO, MAXBEATRATIO }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_HIGH, -1.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_DEFAULT_HIGH, MINFREQ, MAXFREQ }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_HIGH, 0.0, 1.0 }, + { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MIDDLE, 0.0, 1.0 } +}; + +LADSPA_Descriptor descriptor = { + 1052, + "pandelay", + LADSPA_PROPERTY_HARD_RT_CAPABLE, + "PanDelay", + "Nil Geisweiller", + "GPL", + NBRPARAM + 4, + portDescriptors, + portNames, + portRangeHints, + 0, // impl. data + instantiate, + connect, + activate, + run, + runAdding, + setGain, + deactivate, + cleanup +}; + +//--------------------------------------------------------- +// _init +// called automatically when the plugin library is first +// loaded. +//--------------------------------------------------------- +void _init() { +} + +//--------------------------------------------------------- +// _fini +// called automatically when the library is unloaded. +//--------------------------------------------------------- +void _fini() { +} + +//--------------------------------------------------------- +// ladspa_descriptor +// Return a descriptor of the requested plugin type. +//--------------------------------------------------------- +const LADSPA_Descriptor* ladspa_descriptor(unsigned long i) { + return (i == 0) ? &descriptor : 0; +} + diff --git a/attic/muse_qt4_evolution/plugins/pandelay/pandelaymodel.cpp b/attic/muse_qt4_evolution/plugins/pandelay/pandelaymodel.cpp new file mode 100644 index 00000000..ab01ba9f --- /dev/null +++ b/attic/muse_qt4_evolution/plugins/pandelay/pandelaymodel.cpp @@ -0,0 +1,154 @@ +//=========================================================================== +// +// PanDelay, panoramic rotating delay +// +// version 0.0.1 +// +// pandelaymodel.cpp +// +// +// Copyright (c) 2006 Nil Geisweiller +// +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA or point your web browser to http://www.gnu.org. +//=========================================================================== + +#include "pandelaymodel.h" + +PanDelayModel::PanDelayModel(int samplerate) { + for(int i = 0; i < MAXBUFFERLENGTH; i++) { + _leftBuffer[i] = 0.0; + _rightBuffer[i] = 0.0; + } + _bufferPointer = 0; + _inc = 0.0; + _l = 1.0; + _r = 1.0; + + _samplerate = samplerate; + setPanDelay(); +} + +PanDelayModel::~PanDelayModel() { +} + +void PanDelayModel::setSamplerate(int sr) { + _samplerate = sr; + setPanDelay(); +} + +void PanDelayModel::setBPM(float bpm) { + _BPM = bpm; + _delayTime = _beatRatio * 60.0 / _BPM; + setPanDelay(); +} + +void PanDelayModel::setBeatRatio(float br) { + _beatRatio = br; + _delayTime = _beatRatio * 60.0 / _BPM; + setPanDelay(); +} + +void PanDelayModel::setDelayTime(float dt) { + if(dt < MINDELAYTIME) _delayTime = MINDELAYTIME; + else if(dt > MAXDELAYTIME) _delayTime = MAXDELAYTIME; + else _delayTime = dt; + setPanDelay(); +} + +void PanDelayModel::setFeedback(float fb) { + _feedback = fb; + setPanDelay(); +} + +void PanDelayModel::setPanLFOFreq(float pf) { + _panLFOFreq = pf; + setPanDelay(); +} + +void PanDelayModel::setPanLFODepth(float pd) { + _panLFODepth = pd; + setPanDelay(); +} + +void PanDelayModel::setDryWet(float dw) { + _dryWet = dw; +} + +void PanDelayModel::setPanDelay() { + float numLFOSample = (1.0/_panLFOFreq) * (float)_samplerate; + _inc = 2.0 / numLFOSample; + _delaySampleSize = (int)(_delayTime * (float)_samplerate); + _lBound = 1.0 - _panLFODepth; + _rBound = 1.0 + _panLFODepth; +} + +void PanDelayModel::processMix(float* leftSamplesIn, float* rightSamplesIn, + float* leftSamplesOut, float* rightSamplesOut, + unsigned n) { + float ls, rs, p; + p = 1.0 - _dryWet; + for(unsigned i = 0; i < n; i++) { + //read buffer + ls = _leftBuffer[_bufferPointer]; + rs = _rightBuffer[_bufferPointer]; + //write buffer + _leftBuffer[_bufferPointer] *= _feedback; + _leftBuffer[_bufferPointer] += leftSamplesIn[i]; + _rightBuffer[_bufferPointer] *= _feedback; + _rightBuffer[_bufferPointer] += rightSamplesIn[i]; + //write out + leftSamplesOut[i] += _l * _dryWet * ls + p * leftSamplesIn[i]; + rightSamplesOut[i] += _r * _dryWet * rs + p * rightSamplesIn[i]; + //update _bufferPointer + _bufferPointer++; + _bufferPointer%=_delaySampleSize; + //update _l _r + _r += _inc; + _l -= _inc; + //update _inc + if(_r > _rBound || _r < _lBound) _inc = -_inc; + } +} + +void PanDelayModel::processReplace(float* leftSamplesIn, float* rightSamplesIn, + float* leftSamplesOut, + float* rightSamplesOut, unsigned n) { + float ls, rs, p; + p = 1.0 - _dryWet; + for(unsigned i = 0; i < n; i++) { + //read buffer + ls = _leftBuffer[_bufferPointer]; + rs = _rightBuffer[_bufferPointer]; + //write buffer + _leftBuffer[_bufferPointer] *= _feedback; + _leftBuffer[_bufferPointer] += leftSamplesIn[i]; + _rightBuffer[_bufferPointer] *= _feedback; + _rightBuffer[_bufferPointer] += rightSamplesIn[i]; + //write out + leftSamplesOut[i] = _l * _dryWet * ls + p * leftSamplesIn[i]; + rightSamplesOut[i] = _r * _dryWet * rs + p * rightSamplesIn[i]; + //update _bufferPointer + _bufferPointer++; + _bufferPointer%=_delaySampleSize; + //update _l _r + _r += _inc; + _l -= _inc; + //update _inc + if(_r > _rBound || _r < _lBound) _inc = -_inc; + } +} diff --git a/attic/muse_qt4_evolution/plugins/pandelay/pandelaymodel.h b/attic/muse_qt4_evolution/plugins/pandelay/pandelaymodel.h new file mode 100644 index 00000000..65983187 --- /dev/null +++ b/attic/muse_qt4_evolution/plugins/pandelay/pandelaymodel.h @@ -0,0 +1,93 @@ +//=========================================================================== +// +// PanDelay, panoramic rotating delay +// +// version 0.0.1 +// +// pandelaymodel.h +// +// +// Copyright (c) 2006 Nil Geisweiller +// +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA or point your web browser to http://www.gnu.org. +//=========================================================================== + +#ifndef __PANDELAYMODEL_H +#define __PANDELAYMODEL_H + +#include + +#define MAXBUFFERLENGTH 192000 +#define MINFREQ 0.1 //in Hz +#define MAXFREQ 10.0 //in Hz +#define MINBPM 60.0 +#define MAXBPM 255.0 +#define MINBEATRATIO 0.125 +#define MAXBEATRATIO 2.0 +#define MINDELAYTIME 0.01 //in second +#define MAXDELAYTIME 2.0 //in second + +#define NBRPARAM 5 + +class PanDelayModel { + private: + int _samplerate; + + //bool _beatFraction; //if true then the delay is calculated in beat fraction + float _BPM; + float _beatRatio; + float _delayTime; //delay is calculated according to BMP and ratioBMP + float _feedback; + float _panLFOFreq; + float _panLFODepth; + float _dryWet; //0.0 : dry, 1.0 : wet + + int _delaySampleSize; + float _lBound; + float _rBound; + float _inc; + float _l; + float _r; + + float _leftBuffer[MAXBUFFERLENGTH]; + float _rightBuffer[MAXBUFFERLENGTH]; + int _bufferPointer; + + public: + PanDelayModel(int samplerate); + ~PanDelayModel(); + + void setSamplerate(int sr); + void setBeatRatio(float br); + void setBPM(float bpm); + void setDelayTime(float dt); + void setFeedback(float dt); + void setPanLFOFreq(float pf); + void setPanLFODepth(float pd); + void setDryWet(float dw); + void setPanDelay(); + + void processMix(float* leftInSamples, float* rightInSamples, + float* leftOutSamples, float* rightOutSamples, + unsigned n); + void processReplace(float* leftInSamples, float* rightInSamples, + float* leftOutSamples, float* rightOutSamples, + unsigned n); +}; + +#endif /* __PANDELAYMODEL_H */ diff --git a/attic/muse_qt4_evolution/share/CMakeLists.txt b/attic/muse_qt4_evolution/share/CMakeLists.txt new file mode 100644 index 00000000..bd87dd86 --- /dev/null +++ b/attic/muse_qt4_evolution/share/CMakeLists.txt @@ -0,0 +1,22 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +subdirs( instruments locale plugins templates wallpapers) + diff --git a/attic/muse_qt4_evolution/share/instruments/Access_Virus.idf b/attic/muse_qt4_evolution/share/instruments/Access_Virus.idf new file mode 100644 index 00000000..e54e57fe --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/Access_Virus.idf @@ -0,0 +1,1045 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/share/instruments/Alesis-Ion.idf b/attic/muse_qt4_evolution/share/instruments/Alesis-Ion.idf new file mode 100644 index 00000000..a7ce3695 --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/Alesis-Ion.idf @@ -0,0 +1,731 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/share/instruments/Alesis-QS-78R.idf b/attic/muse_qt4_evolution/share/instruments/Alesis-QS-78R.idf new file mode 100644 index 00000000..bfc474fb --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/Alesis-QS-78R.idf @@ -0,0 +1,700 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/share/instruments/AlesisQS6.idf b/attic/muse_qt4_evolution/share/instruments/AlesisQS6.idf new file mode 100644 index 00000000..d10177b1 --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/AlesisQS6.idf @@ -0,0 +1,658 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/share/instruments/CMakeLists.txt b/attic/muse_qt4_evolution/share/instruments/CMakeLists.txt new file mode 100644 index 00000000..64eb89ac --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/CMakeLists.txt @@ -0,0 +1,22 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +install_files( /share/${MusE_INSTALL_NAME}/instruments .*\\.idf ) + diff --git a/attic/muse_qt4_evolution/share/instruments/Hammond_XB-1.idf b/attic/muse_qt4_evolution/share/instruments/Hammond_XB-1.idf new file mode 100644 index 00000000..6ac9b951 --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/Hammond_XB-1.idf @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/share/instruments/MC303.idf b/attic/muse_qt4_evolution/share/instruments/MC303.idf new file mode 100644 index 00000000..308e897c --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/MC303.idf @@ -0,0 +1,528 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/share/instruments/MC505.idf b/attic/muse_qt4_evolution/share/instruments/MC505.idf new file mode 100644 index 00000000..cced8ffa --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/MC505.idf @@ -0,0 +1,560 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/share/instruments/Quasimidi-Sirius.idf b/attic/muse_qt4_evolution/share/instruments/Quasimidi-Sirius.idf new file mode 100644 index 00000000..35e3ea3a --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/Quasimidi-Sirius.idf @@ -0,0 +1,735 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/share/instruments/Roland-E28.idf b/attic/muse_qt4_evolution/share/instruments/Roland-E28.idf new file mode 100644 index 00000000..da93682f --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/Roland-E28.idf @@ -0,0 +1,320 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/share/instruments/Roland-JV-1010-All.idf b/attic/muse_qt4_evolution/share/instruments/Roland-JV-1010-All.idf new file mode 100644 index 00000000..7fe65137 --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/Roland-JV-1010-All.idf @@ -0,0 +1,1502 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/attic/muse_qt4_evolution/share/instruments/Roland-JV-1010-Catagory.idf b/attic/muse_qt4_evolution/share/instruments/Roland-JV-1010-Catagory.idf new file mode 100644 index 00000000..a64c7507 --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/Roland-JV-1010-Catagory.idf @@ -0,0 +1,1234 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/attic/muse_qt4_evolution/share/instruments/Roland-JV-1010-Country.idf b/attic/muse_qt4_evolution/share/instruments/Roland-JV-1010-Country.idf new file mode 100644 index 00000000..5f8e4a96 --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/Roland-JV-1010-Country.idf @@ -0,0 +1,297 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/attic/muse_qt4_evolution/share/instruments/Roland-JV-1010-Presets.idf b/attic/muse_qt4_evolution/share/instruments/Roland-JV-1010-Presets.idf new file mode 100644 index 00000000..ae5c622e --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/Roland-JV-1010-Presets.idf @@ -0,0 +1,971 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/attic/muse_qt4_evolution/share/instruments/Roland-JV-1010-Session.idf b/attic/muse_qt4_evolution/share/instruments/Roland-JV-1010-Session.idf new file mode 100644 index 00000000..b407d843 --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/Roland-JV-1010-Session.idf @@ -0,0 +1,326 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/attic/muse_qt4_evolution/share/instruments/Roland-SCD70.idf b/attic/muse_qt4_evolution/share/instruments/Roland-SCD70.idf new file mode 100644 index 00000000..5a7334d8 --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/Roland-SCD70.idf @@ -0,0 +1,1513 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ": + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Patch name="Rev.Tom 4" hbank="27" lbank="0" prog="119"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/share/instruments/Roland-XP30.idf b/attic/muse_qt4_evolution/share/instruments/Roland-XP30.idf new file mode 100644 index 00000000..0b5969ab --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/Roland-XP30.idf @@ -0,0 +1,1592 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/share/instruments/Roland_FantomXR.idf b/attic/muse_qt4_evolution/share/instruments/Roland_FantomXR.idf new file mode 100644 index 00000000..a63af792 --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/Roland_FantomXR.idf @@ -0,0 +1,1419 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/share/instruments/Roland_SRX-02.idf b/attic/muse_qt4_evolution/share/instruments/Roland_SRX-02.idf new file mode 100644 index 00000000..54b0b7e6 --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/Roland_SRX-02.idf @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/share/instruments/Roland_SRX-09.idf b/attic/muse_qt4_evolution/share/instruments/Roland_SRX-09.idf new file mode 100644 index 00000000..2e3f5667 --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/Roland_SRX-09.idf @@ -0,0 +1,454 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/share/instruments/Waldorf_Microwave-I.idf b/attic/muse_qt4_evolution/share/instruments/Waldorf_Microwave-I.idf new file mode 100644 index 00000000..9975d04a --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/Waldorf_Microwave-I.idf @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/share/instruments/Yamaha-P50m.idf b/attic/muse_qt4_evolution/share/instruments/Yamaha-P50m.idf new file mode 100644 index 00000000..876aed52 --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/Yamaha-P50m.idf @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/share/instruments/Yamaha-P80.idf b/attic/muse_qt4_evolution/share/instruments/Yamaha-P80.idf new file mode 100644 index 00000000..735c463d --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/Yamaha-P80.idf @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/share/instruments/Yamaha-PSR275.idf b/attic/muse_qt4_evolution/share/instruments/Yamaha-PSR275.idf new file mode 100644 index 00000000..ea3bcfa7 --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/Yamaha-PSR275.idf @@ -0,0 +1,585 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/share/instruments/Yamaha-PSR530.idf b/attic/muse_qt4_evolution/share/instruments/Yamaha-PSR530.idf new file mode 100644 index 00000000..b413a143 --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/Yamaha-PSR530.idf @@ -0,0 +1,759 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/share/instruments/Yamaha-S90.idf b/attic/muse_qt4_evolution/share/instruments/Yamaha-S90.idf new file mode 100644 index 00000000..3d5f3685 --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/Yamaha-S90.idf @@ -0,0 +1,4304 @@ + + + + + + + + + 0x43 0x10 0x6b 0xa 0x0 0x0 0x0 + + + + 0x43 0x10 0x6b 0xa 0x0 0x1 0x3 + + + + 0x43 0x10 0x6b 0x0 0x0 0x9 0x0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Clave 2424 + SdBrMtSt 2525 + SdBrSwrSt 2626 + SdBrMt2St 2727 + SdBSwrAtSt 2828 + SnLvRolSt 2929 + Castanet 3030 + SdNm1St 3131 + Stick 3232 + BdFkSonSt 3333 + SdBsSt1-3 3434 + BdLoSt 3535 + BdHSonSt 3636 + SdClRmSt 3737 + SdSonSt1-4 3838 + ClapT9 3939 + SdLdwSt1-4 4040 + TomFlSt 4141 + HHClFtSt 4242 + TomLoSt 4343 + HHHlf2St 4444 + TomLoSt 4545 + HHOp2St 4646 + TomMdSt 4747 + TomMdSt 4848 + CrashSt 4949 + TomHiSt 5050 + RideSt 5151 + ChinaSt 5252 + CupSt 5353 + TambrnSw 5454 + SplashSt 5555 + Cowbell2 5656 + CrashRL 5757 + Vibraslap 5858 + RideRL 5959 + BongoHi1-2 6060 + BongoLo1-3 6161 + CongaTip 6262 + CongaOp 6363 + TumbaOp 6464 + TmbaleH1-3 6565 + TmbaleL1-3 6666 + AgogoHi 6767 + AgogoLo 6868 + Cabasa1-2 6969 + MaracasSlr 7070 + Whistle 7171 + Whistle 7272 + GuiroShort 7373 + GuiroLong 7474 + Clave 7575 + WoodBlock 7676 + WoodBlock 7777 + CuicaHi 7878 + CuicaLo 7979 + TriangleMt 8080 + TriangleOp 8181 + Shaker1-2 8282 + SleighBel 8383 + BellTree 8484 + SdBlL1-3 8585 + SdLdwSt1-4 8686 + SdBhR1-3 8787 + SdHipSt1-2 8888 + BdLoSt 8989 + SdLdwHMono 9090 + BdR&B1 9191 + SdHeavy 9292 + BdRoom1 9393 + SdAmb 9494 + BdFkSonSt 9595 + BdRoom2 9696 + + + + Clave 2424 + SdBrMtSt 2525 + SdBrSwrSt 2626 + SdBrMt2St 2727 + SdBSwrAtSt 2828 + SnLvRolSt 2929 + Castanet 3030 + SdNm1St 3131 + Stick 3232 + BdFkSt1-2 3333 + SdBsSt2-3 3434 + BdHiSt 3535 + BdNmSt1-2 3636 + SdClRmSt 3737 + SdNmSt1-4 3838 + ClapT9 3939 + SdBsSt1-2 4040 + TomFlSt 4141 + HHClSt1-4 4242 + TomLoSt 4343 + HHPdlSt 4444 + TomLoSt 4545 + HHOpSt 4646 + TomMdSt 4747 + TomMdSt 4848 + CrashSt 4949 + TomHiSt 5050 + RideSt 5151 + ChinaSt 5252 + CupSt 5353 + TambrnSw 5454 + SplashSt 5555 + Cowbell2 5656 + CrashRL 5757 + Vibraslap 5858 + RideRL 5959 + BongoHi1-2 6060 + BongoLo1-3 6161 + CongaTip 6262 + CongaOp 6363 + TumbaOp 6464 + TmbaleH1-3 6565 + TmbaleL1-3 6666 + AgogoHi 6767 + AgogoLo 6868 + Cabasa1-2 6969 + MaracasSlr 7070 + Whistle 7171 + Whistle 7272 + GuiroShort 7373 + GuiroLong 7474 + Clave 7575 + WoodBlock 7676 + WoodBlock 7777 + CuicaHi 7878 + CuicaLo 7979 + TriangleMt 8080 + TriangleOp 8181 + Shaker1-2 8282 + SleighBel 8383 + BellTree 8484 + SdBlL1-3 8585 + SdLdwSt1-4 8686 + SdBhR1-3 8787 + SdHipSt1-2 8888 + BdLoSt 8989 + SdLdwHMono 9090 + BdR&B1 9191 + SdHeavy 9292 + BdRoom1 9393 + SdAmb 9494 + BdFkSonSt 9595 + BdRoom2 9696 + + + + AnaClick 2424 + SdBrMtSt 2525 + SdBrSwrSt 2626 + SdBrMt2St 2727 + SdBSwrAtSt 2828 + SdRkRolSt 2929 + Castanet 3030 + SdRkOp1St 3131 + Stick 3232 + BdNmSt1-2 3333 + SdRkRim1St 3434 + BdHiSt 3535 + BdRk1St 3636 + SdRkStk1St 3737 + SdRkOp1St 3838 + HandClapSt 3939 + SdRkMte1St 4040 + TomRkLoSt 4141 + HHClRkStSw 4242 + TomRkLoSt 4343 + HHPdRkStSw 4444 + TomRkMdSt 4545 + HHOpRkStSw 4646 + TomRkMdSt 4747 + TomRkHiSt 4848 + CrashSt 4949 + TomRkHiSt 5050 + RideSt 5151 + ChinaSt 5252 + CupSt 5353 + TambrnRX5 5454 + SplashSt 5555 + Cowbel1 5656 + CrashSt 5757 + Vibraslap 5858 + RideSt 5959 + BongoHi1-2 6060 + BongoLo1-3 6161 + CongaTip 6262 + CongaSlp 6363 + CongaOp 6464 + TmbaleH1-3 6565 + TmbaleL1-3 6666 + AgogoHi 6767 + AgogoLo 6868 + Cabasa1-2 6969 + MaracasSlr 7070 + Whistle 7171 + Whistle 7272 + GuiroShort 7373 + GuiroLong 7474 + Clave 7575 + WoodBlock 7676 + WoodBlock 7777 + CuicaHi 7878 + CuicaLo 7979 + TriangleMt 8080 + TriangleOp 8181 + Shaker1-2 8282 + SleighBel 8383 + BellTree 8484 + SdRkFlmSt 8585 + SdRkOp2St 8686 + SdRkRim2St 8787 + SdRkMte2St 8888 + BdFk1St 8989 + SdRkRolDSt 9090 + BdHSonSt 9191 + SdLdwSt1-4 9292 + BdFkSonSt 9393 + SdSon3St 9494 + BdFkR1-2 9595 + BdHSonSt 9696 + + + + AnaClick 2424 + SdBrMtSt 2525 + SdBrSwrSt 2626 + SdBrMt2St 2727 + SdBSwrAtSt 2828 + SdRkRolSt 2929 + Castanet 3030 + SdRkOp2St 3131 + Stick 3232 + BdLoSt 3333 + SdRkRim2St 3434 + BdNm2St 3535 + BdRk2St 3636 + SdRkStk2St 3737 + SdRkOp2St 3838 + HandClapSt 3939 + SdRkMte2St 4040 + TomRkLoSt 4141 + HHClRk2St 4242 + TomRkLoSt 4343 + HHHfOpRkSt 4444 + TomRkMdSt 4545 + HHOpRkSt 4646 + TomRkMdSt 4747 + TomRkHiSt 4848 + CrashSt 4949 + TomRkHiSt 5050 + RideSt 5151 + ChinaSt 5252 + CupSt 5353 + TambrnRX5 5454 + SplashSt 5555 + Cowbel1 5656 + CrashSt 5757 + Vibraslap 5858 + RideSt 5959 + BongoHi1-2 6060 + BongoLo1-3 6161 + CongaTip 6262 + CongaSlp 6363 + CongaOp 6464 + TmbaleH1-3 6565 + TmbaleL1-3 6666 + AgogoHi 6767 + AgogoLo 6868 + Cabasa1-2 6969 + MaracasSlr 7070 + Whistle 7171 + Whistle 7272 + GuiroShort 7373 + GuiroLong 7474 + Clave 7575 + WoodBlock 7676 + WoodBlock 7777 + CuicaHi 7878 + CuicaLo 7979 + TriangleMt 8080 + TriangleOp 8181 + Shaker1-2 8282 + SleighBel 8383 + BellTree 8484 + SdRkFlmSt 8585 + SdRkOp1St 8686 + SdRkRim1St 8787 + SdRkMte1St 8888 + BdRk1St 8989 + SdRkRolDSt 9090 + BdFk2St 9191 + SdLdwSt1-4 9292 + BdHiSt 9393 + SdSon4St 9494 + BdLSonSt 9595 + BdRk1St 9696 + + + + AnaClick 2424 + SdBrMtL 2525 + SdBrSwrL 2626 + SdBrMt2L 2727 + SdBrSwrAtL 2828 + SnLvRolL 2929 + Castanet 3030 + SdLdwL1-4 3131 + Stick 3232 + BdDry1 3333 + SdBh3R 3434 + BdNm2R 3535 + BdRoom3 3636 + SdClRim2 3737 + SdSon3L 3838 + HandClapL 3939 + SdSon4R 4040 + TomFlL 4141 + HHClRk2R 4242 + TomLoL 4343 + HHPdlRkR 4444 + TomMdL 4545 + HHOpRkR 4646 + TomMdL 4747 + TomHiR 4848 + CrashL 4949 + TomHiR 5050 + RideMono 5151 + ChinaSt 5252 + CupMono2 5353 + TambrnSw 5454 + SplashR 5555 + Cowbel1 5656 + CrashL 5757 + Vibraslap 5858 + RideMono 5959 + BongoHi1-2 6060 + BongoLo1-3 6161 + CongaTip 6262 + CongaSlp 6363 + CongaOp 6464 + TmbaleH1-3 6565 + TmbaleL1-3 6666 + AgogoHi 6767 + AgogoLo 6868 + Cabasa1-2 6969 + MaracasSlr 7070 + Whistle 7171 + Whistle 7272 + GuiroShort 7373 + GuiroLong 7474 + Clave 7575 + WoodBlock 7676 + WoodBlock 7777 + CuicaHi 7878 + CuicaLo 7979 + TriangleMt 8080 + TriangleOp 8181 + Shaker1-2 8282 + SleighBel 8383 + BellTree 8484 + SdClRmR 8585 + SdHeavy 8686 + SdRkRim1R 8787 + SdLdwHMono 8888 + BdRk2L 8989 + SdHipR1-2 9090 + BdBreakHrd 9191 + SdLdw4R 9292 + BdHiL 9393 + SdBhR1-3 9494 + BdFkHL 9595 + BdFkSonL 9696 + + + + SdHpStk2 2424 + VoxHitRev 2525 + TurnTable 2626 + HitBrass 2727 + ScratchSdR 2828 + SnLvRolR 2929 + ClaveT8 3030 + SdHip2R 3131 + SdHpStk6R 3232 + BdHipDp 3333 + SdDodgL 3434 + BdT8-3 3535 + BdT8-2 3636 + SdHpStk2 3737 + SdClpAna 3838 + HandClapR 3939 + SdR&B2 4040 + TomT8 4141 + HHClT8-1 4242 + TomT8 4343 + HHOpT8-1 4444 + TomT8 4545 + HHOpT8-1 4646 + TomT8 4747 + TomT8 4848 + Crash2 4949 + TomT8 5050 + RideR 5151 + CrashT8 5252 + RideT9 5353 + TambrnRX5 5454 + SplashR 5555 + MamboBdy 5656 + CrashT9 5757 + Vibraslap 5858 + RideT9 5959 + BongoHi1-2 6060 + BongoLo1-3 6161 + CongaTip 6262 + CongaSlp 6363 + CongaOp 6464 + TmbaleH1-3 6565 + TmbaleL1-3 6666 + AgogoLo 6767 + AgogoHi 6868 + ShakerHip1 6969 + MarcsT8 7070 + Whistle 7171 + Whistle 7272 + GuiroShort 7373 + GuiroLong 7474 + ClaveT8 7575 + WoodBlock 7676 + WoodBlock 7777 + CuicaHi 7878 + CuicaLo 7979 + TriangleMt 8080 + TriangleOp 8181 + AnaShaker 8282 + SleighBel 8383 + BellTree 8484 + SdHipStk8 8585 + SdJngl3 8686 + HandClapR 8787 + SdHipRm5 8888 + Scratch H 8989 + Scratch L 9090 + ScratchDwn 9191 + ScratchHiR 9292 + ScratchBdF 9393 + ScratchCmb 9494 + ScratchVoR 9595 + BdBreak2 9696 + + + + BdT8-3 2424 + SdT8Rim 2525 + SdHip1 2626 + ClapT9 2727 + SdSyn 2828 + SnLvRolR 2929 + SdHpStk4 3030 + DjembeEd 3131 + SdHpStk6St 3232 + BdT8-1 3333 + SdR&B1Rm 3434 + BdBreakHvy 3535 + BdHipDp 3636 + SdT8-4 3737 + SdHip3 3838 + HandClapSt 3939 + SdLofi 4040 + TomFlR 4141 + HHClLoFi 4242 + TomLoL 4343 + HHClBreak 4444 + TomLoL 4545 + HHOpLoFi 4646 + TomLoL 4747 + TomHiL 4848 + Crash 4949 + TomHiL 5050 + RideT9 5151 + China 5252 + CupMono 5353 + TambrnRX5 5454 + Crash 5555 + CowBelRX11 5656 + CrashR 5757 + CowBelT8 5858 + RideT9 5959 + BongoHi1 6060 + BongoLo1-3 6161 + CongaTip 6262 + CongaSlp 6363 + CongaOp 6464 + RadioNz 6565 + RadioNz 6666 + AgogoLo 6767 + AgogoLo 6868 + Cabasa1 6969 + MarcsT8 7070 + FxGun2 7171 + FxGun1 7272 + ScratchSpn 7373 + ScratchStp 7474 + ClaveT8 7575 + DoorSqk 7676 + HiQ2 7777 + ScratchBdF 7878 + ScratchBdR 7979 + TriangleMt 8080 + TriangleOp 8181 + AnaShaker 8282 + TambrnHit 8383 + BellTree 8484 + SdHuman2 8585 + SdBreakRol 8686 + StabHard 8787 + SdJngl1 8888 + BdRk1St 8989 + ScratchDwn 9090 + Wataiko 9191 + HH Hit 9292 + StabOrgan2 9393 + Sonar1 9494 + TurnTable 9595 + Police 9696 + + + + SdHipRm4 2424 + HiQ1 2525 + TurnTable 2626 + HitOrch1 2727 + ScratchBdR 2828 + SnLvRolR 2929 + AnaClick 3030 + SdHipRm3 3131 + SdAnCRRim 3232 + BdHipDp 3333 + SdAnSmRim 3434 + BdT8-3 3535 + BdT8-2 3636 + SdT8Rim 3737 + SdHpStk1 3838 + HandClapR 3939 + SdHpStk2 4040 + TomT8 4141 + HHClT8-1 4242 + TomT8 4343 + HHOpT8-1 4444 + TomT8 4545 + HHOpT8-1 4646 + TomT8 4747 + TomT8 4848 + Crash2 4949 + TomT8 5050 + RideR 5151 + CrashT8 5252 + RideT9 5353 + TambrnRX5 5454 + SplashR 5555 + MamboBdy 5656 + CrashT9 5757 + Vibraslap 5858 + RideT9 5959 + BongoHi1-2 6060 + BongoLo1-3 6161 + CongaTip 6262 + CongaSlp 6363 + CongaOp 6464 + TmbaleH1-3 6565 + TmbaleL1-3 6666 + AgogoHi 6767 + AgogoLo 6868 + ShakerHip1 6969 + MaracasSlr 7070 + Whistle 7171 + Whistle 7272 + GuiroShort 7373 + GuiroLong 7474 + Clave 7575 + WoodBlock 7676 + WoodBlock 7777 + CuicaHi 7878 + CuicaLo 7979 + TriangleMt 8080 + TriangleOp 8181 + Shaker1-2 8282 + SleighBel 8383 + BellTree 8484 + SdAnSm 8585 + SdClRim3 8686 + AnaClick 8787 + SdClRim2 8888 + Scratch H 8989 + Scratch L 9090 + ScratchDwn 9191 + ScratchHiR 9292 + ScratchBdF 9393 + ScratchCmb 9494 + ScratchVoR 9595 + BdJngl2 9696 + + + + ClaveT8 2424 + SdT9-5 2525 + TurnTable 2626 + Quiek 2727 + ScratchCb3 2828 + SnLvRolL 2929 + AnaClick 3030 + SdT9Gate 3131 + SdRimSE 3232 + BdT9-3 3333 + SdT9-3 3434 + BdT9-2 3535 + BdT9-1 3636 + SdT9Rim 3737 + SdT9-5 3838 + ClapT9 3939 + SdT9-4 4040 + TomT9Lo 4141 + HHClT9 4242 + TomT9Lo 4343 + HHOpT9 4444 + TomT9Lo 4545 + HHOpT9 4646 + TomT9Lo 4747 + TomT9Hi 4848 + CrashT9 4949 + TomT9Hi 5050 + RideT9 5151 + CrashT9 5252 + RideT9 5353 + TambrnRX5 5454 + CrashT9 5555 + CowBelAnCR 5656 + CrashT9 5757 + Vibraslap 5858 + RideT9 5959 + BongoHi1-2 6060 + BongoLo1-3 6161 + CongaTip 6262 + CongaSlp 6363 + CongaOp 6464 + TmbaleH1-3 6565 + TmbaleL1-3 6666 + AgogoHi 6767 + AgogoLo 6868 + Cabasa1-2 6969 + MaracasSlr 7070 + Whistle 7171 + Whistle 7272 + GuiroShort 7373 + GuiroLong 7474 + Clave 7575 + WoodBlock 7676 + WoodBlock 7777 + CuicaHi 7878 + CuicaLo 7979 + TriangleMt 8080 + TriangleOp 8181 + Shaker1-2 8282 + SleighBel 8383 + BellTree 8484 + SdT9Rim 8585 + SdT9Gate 8686 + HandClapSt 8787 + SdT9-5 8888 + Scratch H 8989 + Scratch L 9090 + ScratchDwn 9191 + ScratchHiF 9292 + ScratchHiR 9393 + ScratchLoF 9494 + ScratchLoR 9595 + BdT9Hd1 9696 + + + + BdT9Hd3 2424 + SdAnCR 2525 + SdAnSmRim 2626 + SdClpAna 2727 + SdT9Gate 2828 + SdRollMono 2929 + SdTimber 3030 + SdFMRim 3131 + SdJnglFx 3232 + BdVar1 3333 + SdHipRm1 3434 + BdT8-2 3535 + BdZapMid 3636 + SdT8Rim 3737 + SdHipRm2 3838 + HandClapSt 3939 + SdAnCR 4040 + BdT8-3 4141 + HHClT8-2 4242 + BdT8-3 4343 + HHClAnCR 4444 + BdT8-3 4545 + HHOpT8-2 4646 + BdT8-3 4747 + BdT8-3 4848 + Crash 4949 + BdT8-3 5050 + RideT9 5151 + China 5252 + CupMono 5353 + TambrnHit 5454 + Crash 5555 + Cowbel1 5656 + CrashT9 5757 + CowBelT8 5858 + RideSt 5959 + BongoHi1 6060 + BongoLo1-3 6161 + CongaTip 6262 + CongaSlp 6363 + CongaOp 6464 + HiQ1 6565 + HiQ1 6666 + AgogoLo 6767 + AgogoLo 6868 + AnaShaker 6969 + MaracasSlr 7070 + VoxDrum 7171 + VoxDrum 7272 + HiQ1 7373 + HiQ2 7474 + ClaveT8 7575 + HiQ1 7676 + ScratchSpn 7777 + ScratchHiR 7878 + ScratchHiF 7979 + TriangleMt 8080 + TriangleOp 8181 + Shaker2 8282 + TambrnHit 8383 + BellTree 8484 + SdBreakRol 8585 + Mother 8686 + VoxBell 8787 + SdR&B1 8888 + VoxAlk 8989 + Udo Hi 9090 + TranCho 9191 + Swarm 9292 + BdPop 9393 + SdR&B1Rm 9494 + BdR&B2 9595 + Crash 9696 + + + + BdRoom1 2424 + AnaClick 2525 + PlayFxABa4 2626 + SdHpStk4 2727 + QuintTip 2828 + PickNoise1 2929 + SdT9Rim 3030 + SdNmSt1-4 3131 + SdR&B1Rm 3232 + BdNmSt1-2 3333 + SdFk3R 3434 + BdT8-3 3535 + BdR&B1 3636 + SdClRim3 3737 + SdPcRim 3838 + HandClapSt 3939 + SdR&B1Rm 4040 + BdT8-3 4141 + HHClT8-2 4242 + BdT8-3 4343 + HHClT8-1 4444 + BdT8-3 4545 + HHOpT8-2 4646 + BdT8-3 4747 + TomT8 4848 + CrashSt 4949 + TomT8 5050 + RideSt 5151 + ChinaSt 5252 + CupSt 5353 + TambrnSw 5454 + Crash 5555 + Cowbel1 5656 + CrashT9 5757 + CowBelT8 5858 + RideSt 5959 + BongoHi1 6060 + BongoLo1-3 6161 + CongaTip 6262 + CongaSlp 6363 + CongaOp 6464 + HiQ1 6565 + HiQ1 6666 + AgogoLo 6767 + AnaShaker 6868 + AnaShaker 6969 + MaracasSlr 7070 + VoxDrum 7171 + VoxDrum 7272 + HiQ1 7373 + HiQ2 7474 + ClaveT8 7575 + HiQ1 7676 + ScratchSpn 7777 + ScratchHiR 7878 + ScratchHiF 7979 + TriangleMt 8080 + TriangleOp 8181 + Shaker2 8282 + TambrnHit 8383 + BellTree 8484 + SdLofi 8585 + SdRkStk2St 8686 + SdPicol 8787 + SdR&B2 8888 + BdR&B2 8989 + SdFM 9090 + BdHipDp 9191 + SdHammer 9292 + BdSlimy 9393 + HHHit 9494 + BdT8-3 9595 + TurnTable 9696 + + + + BdT9-2 2424 + SdAnCR 2525 + SdT9-5 2626 + ClapAnSm 2727 + SdT9Gate 2828 + SdRkRolSt 2929 + SdT9-3 3030 + SdT9-4 3131 + SdT9Gate 3232 + BdT9-4 3333 + SdT9-5 3434 + BdT9-1 3535 + BdT9-3 3636 + SdT9Rim 3737 + SdT9-1 3838 + ClapT9 3939 + SdT9-2 4040 + TomT9Lo 4141 + HHClT9 4242 + TomT9Lo 4343 + HHOpT9 4444 + TomT9Lo 4545 + HHOpT9 4646 + TomT9Hi 4747 + TomT9Hi 4848 + CrashT9 4949 + TomT9Hi 5050 + RideT9 5151 + China 5252 + CupMono 5353 + TambrnRX5 5454 + Crash 5555 + Cowbel1 5656 + Crash2 5757 + CowBelT8 5858 + RideR 5959 + CongaT8 6060 + CongaT8 6161 + CongaTip 6262 + CongaSlp 6363 + CongaOp 6464 + TmbaleH1-3 6565 + TmbaleL1-3 6666 + AnaClick 6767 + CongaT8 6868 + Cabasa1-2 6969 + MaracasSlr 7070 + FxGun2 7171 + FxGun1 7272 + ScratchH 7373 + ScratchDwn 7474 + HiQ1 7575 + HiQ1 7676 + HiQ2 7777 + ScratchL 7878 + ScratchL 7979 + TriangleMt 8080 + TriangleOp 8181 + AnaShaker 8282 + SleighBel 8383 + BellTree 8484 + SdPicol 8585 + SdT8-5 8686 + SdRkRolDSt 8787 + SdBrMt2St 8888 + BdBlpHd 8989 + SdJngl1 9090 + BdSus 9191 + SdD&B1 9292 + BdBreak2 9393 + SdDist 9494 + BdTekPower 9595 + BdDistRM 9696 + + + + BdT8-1 2424 + SdAnCR 2525 + SdT8-4 2626 + SdClpAna 2727 + SdT8-3 2828 + TomT8 2929 + SdT8-5 3030 + BdT8-3 3131 + SdT8-4 3232 + BdT8-2 3333 + SdT8-3 3434 + T8KickBass 3535 + BdT8-1 3636 + SdT8Rim 3737 + SdT8-2 3838 + ClapT9 3939 + SdT8-1 4040 + TomT8 4141 + HHClT8-2 4242 + TomT8 4343 + HHOpT8-1 4444 + TomT8 4545 + HHOpT8-1 4646 + TomT8 4747 + TomT8 4848 + CrashT8 4949 + TomT8 5050 + RideT9 5151 + China 5252 + CupMono 5353 + TambrnRX5 5454 + SplashR 5555 + CowBelT8 5656 + Crash2 5757 + Vibraslap 5858 + RideR 5959 + CongaT8 6060 + CongaT8 6161 + CongaT8 6262 + CongaT8 6363 + CongaT8 6464 + TimbaleHi1 6565 + TimbaleLo1 6666 + Glass 6767 + Glass 6868 + Cabasa1-2 6969 + MarcsT8 7070 + FxGun2 7171 + FxGun1 7272 + AnaShaker 7373 + AnaShaker 7474 + ClaveT8 7575 + HiQ1 7676 + HiQ2 7777 + Scratch L 7878 + Scratch L 7979 + TriangleMt 8080 + TriangleOp 8181 + AnaShaker 8282 + SleighBel 8383 + BellTree 8484 + SdHip1 8585 + SdHip2 8686 + SdHipGate 8787 + SdBreak1 8888 + BdBlip 8989 + SdFx1 9090 + BdFxHmr 9191 + SdHammer 9292 + BdZapHrd 9393 + SdDodgL 9494 + BdTekPower 9595 + BdSlimy 9696 + + + + BdSlimy 2424 + SdT9Rim 2525 + SdT8-5 2626 + ClapT9 2727 + SdT9-3 2828 + SdHuman1 2929 + SdHip3 3030 + SdT9-4 3131 + SdHip2 3232 + BdThkSkn 3333 + SdT9-2 3434 + BdDist4 3535 + BdZapMid 3636 + SdT8Rim 3737 + SdT8-5 3838 + ClapT9 3939 + SdSyn 4040 + TomT8 4141 + HHClLoFi 4242 + TomT8 4343 + HHOpLoFi 4444 + TomT8 4545 + HHOpLoFi 4646 + TomT8 4747 + TomT8 4848 + CrashT8 4949 + TomT8 5050 + RideT9 5151 + Crash 5252 + CupMono 5353 + TambrnAnCR 5454 + CrashL 5555 + CowBelT8 5656 + CrashT9 5757 + CowBelT8 5858 + CrashSyn 5959 + CongaT8 6060 + CongaT8 6161 + CongaT8 6262 + CongaT8 6363 + CongaT8 6464 + TmbaleH1-3 6565 + TmbaleL1-3 6666 + Glass 6767 + Glass 6868 + Cabasa1 6969 + MarcsT8 7070 + FxGun2 7171 + FxGun1 7272 + Scratch H 7373 + ScratchDwn 7474 + HiQ1 7575 + HiQ1 7676 + HiQ2 7777 + Scratch L 7878 + Scratch L 7979 + TriangleMt 8080 + TriangleOp 8181 + AnaShaker 8282 + SleighBel 8383 + BellTree 8484 + DjembeEd 8585 + Wataiko 8686 + StabHard 8787 + HitOrch1 8888 + StabOrgan2 8989 + ScratchDwn 9090 + BdRk1St 9191 + HH Hit 9292 + Wataiko 9393 + Sonar1 9494 + TurnTable 9595 + Police 9696 + + + + BdT9-4 2424 + SdT8Rim 2525 + SdT8-5 2626 + HandClapSt 2727 + SdDodgL 2828 + SnLvRolSt 2929 + SdT9-3 3030 + SdT8-1 3131 + SdT9-5 3232 + BdT9-1 3333 + SdT9Gate 3434 + BdT9-2 3535 + BdT9-3 3636 + SdT9Rim 3737 + SdT9-1 3838 + ClapT9 3939 + SdT9-2 4040 + TomT9Lo 4141 + HHClT8-1 4242 + TomT9Lo 4343 + HHOpT9 4444 + TomT9Lo 4545 + HHOpT9 4646 + TomT9Hi 4747 + TomT9Hi 4848 + CrashT9 4949 + TomT9Hi 5050 + RideT9 5151 + Crash 5252 + CupMono 5353 + TambrnHit 5454 + Crash 5555 + Cowbel1 5656 + CrashSt 5757 + CowBelT8 5858 + RideSt 5959 + BongoHi1 6060 + BongoLo1-3 6161 + CongaTip 6262 + CongaSlp 6363 + CongaOp 6464 + TimbaleHi1 6565 + TimbaleHi1 6666 + AgogoLo 6767 + AgogoLo 6868 + Cabasa1 6969 + MaracasSlr 7070 + VoxDrum 7171 + VoxDrum 7272 + GuiroShort 7373 + GuiroLong 7474 + Clave 7575 + WoodBlock 7676 + WoodBlock 7777 + CuicaHi 7878 + CuicaLo 7979 + TriangleMt 8080 + TriangleOp 8181 + AnaShaker 8282 + SleighBel 8383 + BellTree 8484 + SdBreakRol 8585 + Mother 8686 + VoxBell 8787 + SdR&B1 8888 + VoxAlk 8989 + Udo Hi 9090 + TranCho 9191 + Swarm 9292 + BdPop 9393 + SdR&B1Rm 9494 + BdR&B2 9595 + Crash 9696 + + + + BdT9-2 2424 + SdT8Rim 2525 + PlayFxABa8 2626 + ClapT9 2727 + SdT9-2 2828 + SdT9Gate 2929 + SdHuman2 3030 + SdFx1 3131 + SdLofi 3232 + BdT9Hd2 3333 + SdT9Rim 3434 + BdT9-3 3535 + BdT9Hd1 3636 + SdT9Rim 3737 + SdWood 3838 + NzBurst 3939 + Zap2 4040 + SdSyn 4141 + HHClT9 4242 + SdSyn 4343 + HHOpT9 4444 + SdSyn 4545 + HHOpT9 4646 + SdSyn 4747 + SdSyn 4848 + CrashT9 4949 + SdSyn 5050 + RideT9 5151 + CrashSyn 5252 + CupMono 5353 + TambrnHit 5454 + CrashT8 5555 + Cowbel1 5656 + Crash 5757 + CowBelT8 5858 + RideSt 5959 + BongoHi1 6060 + BongoLo1-3 6161 + CongaHeel 6262 + CongaSlp 6363 + CongaOp 6464 + TomSyn1 6565 + TomSyn1 6666 + AnaClick 6767 + SdRimSE 6868 + Cabasa1 6969 + MaracasSlr 7070 + VoxDrum 7171 + VoxDrum 7272 + TambrnAnCR 7373 + AnaShaker 7474 + ClaveT8 7575 + TambrnRX5 7676 + CowBelRX11 7777 + AnaShaker 7878 + ScratchHiF 7979 + TriangleMt 8080 + TriangleOp 8181 + AnaShaker 8282 + SleighBel 8383 + BellTree 8484 + TabraBya 8585 + TabraNah 8686 + TablaMut 8787 + VoxBell 8888 + BdPop 8989 + Udo Hi 9090 + BdFXGate 9191 + Mother 9292 + BdT9-1 9393 + SdBreakRol 9494 + Crash 9595 + TurnTable 9696 + + + + BdFXGate 2424 + BongoLo2 2525 + SdGM 2626 + HandClapSt 2727 + SdGate2 2828 + SdRkRolSt 2929 + SdRkRim1St 3030 + SdPicol 3131 + SdRkFlmSt 3232 + BdRoom2 3333 + SdRkStk1St 3434 + BdRoom3 3535 + BdGate 3636 + SdMdRim 3737 + SdGate1 3838 + ClapAnSm 3939 + SdAmb 4040 + TomAmbLo 4141 + HHClD&B 4242 + TomAmbLo 4343 + HHPdlD&B 4444 + TomAmbLo 4545 + HHOpD&B 4646 + TomAmbHi 4747 + TomAmbHi 4848 + CrashSt 4949 + TomAmbHi 5050 + RideSt 5151 + ChinaSt 5252 + CupMono 5353 + TambrnHit 5454 + Crash 5555 + Cowbel1 5656 + CrashSt 5757 + Vibraslap 5858 + RideSt 5959 + BongoHi1 6060 + BongoLo1-3 6161 + CongaTip 6262 + CongaSlp 6363 + CongaOp 6464 + Bd+HH 6565 + Bd+HH 6666 + AgogoLo 6767 + AgogoLo 6868 + Cabasa1 6969 + MaracasSlr 7070 + FxGun2 7171 + FxGun1 7272 + Scratch H 7373 + ScratchDwn 7474 + Clave 7575 + WoodBlock 7676 + WoodBlock 7777 + Scratch L 7878 + Scratch L 7979 + TriangleMt 8080 + TriangleOp 8181 + Shaker2 8282 + SleighBel 8383 + BellTree 8484 + SdDist 8585 + SdFM 8686 + SdFMRim 8787 + SdClappy 8888 + BdRoom3 8989 + SdTimber 9090 + BdRk1St 9191 + SdRimSE 9292 + BdRk2St 9393 + SdBreakRol 9494 + BdD&B1 9595 + BdRoom2 9696 + + + + BdBrkDp 2424 + SdHip1St 2525 + SdLofi 2626 + SdClappy 2727 + SdLdwHMono 2828 + SdRkRolDSt 2929 + SdGate1 3030 + SdMid 3131 + SdBrRim 3232 + BdBreakHvy 3333 + SdHipRm4 3434 + BdBreak2 3535 + BdBreak1 3636 + SdHipRm1 3737 + SdBreak3 3838 + SdBreak1 3939 + SdBreak2 4040 + TomLoSt 4141 + HHClRkSR 4242 + TomLoSt 4343 + HHPdlRkR 4444 + TomLoSt 4545 + HHHlfOpRkR 4646 + TomHiSt 4747 + TomHiSt 4848 + CrashL 4949 + TomHiSt 5050 + RideL 5151 + ChinaL 5252 + CupMono 5353 + TambrnHit 5454 + Crash 5555 + Cowbel1 5656 + CrashR 5757 + CowBelRX11 5858 + RideMono 5959 + BongoHi1 6060 + BongoLo1-3 6161 + CongaTip 6262 + CongaSlp 6363 + CongaOp 6464 + BongoHi1-2 6565 + BongoLo1-3 6666 + CongaOp 6767 + AgogoLo 6868 + Cabasa1 6969 + MaracasSlr 7070 + TimbaleHi1 7171 + TimbaleLo1 7272 + Scratch H 7373 + ScratchDwn 7474 + Clave 7575 + WoodBlock 7676 + WoodBlock 7777 + Scratch L 7878 + Scratch L 7979 + TriangleMt 8080 + TriangleOp 8181 + Shaker2 8282 + SleighBel 8383 + TurnTable 8484 + SdBreakRol 8585 + Mother 8686 + Mind Bell 8787 + SdFx1 8888 + BdRk2St 8989 + LfoSeq 9090 + Ripper 9191 + NzBurst 9292 + Police 9393 + Fairwave 9494 + Swarm 9595 + RadioNz 9696 + + + + BdHipDp 2424 + BongoLo2 2525 + SdR&B2 2626 + SdTimber 2727 + SdD&B3 2828 + SdHammer 2929 + Glass 3030 + BdD&B2 3131 + HHPdlSt 3232 + BdHipDp 3333 + HHOp2St 3434 + BdD&B1 3535 + BdD&B2 3636 + SdMdRim 3737 + SdD&B1 3838 + NzBurst 3939 + SdD&B2 4040 + TomAmbLo 4141 + HHClD&B 4242 + TomAmbLo 4343 + HHPdlD&B 4444 + TomAmbLo 4545 + HHOpD&B 4646 + TomAmbHi 4747 + TomAmbHi 4848 + CrashL 4949 + TomAmbHi 5050 + RideSt 5151 + China 5252 + CupMono 5353 + TambrnHit 5454 + Crash 5555 + Cowbel1 5656 + CrashSt 5757 + Vibraslap 5858 + RideSt 5959 + BongoHi1 6060 + BongoLo1-3 6161 + CongaTip 6262 + CongaSlp 6363 + CongaOp 6464 + SdD&B4 6565 + HHRvD&B 6666 + AgogoLo 6767 + AgogoLo 6868 + Cabasa1 6969 + MaracasSlr 7070 + FxGun2 7171 + FxGun1 7272 + GuiroShort 7373 + GuiroLong 7474 + Clave 7575 + Sine 7676 + Sine 7777 + P50-1 7878 + PlyFxSl17S 7979 + TurnTable 8080 + TriangleOp 8181 + Shaker2 8282 + SleighBel 8383 + BellTree 8484 + SdDist 8585 + SdFM 8686 + SdFMRim 8787 + SdClappy 8888 + BdD&B1 8989 + SdTimber 9090 + BdDist5 9191 + SdRimSE 9292 + BdDist4 9393 + SdHip3 9494 + BdSlimy 9595 + Bd+HH 9696 + + + + BdATite 2424 + SdT8Rim 2525 + SdJngl3 2626 + HandClapSt 2727 + SdT8-1 2828 + SnLvRolSt 2929 + SdBhL1-3 3030 + SdBh3R 3131 + SdSonSt1-3 3232 + BdFkSt1-2 3333 + SdBsSt1-3 3434 + BdNm1R 3535 + BdFkHL 3636 + SdRkStk2R 3737 + SdLdwR1-4 3838 + ClapT9 3939 + SdLdwL1-4 4040 + TomT9Lo 4141 + HHClRkSR 4242 + TomT9Lo 4343 + HHClRk2R 4444 + TomT9Lo 4545 + HHHlfOpRkR 4646 + TomT9Hi 4747 + TomT9Hi 4848 + CrashL 4949 + TomT9Hi 5050 + RideR 5151 + Crash 5252 + CupL 5353 + TambrnHit 5454 + Crash 5555 + Cowbel1 5656 + CrashL 5757 + CowBelT8 5858 + RideMono 5959 + BongoHi1-2 6060 + BongoLo1-3 6161 + CongaTip 6262 + CongaSlp 6363 + CongaOp 6464 + TimbaleHi1 6565 + TimbaleHi1 6666 + AgogoHi 6767 + AgogoLo 6868 + Cabasa1 6969 + MaracasSlr 7070 + FxGun2 7171 + FxGun1 7272 + Scratch H 7373 + ScratchDwn 7474 + HiQ1 7575 + HiQ1 7676 + HiQ2 7777 + Scratch L 7878 + Scratch L 7979 + TriangleMt 8080 + TriangleOp 8181 + AnaShaker 8282 + SleighBel 8383 + BellTree 8484 + SdT9-5 8585 + SdT9-5 8686 + SdT9-5 8787 + SdT9-5 8888 + BdFkSt1-2 8989 + SdD&B1 9090 + BdHSonSt 9191 + SdHipGate 9292 + BdFXGate 9393 + SdBreak1 9494 + BdJngl1 9595 + BdBreakHvy 9696 + + + + BdJngl2 2424 + SdMdRim 2525 + SdJngl3 2626 + SdJngl3 2727 + SdPcRim 2828 + SdRollMono 2929 + SdWood 3030 + SdR&B2 3131 + SdD&B2 3232 + BdJngl2 3333 + SdJnglFx 3434 + BdJngl3 3535 + BdJngl1 3636 + SdHipRm4 3737 + SdJngl2 3838 + SdJnglFx 3939 + SdJngl1 4040 + TomFlL 4141 + HHClRkRSw 4242 + TomLoL 4343 + HHPdlRkRSw 4444 + TomMdR 4545 + HHOpRkRSw 4646 + TomMdR 4747 + TomHiR 4848 + CrashL 4949 + TomHiR 5050 + RideR 5151 + China 5252 + CupMono 5353 + TambrnHit 5454 + Crash 5555 + Cowbel1 5656 + CrashSt 5757 + Vibraslap 5858 + RideSt 5959 + BongoHi1 6060 + BongoLo1-3 6161 + CongaTip 6262 + CongaSlp 6363 + CongaOp 6464 + TabraNah 6565 + TabraBya 6666 + AgogoLo 6767 + AgogoLo 6868 + Cabasa1 6969 + MaracasSlr 7070 + TimbaleHi1 7171 + TimbaleLo1 7272 + GuiroShort 7373 + GuiroLong 7474 + Clave 7575 + WoodBlock 7676 + WoodBlock 7777 + CuicaHi 7878 + CuicaLo 7979 + TriangleMt 8080 + TriangleOp 8181 + Shaker2 8282 + SleighBel 8383 + BellTree 8484 + HHRvD&B 8585 + RainLoop 8686 + Scratch H 8787 + Scratch L 8888 + BdBlpHd 8989 + SdSyn 9090 + IndusTom 9191 + PandieroOp 9292 + Ripper 9393 + TelRing 9494 + ScratchLoR 9595 + TapeRewnd 9696 + + + + BdAnCR 2424 + BdBlip 2525 + SdT8-5 2626 + ClapAnSm 2727 + SdHipRm2 2828 + SdRollMono 2929 + SdT8-1 3030 + SdAnCR 3131 + SdT8-2 3232 + BdT8-1 3333 + SdT8-4 3434 + BdBlip 3535 + BdT8-2 3636 + SdT8Rim 3737 + SdT8-3 3838 + ClapT9 3939 + ClapAnSm 4040 + TomSyn2 4141 + HHClT8-2 4242 + TomSyn2 4343 + HHOpT8-1 4444 + TomSyn2 4545 + HHOpT8-2 4646 + TomSyn2 4747 + TomSyn2 4848 + CrashT9 4949 + TomSyn2 5050 + RideT9 5151 + Crash 5252 + CrashSyn 5353 + CrashT8 5454 + Crash 5555 + SdRimSE 5656 + CrashSt 5757 + CowBelT8 5858 + CrashSyn 5959 + TomT8 6060 + TomT8 6161 + TomT8 6262 + TomT8 6363 + TomT8 6464 + Applause 6565 + Telephone 6666 + Heartbeat 6767 + Bomb 6868 + HHOpLoFi 6969 + MaracasSlr 7070 + Zap2 7171 + Zap1 7272 + Scratch H 7373 + ScratchDwn 7474 + HiQ1 7575 + HiQ1 7676 + HiQ2 7777 + Scratch L 7878 + HitOrch2 7979 + HHClFx 8080 + HHOpFx 8181 + AnaShaker 8282 + AnaShaker 8383 + TurnTable 8484 + SdBreakRol 8585 + Mother 8686 + Mind Bell 8787 + SdFx1 8888 + BdRk2St 8989 + LfoSeq 9090 + Ripper 9191 + NzBurst 9292 + Police 9393 + Fairwave 9494 + Swarm 9595 + RadioNz 9696 + + + + BdHuman1 2424 + ScratchVoF 2525 + Hit Uhh 2626 + ScratchVoR 2727 + SdJnglFx 2828 + SdRkRolSt 2929 + SdBreak1 3030 + SdAnCR 3131 + SdT9-1 3232 + BdSus 3333 + SdHpStk1 3434 + BdHuman1 3535 + BdHuman2 3636 + SdWood 3737 + SdHuman1 3838 + SdDodgH 3939 + SdHuman2 4040 + BdHuman1 4141 + HHOpHuman 4242 + BdHuman1 4343 + HHOpHuman 4444 + BdHuman1 4545 + HHOpHuman 4646 + BdHuman1 4747 + BdHuman1 4848 + NzBurst 4949 + BdHuman1 5050 + CrashT8 5151 + China 5252 + CupMono 5353 + ScratchSdR 5454 + SplashSt 5555 + VoxDrum 5656 + Crash2 5757 + CowBelT8 5858 + StabAah 5959 + BongoHi1 6060 + BongoLo1-3 6161 + CongaTip 6262 + CongaSlp 6363 + CongaOp 6464 + TmbaleH1-3 6565 + TmbaleL1-3 6666 + AgogoLo 6767 + AgogoLo 6868 + Cabasa1 6969 + MaracasSlr 7070 + FxGun2 7171 + FxGun1 7272 + Scratch H 7373 + ScratchDwn 7474 + ScratchLoF 7575 + ScratchLoR 7676 + HiQ2 7777 + Scratch L 7878 + Scratch L 7979 + TriangleMt 8080 + TriangleOp 8181 + Shaker2 8282 + SleighBel 8383 + TurnTable 8484 + SdRkRim1R 8585 + Helicopter 8686 + StabHard 8787 + SdGate1 8888 + BdRk1St 8989 + ScratchDwn 9090 + BdAnSm 9191 + Sonar1 9292 + Wataiko 9393 + Wataiko 9494 + HH Hit 9595 + StabOrgan2 9696 + + + + BdDist3 2424 + SdWood 2525 + SdGate1 2626 + HandClapSt 2727 + SdGate2 2828 + SdRollMono 2929 + SdClpAna 3030 + SdHip3 3131 + Ripper 3232 + BdDistRM 3333 + SdT8Rim 3434 + BdDist2 3535 + BdDist1 3636 + SdMdRim 3737 + SdDist 3838 + NzBurst 3939 + SdFx2 4040 + TomDistLo 4141 + HHClT9 4242 + TomDistLo 4343 + HHOpT9 4444 + TomDistLo 4545 + HHOpT9 4646 + TomDistHi 4747 + TomDistHi 4848 + CrashT9 4949 + TomDistHi 5050 + RideT9 5151 + China 5252 + CupMono 5353 + TambrnAnCR 5454 + Crash 5555 + CowBelT8 5656 + CrashSt 5757 + Vibraslap 5858 + RideSt 5959 + SdTimber 6060 + SdTimber 6161 + CongaTip 6262 + CongaSlp 6363 + CongaOp 6464 + Bd+HH 6565 + Bd+HH 6666 + Glass 6767 + Glass 6868 + Cabasa1 6969 + MaracasSlr 7070 + FxGun2 7171 + FxGun1 7272 + Scratch H 7373 + ScratchDwn 7474 + HiQ1 7575 + HiQ1 7676 + HiQ2 7777 + Scratch L 7878 + Scratch L 7979 + TriangleMt 8080 + TriangleOp 8181 + AnaShaker 8282 + SleighBel 8383 + BellTree 8484 + SdDist 8585 + SdFM 8686 + SdFMRim 8787 + SdClappy 8888 + BdFxHmr 8989 + IndusTom 9090 + BdD&B1 9191 + IndusTom 9292 + BdRoom3 9393 + IndusTom 9494 + BdT9-4 9595 + SdHammer 9696 + + + + AnaClick 2424 + SdBrMtSt 2525 + SdBrSwrSt 2626 + SdBrMt2St 2727 + SdBSwrAtSt 2828 + SnLvRolSt 2929 + Castanet 3030 + SdNm1St 3131 + Stick 3232 + BdRk2R 3333 + SdLdw1St 3434 + BdBreak1 3535 + BdRk2R 3636 + SdRkStk2R 3737 + SdSon1L 3838 + HandClapL 3939 + SdPcRim 4040 + TomAmbLo 4141 + HHClRk2R 4242 + TomAmbLo 4343 + HHPdlRkR 4444 + TomAmbLo 4545 + HHOpRkR 4646 + TomAmbHi 4747 + TomAmbHi 4848 + CrashL 4949 + TomAmbHi 5050 + RideR 5151 + ChinaL 5252 + CupR 5353 + TambrnSw 5454 + SplashR 5555 + MamboBel 5656 + CrashL 5757 + Vibraslap 5858 + RideSt 5959 + BongoHi1-2 6060 + BongoLo1-3 6161 + CongaTip 6262 + CongaSlp 6363 + CongaOp 6464 + TmbaleH1-3 6565 + TmbaleL1-3 6666 + AgogoHi 6767 + AgogoLo 6868 + Cabasa1-2 6969 + MaracasSlr 7070 + Whistle 7171 + Whistle 7272 + GuiroShort 7373 + GuiroLong 7474 + Clave 7575 + WoodBlock 7676 + WoodBlock 7777 + ScratchCb2 7878 + ScratchHiR 7979 + TriangleMt 8080 + TriangleOp 8181 + Shaker1-2 8282 + SleighBel 8383 + BellTree 8484 + SdPicol 8585 + SdHeavy 8686 + SdClpAna 8787 + SdPcRim 8888 + BdRoom2 8989 + SdMid 9090 + BdRoom3 9191 + SdMdRim 9292 + BdGate 9393 + SdGate1 9494 + BdFXGate 9595 + BdD&B1 9696 + + + + BdBlip 2424 + HiQ2 2525 + SdPcRim2 2626 + HiQ1 2727 + SdAnCR 2828 + TomSyn1 2929 + HHClSyn 3030 + TomSyn1 3131 + HHClFx 3232 + TomSyn2 3333 + HHOpSyn 3434 + BdAnCR 3535 + BdT9-1 3636 + SdHpStk3 3737 + SdJngl1 3838 + ClapT9 3939 + SdJngl1 4040 + TomT8 4141 + HHClT8-2 4242 + TomT8 4343 + HHOpT8-1 4444 + TomT8 4545 + HHOpT8-2 4646 + TomT8 4747 + TomT8 4848 + CrashSyn 4949 + TomT8 5050 + RideT9 5151 + Crash 5252 + CupMono 5353 + TambrnHit 5454 + Crash 5555 + CowBelT8 5656 + CrashSt 5757 + Vibraslap 5858 + RideSt 5959 + BongoHi1 6060 + BongoLo1-3 6161 + CongaTip 6262 + CongaSlp 6363 + CongaOp 6464 + TmbaleH1-3 6565 + TmbaleL1-3 6666 + Glass 6767 + Glass 6868 + Cabasa1 6969 + MarcsT8 7070 + Bird 7171 + Stream 7272 + Thunder 7373 + Gunshot 7474 + ClaveT8 7575 + WoodBlock 7676 + WoodBlock 7777 + TambrnAnCR 7878 + CowBelAnCR 7979 + TriangleMt 8080 + TriangleOp 8181 + AnaShaker 8282 + SleighBel 8383 + BellTree 8484 + SdT8-5 8585 + Sonar1 8686 + SdT8-5 8787 + Resonator 8888 + Bubble 8989 + SdT8-5 9090 + Bubble 9191 + SdT8-5 9292 + Eery 9393 + SdT8-5 9494 + WindChime 9595 + WindChime 9696 + + + + BdRoom2 2424 + SdBrMtR 2525 + SdBSwrAtSt 2626 + SdBrMt2St 2727 + SdBSwrAtSt 2828 + SnLvRolSt 2929 + Castanet 3030 + SdHip1St 3131 + Stick 3232 + BdFkML 3333 + SdRkStk2St 3434 + BdFkSonSt 3535 + BdFkSt1-2 3636 + SdClRmSt 3737 + SdLdw1St 3838 + HandClapSt 3939 + SdBhSt1-3 4040 + TomFlSt 4141 + HHClFtSt 4242 + TomFlSt 4343 + HHPdlSt 4444 + TomLoSt 4545 + HHOp2St 4646 + TomMdSt 4747 + TomMdSt 4848 + CrashSt 4949 + TomHiSt 5050 + RideSt 5151 + ChinaSt 5252 + CupSt 5353 + TambrnHit 5454 + SplashSt 5555 + Cowbel1 5656 + CrashSt 5757 + Vibraslap 5858 + RideSt 5959 + BongoHi1 6060 + BongoLo1-3 6161 + CongaTip 6262 + CongaSlp 6363 + CongaOp 6464 + TimbaleHi1 6565 + TimbaleHi1 6666 + AgogoLo 6767 + AgogoLo 6868 + Cabasa1 6969 + MaracasSlr 7070 + SdBrSwrSt 7171 + SdBrSwrSt 7272 + GuiroShort 7373 + GuiroLong 7474 + Clave 7575 + WoodBlock 7676 + WoodBlock 7777 + CuicaHi 7878 + CuicaLo 7979 + TriangleMt 8080 + TriangleOp 8181 + Shaker2 8282 + SleighBel 8383 + BellTree 8484 + SdBlL1-3 8585 + SdFkAySt 8686 + SdBhR1-3 8787 + SdBlSt1-2 8888 + BdLoL 8989 + SdLdwHMono 9090 + BdDry2 9191 + SdBSwrAtSt 9292 + BdSlimy 9393 + SdRollMono 9494 + BdNm2R 9595 + Crash 9696 + + + + SdT8Rim 2424 + VoxHitRev 2525 + TurnTable 2626 + StabHard 2727 + ScratchVoR 2828 + SdRollMono 2929 + ClaveT8 3030 + SdHip1R 3131 + SdHpStk4 3232 + BdAnCR 3333 + SdHipRm3 3434 + BdT9-3 3535 + BdHipDp 3636 + SdHpStk5 3737 + SdHipGate 3838 + HandClapR 3939 + SdLofi 4040 + TomT8 4141 + HHClHip 4242 + TomT8 4343 + HHPdlHip 4444 + TomT8 4545 + HHOpHip 4646 + TomT8 4747 + TomT8 4848 + Crash2 4949 + TomT8 5050 + RideR 5151 + CrashT8 5252 + RideT9 5353 + TambrnRX5 5454 + SplashR 5555 + MamboBdy 5656 + CrashT9 5757 + Vibraslap 5858 + RideT9 5959 + BongoHi1-2 6060 + BongoLo1-3 6161 + CongaTip 6262 + CongaSlp 6363 + CongaOp 6464 + TmbaleH1-3 6565 + TmbaleL1-3 6666 + AgogoHi 6767 + AgogoLo 6868 + ShakerHip1 6969 + MaracasSlr 7070 + Whistle 7171 + Whistle 7272 + GuiroShort 7373 + GuiroLong 7474 + Clave 7575 + WoodBlock 7676 + WoodBlock 7777 + CuicaHi 7878 + CuicaLo 7979 + TriangleMt 8080 + TriangleOp 8181 + Shaker1-2 8282 + SleighBel 8383 + BellTree 8484 + SdHpStk1 8585 + SdJngl1 8686 + HandClapR 8787 + SdBreakHvy 8888 + Scratch L 8989 + ScratchDwn 9090 + ScratchHiF 9191 + ScratchLoF 9292 + ScratchLoR 9393 + ScratchBdF 9494 + ScratchBdR 9595 + BdBreakHvy 9696 + + + + SdHpStk2 2424 + HiQ2 2525 + TurnTable 2626 + HitOrch1 2727 + ScratchSpn 2828 + SdRkRolR 2929 + ClaveT8 3030 + SdBreak3 3131 + SdHpStk7 3232 + BdR&B2 3333 + SdR&B1Rm 3434 + BdT9-4 3535 + BdT9-2 3636 + SdHpStk3 3737 + SdHipRm3 3838 + HandClapR 3939 + SdHipRm4 4040 + BdT8-3 4141 + HHClT9 4242 + BdT8-3 4343 + HHOpT9 4444 + BdT8-3 4545 + HHOpT9 4646 + BdT8-3 4747 + BdT8-3 4848 + Crash2 4949 + BdT8-3 5050 + RideR 5151 + CrashT8 5252 + RideT9 5353 + TambrnRX5 5454 + SplashR 5555 + MamboBdy 5656 + CrashT9 5757 + Vibraslap 5858 + RideT9 5959 + BongoHi1-2 6060 + BongoLo1-3 6161 + CongaTip 6262 + CongaSlp 6363 + CongaOp 6464 + TmbaleH1-3 6565 + TmbaleL1-3 6666 + AgogoHi 6767 + AgogoLo 6868 + ShakerHip1 6969 + MaracasSlr 7070 + Whistle 7171 + Whistle 7272 + GuiroShort 7373 + GuiroLong 7474 + Clave 7575 + WoodBlock 7676 + WoodBlock 7777 + CuicaHi 7878 + CuicaLo 7979 + TriangleMt 8080 + TriangleOp 8181 + Shaker1-2 8282 + SleighBel 8383 + BellTree 8484 + SdClRmSt 8585 + SdJnglFx 8686 + HandClapR 8787 + SdBreakRol 8888 + ScratchHiR 8989 + ScratchLoF 9090 + ScratchLoR 9191 + ScratchBdF 9292 + ScratchBdR 9393 + ScratchSdF 9494 + ScratchSdR 9595 + BdBreakHrd 9696 + + + + SdHipRm4 2424 + NzBurst 2525 + TurnTable 2626 + Hit Uhh 2727 + ScratchBdR 2828 + SnLvRolR 2929 + ClaveT8 3030 + SdAnSmRim 3131 + SdHipGate 3232 + BdT9-3 3333 + SdT8Rim 3434 + BdT8-2 3535 + BdT9-1 3636 + SdHipRm3 3737 + SdHpStk3 3838 + HandClapR 3939 + SdHpStk4 4040 + TomT9Lo 4141 + HHClT9 4242 + TomT9Lo 4343 + HHOpT9 4444 + TomT9Lo 4545 + HHOpT9 4646 + TomT9Hi 4747 + TomT9Hi 4848 + Crash2 4949 + TomT9Hi 5050 + RideR 5151 + CrashT8 5252 + RideT9 5353 + TambrnRX5 5454 + SplashR 5555 + MamboBdy 5656 + CrashT9 5757 + Vibraslap 5858 + RideT9 5959 + BongoHi1-2 6060 + BongoLo1-3 6161 + CongaTip 6262 + CongaSlp 6363 + CongaOp 6464 + TmbaleH1-3 6565 + TmbaleL1-3 6666 + AgogoHi 6767 + AgogoLo 6868 + ShakerHip1 6969 + MaracasSlr 7070 + Whistle 7171 + Whistle 7272 + GuiroShort 7373 + GuiroLong 7474 + Clave 7575 + WoodBlock 7676 + WoodBlock 7777 + CuicaHi 7878 + CuicaLo 7979 + TriangleMt 8080 + TriangleOp 8181 + Shaker1-2 8282 + SleighBel 8383 + BellTree 8484 + SdAnSmRim 8585 + SdClRmR 8686 + SdHipRm4 8787 + SdClRim3 8888 + Scratch L 8989 + ScratchDwn 9090 + ScratchHiF 9191 + ScratchLoF 9292 + ScratchBdR 9393 + ScratchCb2 9494 + ScratchStp 9595 + BdBlpHd 9696 + + + + BdHardLong 2424 + BdT9-1 2525 + BdSlimy 2626 + BdAnHard 2727 + BdDist4 2828 + BdR&B2 2929 + BdHipDp 3030 + BdFxHmr 3131 + BdT9Hd1 3232 + BdT8-3 3333 + BdSus 3434 + BdZapMid 3535 + BdT8-2 3636 + BdSlimy 3737 + SdT8-1 3838 + SdT8Rim 3939 + SdClappy 4040 + SdBl3St 4141 + HHOpSt 4242 + HHClT8-2 4343 + HHOpSt 4444 + HHOpT8-2 4545 + HHOpSt 4646 + HHOpT8-2 4747 + ClapAnSm 4848 + CrashSt 4949 + CrashT9 5050 + RideSt 5151 + RideT9 5252 + AnaClick 5353 + ClaveT8 5454 + ClapAnSm 5555 + ClapT9 5656 + AnaShaker 5757 + CongaT8 5858 + CongaT8 5959 + SdAnCR 6060 + SdRkRolSt 6161 + AgogoHi 6262 + ChinaRL 6363 + HiQ2 6464 + HiQ1 6565 + Zap2 6666 + Zap1 6767 + Zap2 6868 + DoorSqk 6969 + ScratchCb3 7070 + FretNoise 7171 + PlayFxGt5 7272 + ScratchHiF 7373 + Wurli+ 7474 + Wurli+ 7575 + Wurli+ 7676 + ResoXFade 7777 + Sonar1 7878 + VoxDrum 7979 + VoxDrum 8080 + VoxDrum 8181 + HHOpSyn 8282 + HHClSyn 8383 + TriWv 8484 + TriWv 8585 + TriWv 8686 + TriWv 8787 + TriWv 8888 + TriWv 8989 + TriWv 9090 + TriWv 9191 + TriWv 9292 + TriWv 9393 + TriWv 9494 + TriWv 9595 + TriWv 9696 + + + + BdHardLong 2424 + BdTekPower 2525 + BdDist5 2626 + BdDist3 2727 + BdDist1 2828 + BdD&B1 2929 + BdBlip 3030 + BdAnSm 3131 + BdT8-2 3232 + BdT8-1 3333 + BdT9Hd3 3434 + BdT9-2 3535 + BdT9-3 3636 + BdSus 3737 + SdT9-1 3838 + SdT9Rim 3939 + SdT9-4 4040 + TomT9Lo 4141 + HHClT9 4242 + TomT9Lo 4343 + HHOpT9 4444 + TomT9Lo 4545 + HHOpT9 4646 + ClapT9 4747 + ClapAnSm 4848 + CrashT9 4949 + CongaT8 5050 + RideT9 5151 + CongaT8 5252 + AnaClick 5353 + ClaveT8 5454 + MarcsT8 5555 + TambrnAnCR 5656 + AnaShaker 5757 + CowBelT8 5858 + CowBelAnCR 5959 + SdT8-1 6060 + SdT8-2 6161 + SdT8-3 6262 + SdAnCR 6363 + SdJngl1 6464 + SdD&B1 6565 + SdD&B4 6666 + SdR&B1 6767 + SdR&B2 6868 + SdHip1 6969 + SdWood 7070 + SdTimber 7171 + HHClT8-1 7272 + HHOpT8-1 7373 + HHClT8-2 7474 + HHOpT8-2 7575 + HHPdlSt 7676 + HHOpSt 7777 + HHOpSt 7878 + HHClLoFi 7979 + HHOpLoFi 8080 + HHClSyn 8181 + HHOpSyn 8282 + AnaShaker 8383 + TambrnRX5 8484 + TambrnSw 8585 + Cowbell2 8686 + BongoHi1 8787 + TimbaleHi1 8888 + WoodBlock 8989 + BdHardLong 9090 + TumbaOp 9191 + QuintOp 9292 + FxGun2 9393 + Bomb 9494 + BdZapHrd 9595 + ScratchHp2 9696 + + + + BdNmSt1-2 2424 + SdRkStk1St 2525 + SdRkOp2St 2626 + SdRkRolSt 2727 + SdRkOp1St 2828 + TomLoSt 2929 + HHClFtSt 3030 + TomLoSt 3131 + HHPdlSt 3232 + TomMdSt 3333 + HHOpSt 3434 + TomHiSt 3535 + BdRk2St 3636 + SdRkStk1St 3737 + SdRkOp2St 3838 + HandClapSt 3939 + SdRkMte2St 4040 + TomRkLoSt 4141 + HHClRkStSw 4242 + TomRkLoSt 4343 + HHPdRkStSw 4444 + TomRkMdSt 4545 + HHOpRkStSw 4646 + TomRkMdSt 4747 + TomRkHiSt 4848 + CrashSt 4949 + TomRkHiSt 5050 + RideSt 5151 + ChinaSt 5252 + CupSt 5353 + TambrnSw 5454 + SplashSt 5555 + Cowbel1 5656 + CrashSt 5757 + Shaker1-2 5858 + RideSt 5959 + BdRk1St 6060 + SdRkStk2St 6161 + SdRkOp1St 6262 + ClapT9 6363 + SdRkMte1St 6464 + TomRkLoSt 6565 + HHClRkStSw 6666 + TomRkLoSt 6767 + HHPdlRkSt 6868 + TomRkMdSt 6969 + HHHfOpRkSt 7070 + TomRkMdSt 7171 + TomRkHiSt 7272 + CrashSt 7373 + TomRkHiSt 7474 + RideL 7575 + ChinaSt 7676 + CupSt 7777 + TambrnHit 7878 + SplashSt 7979 + MamboBel 8080 + CrashSt 8181 + ShekereDw 8282 + RideR 8383 + BdFkSt1-2 8484 + SdRkStk1St 8585 + SdRkRim1St 8686 + SdRkFlmSt 8787 + SdRkRim2St 8888 + TomFlSt 8989 + HHCl4St 9090 + TomLoSt 9191 + HHPdlSt 9292 + TomMdSt 9393 + HHOp2St 9494 + TomMdSt 9595 + TomHiSt 9696 + + + + BdT8-3 2424 + SdT8Rim 2525 + SdDodgL 2626 + ClapT9 2727 + SdHip3 2828 + BdT8-3 2929 + HHClTek 3030 + BdT8-3 3131 + HHOpTek 3232 + BdT8-3 3333 + HHOpTek 3434 + BdT8-3 3535 + BdHipDp 3636 + SdHpStk4 3737 + SdHipRm1 3838 + HandClapR 3939 + SdHip2 4040 + TomT8 4141 + HHClT8-2 4242 + TomT8 4343 + HHOpAnCR 4444 + TomT8 4545 + HHOpT8-1 4646 + TomT8 4747 + TomT8 4848 + CrashT9 4949 + TomT8 5050 + CrashSyn 5151 + CrashSyn 5252 + CrashT8 5353 + TambrnRX5 5454 + SplashR 5555 + CowBelT8 5656 + CrashT9 5757 + CowBelAnCR 5858 + RideT9 5959 + BdHipDp 6060 + SdHpStk5 6161 + SdHipRm2 6262 + HandClapL 6363 + SdHip1 6464 + TomT9Lo 6565 + HHClRX5 6666 + TomT9Lo 6767 + HHClAnCR 6868 + TomT9Lo 6969 + HHOpT8-2 7070 + TomT9Lo 7171 + TomT9Hi 7272 + CrashR 7373 + TomT9Hi 7474 + CrashT8 7575 + CrashSyn 7676 + CrashT8 7777 + TambrnHit 7878 + ChinaR 7979 + CowBelRX11 8080 + CrashL 8181 + Cowbel1 8282 + RideR 8383 + BdHipDp 8484 + SdHipStk8 8585 + SdHipGate 8686 + SdHip2 8787 + SdHipRm5 8888 + TomDistLo 8989 + HHClHip 9090 + TomDistLo 9191 + HHPdlHip 9292 + TomDistHi 9393 + HHOpHip 9494 + TomDistHi 9595 + TomAnSm 9696 + + + + Wataiko 2424 + Udo Hi 2525 + DjembeOp 2626 + QuintTip 2727 + Udo Low 2828 + UdoFinger 2929 + Udo Hi 3030 + TabraBya 3131 + TmbourimOp 3232 + TablaMut 3333 + TabraNah 3434 + TablaMut 3535 + Timpani 3636 + Hit Uhh 3737 + PickNoise1 3838 + ClapT9 3939 + TriangleMt 4040 + TriangleOp 4141 + Castanet 4242 + Castanet 4343 + Castanet 4444 + GuiroLong 4545 + GuiroShort 4646 + GuiroSwp 4747 + Vibraslap 4848 + Clave 4949 + ClaveT8 5050 + CuicaLo 5151 + CuicaHi 5252 + TmbaleL1-3 5353 + WoodBlock 5454 + TimbaleLo2 5555 + WoodBlock 5656 + TmbaleH1-3 5757 + ChaCha 5858 + TimbaleHi2 5959 + TmblPailaL 6060 + TmblPailaL 6161 + TmblPailaH 6262 + MamboBel 6363 + BongoLo1-3 6464 + BongoLo3 6565 + Cowbel1 6666 + BongoHi1-2 6767 + Cowbell2 6868 + BongoHHeel 6969 + AgogoLo 7070 + AgogoHi 7171 + TumbaHeel 7272 + TumbaTip 7373 + TumbaSlp 7474 + MaracasSlr 7575 + TumbaOp 7676 + CongaHeel 7777 + CongaTip 7878 + CongaSlp 7979 + Shaker1 8080 + CongaOp 8181 + Cabasa1 8282 + Cabasa1-2 8383 + QuintHeel 8484 + QuintTip 8585 + QuintSlp 8686 + Shaker2 8787 + QuintOp 8888 + Caxixi1 8989 + TambrnShk 9090 + TambrnHit 9191 + TambrnSw 9292 + TambrnHit 9393 + SleighBel 9494 + Whistle 9595 + Whistle 9696 + + + + BdLSonSt 2424 + SdRkStk2St 2525 + SdFkSt1/3 2626 + CrashSt 2727 + SplashSt 2828 + TomLoSt 2929 + HHClSt1-4 3030 + TomLoSt 3131 + HHPdlSt 3232 + TomMdSt 3333 + HHOpSt 3434 + TomHiSt 3535 + TumbaTip 3636 + TumbaHeel 3737 + TumbaSlp 3838 + Clave 3939 + TumbaOp 4040 + CongaTip 4141 + CongaHeel 4242 + CongaSlp 4343 + ChaCha 4444 + CongaOp 4545 + MamboBdy 4646 + MamboBel 4747 + QuintTip 4848 + QuintHeel 4949 + QuintSlp 5050 + ChaCha 5151 + QuintOp 5252 + BongoLo1 5353 + BongoHHeel 5454 + BongoHi1 5555 + TimbaleLo1 5656 + TmblPailaL 5757 + TimbaleHi1 5858 + TmblPailaH 5959 + WoodBlock 6060 + WoodBlock 6161 + ShekereDw 6262 + ShekereUp 6363 + ShekereSap 6464 + MaracasSlr 6565 + MaracasStc 6666 + GuiroLong 6767 + GuiroShort 6868 + GuiroSwp 6969 + SurdoMt 7070 + SurdoOp 7171 + PandierTip 7272 + PandroHeel 7373 + PandierThm 7474 + PandieroOp 7575 + TmbourmFng 7676 + TmbourimMt 7777 + TmbourimOp 7878 + AgogoLoTap 7979 + AgogoLo 8080 + AgogoHi 8181 + TriangleOp 8282 + TriangleMt 8383 + GanzaAc 8484 + GanzaBk 8585 + GanzaFw 8686 + Cabasa1 8787 + Cabasa2 8888 + Caxixi1 8989 + Caxixi2 9090 + CuicaLo 9191 + CuicaHi 9292 + Whistle 9393 + Whistle 9494 + Vibraslap 9595 + BellTree 9696 + + + + PlayFxABa8 2424 + PlayFxABa8 2525 + PlayFxGt4 2626 + PwrChdMono 2727 + PwrChdMono 2828 + PlayFxABa9 2929 + PickNoise2 3030 + PlayFxABa6 3131 + PickNoise2 3232 + PlayFxABa6 3333 + PlayFxGt7 3434 + PlyFxSlp1H 3535 + PlyFxSl12S 3636 + PlayFxABa4 3737 + PlayFxGt3 3838 + PlayFxABa9 3939 + PlayFxGt5 4040 + PlyFxSlp2S 4141 + PickNoise2 4242 + PlyFxSlp2S 4343 + PickNoise2 4444 + PlyFxSlp2S 4545 + FretNoise 4646 + PlyFxSlp2S 4747 + PlyFxSlp2S 4848 + PlyFxSl19S 4949 + PlyFxSlp2S 5050 + PickNoise2 5151 + PlyFxSl19S 5252 + PickNoise2 5353 + PlyFxSlp2H 5454 + PlyFxSl19S 5555 + PlayFxGt12 5656 + PlyFxSl19S 5757 + PlyFxSl18S 5858 + PickNoise2 5959 + PlayFxABa4 6060 + PlayFxABa4 6161 + PlayFxABa2 6262 + PlayFxABa3 6363 + PlayFxABa1 6464 + PlayFxABa8 6565 + PlayFxABa8 6666 + PlayFxABa8 6767 + PlayFxABa8 6868 + PlayFxGt6 6969 + PlayFxGt4 7070 + PlayFxGt13 7171 + PlayFxGt12 7272 + PlayFxABa5 7373 + PlayFxABa6 7474 + PickNoise1 7575 + PickNoise1 7676 + PickNoise3 7777 + PlayFxGt7 7878 + PlayFxGt8 7979 + PickNoise2 8080 + PickNoise2 8181 + PlayFxGt3 8282 + PlyFxSl18S 8383 + PlayFxGt9 8484 + PlayFxGt10 8585 + PlayFxGt11 8686 + PlayFxGt1 8787 + PlayFxGt2 8888 + PlayFxGt3 8989 + PlayFxGt4 9090 + PlyFxSl17S 9191 + PlyFxSlp7H 9292 + PlyFxSlp7S 9393 + PlyFxSl18H 9494 + PlyFxSl19S 9595 + PlyFxSl20S 9696 + + + + PlyFxSlp5H 2424 + PickNoise1 2525 + HHPdlD&B 2626 + HandClapL 2727 + ScratchVoF 2828 + IndusTom 2929 + SdWood 3030 + IndusTom 3131 + SdClpAna 3232 + IndusTom 3333 + SdFMRim 3434 + BdFXGate 3535 + BdFxHmr 3636 + PlayFxABa4 3737 + SdFM 3838 + HandClapL 3939 + SdTimber 4040 + TomSyn2 4141 + HHClSyn 4242 + TomSyn2 4343 + HHOpSyn 4444 + TomSyn2 4545 + HHOpSyn 4646 + TomSyn2 4747 + TomSyn2 4848 + HHOpMono 4949 + Sonar1 5050 + HHOpT8-1 5151 + HHOpMono 5252 + CupL 5353 + SleighBel 5454 + HHOpT8-2 5555 + ResoXFade 5656 + CrashL 5757 + RainLoop 5858 + CupR 5959 + AirHoseL 6060 + AirHoseL 6161 + Udo Hi 6262 + MgBass2 6363 + MgBass3 6464 + PlayFxABa8 6565 + PlayFxABa8 6666 + AgogoLo 6767 + AgogoLo 6868 + HHOpHuman 6969 + VoxHitRev 7070 + HiQ1 7171 + HiQ1 7272 + LfoSeq 7373 + LfoSeq 7474 + BellAir 7575 + HH Hit 7676 + HH Hit 7777 + OohFB 7878 + OohFB 7979 + Mind Bell 8080 + Glass 8181 + Swarm 8282 + FxGun2 8383 + Lektronica 8484 + PlayFxGt12 8585 + Gunshot 8686 + Police 8787 + Ripper 8888 + PlayFxGt7 8989 + TapeRewnd 9090 + FxGun1 9191 + Bomb 9292 + Zap2 9393 + NzBurst 9494 + StabGiant 9595 + StabOrch 9696 + + + + ClaveT8 2424 + SdHpStk6L 2525 + GuiroLong 2626 + SdHpStk6R 2727 + GuiroLong 2828 + PlayFxABa9 2929 + Castanet 3030 + PlayFxABa8 3131 + Stick 3232 + PlayFxABa7 3333 + PlayFxABa4 3434 + TomT9Hi 3535 + PickNoise3 3636 + SdClRim3 3737 + Stick2 3838 + GuiroLong 3939 + Stick2 4040 + PlayFxABa4 4141 + SdAnSmRim 4242 + PlayFxABa4 4343 + ClapAnSm 4444 + PlayFxABa4 4545 + Vibraslap 4646 + PlayFxABa4 4747 + PlayFxABa4 4848 + Seashore 4949 + PlayFxABa4 5050 + SdRkStk2St 5151 + Applause 5252 + SdRkStk1L 5353 + TambrnShk 5454 + Seashore 5555 + WoodBlock 5656 + Applause 5757 + Helicopter 5858 + SdRkStk2R 5959 + PlayFxABa3 6060 + PlayFxABa3 6161 + Castanet 6262 + Castanet 6363 + WoodBlock 6464 + TmblPailaL 6565 + TmblPailaL 6666 + Stick 6767 + Stick2 6868 + Caxixi1-2 6969 + Caxixi2 7070 + DoorSqk 7171 + DoorSqk 7272 + GuiroShort 7373 + GuiroLong 7474 + Clave 7575 + WoodBlock 7676 + WoodBlock 7777 + DoorSqk 7878 + DoorSqk 7979 + WoodBlock 8080 + Clave 8181 + DoorSqk 8282 + HandClapL 8383 + ChaCha 8484 + SdRkOp2St 8585 + BdJngl3 8686 + QuintSlp 8787 + BdRoom2 8888 + BdHSonSt 8989 + SdHeavy 9090 + PlayFxABa4 9191 + SdRkStk1St 9292 + BdSlimy 9393 + SdGate1 9494 + BdFkSonSt 9595 + BdGate 9696 + + + + CowBelT8 2424 + HHCl4R 2525 + CupR 2626 + HHOpSyn 2727 + CupL 2828 + CupSt 2929 + FMMetal2 3030 + RideSt 3131 + RideSt 3232 + Cowbell2 3333 + HHCl1St 3434 + ChaCha 3535 + Cowbell2 3636 + HHClSyn 3737 + HHOpTek 3838 + HHClT8-2 3939 + HHClRX5 4040 + Cowbell2 4141 + HHOpT8-1 4242 + Cowbell2 4343 + HHClSyn 4444 + Cowbell2 4545 + HHOpSyn 4646 + Cowbell2 4747 + Cowbell2 4848 + HHOpFx 4949 + Cowbell2 5050 + CupSt 5151 + HHOpAnCR 5252 + CupSt 5353 + TambrnSw 5454 + HHOpFx 5555 + MamboBel 5656 + HHOpFx 5757 + SleighBel 5858 + RideMono 5959 + Vibraphone 6060 + Vibraphone 6161 + Tubular 6262 + Bell 6363 + BrBell 6464 + TmblPailaH 6565 + TmblPailaL 6666 + Bell 6767 + Bell 6868 + HHCl1St 6969 + HHOpAnCR 7070 + BellAir 7171 + WindChime 7272 + HHOpRkL 7373 + Lektronica 7474 + AgogoLo 7575 + Cowbel1 7676 + Cowbell2 7777 + HiLo 7878 + HiLo 7979 + TriangleMt 8080 + TriangleOp 8181 + WindChime 8282 + SleighBel 8383 + BellTree 8484 + SmBell 8585 + SmBell 8686 + BrBell 8787 + Hibasi 8888 + Harpsicord 8989 + SdLdwHMono 9090 + Vibraphone 9191 + SdBrRim 9292 + Gamelan2 9393 + UdoFinger 9494 + FingerCym 9595 + Bell 9696 + + + + TablaMut 2424 + SdBrMtSt 2525 + SdBrSwrSt 2626 + SdBrMt2St 2727 + SdBSwrAtSt 2828 + PlyFxSl19S 2929 + PlayFxABa4 3030 + PandierThm 3131 + TablaMut 3232 + PlyFxSl14H 3333 + PlayFxABa4 3434 + TabraCmb 3535 + Wataiko 3636 + QuintTip 3737 + SdBrMt2St 3838 + HandClapSt 3939 + SdFkAySt 4040 + Udo Low 4141 + TablaMut 4242 + Udo Low 4343 + TabraBya 4444 + Udo Hi 4545 + TabraNah 4646 + Udo Hi 4747 + UdoFinger 4848 + RideR 4949 + UdoFinger 5050 + CupSt 5151 + CupMono2 5252 + CupSt 5353 + TambrnHit 5454 + CupSt 5555 + Cowbel1 5656 + RideMono 5757 + Vibraslap 5858 + RideL 5959 + BongoHi1-2 6060 + BongoLo1-3 6161 + CongaTip 6262 + CongaSlp 6363 + CongaOp 6464 + TmbaleH1-3 6565 + TmbaleL1-3 6666 + AgogoHi 6767 + AgogoLo 6868 + TmbourmFng 6969 + TmbourmFng 7070 + HandClapL 7171 + HandClapL 7272 + GuiroLong 7373 + GuiroLong 7474 + UdoFinger 7575 + TabraBya 7676 + CongaTip 7777 + Udo Hi 7878 + Udo Hi 7979 + UdoFinger 8080 + FingerCym 8181 + TablaMut 8282 + SleighBel 8383 + BellTree 8484 + PlayFxABa4 8585 + PlayFxABa3 8686 + PlayFxABa3 8787 + PlayFxABa2 8888 + PlayFxABa3 8989 + PlayFxABa8 9090 + TumbaOp 9191 + PlayFxABa1 9292 + PlayFxABa7 9393 + Udo Low 9494 + DjembeCmb 9595 + TumbaSlp 9696 + + + + Scratch 2424 + Scratch 2525 + ScratchD 2626 + ScratchH 2727 + ScratchH 2828 + ScratchL 2929 + ScratchL 3030 + ScratchB 3131 + ScratchB 3232 + ScratchS 3333 + ScratchS 3434 + ScratchV 3535 + Scratch 3636 + Scratch 3737 + ScratchD 3838 + ScratchH 3939 + ScratchH 4040 + ScratchL 4141 + ScratchL 4242 + ScratchB 4343 + ScratchB 4444 + ScratchS 4545 + ScratchS 4646 + ScratchV 4747 + ScratchV 4848 + ScratchS 4949 + ScratchS 5050 + ScrathcH 5151 + ScratchH 5252 + ScratchC 5353 + ScratchC 5454 + ScratchC 5555 + ScratchC 5656 + Scratch 5757 + Scratch 5858 + ScratchD 5959 + ScratchH 6060 + ScratchH 6161 + ScratchL 6262 + ScratchL 6363 + ScratchB 6464 + ScratchB 6565 + ScratchS 6666 + ScratchS 6767 + ScratchV 6868 + ScratchV 6969 + ScratchS 7070 + ScratchS 7171 + ScrathcH 7272 + ScratchH 7373 + ScratchC 7474 + ScratchC 7575 + ScratchC 7676 + ScratchC 7777 + Scratch 7878 + Scratch 7979 + ScratchD 8080 + ScratchH 8181 + ScratchH 8282 + ScratchL 8383 + ScratchL 8484 + ScratchB 8585 + ScratchB 8686 + ScratchS 8787 + ScratchS 8888 + ScratchV 8989 + ScratchV 9090 + ScratchS 9191 + ScratchS 9292 + ScrathcH 9393 + ScratchH 9494 + ScratchC 9595 + ScratchC 9696 + + + + SdNm1St 2424 + SdNm2St 2525 + SdNm3St 2626 + SdNm4St 2727 + SdFk1St 2828 + SdFk2St 2929 + SdFk3St 3030 + SdFkAySt 3131 + SdBs1St 3232 + SdBs2St 3333 + SdBs3St 3434 + SdSon1St 3535 + SdSon2St 3636 + SdSon3St 3737 + SdSon4St 3838 + SdBl1St 3939 + SdBl2St 4040 + SdBl3St 4141 + SdBh1St 4242 + SdBh2St 4343 + SdBh3St 4444 + SdLdw1St 4545 + SdLdw2St 4646 + SdLdw3St 4747 + SdLdw4St 4848 + SdHip1St 4949 + SdHip2St 5050 + SdRkOp1St 5151 + SdRkMte1St 5252 + SdRkRim1St 5353 + SdRkOp2St 5454 + SdRkMte2St 5555 + SdRkRim2St 5656 + SdRkFlmSt 5757 + SdRkOp1St 5858 + SdRkMte1St 5959 + SdRkRim1St 6060 + SdRkOp2St 6161 + SdRkMte2St 6262 + SdRkRim2St 6363 + SdRkFlmSt 6464 + SdNm3St 6565 + SdFkAySt 6666 + SdBs3St 6767 + SdSon3St 6868 + SdBh3St 6969 + SdLdw3St 7070 + SdLdw3R 7171 + SdPicol 7272 + SdPcRim 7373 + SdPcRim2 7474 + SdMid 7575 + SdMdRim 7676 + SdAmb 7777 + SdGate1 7878 + SdLdwHMono 7979 + SdBrRim 8080 + SdDry 8181 + SdHeavy 8282 + SdGM 8383 + SdRkStk1St 8484 + SdRkStk2St 8585 + SdClRmSt 8686 + SdClRim2 8787 + SdClRim3 8888 + SdRkRolSt 8989 + SdRkOp2St 9090 + SnLvRolSt 9191 + SdSon2St 9292 + SdRollMono 9393 + SdLdw3St 9494 + SdBrMtSt 9595 + SdBSwrAtSt 9696 + + + + SdNmSt1-4 2424 + SdNmSt1-3 2525 + SdNmSt2-4 2626 + SdNmSt1-2 2727 + SdNmSt2-3 2828 + SdNmSt3-4 2929 + SdNm1St 3030 + SdNm2St 3131 + SdNm3St 3232 + SdNm4St 3333 + SdFkSt1-3 3434 + SdFkSt1-2 3535 + SdFkSt2-3 3636 + SdFkSt1/3 3737 + SdFk1St 3838 + SdFk2St 3939 + SdFk3St 4040 + SdFkAySt 4141 + SdBsSt1-3 4242 + SdBsSt1-2 4343 + SdBsSt2-3 4444 + SdBsSt1/3 4545 + SdBs1St 4646 + SdBs2St 4747 + SdBs3St 4848 + SdSonSt1-4 4949 + SdSonSt1-3 5050 + SdSonSt2-4 5151 + SdSonSt1-2 5252 + SdSonSt2-3 5353 + SdSonSt3-4 5454 + SdSon1St 5555 + SdSon2St 5656 + SdSon3St 5757 + SdSon4St 5858 + SdBlSt1-3 5959 + SdBlSt1-2 6060 + SdBlSt2-3 6161 + SdBlSt1/3 6262 + SdBl1St 6363 + SdBl2St 6464 + SdBl3St 6565 + SdBhSt1-3 6666 + SdBhSt1-2 6767 + SdBhSt2-3 6868 + SdBhSt1/3 6969 + SdBh1St 7070 + SdBh2St 7171 + SdBh3St 7272 + SdLdwSt1-4 7373 + SdLdwSt1-3 7474 + SdLdwSt2-4 7575 + SdLdwSt1-2 7676 + SdLdwSt2-3 7777 + SdLdwSt3-4 7878 + SdLdw1St 7979 + SdLdw2St 8080 + SdLdw3St 8181 + SdLdw4St 8282 + SdHip1St 8383 + SdRkOp1St 8484 + SdRkMte1St 8585 + SdRkRim1St 8686 + SdRkOp2St 8787 + SdRkMte2St 8888 + SdRkRim2St 8989 + SdRkFlmSt 9090 + SdRkRolSt 9191 + SdRkOp1St 9292 + SdRkRolDSt 9393 + SdRkOp2St 9494 + SnLvRolSt 9595 + SdNm3St 9696 + + + + BdNmSt1-2 2424 + BdNm1St 2525 + BdNm2St 2626 + BdNmL1-2 2727 + BdFkSt1-2 2828 + BdFk1St 2929 + BdFk2St 3030 + BdHiSt 3131 + BdLoSt 3232 + BdHSonSt 3333 + BdLSonSt 3434 + BdFkSonSt 3535 + BdRk1St 3636 + BdRk2St 3737 + BdDry1 3838 + BdDry2 3939 + BdPop 4040 + BdVar1 4141 + BdVar2 4242 + BdRoom1 4343 + BdRoom2 4444 + BdRoom3 4545 + BdGate 4646 + BdFXGate 4747 + BdT9-1 4848 + BdT9-2 4949 + BdT9-3 5050 + BdT9-4 5151 + BdT9Hd1 5252 + BdT9Hd2 5353 + BdT9Hd3 5454 + BdT8-1 5555 + BdT8-2 5656 + BdT8-3 5757 + BdAnSm 5858 + BdAnCR 5959 + BdHuman1 6060 + BdHuman2 6161 + BdBlip 6262 + BdBlpHd 6363 + BdJngl1 6464 + BdJngl2 6565 + BdJngl3 6666 + BdD&B1 6767 + BdD&B2 6868 + BdR&B1 6969 + BdR&B2 7070 + BdHipDp 7171 + BdBrkDp 7272 + BdBreak1 7373 + BdBreak2 7474 + BdBreakHvy 7575 + BdBreakHrd 7676 + BdDist1 7777 + BdDist2 7878 + BdDist3 7979 + BdDist4 8080 + BdDist5 8181 + BdDistRM 8282 + Bd+HH 8383 + BdFxHmr 8484 + BdZapHrd 8585 + BdZapMid 8686 + BdSus 8787 + BdTekPower 8888 + BdHardLong 8989 + BdATite 9090 + BdAnHard 9191 + BdLofi 9292 + BdThkSkn 9393 + BdSlimy 9494 + BdSlimy 9595 + BdSlimy 9696 + + + + BdT9-1 2424 + BdT9-1 2525 + BdT9-2 2626 + BdT9-3 2727 + BdT9-3 2828 + BdT9-4 2929 + BdT9Hd1 3030 + BdT9Hd2 3131 + BdT9Hd3 3232 + BdT9Hd3 3333 + BdHardLong 3434 + BdAnCR 3535 + BdT9-1 3636 + BdT9-2 3737 + BdT9-3 3838 + BdT9-4 3939 + BdT9Hd1 4040 + BdT9Hd2 4141 + BdT9Hd3 4242 + BdT8-1 4343 + BdT8-2 4444 + BdT8-3 4545 + BdAnSm 4646 + BdAnCR 4747 + BdHuman1 4848 + BdHuman2 4949 + BdBlip 5050 + BdBlpHd 5151 + BdJngl1 5252 + BdJngl2 5353 + BdJngl3 5454 + BdD&B1 5555 + BdD&B2 5656 + BdR&B1 5757 + BdR&B2 5858 + BdHipDp 5959 + BdBrkDp 6060 + BdBreak1 6161 + BdBreak2 6262 + BdBreakHvy 6363 + BdBreakHrd 6464 + BdDist1 6565 + BdDist2 6666 + BdDist3 6767 + BdDist4 6868 + BdDist5 6969 + BdDistRM 7070 + Bd+HH 7171 + BdFxHmr 7272 + BdZapHrd 7373 + BdZapMid 7474 + BdSus 7575 + BdTekPower 7676 + BdHardLong 7777 + BdATite 7878 + BdAnHard 7979 + BdLofi 8080 + BdThkSkn 8181 + BdSlimy 8282 + BdGate 8383 + BdFXGate 8484 + BdT9-1 8585 + BdT9-2 8686 + BdT9-3 8787 + BdT9-4 8888 + BdT9Hd1 8989 + BdT9Hd2 9090 + BdT9Hd3 9191 + BdBlpHd 9292 + BdR&B2 9393 + BdZapMid 9494 + BdHardLong 9595 + BdATite 9696 + + + + SdFx1 2424 + SdFx2 2525 + SdFx3 2626 + SdFx4 2727 + SdDist 2828 + SdCut 2929 + SdDodgH 3030 + SdDodgL 3131 + SdFM 3232 + SdSyn 3333 + SdHammer 3434 + SdLofi 3535 + SdT9-1 3636 + SdT9-2 3737 + SdT9-3 3838 + SdT9-4 3939 + SdT9-5 4040 + SdT9Gate 4141 + SdT8-1 4242 + SdT8-2 4343 + SdT8-3 4444 + SdT8-4 4545 + SdT8-5 4646 + SdAnSm 4747 + SdAnCR 4848 + SdHuman1 4949 + SdJngl1 5050 + SdJngl2 5151 + SdJngl3 5252 + SdJnglFx 5353 + SdD&B1 5454 + SdD&B2 5555 + SdD&B3 5656 + SdD&B4 5757 + SdR&B1 5858 + SdR&B1Rm 5959 + SdR&B2 6060 + SdHip1 6161 + SdHip2 6262 + SdHip3 6363 + SdHipGate 6464 + SdHipRm1 6565 + SdHipRm2 6666 + SdHipRm3 6767 + SdHipRm4 6868 + SdHipRm5 6969 + SdBreak2 7070 + SdBreakHvy 7171 + PlayFxGt1 7272 + PlayFxGt5 7373 + PlayFxGt12 7474 + PlayFxABa1 7575 + PlayFxABa8 7676 + PickNoise3 7777 + Scratch H 7878 + Scratch L 7979 + ScratchDwn 8080 + ScratchHiF 8181 + ScratchStp 8282 + ScratchSpn 8383 + Ripper 8484 + NzBurst 8585 + Zap1 8686 + Zap2 8787 + HiQ1 8888 + HiQ2 8989 + Bomb 9090 + FxGun1 9191 + Electer 9292 + HH Hit 9393 + Mother 9494 + HitOrch2 9595 + StabGiant 9696 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/share/instruments/ZynAdd-1_4.idf b/attic/muse_qt4_evolution/share/instruments/ZynAdd-1_4.idf new file mode 100644 index 00000000..1534b53d --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/ZynAdd-1_4.idf @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/share/instruments/emuproteus2000.idf b/attic/muse_qt4_evolution/share/instruments/emuproteus2000.idf new file mode 100644 index 00000000..d55fb28e --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/emuproteus2000.idf @@ -0,0 +1,1088 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/share/instruments/gm.idf b/attic/muse_qt4_evolution/share/instruments/gm.idf new file mode 100644 index 00000000..7cc0e7ef --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/gm.idf @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Switch General Midi mode on + 0x7e 0x7f 0x09 0x01 + + + + + diff --git a/attic/muse_qt4_evolution/share/instruments/gs.idf b/attic/muse_qt4_evolution/share/instruments/gs.idf new file mode 100644 index 00000000..070758ad --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/gs.idf @@ -0,0 +1,236 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Switch GS mode on + 0x41 0x10 0x42 0x12 0x40 0x00 0x7f 0x00 0x41 + + + + + diff --git a/attic/muse_qt4_evolution/share/instruments/ns5r.idf b/attic/muse_qt4_evolution/share/instruments/ns5r.idf new file mode 100644 index 00000000..b51e6b80 --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/ns5r.idf @@ -0,0 +1,568 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/share/instruments/xg.idf b/attic/muse_qt4_evolution/share/instruments/xg.idf new file mode 100644 index 00000000..29628e90 --- /dev/null +++ b/attic/muse_qt4_evolution/share/instruments/xg.idf @@ -0,0 +1,629 @@ + + + + + + 7e 7f 09 01 + + + 43 10 4c 00 00 7e 00 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Switch XG mode on + 0x43 0x10 0x4c 0x00 0x00 0x7e 0x00 + + + + + diff --git a/attic/muse_qt4_evolution/share/locale/CMakeLists.txt b/attic/muse_qt4_evolution/share/locale/CMakeLists.txt new file mode 100644 index 00000000..76aa7660 --- /dev/null +++ b/attic/muse_qt4_evolution/share/locale/CMakeLists.txt @@ -0,0 +1,21 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +install_files( /share/${MusE_INSTALL_NAME}/locale .*\\.qm ) diff --git a/attic/muse_qt4_evolution/share/locale/muse_de.qm b/attic/muse_qt4_evolution/share/locale/muse_de.qm new file mode 100644 index 00000000..71b1c4ec Binary files /dev/null and b/attic/muse_qt4_evolution/share/locale/muse_de.qm differ diff --git a/attic/muse_qt4_evolution/share/locale/muse_de.ts b/attic/muse_qt4_evolution/share/locale/muse_de.ts new file mode 100644 index 00000000..092c41e1 --- /dev/null +++ b/attic/muse_qt4_evolution/share/locale/muse_de.ts @@ -0,0 +1,5804 @@ + + + + + + + select Pointer Tool: +with the pointer tool you can: + select parts + move parts + copy parts + Zeigerwerkzeug auswählen + + + + sets amount of quantization: +0 - no quantization +100 - full quantization + Stärke der Quantisierung wählen + + + + Click this button to enable recording + Aufnahmebereitschaft einschalten + + + + Default + + + + + Refrain + + + + + Bridge + + + + + Intro + + + + + Coda + + + + + Chorus + + + + + Solo + + + + + Brass + + + + + Percussion + + + + + Drums + Drums + + + + Guitar + + + + + Bass + + + + + Flute + + + + + Strings + + + + + Keyboard + + + + + Piano + + + + + Saxophon + + + + + @default + + + select Pencil Tool: +with the pencil tool you can: + create new parts + modify length of parts + Stiftwerkzeug auswählen + + + + select Delete Tool: +with the delete tool you can delete parts + Löschwerkzeug auswählen + + + + select Cut Tool: +with the cut tool you can split a part + Schere auswählen + + + + select Glue Tool: +with the glue tool you can glue two parts + Kleberwerkzeug auswählen + + + + select Quantize Tool: +insert display quantize event + Quantisierungstool auswählen + + + + select Drawing Tool + Zeichenstift auswählen + + + + select Muting Tool: +click on part to mute/unmute + Stummschalttool auswählen + + + + pointer + Zeiger + + + + pencil + Stift + + + + eraser + Radiergummi + + + + cutter + Schere + + + + glue + Kleber + + + + quantize + Quantisierung + + + + draw + zeichnen + + + + mute parts + Parts stummschalten + + + + Off + Aus + + + + m + m + + + + mute + stumm + + + + s + s + + + + solo + solo + + + + Mo + Mo + + + + monitor + Monitor + + + + Dr + Dr + + + + use drum map + Drummap benutzen + + + + off + aus + + + + aR + aR + + + + automation read + Automation lesen + + + + aW + aW + + + + automation write + Automation schreiben + + + + sync + Sync + + + + send sync events + Sync Events senden + + + + 1/2 channel + 1/2 Channel + + + + oR + oR + + + + output routing + Output Routing + + + + iR + iR + + + + input routing + Input Routing + + + + don't quantize notes above this tick limit + Noten über dieser Tick-Grenze nicht quantisieren + + + + quantize also note len as default + Notenlänge auch quantisieren + + + + Channels + Channel + + + + presets (*.pre *.pre.gz *.pre.bz2) + Voreinstellungen (*.pre *.pre.gz *.pre.bz2) + + + + All Files (*) + Alle Dateien(*) + + + + Click this button to stop playback + Stop Wiedergabe + + + + Click this button to start playback + Start Wiedergabe + + + + Click this button to rewind to start position + Zum Anfang zurückspulen + + + + Click this button to rewind + Zurückspulen + + + + Click this button to forward current play position + Vorspulen + + + + Click this button to select a new project +You can also select the <b>Open command</b> from the Project menu. + Ein neues Projekt auswählen. + + + + Click this button to save the project you are editing. +You can also select the Save command from the Project menu. + Projekt sichern. + + + + loop between left mark and right mark + Loop zwischen linker und rechter Marke + + + + record starts at left mark + Aufnahme startet an der linken Marke + + + + record stops at right mark + Aufnahme stoppt an der rechten Marke + + + + rewind to start position + Zum Anfang zurückspulen + + + + rewind current position + zurückspulen + + + + move current position + Aktuelle Position verschieben + + + + stop sequencer + Stop Sequencer + + + + start sequencer play + Start Sequencer Wiedergabe + + + + to record press record and then play + Um Aufzunehmen erst "Aufnahme" und dann "Wiedergabe" drücken + + + + send note off to all midi channels + Sende "Note Off" an alle Midi Kanäle + + + + Bar + Takt + + + + Midi + Midi + + + + Add Midi Track + Midi Spur hinzufügen + + + + Add Midi Output + Midi Ausgang hinzufügen + + + + Add Midi Input + Midi Eingang hinzufügen + + + + Audio + Audio + + + + Add Wave Track + Audio Spur hinzufügen + + + + Add Audio Output + Audio Ausgang hinzufügen + + + + Add Audio Group + Audio Gruppe hinzufügen + + + + Add Audio Input + Audio Eingang hinzufügen + + + + MusE: create project directory + MusE: Projektverzeichnis erzeugen + + + + MusE: create template directory + MusE: Templateverzeichnis erzeugen + + + + Cannot find project <%1> + Kann Projekt <%1> nicht finden + + + + MusE: load Project + MusE: Projekt laden + + + + Transport: Start playback from current location + Transport: Wiedergabe von aktueller Position starten + + + + Transport: Toggle metronome + Transport: Metronom ein/aus + + + + Transport: Stop Playback + Transport: Wiedergabe beenden + + + + Transport: Play, Stop, Rewind + Transport: Wiedergeben, Beenden, Zurückspulen + + + + Transport: Goto left marker + Transport: zum linken Marker positionieren + + + + Transport: Goto right marker + Transport: zum rechten Marker positionieren + + + + Transport: Toggle Loop section + Transport: toogle Schleifenauswahl + + + + Transport: Toggle Record + Transport: Aufnahme ein/aus + + + + Edit: Copy + Bearbeiten: Kopieren + + + + Edit: Undo + Bearbeiten: Rückgängig + + + + Edit: Redo + Bearbeiten: Wiederherstellen + + + + Edit: Cut + Bearbeiten: Ausschneiden + + + + Edit: Paste, + Bearbeiten: Einfügen, + + + + Edit: Delete + Bearbeiten: Löschen + + + + Open + Öffnen + + + + Save + Sichern + + + + File: Open recent file + Datei: letze Datei öffnen + + + + File: Import midi file + Datei: Midifile importieren + + + + File: Export midi file + Datei: Midifile exportieren + + + + File: Import audio file + Datei: Audiofile importieren + + + + File: Quit MusE + Datei: MusE beenden + + + + Edit: Select parts on track + Bearbeiten: Parts der Spur auswählen + + + + Open pianoroll + Pianoroll öffnen + + + + Open drumeditor + Drumeditor öffnen + + + + Open listeditor + Listeditor öffnen + + + + Open graphical mastertrack editor + grafischen Mastertrack Editor öffnen + + + + Open list mastertrack editor + Mastertrack Listeneditor öffnen + + + + Add midi track + Miditrack zufügen + + + + Add drum track + Drumtrack zufügen + + + + Add wave track + Wavetrack zufügen + + + + Add audio output + Audioausgang zufügen + + + + Add audio group + Audiogruppe zufügen + + + + Add audio input + Audioinput zufügen + + + + Structure: Global cut + Struktur: global ausschneiden + + + + Structure: Global insert + Struktur: globales Einfügen + + + + Structure: Global split + Struktur: globales Splitten + + + + Structure: Copy range + Struktur: Bereich kopieren + + + + Structure: Cut events + Struktur: Events ausschneiden + + + + View: Open mixer window + Ansicht: Mixer öffnen + + + + View: Toggle transport window + Ansicht: Transportfenster ein/aus + + + + View: Toggle bigtime window + Ansicht: Bigtimefenster ein/aus + + + + View: Open marker window + Ansicht: Markerfenster zeigen + + + + Settings: Follow song by page + Einstellungen: Song seitenweise folgen + + + + Settings: Follow song off + Einstellungen: Song nicht folgen + + + + Settings: Follow song continuous + Einstellungen: Song kontinuierlich folgen + + + + Settings: Configure shortcuts + Einstellungen: Abkürzungen konfigurieren + + + + Settings: Configure metronome + Einstellungen: Metronom konfigurieren + + + + Settings: Midi sync configuration + Einstellungen: Midisynchronisation konfigurieren + + + + Settings: Midi file export configuration + Einstellungen: Export Mididatei konfigurieren + + + + Settings: Midi ports / Soft Synth + Einstellungen: Midiports/Softsynthesizer + + + + Settings: Audio subsystem configuration + Einstellungen: Audio Subsystem konfigurieren + + + + Midi: Edit midi instruments + Midi: Midi Instrumente bearbeiten + + + + Midi: Midi remote control + Midi: Midi Fernsteuerung + + + + Midi: Reset midi + Midi: Reset Midi + + + + Midi: Init midi + Midi: Init Midi + + + + Midi: Midi local off + Midi: Midi lokal aus + + + + Audio: Bounce audio to track + Audio: Bounce Audio in Spur + + + + Audio: Bounce audio to file + Audio: Bounce audio in Datei + + + + Audio: Restart audio + Audio: Restart Audio + + + + Help: Open Manual + Hilfe: Manual aufschlagen + + + + Help: Toggle whatsthis mode + Hilfe: WasIstDas ein/aus + + + + Edit: Edit selected part + Bearbeiten: den selektierten Part bearbeiten + + + + Edit: Select nearest part on track above + Bearbeiten: den nächsten Part in der überliegenden Spur selektieren + + + + Edit: Add nearest part on track above + Bearbeiten: nächsten Part zur drüberliegenden Spur addieren + + + + Edit: Select nearest part on track below + Bearbeiten: nächsten Part auf unterer Spur selektieren + + + + Edit: Add nearest part on track below + Bearbeiten: nächsten Part auf untere Spur addieren + + + + Midi: Transpose + Midi: Transponieren + + + + Edit: Select all + Bearbeiten: Alles selektieren + + + + Edit: Select none + Bearbeiten: nichts selektieren + + + + Edit: Invert selection + Bearbeiten: Selektion umkehren + + + + Edit: Select events/parts inside locators + Bearbeiten: Part in Schleife selektieren + + + + Edit: Select events/parts outside locators + Bearbeiten: Parts außerhalb Schleife selektieren + + + + Edit: Select nearest part/event to the left + Bearbeiten: nächsten Part/Event links selektieren + + + + MusE: create instruments directory + + + + + Arranger + + + TrackInfo + SpurInfo + + + + Mix + Mix + + + + Config Tracklist + Spurliste konfigurieren + + + + all mute off + Stumm aus + + + + all solo off + Solo aus + + + + all autoRead off + Automation lesen aus + + + + all autoWrite off + Automation schreiben aus + + + + i + i + + + + Show Track Info + Spurinfo zeigen + + + + m + m + + + + Show Mixer Strip + Mixerstrip zeigen + + + + AudioStrip + + + Pre + Pre + + + + pre fader - post fader + Prefader - Postfader + + + + dB + dB + + + + record downmix + Downmix aufnehmen + + + + panorama + Panorama + + + + Pan + Pan + + + + Channel %1 + Kanal %1 + + + + MidiChannel + Midikanal + + + + Channel + Kanal + + + + Awl::MidiVolEntry + + + off + aus + + + + db + db + + + + Awl::VolEntry + + + off + aus + + + + BigTime + + + MusE: Bigtime + MusE: Bigtime + + + + CtrlDelegate + + + dB + dB + + + + off + aus + + + + CtrlDialog + + + controller name + Kontrollername + + + + flag if controller contains data + Flag: Controller enthält Daten + + + + other + andere + + + + CtrlEdit + + + Sel + Sel + + + + select controller + Kontroller auswählen + + + + remove controller view + Kontrolleranzeige entfernen + + + + CtrlListEditor + + + dB + dB + + + + DeicsOnzeGui + + + Save configuration + Konfiguration sichern + + + + Critical Error + Kritischer Fehler + + + + Cannot open file %1 + Kann Datei %1 nicht öffnen + + + + Parsing error for file %1 + Parse Fehler in Datei %1 + + + + Load category dialog + Kategoriedialog laden + + + + Load set dialog + Setdialog laden + + + + Save set dialog + Setdialog speichern + + + + New category + Neue Kategorie + + + + Delete category + Kategorie löschen + + + + Load category + Kategorie laden + + + + Save category + Kategorie speichern + + + + Load set + Set Laden + + + + Save set + Set Speichern + + + + Delete set + Set löschen + + + + New subcategory + Neue Subkategorie + + + + Delete subcategory + Subkategorie löschen + + + + Load subcategory + Subkategorie laden + + + + Save subcategory + Subkategorie speichern + + + + New preset + Neuer Preset + + + + Delete preset + Preset löschen + + + + Load preset + Preset laden + + + + Save preset + Preset speichern + + + + No more category supported + Keine Kategorien mehr unterstützt + + + + You can not add more categories + Es können keine Kategorien mehr hinzugefügt werden + + + + Do you really want to delete %1 ? + %1 wirklich löschen? + + + + &Yes + &Ja + + + + &No + &Nein + + + + No category selected + Keine Kategorie ausgewählt + + + + You must first select a category. + Es muss zunächst eine Kategorie gewählt werden. + + + + Replace or add + Ersetzen oder Zufügen + + + + %1 is supposed to be affected to the hbank number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + + + + + &Replace + &Ersetzen + + + + &Add + &Zufügen + + + + Download error + Fehler beim Download + + + + There is no more free category slot. + Es gibt keinen freien Kategorieslot mehr. + + + + Save category dialog + Kategorie Sichern Dialog + + + + No more subcategory supported + Keine weiteren Subkategorien mehr + + + + You can not add more subcategories + Es können keine weiteren Subkategorien zugefügt werden + + + + No subcategory selected + Keine Subkategorie ausgewählt + + + + You must first select a subcategory. + Es muss zunächst eine Subkategorie ausgewählt werden. + + + + Load subcategory dialog + Subkategorie Laden Dialog + + + + %1 is supposed to be affected to the lbank number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + + + + + There is no more free subcategory slot. + Kein weiterer Subkaegorie Slot verfügbar. + + + + Save subcategory dialog + Subkategorie Sichern Dialog + + + + No more preset supported + Keine weiteren Presets unterstützt + + + + You can not add more presets + Es könenn keine weiteren Presets zugefügt werden + + + + No preset selected + Kein Preset ausgewählt + + + + You must first select a preset. + Es muss zunächst ein Preset ausgewählt werden. + + + + Load preset dialog + Preset Laden Dialog + + + + %1 is supposed to be affected to the prog number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + + + + + There is no more free preset slot. + Es gibt keinen weiteren freien Preset Slot. + + + + Save preset dialog + Preset Sichern Dialog + + + + Browse set dialog + Browse Set Dialog + + + + Browse image dialog + Browse Image Dialog + + + + DrumEdit + + + Delete Events + Events löschen + + + + &Functions + &Funktionen + + + + Set fixed length + Feste Länge setzen + + + + Modify Velocity... + Anschlag verändern... + + + + &Select + &Auswählen + + + + Select All + Alles Auswählen + + + + Select None + Nichts auswählen + + + + Invert + Invertieren + + + + Inside Loop + Innerhalb Schleife + + + + Outside Loop + Ausserhalb Schleife + + + + Drum Tools + Drum Werkzeuge + + + + Transport + Transport + + + + EditInstrument + + + MusE: Create file failed + + + + + MusE: Write File failed + MusE: kann nicht in Datei schreiben + + + + MusE: Save Instrument Definition + + + + + Instrument Definition (*.idf) + + + + + MusE: Enter new Category + + + + + Enter new Category: + + + + + MusE + + + + + The current Instrument contains unsaved data +Save Current Instrument? + + + + + &Save + &Sichern + + + + &Nosave + &Nicht Sichern + + + + &Abort + &Abbrechen + + + + EditToolBar + + + Edit Tools + Edit Werkzeuge + + + + EffectRack + + + effect rack + Effekt Rack + + + + move up + nach oben + + + + move down + nach unten + + + + remove + entfernen + + + + bypass + überbrücken + + + + show gui + GUI zeigen + + + + show native gui + Native GUI zeigen + + + + New Plugin + Neues Plugin + + + + New Aux Send + Neu: Aux Send + + + + Replace effect + Effekt ersetzen + + + + Do you really want to replace the effect %1? + Soll Effekt %1 wirklich ersetzt werden? + + + + &Yes + &Ja + + + + &No + &Nein + + + + ExportMidiDialog + + + Save + Sichern + + + + as smf midi file + als smf Midi File + + + + MusE: export midi smf file + MusE: in Midi smf Datei exportieren + + + + FLUIDGui + + + FLUID: open Soundfile + FLUID: Sounddatei öffnen + + + + Fluid: select Sound Font + Fluid: Soundfont auswählen + + + + FluidSynthGui + + + Choose soundfont + Soundfont auswählen + + + + FontSel + + + Size: + Größe: + + + + GateTime + + + MusE: Modify Gate Time + MusE: Gatezeit verändern + + + + GreendotButton + + + record + aufnehmen + + + + ListEdit + + + MusE: List Edit + MusE: List Editor + + + + Parts + PArts + + + + Controller + Kontroller + + + + MarkerView + + + MusE: Marker + MusE: Marker + + + + add marker + Marker zufügen + + + + Add Marker + Marker zufügen + + + + delete marker + Marker löschen + + + + Delete Marker + MArker löschen + + + + &Edit + &Editieren + + + + marker-tools + MArkerwerkzeuge + + + + edit tools + Edit Werkzeuge + + + + Bar:Beat:Tick + Bar:Beat:Tick + + + + Min:Sc:Fr:Sf + Min:Sc:Fr:Sf + + + + Lock + Lock + + + + Text + Text + + + + Marker Properties + Marker Eigenschaften + + + + MasterEdit + + + MusE: Mastertrack + MusE: Mastertrack + + + + edit tools + Edit Werkzeuge + + + + EnableTempomap + Tempomap einschalten + + + + Tempomap + Tempomap + + + + Enable use of tempo map + Tempomap benutzen + + + + Info + Info + + + + Cursor + Cursor + + + + Snap + Snap + + + + time at cursor position + Zeit an der Cursorposition + + + + tempo at cursor position + Tempo an der Cursorposition + + + + CurPos + CurPos + + + + tempo at current position + Tempo an der aktuellen Position + + + + time signature at current position + Taktart an der aktuellen Position + + + + MidiChannelInfo + + + Instrument Patch + Instrument Patch + + + + Midi Out Port + Midi Ausgang + + + + Midi Instrument + Midi Instrument + + + + MidiController + + + Velocity + Anschlag + + + + MidiEditor + + + &Edit + &Editieren + + + + Cut + Schneiden + + + + Copy + Kopieren + + + + Paste + Einfügen + + + + Play Events + Events spielen + + + + Step Record + Schrittaufnahme + + + + Midi Input + Midi Eingang + + + + Follow Song + Song folgen + + + + MidiInPortStrip + + + AlsaDevices + AlsaDevices + + + + MidiChannel + Midikanäle + + + + JackDevices + + + + + MidiOutPortStrip + + + MidiChannel + Midikanäle + + + + MidiDevices + Midigeräte + + + + AlsaDevices + AlsaDevices + + + + JackDevices + + + + + MidiPluginDialog + + + MusE: select midi plugin + MusE: Midiplugin auswählen + + + + File + Datei + + + + Name + Name + + + + Version + Version + + + + Description + Beschreibung + + + + Ok + Ok + + + + Cancel + Abbrechen + + + + MidiRack + + + midi effect rack + Midi Effekt Rack + + + + move up + nach oben + + + + move down + nach unten + + + + remove + entfernen + + + + bypass + überbrücken + + + + show gui + GUI zeigen + + + + new + Neu + + + + MidiStrip + + + VariationSend + VariationSend + + + + Var + Var + + + + ReverbSend + ReverbSend + + + + Rev + Rev + + + + ChorusSend + ChorusSend + + + + Cho + Cho + + + + Pan/Balance + Pan/Balance + + + + Pan + Pan + + + + Tracks + Spuren + + + + OutputPorts + Ausgänge + + + + MidiSyntiStrip + + + OutputPorts + Ausgänge + + + + Channel + Kanäle + + + + Input Ports + Eingänge + + + + MidiTimeDelegate + + + dB + dB + + + + off + aus + + + + MidiTrackInfo + + + Channel %1 + Kanal %1 + + + + Midi Port + Midiport + + + + MidiTrackerEditor + + + &View + &Zeigen + + + + MidiTracker Tools + MidiTracker Werkzeuge + + + + Panic + Panik + + + + Transport + Transport + + + + row features + Zeilen Features + + + + Row per measure + Zeilen per Takt + + + + Number of visible rows + Anzahl der sichtbaren Zeilen + + + + Quantize + + + + + MidiTransformerDialog + + + New + Neu + + + + MixdownFileDialog + + + MusE: set mixdown file name + MusE: Midxown Dateiname wählen + + + + Wave Files (*.wav);;All Files (*) + Wave Dateien (*.wav);;Alle Dateien (*) + + + + Mixer + + + MusE: Mixer + MusE: Mixer + + + + &Create + &Erzeugen + + + + &View + &Zeigen + + + + Routing + Routing + + + + Show Midi Tracks + Miditracks zeigen + + + + Show Midi Out Ports + Midiausgänge zeigen + + + + Show Midi In Ports + Midieingänge zeigen + + + + Show Wave Tracks + Audiospuren zeigen + + + + Show Output Tracks + Audioausgänge zeigen + + + + Show Group Tracks + Audiogruppen zeigen + + + + Show Input Tracks + Audioeingänge zeigen + + + + Show Synthesizer + Synthesizer zeigen + + + + MusE + + + MusE manual not found at: + MusE Handbuch nicht gefunden: + + + + MusE: Open Help + MusE: Hilfe öffnen + + + + to import a audio file you have first to selecta wave track + Um eine Wavedatei zu importieren, muß zunächst eine Wave-Zielspur ausgewählt werden + + + + Import Wave File + Wavedatei importieren + + + + Failed to start audio! + Audio Start scheitert! + + + + Was not able to start audio, check if jack is running. + + Audio konnte nicht gestartet werden, läuft JACK? + + + + + Und&o + Und&o + + + + undo last change to song + letzte Änderung rückgängig machen + + + + Re&do + Re&do + + + + redo last undo + letztes Undo rückgängig machen + + + + Loop + Schleife + + + + Punchin + Punchin + + + + Punchout + Punchout + + + + Record + Aufnehmen + + + + Panic + Panik + + + + &Open + &Öffnen + + + + &Save + &Sichern + + + + Pianoroll + Pianoroll + + + + MidiTracker + MidiTracker + + + + Project Buttons + Projekt Buttons + + + + Transport + Transport + + + + &Project + &Projekt + + + + Open &Recent + letzte P&rojekte öffnen + + + + Import Midifile + Midifile importieren + + + + Export Midifile + Midifile exportieren + + + + &Quit + &Quit + + + + &Edit + &Editieren + + + + C&ut + Schneiden + + + + &Copy + Kopieren + + + + &Paste + Einfügen + + + + &Delete Parts + Parts löschen + + + + Delete Selected Tracks + Markierte Spuren löschen + + + + Add Track + Spur zufügen + + + + Select + Auswählen + + + + Select &All + Alles auswählen + + + + &Deselect All + nichts auswählen + + + + Invert &Selection + Auswahl umkehren + + + + &Inside Loop + Innerhalb Schleife + + + + &Outside Loop + Ausserhalb Schleife + + + + All &Parts on Track + Alle Parts der Spur + + + + Drums + Drums + + + + List + Liste + + + + Mastertrack + Masterspur + + + + Project Properties + Projekt Eigenschaften + + + + Midi + Midi + + + + Modify Gate Time + Gatezeit ändern + + + + Modify Velocity + Anschlag verändern + + + + Crescendo + Crescendo + + + + Transpose + Transponieren + + + + Thin Out + Ausdünnen + + + + Erase Event + Event löschen + + + + Note Shift + Note Shift + + + + Move Clock + Zeit verschieben + + + + Copy Measure + Takt kopieren + + + + Erase Measure + Takt löschen + + + + Delete Measure + Takt löschen + + + + Create Measure + Takt erzeugen + + + + Mix Track + Spur mischen + + + + &View + Anzeigen + + + + Transport Panel + Transport Panel + + + + Bigtime window + Bigtime Window + + + + Mixer 1 + Mixer 1 + + + + Mixer 2 + Mixer 2 + + + + Marker + Marker + + + + &Structure + &Struktur + + + + Global Cut + Globaler Schnitt + + + + Global Insert + Global Einfügen + + + + Global Split + Global Splitten + + + + Copy Range + Bereich kopieren + + + + Cut Events + Events Schneiden + + + + &Midi + &Midi + + + + Edit Instrument + Instrument editieren + + + + Reset Instr. + Instrument zurücksetzen. + + + + Init Instr. + Instrument initialisieren. + + + + local off + lokal aus + + + + &Audio + &Audio + + + + Bounce to Track + Bounce nach Spur + + + + Bounce to File + Bounce in Datei + + + + Restart Audio + Audio restarten + + + + Setti&ngs + Einstellu&ngen + + + + Configure shortcuts + Shortcuts Konfigurieren + + + + follow song + Song folgen + + + + dont follow Song + Song nicht folgen + + + + follow page + Seitenweise folgen + + + + follow continuous + Kontinuierlich folgen + + + + Midi Sync + Midi Sync + + + + Midi File Export + Mididatei exportieren + + + + Preferences + Voreinstellungen + + + + &Help + &Hilfe + + + + &Manual + &Manual + + + + &MusE homepage + &MusE Homepage + + + + &Report Bug... + Fehler melden + + + + &About MusE + Ãœber MusE + + + + About&Qt + Ãœber &Qt + + + + What's &This? + Was ist das? + + + + Arranger + Arranger + + + + Cursor + Cursor + + + + Snap + Snap + + + + Len + Länge + + + + Pitch + Tonhöhe + + + + midi pitch + Midi Tonhöhe + + + + global midi pitch shift + Globale Midi Tonhöhe + + + + Tempo + Tempo + + + + midi tempo + Midi Tempo + + + + N + N + + + + MusE: new project + Muse: neues Projekt + + + + Cannot create project folder <%1> + Kann Projektverzeichnis <%1> nicht erzeugen + + + + Cannot open template file +%1 + Kann Template +%1 +nicht öffnen + + + + File <%1> read error + Datei <%1> Lesefehler + + + + MusE: Create tmp file failed + MusE: kann temporäre Datei nicht erzeugen + + + + MusE: Write File failed + MusE: kann nicht in Datei schreiben + + + + The current Project contains unsaved data +Save Current Project? + Das aktuelle Projekt enthält ungesicherte Daten. +Soll das Projekt gesichert werden? + + + + &Nosave + &Nicht Sichern + + + + &Abort + &Abbrechen + + + + Nothing to edit + Nichts zu bearbeiten + + + + MusE: Copy Range + MusE: Bereich kopieren + + + + not implemented + nicht implementiert + + + + MusE: Cut Events + MusE: Events ausschneiden + + + + MusE: Bounce + MusE: Bounce + + + + set left/right marker for bounce range + Linken/Rechten Marker für Bouncebereich setzen + + + + MusE: Bounce to Track + Bounce nach Spur + + + + more than one target track selected + mehr als eine Zielspur ausgewählt + + + + wrong target track type, +select wave track as target + falscher Typ für Zielspur, +eine Wavespur muß als Ziel selektiert werden + + + + no target track selected + keine Zielspur ausgewählt + + + + MusE: Bounce to File + Bounce in Datei + + + + no output track found + keine Ausgangsspur gefunden + + + + MusE: Import Midi + MusE: Midi importieren + + + + MusE: import midi file + MusE: Mididatei importieren + + + + reading midifile + + Mididatei lesen + + + + + +failed: + +fehlgeschlagen: + + + + Open Project + Projekt öffnen + + + + Save Project + Projekt sichern + + + + Transport: Goto Start + Transport: Zum Anfang + + + + rewind to start position + Zum Anfang zurückspulen + + + + Transport: Start playback from current location + Transport: Wiedergabe von aktueller Position starten + + + + start sequencer play + Start Sequencer Wiedergabe + + + + Transport: Stop Playback + Transport: Wiedergabe beenden + + + + Transport: Play, Stop, Rewind + Transport: Wiedergeben, Beenden, Zurückspulen + + + + Transport: Goto left marker + Transport: zum linken Marker positionieren + + + + Transport: Goto right marker + Transport: zum rechten Marker positionieren + + + + Transport: Toggle metronome + Transport: Metronom ein/aus + + + + Transport: Toggle Loop section + Transport: toogle Schleifenauswahl + + + + Transport: Toggle Record + Transport: Aufnahme ein/aus + + + + Edit: Copy + Bearbeiten: Kopieren + + + + Edit: Undo + Bearbeiten: Rückgängig + + + + Edit: Redo + Bearbeiten: Wiederherstellen + + + + Edit: Cut + Bearbeiten: Ausschneiden + + + + Edit: Paste, + Bearbeiten: Einfügen, + + + + Edit: Delete + Bearbeiten: Löschen + + + + Open + Öffnen + + + + Click this button to select a new project +You can also select the <b>Open command</b> from the Project menu. + Ein neues Projekt auswählen. + + + + Save + Sichern + + + + Click this button to save the project you are editing. +You can also select the Save command from the Project menu. + Projekt sichern. + + + + File: Open recent file + Datei: letze Datei öffnen + + + + File: Import midi file + Datei: Midifile importieren + + + + File: Export midi file + Datei: Midifile exportieren + + + + File: Import audio file + Datei: Audiofile importieren + + + + File: Quit MusE + Datei: MusE beenden + + + + Edit: Select parts on track + Bearbeiten: Parts der Spur auswählen + + + + Open pianoroll + Pianoroll öffnen + + + + Open drumeditor + Drumeditor öffnen + + + + Open listeditor + Listeditor öffnen + + + + Open graphical mastertrack editor + grafischen Mastertrack Editor öffnen + + + + Open list mastertrack editor + Mastertrack Listeneditor öffnen + + + + Add midi track + Miditrack zufügen + + + + Add drum track + Drumtrack zufügen + + + + Add wave track + Wavetrack zufügen + + + + Add audio output + Audioausgang zufügen + + + + Add audio group + Audiogruppe zufügen + + + + Add audio input + Audioinput zufügen + + + + Structure: Global cut + Struktur: global ausschneiden + + + + Structure: Global insert + Struktur: globales Einfügen + + + + Structure: Global split + Struktur: globales Splitten + + + + Structure: Copy range + Struktur: Bereich kopieren + + + + Structure: Cut events + Struktur: Events ausschneiden + + + + View: Open mixer window + Ansicht: Mixer öffnen + + + + View: Toggle transport window + Ansicht: Transportfenster ein/aus + + + + View: Toggle bigtime window + Ansicht: Bigtimefenster ein/aus + + + + View: Open marker window + Ansicht: Markerfenster zeigen + + + + Settings: Follow song by page + Einstellungen: Song seitenweise folgen + + + + Settings: Follow song off + Einstellungen: Song nicht folgen + + + + Settings: Follow song continuous + Einstellungen: Song kontinuierlich folgen + + + + Settings: Configure shortcuts + Einstellungen: Abkürzungen konfigurieren + + + + Settings: Configure metronome + Einstellungen: Metronom konfigurieren + + + + Settings: Midi sync configuration + Einstellungen: Midisynchronisation konfigurieren + + + + Settings: Midi file export configuration + Einstellungen: Export Mididatei konfigurieren + + + + Settings: Midi ports / Soft Synth + Einstellungen: Midiports/Softsynthesizer + + + + Settings: Audio subsystem configuration + Einstellungen: Audio Subsystem konfigurieren + + + + Midi: Edit midi instruments + Midi: Midi Instrumente bearbeiten + + + + Midi: Midi remote control + Midi: Midi Fernsteuerung + + + + Midi: Reset midi + Midi: Reset Midi + + + + Midi: Init midi + Midi: Init Midi + + + + Midi: Midi local off + Midi: Midi lokal aus + + + + Audio: Bounce audio to track + Audio: Bounce Audio in Spur + + + + Audio: Bounce audio to file + Audio: Bounce audio in Datei + + + + Audio: Restart audio + Audio: Restart Audio + + + + Help: Open Manual + Hilfe: Manual aufschlagen + + + + Help: Toggle whatsthis mode + Hilfe: WasIstDas ein/aus + + + + Edit: Edit selected part + Bearbeiten: den selektierten Part bearbeiten + + + + Edit: Select nearest part on track above + Bearbeiten: den nächsten Part in der überliegenden Spur selektieren + + + + Edit: Add nearest part on track above + Bearbeiten: nächsten Part zur drüberliegenden Spur addieren + + + + Edit: Select nearest part on track below + Bearbeiten: nächsten Part auf unterer Spur selektieren + + + + Edit: Add nearest part on track below + Bearbeiten: nächsten Part auf untere Spur addieren + + + + Midi: Transpose + Midi: Transponieren + + + + Edit: Select all + Bearbeiten: Alles selektieren + + + + Edit: Select none + Bearbeiten: nichts selektieren + + + + Edit: Invert selection + Bearbeiten: Selektion umkehren + + + + Edit: Select events/parts inside locators + Bearbeiten: Part in Schleife selektieren + + + + Edit: Select events/parts outside locators + Bearbeiten: Parts außerhalb Schleife selektieren + + + + Edit: Select nearest part/event to the left + Bearbeiten: nächsten Part/Event links selektieren + + + + MuseApplication + + + Transport: Goto Start + Transport: Zum Anfang + + + + Goto Start + + + + + rewind to start position + Zum Anfang zurückspulen + + + + Transport: Toggle Loop section + Transport: toogle Schleifenauswahl + + + + Loop + Schleife + + + + loop between left mark and right mark + Loop zwischen linker und rechter Marke + + + + Transport: Start playback from current location + Transport: Wiedergabe von aktueller Position starten + + + + Play + + + + + start sequencer play + Start Sequencer Wiedergabe + + + + Transport: Play, Stop, Rewind + Transport: Wiedergeben, Beenden, Zurückspulen + + + + Transport: Stop Playback + Transport: Wiedergabe beenden + + + + Stop + + + + + stop sequencer + Stop Sequencer + + + + Transport: Goto left marker + Transport: zum linken Marker positionieren + + + + Transport: Goto right marker + Transport: zum rechten Marker positionieren + + + + Transport: Toggle metronome + Transport: Metronom ein/aus + + + + Transport: Toggle Record + Transport: Aufnahme ein/aus + + + + Record + Aufnehmen + + + + to record press record and then play + Um Aufzunehmen erst "Aufnahme" und dann "Wiedergabe" drücken + + + + Transport: Punch In + + + + + Punchin + Punchin + + + + record starts at left mark + Aufnahme startet an der linken Marke + + + + Transport: Punch Out + + + + + Punchout + Punchout + + + + record stops at right mark + Aufnahme stoppt an der rechten Marke + + + + Transport: Rewind + + + + + rewind + + + + + rewind current position + zurückspulen + + + + Transport: Forward + + + + + forward + + + + + move current position + Aktuelle Position verschieben + + + + Panic + Panik + + + + send note off to all midi channels + Sende "Note Off" an alle Midi Kanäle + + + + Edit: Undo + Bearbeiten: Rückgängig + + + + undo + + + + + undo last change to song + letzte Änderung rückgängig machen + + + + Edit: Redo + Bearbeiten: Wiederherstellen + + + + redo + + + + + redo last undo + letztes Undo rückgängig machen + + + + Edit: Cut + Bearbeiten: Ausschneiden + + + + Cut + Schneiden + + + + Edit: Copy + Bearbeiten: Kopieren + + + + Copy + Kopieren + + + + Edit: Paste, + Bearbeiten: Einfügen, + + + + Paste + Einfügen + + + + Edit: Delete + Bearbeiten: Löschen + + + + Delete + + + + + Open + Öffnen + + + + open project + + + + + Click this button to select a new project +You can also select the <b>Open command</b> from the Project menu. + Ein neues Projekt auswählen. + + + + Save + Sichern + + + + save project + + + + + Click this button to save the project you are editing. +You can also select the Save command from the Project menu. + Projekt sichern. + + + + File: Save as + Datei: Speichern als + + + + save project as... + + + + + Click this button to save a new copy of the project. + + + + + + File: Save as Template + + + + + save project as template + + + + + Click this button to save the project you are editing +for later use as a template. + + + + + File: Open recent file + Datei: letze Datei öffnen + + + + File: Import midi file + Datei: Midifile importieren + + + + File: Export midi file + Datei: Midifile exportieren + + + + File: Import audio file + Datei: Audiofile importieren + + + + File: Quit MusE + Datei: MusE beenden + + + + Quit MusE + + + + + Edit: Select parts on track + Bearbeiten: Parts der Spur auswählen + + + + All &Parts on Track + Alle Parts der Spur + + + + Open Pianoroll + + + + + Pianoroll + Pianoroll + + + + Start Pianoroll Editor + + + + + Open MidiTracker + + + + + MidiTracker + MidiTracker + + + + Start Midi Tracker + + + + + Open drumeditor + Drumeditor öffnen + + + + Drum Editor + + + + + Start Drum Editor + + + + + Open wave editor + + + + + Wave Editor + + + + + Open listeditor + Listeditor öffnen + + + + Properties + + + + + open Properties Editor + + + + + Open mastertrack editor + + + + + Mastertrack (Tempo) Editor + + + + + Start Mastertrack (Tempo) Editor + + + + + Add midi track + Miditrack zufügen + + + + Add drum track + Drumtrack zufügen + + + + Add wave track + Wavetrack zufügen + + + + Add audio output + Audioausgang zufügen + + + + Add audio group + Audiogruppe zufügen + + + + Add audio input + Audioinput zufügen + + + + Structure: Global cut + Struktur: global ausschneiden + + + + Structure: Global insert + Struktur: globales Einfügen + + + + Structure: Global split + Struktur: globales Splitten + + + + Structure: Copy range + Struktur: Bereich kopieren + + + + Structure: Cut events + Struktur: Events ausschneiden + + + + View: Open mixer 1 window + + + + + Mixer1 + + + + + Show Mixer 1 + + + + + View: Open mixer 2 window + + + + + Mixer2 + + + + + Show Mixer 2 + + + + + View: Toggle transport window + Ansicht: Transportfenster ein/aus + + + + Transport + Transport + + + + Show Transport Window + + + + + View: Toggle bigtime window + Ansicht: Bigtimefenster ein/aus + + + + BigTime + + + + + Show BigTime Window + + + + + View: Open marker window + Ansicht: Markerfenster zeigen + + + + Marker + Marker + + + + Show Marker List + + + + + Settings: Follow song by page + Einstellungen: Song seitenweise folgen + + + + Settings: Follow song off + Einstellungen: Song nicht folgen + + + + Settings: Follow song continuous + Einstellungen: Song kontinuierlich folgen + + + + Settings: Configure shortcuts + Einstellungen: Abkürzungen konfigurieren + + + + Settings: Configure metronome + Einstellungen: Metronom konfigurieren + + + + Settings: Midi sync configuration + Einstellungen: Midisynchronisation konfigurieren + + + + Settings: Midi file export configuration + Einstellungen: Export Mididatei konfigurieren + + + + Settings: Midi ports / Soft Synth + Einstellungen: Midiports/Softsynthesizer + + + + Settings: Audio subsystem configuration + Einstellungen: Audio Subsystem konfigurieren + + + + Midi: Edit midi instruments + Midi: Midi Instrumente bearbeiten + + + + Midi: Midi remote control + Midi: Midi Fernsteuerung + + + + Midi: Reset midi + Midi: Reset Midi + + + + Midi: Init midi + Midi: Init Midi + + + + Midi: Midi local off + Midi: Midi lokal aus + + + + Audio: Bounce audio to track + Audio: Bounce Audio in Spur + + + + Audio: Bounce audio to file + Audio: Bounce audio in Datei + + + + Audio: Restart audio + Audio: Restart Audio + + + + Help: Open Manual + Hilfe: Manual aufschlagen + + + + Help: Toggle whatsthis mode + Hilfe: WasIstDas ein/aus + + + + Edit: Edit selected part + Bearbeiten: den selektierten Part bearbeiten + + + + Edit: Select nearest part on track above + Bearbeiten: den nächsten Part in der überliegenden Spur selektieren + + + + Edit: Add nearest part on track above + Bearbeiten: nächsten Part zur drüberliegenden Spur addieren + + + + Edit: Select nearest part on track below + Bearbeiten: nächsten Part auf unterer Spur selektieren + + + + Edit: Add nearest part on track below + Bearbeiten: nächsten Part auf untere Spur addieren + + + + Midi: Transpose + Midi: Transponieren + + + + Transpose + Transponieren + + + + Edit: Select all + Bearbeiten: Alles selektieren + + + + Select All + Alles Auswählen + + + + Edit: Select none + Bearbeiten: nichts selektieren + + + + Deselect All + + + + + Edit: Invert selection + Bearbeiten: Selektion umkehren + + + + Invert Selection + + + + + Edit: Select events/parts inside locators + Bearbeiten: Part in Schleife selektieren + + + + Select Inside Loop + + + + + Edit: Select events/parts outside locators + Bearbeiten: Parts außerhalb Schleife selektieren + + + + Select Outside Loop + + + + + Edit: Select nearest part/event to the left + Bearbeiten: nächsten Part/Event links selektieren + + + + Edit: Add nearest part/event to the left to selection + + + + + Edit: Add nearest part/event to the right to selection + + + + + Edit: Set locators to selection + + + + + Edit: Increase pitch + + + + + Edit: Decrease pitch + + + + + Edit: Set fixed length on midi events + + + + + Set fixed length + Feste Länge setzen + + + + Quantize: Over Quantize + + + + + Over Quantize + Over Quantisieren + + + + Quantize: Note On Quantize + + + + + Note On Quantize + Note On Quantisieren + + + + Quantize: Note On/Off Quantize + + + + + Note On/Off Quantize + Note On/Off Quantisieren + + + + Quantize: Iterative Quantize + + + + + Iterative Quantize + Iteratives Quantisieren + + + + Quantize: Configure quant + + + + + Quantize: Modify Gate Time + + + + + Modify Gate Time + + + + + Quantize: Modify Velocity + + + + + Modify Velocity + Anschlag verändern + + + + Edit: Crescendo + + + + + Crescendo + Crescendo + + + + Edit: Thin Out + + + + + Thin Out + Ausdünnen + + + + Edit: Erase Event + + + + + Erase Event + Event löschen + + + + Edit: Note Shift + + + + + Note Shift + Note Shift + + + + Edit: Move Clock + + + + + Move Clock + Zeit verschieben + + + + Edit: Copy Measure + + + + + Copy Measure + Takt kopieren + + + + Edit: Erase Measure + + + + + Erase Measure + Takt löschen + + + + Edit: Delete Measure + + + + + Delete Measure + Takt löschen + + + + Edit: Create Measure + + + + + Create Measure + Takt erzeugen + + + + Edit: Change event color + + + + + Tool: Pointer + + + + + Pointer + + + + + select Pointer Tool: +with the pointer tool you can: + select parts + move parts + copy parts + Zeigerwerkzeug auswählen + + + + Tool: Pencil + + + + + Pencil + + + + + select Pencil Tool: +with the pencil tool you can: + create new parts + modify length of parts + Stiftwerkzeug auswählen + + + + Tool: Eraser + + + + + Eraser + + + + + select Delete Tool: +with the delete tool you can delete parts + Löschwerkzeug auswählen + + + + Tool: Scissor + + + + + Scissor + + + + + select Cut Tool: +with the cut tool you can split a part + Schere auswählen + + + + Tool: Glue + + + + + Glue + + + + + select Glue Tool: +with the glue tool you can glue two parts + Kleberwerkzeug auswählen + + + + Declone + + + + + Tool: Quantize + + + + + Quantize + + + + + select Quantize Tool: +insert display quantize event + Quantisierungstool auswählen + + + + Tool: Line Draw + + + + + Draw + + + + + select Drawing Tool + Zeichenstift auswählen + + + + Tool: Mute Parts + + + + + Mute + + + + + select Muting Tool: +click on part to mute/unmute + Stummschalttool auswählen + + + + Transport: Increase current position + + + + + Transport: Decrease current position + + + + + Quantize: Set quantize to 1/1 note + + + + + Quantize: Set quantize to 1/2 note + + + + + Quantize: Set quantize to 1/4 note + + + + + Quantize: Set quantize to 1/8 note + + + + + Quantize: Set quantize to 1/16 note + + + + + Quantize: Set quantize to 1/32 note + + + + + Quantize: Set quantize to 1/64 note + + + + + Quantize: Toggle triol quantization + + + + + Quantize: Toggle punctuation quantization + + + + + Quantize: Toggle punctuation quantization (2) + + + + + Insert + + + + + Insert Tempo + + + + + Insert Signature + + + + + Change Event Position + + + + + Edit Event Value + + + + + NoteInfo + + + Note Info + Noteninformation + + + + Start + Start + + + + Len + Länge + + + + Pitch + Tonhöhe + + + + Velo On + Anschlag + + + + Velo Off + Aus-Anschlag + + + + OutportCombo + + + Midi Output Port + Midi Ausgang + + + + PartCanvas + + + C&ut + Auss&chneiden + + + + &Copy + &Kopieren + + + + rename + Umbenennen + + + + color + Farbe + + + + delete + Löschen + + + + split + Splitten + + + + glue + Kleben + + + + de-clone + un-Klonen + + + + AutoFill... + Auto-Füllen... + + + + drums + Drums + + + + pianoroll + Pianoroll + + + + miditracker + Miditracker + + + + list + Liste + + + + wave edit + Wave bearbeiten + + + + MusE: Get auto fill loop len + MusE: Länge für Auto-Füll-Schleife + + + + Measures: + Takte: + + + + MusE: Change Part Name + MusE: Partname ändern + + + + PartName: + PartName: + + + + Rename + + + + + Color + + + + + PianoRoll + + + Delete Events + Events löschen + + + + &Select + &Selektieren + + + + Select &All + a&alles auswählen + + + + &Deselect All + nichts auswählen + + + + Invert &Selection + &Selektion invertieren + + + + &Inside Loop + &innerhalb Schleife + + + + &Outside Loop + ausserhalb Scheife + + + + &Config + &Konfigurieren + + + + event color + Eventfarbe + + + + blue + blau + + + + pitch colors + Tonhöhenfarbe + + + + velocity colors + Anschlagfarben + + + + &Functions + &Funktionen + + + + Over Quantize + Over Quantisieren + + + + Note On Quantize + Note On Quantisieren + + + + Note On/Off Quantize + Note On/Off Quantisieren + + + + Iterative Quantize + Iteratives Quantisieren + + + + Config Quant... + Quantisieren konfigurieren... + + + + Modify Gate Time + Gate Time verändern + + + + Modify Velocity + Anschlag verändern + + + + Crescendo + Crescendo + + + + Transpose + Transponieren + + + + Thin Out + Ausdünnen + + + + Erase Event + Event löschen + + + + Note Shift + Note Shift + + + + Move Clock + Zeit verschieben + + + + Copy Measure + Takt kopieren + + + + Erase Measure + Takt löschen + + + + Delete Measure + Takt löschen + + + + Create Measure + Takt erzeugen + + + + Pianoroll Tools + Pianoroll Werkzeuge + + + + Panic + Panik + + + + Transport + Transport + + + + PluginDialog + + + MusE: select plugin + MusE: Plugin auswählen + + + + Lib + Lib + + + + Label + Bezeichnung + + + + Name + Name + + + + AI + Al + + + + AO + AO + + + + CI + CI + + + + CO + CO + + + + IP + IP + + + + id + id + + + + Maker + Erzeuger + + + + Copyright + Copyright + + + + Ok + Ok + + + + Cancel + Abbrechen + + + + Mono and Stereo + Mono und Stereo + + + + Stereo + Stereo + + + + Mono + Mono + + + + Show All + Alle anzeigen + + + + Select which types of plugins should be visible in the list.<br>Note that using mono plugins on stereo tracks is not a problem, two will be used in parallell.<br>Also beware that the 'all' alternative includes plugins that probably not are usable by MusE. + + + + + Search in 'Label' and 'Name': + in "Label" und "Name" suchen: + + + + PluginGui + + + File Buttons + Dateiknöpfe + + + + Load Preset + Preset laden + + + + Save Preset + Preset sichern + + + + bypass plugin + Plugin überbrücken + + + + MusE: load preset + MusE: Preset laden + + + + MusE: save preset + MusE: Preset sichern + + + + PreferencesDialog + + + MusE: load image + MusE: Image laden + + + + ProjectDialog + + + MusE: create new folder + MusE: neuen Ordner erzeugen + + + + new folder: + neuer Ordner: + + + + QMenu + + + Add Midi Generator... + Midi Generator zufügen... + + + + Add Soft Synth... + Soft Synthesizer zufügen... + + + + QWidget + + + File + + Datei + + + + + +exists + +existiert + + + + MusE: write + MusE: schreiben + + + + Overwrite + Ãœberschreiben + + + + Quit + Beenden + + + + Open File + + Datei öffnen + + + + + +failed: + +fehlgeschlagen: + + + + MusE: Open File + MusE: Datei öffnen + + + + generic midi + generisch Midi + + + + copy + %1 +to + %2 + %1 nach %2 kopieren + + + + +converting sample rate +from %1 to %2 + +Samplerate von %1 nach %2 konvertieren + + + + Abort + Abbrechen + + + + create peakfile for + Peakfile erzeugen + + + + new + neu + + + + MusE: export midi file: + MusE: Mididatei exportieren: + + + + Cannot convert sysex string + + + + + Hex String too long (2048 bytes limit) + + + + + RecordButton + + + record + aufnehmen + + + + SS_PluginFront + + + Clear and unload effect + Effekt löschen und entladen + + + + Load effect + Effekt laden + + + + Toggle display of effect parameters + Anzeige der Effektparameter toggeln + + + + Turn effect on/off + Effekte Ein/Ausschalten + + + + ShortcutCaptureDialog + + + Ok + Ok + + + + Cancel + Abbrechen + + + + Shortcut conflicts with + Shortcut hat Konflikt mit + + + + Undefined + Undefiniert + + + + ShortcutConfig + + + Global + Global + + + + Arranger + Arranger + + + + Pianoroll + Pianoroll + + + + Drumeditor + Drumeditor + + + + List editor + List Editor + + + + List Mastertrack + List Mastertrack + + + + All categories + Alle Kategorien + + + + Transport: Start playback from current location + Transport: Wiedergabe von aktueller Position starten + + + + Transport: Toggle metronome + Transport: Metronom ein/aus + + + + Transport: Stop Playback + Transport: Wiedergabe beenden + + + + Transport: Play, Stop, Rewind + Transport: Wiedergeben, Beenden, Zurückspulen + + + + Transport: Goto left marker + Transport: zum linken Marker positionieren + + + + Transport: Goto right marker + Transport: zum rechten Marker positionieren + + + + Transport: Toggle Loop section + Transport: toogle Schleifenauswahl + + + + Transport: Toggle Record + Transport: Aufnahme ein/aus + + + + Edit: Copy + Bearbeiten: Kopieren + + + + Edit: Undo + Bearbeiten: Rückgängig + + + + Edit: Redo + Bearbeiten: Wiederherstellen + + + + Edit: Cut + Bearbeiten: Ausschneiden + + + + Edit: Paste, + Bearbeiten: Einfügen, + + + + Edit: Delete + Bearbeiten: Löschen + + + + File: New project + Datei: Neues Projekt + + + + File: Open from disk + Datei: von Platte öffnen + + + + File: Save project + Datei: Projekt sichern + + + + File: Open recent file + Datei: letze Datei öffnen + + + + File: Save as + Datei: Speichern als + + + + File: Load template + Datei: Vorlage laden + + + + File: Import midi file + Datei: Midifile importieren + + + + File: Export midi file + Datei: Midifile exportieren + + + + File: Import audio file + Datei: Audiofile importieren + + + + File: Quit MusE + Datei: MusE beenden + + + + Edit: Select parts on track + Bearbeiten: Parts der Spur auswählen + + + + Open pianoroll + Pianoroll öffnen + + + + Open drumeditor + Drumeditor öffnen + + + + Open listeditor + Listeditor öffnen + + + + Open graphical mastertrack editor + grafischen Mastertrack Editor öffnen + + + + Open list mastertrack editor + Mastertrack Listeneditor öffnen + + + + Open midi transformer + Miditransformer öffnen + + + + Add midi track + Miditrack zufügen + + + + Add drum track + Drumtrack zufügen + + + + Add wave track + Wavetrack zufügen + + + + Add audio output + Audioausgang zufügen + + + + Add audio group + Audiogruppe zufügen + + + + Add audio input + Audioinput zufügen + + + + Add audio aux + Audioaux zufügen + + + + Structure: Global cut + Struktur: global ausschneiden + + + + Structure: Global insert + Struktur: globales Einfügen + + + + Structure: Global split + Struktur: globales Splitten + + + + Structure: Copy range + Struktur: Bereich kopieren + + + + Structure: Cut events + Struktur: Events ausschneiden + + + + View: Open mixer window + Ansicht: Mixer öffnen + + + + View: Toggle transport window + Ansicht: Transportfenster ein/aus + + + + View: Toggle bigtime window + Ansicht: Bigtimefenster ein/aus + + + + View: Open marker window + Ansicht: Markerfenster zeigen + + + + Settings: Follow song by page + Einstellungen: Song seitenweise folgen + + + + Settings: Follow song off + Einstellungen: Song nicht folgen + + + + Settings: Follow song continuous + Einstellungen: Song kontinuierlich folgen + + + + Settings: Global configuration + Einstellungen: globale Einstellungen + + + + Settings: Configure shortcuts + Einstellungen: Abkürzungen konfigurieren + + + + Settings: Configure metronome + Einstellungen: Metronom konfigurieren + + + + Settings: Midi sync configuration + Einstellungen: Midisynchronisation konfigurieren + + + + Settings: Midi file export configuration + Einstellungen: Export Mididatei konfigurieren + + + + Settings: Appearance settings + Einstellungen: Aussehen + + + + Settings: Midi ports / Soft Synth + Einstellungen: Midiports/Softsynthesizer + + + + Settings: Audio subsystem configuration + Einstellungen: Audio Subsystem konfigurieren + + + + Midi: Edit midi instruments + Midi: Midi Instrumente bearbeiten + + + + Midi: Open midi input transform + Midi: Midi Eingangstransformator öffnen + + + + Midi: Open midi input filter + Midi: Midi Inputfilter öffnen + + + + Midi: Midi input transpose + Midi: Midi input tranponieren + + + + Midi: Midi remote control + Midi: Midi Fernsteuerung + + + + Midi: Random rhythm generator + Midi: Random rhythm generator + + + + Midi: Reset midi + Midi: Reset Midi + + + + Midi: Init midi + Midi: Init Midi + + + + Midi: Midi local off + Midi: Midi lokal aus + + + + Audio: Bounce audio to track + Audio: Bounce Audio in Spur + + + + Audio: Bounce audio to file + Audio: Bounce audio in Datei + + + + Audio: Restart audio + Audio: Restart Audio + + + + Automation: Mixer automation + Automation: Mixer Automation + + + + Automation: Take mixer snapshot + Automation: + + + + Wave editor + Wave Editor + + + + SimpleSynthGui + + + Load sample dialog + Sample Laden Dialog + + + + Song + + + Jack shutdown! + Jack Shutdown! + + + + Jack has detected a performance problem which has lead to +MusE being disconnected. +This could happen due to a number of reasons: +- a performance issue with your particular setup. +- a bug in MusE (or possibly in another connected software). +- a random hiccup which might never occur again. +- jack was voluntary stopped by you or someone else +- jack crashed +If there is a persisting problem you are much welcome to discuss it +on the MusE mailinglist. +(there is information about joining the mailinglist on the MusE + homepage which is available through the help menu) + +To proceed check the status of Jack and try to restart it and then . +click on the Restart button. + JACK hat ein Performance-Problem erkannt und MusE abgeklemmt. +Dies kann eine Reihe von Ursachen haben: + - ein Performance-Problem mit diesem Setup. + - ein Fehler in MusE oder einer anderen verbundenen Software + - ein zufaelliger Quirk, der nie wieder passiert. + - JACK wurde gestoppt + - JACK ist abgestuerzt + +Um weiterzumachen bitte JACK testen und neu starten, dann den Restart Knopf +drcken. + + + + SplitLayerGui + + + start pitch for split + Erster Ton fuer Split + + + + enable learn mode for start pitch + + + + + end pitch for split + + + + + enable learn mode for end pitch + + + + + pitch offset for split + + + + + start velocity for split + + + + + end velocity for split + + + + + velocity offset for split + + + + + TLSWidget + + + Remove Subtrack + + + + + Ctrl + + + + + Velocity + Anschlag + + + + Delete Controller + + + + + TLWidget + + + Copy Track + + + + + Show Gui + + + + + Add Subtrack + + + + + Midi Output Channel + + + + + TemplateDialog + + + MusE presets + + + + + User presets + + + + + TimeCanvas + + + Ctrl + + + + + Add Controller View + + + + + Toolbar1 + + + Solo + + + + + Cursor + Cursor + + + + Snap + Snap + + + + Quantize + + + + + To + + + + + All Events + + + + + Looped Ev. + + + + + Selected Ev. + + + + + Looped+Sel. + + + + + TrackComment + + + MusE: Track Comment + + + + + Track Comment: + + + + + TrackInfo + + + Track Type + + + + + Track Name + + + + + VAMGui + + + MusE: Load VAM Presets + + + + + MusE: Save VAM Presets + + + + + Velocity + + + MusE: Modify Velocity + + + + + WaveEdit + + + &File + + + + + &Edit + &Editieren + + + + Func&tions + + + + + &Gain + + + + + 200% + + + + + 150% + + + + + 75% + + + + + 50% + + + + + 25% + + + + + Other + + + + + Edit in E&xternal Editor + + + + + Mute Selection + + + + + Normalize Selection + + + + + Fade In Selection + + + + + Fade Out Selection + + + + + Reverse Selection + + + + + Select + + + + + Select &All + a&alles auswählen + + + + waveedit-tools + + + + + Transport + Transport + + + + pianoroll-tools + + + + + Solo + + + + + Cursor + Cursor + + + + WaveView + + + MusE - file size changed + + + + + When editing in external editor - you should not change the filesize +since it must fit the selected region. + +Missing data is muted + + + + diff --git a/attic/muse_qt4_evolution/share/locale/muse_es.qm b/attic/muse_qt4_evolution/share/locale/muse_es.qm new file mode 100644 index 00000000..536780a3 Binary files /dev/null and b/attic/muse_qt4_evolution/share/locale/muse_es.qm differ diff --git a/attic/muse_qt4_evolution/share/locale/muse_es.ts b/attic/muse_qt4_evolution/share/locale/muse_es.ts new file mode 100644 index 00000000..366feb15 --- /dev/null +++ b/attic/muse_qt4_evolution/share/locale/muse_es.ts @@ -0,0 +1,11154 @@ + + + + + + + Click this button to enable recording + Pulsa este bot� para habilitar la grabaci� + + + + sets amount of quantization: +0 - no quantization +100 - full quantization + selecciona la cantidad de cuantizaci�: +0 - sin cuantizar +100 - cuantizaci� completa + + + + select Pointer Tool: +with the pointer tool you can: + select parts + move parts + copy parts + selecciona la Herramienta de Puntero: +con la herramienta de puntero puedes: + seleccionar partes + mover partes + copiar partes + + + + Insert Note + Insertar nota + + + + Insert SysEx + Insertar sistema exclusivo + + + + Insert Ctrl + Insertar controlador + + + + Insert Meta + Insertar Meta + + + + Insert Channel Aftertouch + Insertar AfterTouch de canal + + + + Insert Key Aftertouch + Insertar AfterTouch de tecla + + + + Default + + + + + Refrain + + + + + Bridge + + + + + Intro + + + + + Coda + + + + + Chorus + Coro ;-) + + + + Solo + + + + + Brass + Metales + + + + Percussion + + + + + Drums + Percusi� + + + + Guitar + + + + + Bass + + + + + Flute + Flauta + + + + Strings + + + + + Keyboard + + + + + Piano + + + + + Saxophon + + + + + @default + + + Click this button to open a <em>new song</em>.<br>You can also select the <b>Open command</b> from the File menu. + Pulsa este bot� para abrir una <em>nueva canci�</em>Puedes usar tambi� el comando <b>Abrir</b> del me de archivo + + + + Click this button to save the song you are editing. You will be prompted for a file name. +You can also select the Save command from the File menu. + Pulsa este bot� para guardar la canci� que est� editando. Se te preguntar�por un nombre de archivo. +Puedes seleccionar tambi� el comando Guardar del men de Archivo + + + + Create New Song + Crea una nueva Canci� + + + + Click this button to stop playback + Pulsa este bot� para parar la reproducci� + + + + Click this button to start playback + Pulsa este bot� para iniciar la reproducci� + + + + Click this button to rewind to start position + Pulsa este bot� para regresar al principio + + + + Click this button to rewind + Pulsa este bot� para ir hacia atr� + + + + Click this button to forward current play position + Pulsa este bot� para adelantar la posici� de reproducci� + + + + don't quantize notes above this tick limit + no cuantices notas por encima de este l�ite de tick + + + + quantize also note len as default + cuantiza tambi� la longitud de la nota al valor por defecto + + + + loop between left mark and right mark + hace un bucle entre las marcas de izquierda y derecha + + + + record starts at left mark + la grabaci� comienza en la marca izquierda + + + + record stops at right mark + la grabaci� termina en la merca derecha + + + + rewind to start position + retrocede a la posici� de inicio + + + + rewind current position + retrasa la posici� actual + + + + move current position + mueve la posici� actual + + + + stop sequencer + para el secuenciador + + + + start sequencer play + inicia el secuenciador + + + + to record press record and then play + para grabar pulsa grabar y despu� reproducir + + + + send note off to all midi channels + envia un apagado de nota (note off) a todos los canales midi + + + + select Pencil Tool: +with the pencil tool you can: + create new parts + modify length of parts + selecciona la Herramienta de L�iz: +con la herramienta de l�iz puedes: + crear nuevas partes + modificar la longitud de las partes + + + + select Delete Tool: +with the delete tool you can delete parts + selecciona la Herramienta de Borrado: +con la herramienta de borrado puedes borrar partes + + + + select Cut Tool: +with the cut tool you can split a part + selecciona la Herramienta de Corte: +con la herramienta de core puedes partir una parte + + + + select Glue Tool: +with the glue tool you can glue two parts + selecciona la Herramienta de Pegado: +con la herramienta de pegado puedes unir dos partes + + + + select Score Tool: + + selecciona la Herramienta de Partitura: + + + + + select Quantize Tool: +insert display quantize event + selecciona la Herramianta de Cuantizaci�: +inserta un evento de cuantizaci� de visualizaci� + + + + select Drawing Tool + selecciona la Herramienta de Dibujo + + + + select Muting Tool: +click on part to mute/unmute + selecciona la Herramienta de Silenciar: +haz click en una parte para silenciar/des-silenciar + + + + pointer + puntero + + + + pencil + l�iz + + + + rubber + goma + + + + cutter + cortador + + + + score + partitura + + + + glue + pegamento + + + + quantize + cuantizador + + + + draw + dibujar + + + + mute parts + silenciar partes + + + + Off + Apagar + + + + presets (*.pre *.pre.gz *.pre.bz2) + preselecciones (*.pre *.pre.gz *.pre.bz2) + + + + All Files (*) + Todos los archivos (*) + + + + Add Midi Track + A�dir pista MIDI + + + + Add Wave Track + A�dir pista de audio + + + + Click this button to enable recording + Pulsa este bot� para habilitar la grabaci� + + + + m + m + + + + mute + silencio + + + + s + s + + + + solo + + + + + Mo + + + + + monitor + + + + + Dr + + + + + use drum map + + + + + off + apagado + + + + aR + + + + + automation read + + + + + aW + + + + + automation write + + + + + sync + + + + + send sync events + + + + + 1/2 channel + Canales 1/2 + + + + oR + + + + + output routing + ruteado de entrada + + + + iR + + + + + input routing + + + + + Channels + + + + + Bar + + + + + Midi + MIDI + + + + Add Midi Output + + + + + Add Midi Input + + + + + Audio + Audio + + + + Add Audio Output + + + + + Add Audio Group + + + + + Add Audio Input + + + + + MusE: create project directory + + + + + MusE: create template directory + + + + + Cannot find project <%1> + + + + + MusE: load Project + + + + + Open + Abrir + + + + Save + Guardar + + + + MusE: create instruments directory + + + + + Appearance + + + MusE: load image + MusE: carga imagen + + + + handle of transport window + gestor de la ventana de transporte + + + + track activity in arranger + actividad de tramos en el arreglador + + + + bigtime font color + color de fuente bigtime + + + + bigtime background color + color de fondo de bigtime + + + + waveedit background color + color de fondo de edici� de onda + + + + AppearanceDialogBase + + + MusE: Appearance settings + MusE: Configuraci� de apariencia + + + + Apply + Aplicar + + + + Ok + Aceptar + + + + Cancel + Cancelar + + + + Arranger + Arreglador + + + + Parts + Partes + + + + show frames + mostrar frames + + + + show names + mostrar nombres + + + + show events + mostrar eventos + + + + show Cakewalk Style + mostrar al estilo de Cakewalk + + + + Events + Eventos + + + + note on + nota on + + + + poly pressure + presi� polif�ica + + + + controller + controlador + + + + aftertouch + aftertouch + + + + pitch bend + pitch bend + + + + program change + cambio de programa + + + + special + especial + + + + Background picture + Imagen de fondo + + + + bg + fondo + + + + select... + selecciona... + + + + show snap grid + muestra la rejilla de captura + + + + Colors + Colores + + + + Items + Objetos + + + + selected + seleccionado + + + + current: + actual: + + + + change... + cambia... + + + + dynamic colors for track activity in arranger + colores din�icos para actividad en el arreglador + + + + Style/Fonts + Estilo/Tipografia + + + + QT Theme + tema QT + + + + Windows + Ventanas + + + + MusE + MusE + + + + Metal + Metal + + + + Norwegian Wood + Madera Noruega + + + + Platinum + Platino + + + + CDE + CDE + + + + Motif + Motif + + + + Motif Plus + Motif Plus + + + + Fonts + Tipografia + + + + Family + Familia + + + + Size + Tama� + + + + Font 1 + Tipografia 1 + + + + Font 2 + Tipografia 2 + + + + Font 3 + Tipografia 3 + + + + Font 0 + Tipografia 0 + + + + Bold + Negrita + + + + Italic + Cursiva + + + + ... + ... + + + + Font 4 + Tipografia 4 + + + + Font 5 + Tipografia 5 + + + + S + S + + + + R + R + + + + Arranger + + + Cursor + Cursor + + + + Snap + Snap + + + + Len + Longitud + + + + NO + No + + + + TrackInfo + Informaci� de pista + + + + Track + Pista + + + + Type + Tipo + + + + midi song type + tipo de canci� midi + + + + Pitch + Tono + + + + midi pitch + tono midi + + + + global midi pitch shift + desplazamiento de tono midi + + + + Tempo + Tempo + + + + midi tempo + tempo midi + + + + O-Port + Port de Salida + + + + Arranger + Arreglador + + + + Off + apagado + + + + Bar + comp� + + + + GM + GM + + + + GS + GS + + + + XG + XG + + + + N + N + + + + R + R + + + + A + A + + + + M + M + + + + S + S + + + + C + C + + + + Ch + Ch + + + + T + T + + + + Master + Maestro + + + + Group A + Grupo A + + + + Group B + Grupo B + + + + Group C + Grupo C + + + + Group D + Grupo D + + + + Mix + Mezcla + + + + Config Tracklist + + + + + all mute off + + + + + all solo off + + + + + all autoRead off + + + + + all autoWrite off + + + + + i + + + + + Show Track Info + + + + + m + m + + + + Show Mixer Strip + + + + + AudioConfBase + + + MusE: Audio Configuration + MusE: Configuraci� de Audio + + + + &Apply + &Aplicar + + + + &OK + C&orrecto + + + + &Cancel + &Cancelar + + + + Audio Parameters + Par�etros de Audio + + + + 32 + 32 + + + + 64 + 64 + + + + 128 + 128 + + + + 256 + 256 + + + + 512 + 512 + + + + 1024 + 1024 + + + + 2048 + 2048 + + + + 4096 + 4096 + + + + Frame Size: + Tama� de ventana: + + + + Delay: + Retardo: + + + + Sample Rate: + Velocidad de muestreo: + + + + 44100 + 44100 + + + + 48000 + 48000 + + + + 96000 + 96000 + + + + Audio Driver + Controlador de Audio + + + + Use Alsa + Usa Alsa + + + + Use JACK + Usa Jack + + + + No Audio + Sin Audio + + + + Status: + Estado: + + + + TextLabel6 + EtiquetadeTexto16 + + + + AudioMixerApp + + + 1/2 channel + Canales 1/2 + + + + pre fader - post fader + pre fader - port fader + + + + record + grabar + + + + mute + silencio + + + + pre fader listening + monitorizar pre fader + + + + record downmix + downmix de grabaci� + + + + off + apagado + + + + output routing + ruteado de entrada + + + + &Config + &Configuraci� + + + + Add Input Strip + A�dir canal de entrada + + + + S + S + + + + Pre + Pre + + + + dB + dB + + + + MusE: Audio Mixer + MusE: Mezclador de audio + + + + Inputs + Entradas + + + + Synthi + Entrada de sintetizador + + + + Tracks + Pistas + + + + Groups + Grupos + + + + Master + Maestro + + + + Group A + Grupo A + + + + Group B + Grupo B + + + + Group C + Grupo C + + + + Group D + Grupo D + + + + AudioStrip + + + off + apagado + + + + Pan + Bal + + + + S + S + + + + 1/2 channel + Canales 1/2 + + + + Pre + Pre + + + + pre fader - post fader + pre fader - port fader + + + + dB + dB + + + + record + grabar + + + + mute + silencio + + + + record downmix + downmix de grabaci� + + + + pre fader listening + monitorizar pre fader + + + + output routing + ruteado de entrada + + + + panorama + + + + + Channel %1 + + + + + MidiChannel + + + + + Channel + Canal + + + + Awl::MidiVolEntry + + + off + apagado + + + + db + + + + + Awl::VolEntry + + + off + apagado + + + + BigTime + + + MusE: Bigtime + MusE: Big Time + + + + ClipListEdit + + + MusE: Clip List Editor + MusE: Editor de lista de clips + + + + ClipListEditorBase + + + MusE: ClipList + MusE: Lista de Clips + + + + Name + Nombre + + + + Refs + Referencias + + + + Start + Inicio + + + + Len + Longitud + + + + Data + Datos + + + + Clip Properties + Propiedades del Clip + + + + Pos: + Posici�: + + + + Len: + Longitud: + + + + CommentBase + + + Form1 + Form1 + + + + Track Comment + Comentario de la pista + + + + Track 1 + Pista 1 + + + + ConfigMidiCtrlBase + + + &Cancel + &Cancelar + + + + ConfigMidiFileBase + + + &Cancel + &Cancelar + + + + 96 + 96 + + + + 192 + 192 + + + + 384 + 384 + + + + Enable extended smf format + Habilita el formato extendido de smf + + + + ConfigTrackListBase + + + Up + Arriba + + + + Down + Abajo + + + + &Cancel + &Cancelar + + + + CtrlDelegate + + + dB + dB + + + + off + apagado + + + + CtrlDialog + + + controller name + + + + + flag if controller contains data + + + + + CtrlEdit + + + Sel + Sel + + + + select controller + selecciona controlador + + + + CtrlListEditor + + + dB + dB + + + + CtrlPanel + + + select controller + selecciona controlador + + + + remove panel + quitar panel + + + + other ... + otro ... + + + + Sel + Sel + + + + x + x + + + + Velocity + Velocidad + + + + Pitch + Tono + + + + DeicsOnzeGui + + + Save configuration + + + + + Critical Error + + + + + Cannot open file %1 + + + + + Parsing error for file %1 + + + + + Load category dialog + + + + + Load set dialog + + + + + Save set dialog + + + + + New category + + + + + Delete category + + + + + Load category + + + + + Save category + + + + + Load set + + + + + Save set + + + + + Delete set + + + + + New subcategory + + + + + Delete subcategory + + + + + Load subcategory + + + + + Save subcategory + + + + + New preset + + + + + Delete preset + + + + + Load preset + + + + + Save preset + + + + + No more category supported + + + + + You can not add more categories + + + + + Do you really want to delete %1 ? + + + + + &Yes + + + + + &No + + + + + No category selected + + + + + You must first select a category. + + + + + Replace or add + + + + + %1 is supposed to be affected to the hbank number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + + + + + &Replace + + + + + &Add + + + + + Download error + + + + + There is no more free category slot. + + + + + Save category dialog + + + + + No more subcategory supported + + + + + You can not add more subcategories + + + + + No subcategory selected + + + + + You must first select a subcategory. + + + + + Load subcategory dialog + + + + + %1 is supposed to be affected to the lbank number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + + + + + There is no more free subcategory slot. + + + + + Save subcategory dialog + + + + + No more preset supported + + + + + You can not add more presets + + + + + No preset selected + + + + + You must first select a preset. + + + + + Load preset dialog + + + + + %1 is supposed to be affected to the prog number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + + + + + There is no more free preset slot. + + + + + Save preset dialog + + + + + Browse set dialog + + + + + Browse image dialog + + + + + DeicsOnzeGuiBase + + + Preset + Preselecci� + + + + LFO + LFO + + + + Speed + Velocidad + + + + Volume + Volumen + + + + Detune + Desafinaci� + + + + Reverb + Reverberaci� + + + + Pitch + Tono + + + + After Touch + After Touch + + + + Sustain + Sostenido + + + + Transpose + Transponer + + + + Save + Guardar + + + + Load + Cargar + + + + Text + Texto + + + + DrumEdit + + + Load Map + Carga Mapa + + + + Save Map + Guarda Mapa + + + + &Edit + &Editar + + + + Cut + Cortar + + + + Copy + Copiar + + + + Paste + Pegar + + + + Delete Events + Borrar Eventos + + + + Select All + Seleccionar todo + + + + Select None + Deseleccionar + + + + Invert + Invertir + + + + Inside Loop + Bucle interior + + + + Outside Loop + Bucle exterior + + + + &Select + &Seleccionar + + + + Step Record + Parar Grabaci� + + + + Midi Input + Entrada MIDI + + + + Add Controller View + A�dir Controlador + + + + M + M + + + + Sound + Sonido + + + + QNT + QNT + + + + E-Note + Nota-E + + + + Len + Longitud + + + + A-Note + Nota-A + + + + Ch + Ch + + + + Port + Puerto + + + + LV1 + VL1 + + + + LV2 + VL2 + + + + LV3 + VL3 + + + + LV4 + VL4 + + + + &File + &Fichero + + + + Load Drummap + Cargar mapa de percusi� + + + + Store Drummap + Guardar mapa de percusi� + + + + ctrl + control + + + + drummaps + mapas de percusi� + + + + Muse: Load Drum Map + MusE: Cargar mapa de percusi� + + + + MusE: Store Drum Map + MusE: Guardar mapa de percusi� + + + + &Functions + + + + + Drum Tools + + + + + Transport + + + + + EditCAfterDialog + + + Time Position + Posici� de tiempo + + + + Pressure + Presi� + + + + MusE: Enter Channel Aftertouch + MusE: Introduce el AfterTouch del canal + + + + EditCtrl14Dialog + + + Time Position + Posici� de tiempo + + + + Controller-H + Controlador-H + + + + Controller-L + Controlador-L + + + + Value + Valor + + + + MusE: Enter Controller14 Event + MusE: Introduce el evento del controlador 14 + + + + EditCtrl7Dialog + + + Time Position + Posici� de tiempo + + + + Controller + Controlador + + + + Value + Valor + + + + MusE: Enter Controller Event + MusE: Introduce el evento del controlador + + + + EditCtrl7DialogBase + + + MusE: Enter Controller + MusE: Introduce controlador + + + + Controller: + Controlador: + + + + Time Position: + Posici� de tiempo: + + + + Value: + Valor: + + + + controller value + valor del controlador + + + + OK + Aceptar + + + + Cancel + Cancelar + + + + EditCtrlBase + + + Time Position + Posici� de tiempo + + + + Value + Valor + + + + Controller + Controlador + + + + H-Bank + Banco-H + + + + L-Bank + Banco-L + + + + off + apagado + + + + &Cancel + &Cancelar + + + + EditEventDialog + + + Ok + Aceptar + + + + Cancel + Cancelar + + + + EditInstrument + + + MusE: Create file failed + + + + + MusE: Write File failed + + + + + MusE: Save Instrument Definition + + + + + Instrument Definition (*.idf) + + + + + MusE: Enter new Category + + + + + Enter new Category: + + + + + MusE + MusE + + + + The current Instrument contains unsaved data +Save Current Instrument? + + + + + &Save + &Guardar + + + + &Nosave + + + + + &Abort + + + + + EditInstrumentBase + + + &Delete + &Borrar + + + + Drum + Percusi� + + + + GM + GM + + + + GS + GS + + + + XG + XG + + + + Controller + Controlador + + + + Name + Nombre + + + + Type + Tipo + + + + RPN + RPN + + + + NRPN + NRPN + + + + Pitch + Tono + + + + Range + Rango + + + + list of defined controllers + Lista de controladores definidos + + + + This is the MusE list of defined controllers. + Esta es la lista de controladores definidos en MusE. + + + + SysEx + Sistema Exclusivo + + + + Tools + Herramientas + + + + New + Nueva + + + + &New + &Nuevo + + + + Open + Abrir + + + + &Open... + &Abrir... + + + + Save + Guardar + + + + &Save + &Guardar + + + + Save As + Guardar como + + + + Save &As... + Guardar &Como... + + + + Exit + Salir + + + + E&xit + &Salir + + + + EditMetaDialog + + + Time Position + Posici� de tiempo + + + + Meta Type + Tipo de Meta + + + + Enter Hex + Introduzca en Hexadecimal + + + + MusE: Enter Meta Event + MusE: Introduzca evento Meta + + + + EditMetaDialogBase + + + MusE: Enter Meta Event + MusE: Introduzca evento Meta + + + + OK + Aceptar + + + + Cancel + Cancelar + + + + TextLabel1 + EtiquetaTexto1 + + + + Time Position: + Posici� de tiempo + + + + Meta Type: + Tipo de Meta: + + + + Enter Hex + Escribe Hexadecimal + + + + EditNoteDialogBase + + + MusE: Enter Note + MusE: Escribe Nota + + + + OK + Aceptar + + + + Cancel + Cancelar + + + + Length: + Longitud: + + + + Time Position: + Posici� de tiempo + + + + Pitch: + Tono: + + + + Velocity On: + Velocidad On: + + + + Velocity Off: + Velocidad Off: + + + + EditPAfterDialog + + + Time Position + Posici� de tiempo + + + + Pitch + Tono + + + + Pressure + Presi� + + + + MusE: Enter Poly Aftertouch + Muse: Escribe el aftertouch polif�ico + + + + EditPitchDialog + + + Time Position + Posici� de tiempo + + + + Pitch + Tono + + + + MusE: Enter Pitch Shift + MusE: Introduce el deplazamiento de tono + + + + EditSysexDialogBase + + + MusE: Enter SysEx + MusE: Introduce el sistema exclusivo + + + + TimePosition: + Posici� de tiempo: + + + + Comment: + Comentario: + + + + OK + Aceptar + + + + Cancel + Cancelar + + + + EditToolBar + + + Edit Tools + Editar herramientas + + + + EffectRack + + + effect rack + rack de efectos + + + + move up + subir + + + + move down + bajar + + + + remove + quitar + + + + bypass + saltar + + + + show gui + mostrar gui + + + + new + nuevo + + + + change + cambiar + + + + show native gui + + + + + New Plugin + + + + + New Aux Send + + + + + Replace effect + + + + + Do you really want to replace the effect %1? + + + + + &Yes + + + + + &No + + + + + ExportMidiDialog + + + Save + + + + + as smf midi file + + + + + MusE: export midi smf file + + + + + FLUIDGui + + + FLUID: open Soundfile + + + + + Fluid: select Sound Font + + + + + FLUIDGuiBase + + + Form1 + Formulario1 + + + + Soundfont + Fuente de sonido + + + + Load + Cargar + + + + FLUIDSynthGuiBase + + + Load + Cargar + + + + Soundfont + Fuente de sonido + + + + Level + Nivel + + + + Width + Anchura + + + + Damping + Amortiguamiento + + + + Room Size + Tama� estancia + + + + Reverb + Reverberaci� + + + + Sine + Seno + + + + Triangle + Tri�gulo + + + + Type + Tipo + + + + Number + Nmero + + + + Speed + Velocidad + + + + Depth + Profundidad + + + + Chorus + Coro ;-) + + + + Gain + Ganancia + + + + FileDialogButtons + + + Form1 + Formulario1 + + + + Global + Global + + + + User + Usuario + + + + Project + Proyecto + + + + FluidSynthGui + + + Choose soundfont + + + + + FontSel + + + Size: + Tama�: + + + + GateTime + + + MusE: Modify Gate Time + MusE: Modifica el timpo de puerta + + + + GateTimeBase + + + MusE: Modify Gate Time + MusE: Modifica el timpo de puerta + + + + Range + Rango + + + + All Events + Todos los eventos + + + + Selected Events + Eventos seleccionados + + + + Looped Events + Eventos en bucle + + + + Selected & Looped + Seleccionados y en bucle + + + + Values + Valores + + + + Rate: + Velocidad: + + + + Offset: + Desplazamiento: + + + + % + % + + + + OK + Aceptar + + + + Cancel + Cancelar + + + + GlobalSettingsDialogBase + + + MusE: Global Settings + MusE: Valores globales + + + + Audio + Audio + + + + Mixer + Mezclador + + + + dB + dB + + + + min. Meter Value + valor m�imo del vumeter + + + + min.Slider Val + valor m�imo del desplazador + + + + Midi + MIDI + + + + Ticks + Ticks + + + + 1024 + 1024 + + + + 2048 + 2048 + + + + 4096 + 4096 + + + + 8172 + 8172 + + + + Displayed Resolution +(Ticks/Quarternote) + Resoluci� mostrada +(ticks/negra) + + + + 48 + 48 + + + + 96 + 96 + + + + 192 + 192 + + + + 384 + 384 + + + + 768 + 768 + + + + 1536 + 1536 + + + + 3072 + 3072 + + + + 6144 + 6144 + + + + 12288 + 12288 + + + + RTC Resolution +(Ticks/Sec) + Resoluci� del reloj +(Ticks/segundo) + + + + GUI + GUI + + + + /sec + /seg + + + + GUI Refresh Rate + Velocidad de refresco del GUI + + + + &Apply + &Aplicar + + + + &Ok + Ac&eptar + + + + &Cancel + &Cancelar + + + + Help Browser: + Navegador de ayuda: + + + + Arranger + Arreglador + + + + GreendotButton + + + record + grabar + + + + IIWUGuiBase + + + Form1 + Formulario1 + + + + Soundfont + Fuente de sonido + + + + Load + Cargar + + + + IIWUSynthGuiBase + + + IIWU Synth + Sintetizador IIWU + + + + Gain + Ganancia + + + + Room Size + Tama� estancia + + + + Damping + Amortiguamiento + + + + Level + Nivel + + + + Width + Anchura + + + + Speed + Velocidad + + + + Depth + Profundidad + + + + Number + Nmero + + + + Type + Tipo + + + + Sine + Seno + + + + Triangle + Tri�gulo + + + + Reverb + Reverberaci� + + + + Chorus + Coro ;-) + + + + Pop + Pop 8-? + + + + Push + Empuje + + + + ... + ... + + + + show iiwusynth controls + mostrar controles del sintetizador iiwu + + + + Load + Cargar + + + + Save + Guardar + + + + LMaster + + + new tempo + nuevo tempo + + + + new signature + nuevo comp� + + + + Meter + Metr�omo + + + + Time + Tiempo + + + + Type + Tipo + + + + Value + Valor + + + + MusE: Mastertrack + MusE: Pista maestra + + + + Tempo + Tempo + + + + Timesig + comp� + + + + ListEdit + + + &Edit + &Editar + + + + Cut + Cortar + + + + Copy + Copiar + + + + Paste + Pegar + + + + List Tools + Lista de herramientas + + + + Insert Tools + Insertar herramientas + + + + Delete Events + Borrar eventos + + + + Insert Note + Insertar nota + + + + insert Note + insertar Nota + + + + Insert SysEx + Insertar sistema exclusivo + + + + insert SysEx + insertar sistema exclusivo + + + + Insert Ctrl + Insertar controlador + + + + insert Ctrl + insertar controlador + + + + Insert Meta + Insertar Meta + + + + insert Meta + insertar Meta + + + + Insert Pitch + Insertar Tono + + + + insert Pitch + insertar Tono + + + + Insert Channel Aftertouch + Insertar AfterTouch de canal + + + + insert Channel Aftertouch + insertar AfterTouch de canal + + + + Insert Key Aftertouch + Insertar AfterTouch de tecla + + + + insert Poly Aftertouch + insertar AfterTouch Polif�ico + + + + Tick + Tick + + + + Bar + Comp� + + + + Typ + Tip + + + + Ch + Cn + + + + Val A + Val A + + + + Val B + Val B + + + + Val C + Val C + + + + Len + Lon + + + + Comment + Comentario + + + + MusE: List Edit + + + + + Parts + Partes + + + + Controller + + + + + MITTransposeBase + + + MusE: Midi Input Plugin: Transpose + MusE: Plugin de entrada MIDI : Transposici� + + + + On + Encendido + + + + TriggerKey + Tecla de salto + + + + Transpose: + Trasponer: + + + + +0 + +0 + + + + MPConfig + + + none + ninguno + + + + other raw ... + otro crudo (raw) ... + + + + MusE: Midi Port Table + MusE: Tabla de puertos MIDI + + + + Port + Puerto + + + + GUI + GUI + + + + Rec + Grabar + + + + Instrument + Instrumento + + + + Device Name + Nombre de dispositivo + + + + State + Estado + + + + unknown + desconocido + + + + MRConfigBase + + + MusE: Midi Input Plugin: Remote Control + MusE: Pluginde entrada MIDI : Control remoto + + + + Activate + Activar + + + + On + Encendido + + + + Actions + Acciones + + + + Stop + Parar + + + + Record + Grabar + + + + Goto Left Mark + Ir ala marca izquierda + + + + Play + Reproducir + + + + MTScale + + + bar scale + escala de compases + + + + MarkerView + + + Bar:Beat:Tick + Barra:Golpe:Tick + + + + Hr:Mn:Sc:Fr:Sf + Hr:Mn:Sg:Fr:Sf + + + + Lock + Bloquear + + + + Text + Texto + + + + Marker Properties + Propiedades del marcador + + + + MusE: Marker + MusE: Marcador + + + + add marker + a�dir marcador + + + + Add Marker + A�dir marcador + + + + delete marker + borrar marcador + + + + Delete Marker + Borrar Marcador + + + + &File + &Archivo + + + + &Edit + &Editar + + + + marker-tools + + + + + edit tools + + + + + Min:Sc:Fr:Sf + + + + + MasterEdit + + + Cursor + Cursor + + + + Snap + Snap + + + + time at cursor position + tiempo en la posici� del cursor + + + + tempo at cursor position + tempo en la posici� del cursor + + + + CurPos + Posici� del cursor + + + + tempo at current position + tempo en la posici� actual + + + + time signature at current position + comp� en la posici� actual + + + + Master + Maestro + + + + MusE: Mastertrack + Muse: Pista Maestra + + + + edit tools + editar herramientas + + + + EnableMaster + Habilitar maestro + + + + use master track + usar pista maestra + + + + Info + Info + + + + Off + Apagado + + + + EnableTempomap + + + + + Tempomap + + + + + Enable use of tempo map + + + + + MetronomeConfigBase + + + MusE: Metronome Config + MusE: Configuraci� del metr�omo + + + + Metronome + Metr�omo + + + + Audio Beep + Bip de audio + + + + MIDI Click + Click MIDI + + + + Midi Channel + Canal MIDI + + + + Measure Note + Nota de comp� + + + + Measure Velocity + Velocidad de comp� + + + + Beat Velocity + Velocidad de barra + + + + Beat Note + Nota de barra + + + + Midi Port + Puerto MIDI + + + + Precount + Cuenta atr� + + + + enable + habilitada + + + + Bars + Compases + + + + From Mastertrack + desde la pista Mestra + + + + / + / + + + + Signature + comp� + + + + Prerecord + pre-grabaci� + + + + Preroll + pre-escucha + + + + &Apply + &Aplicar + + + + &OK + Ac&eptar + + + + &Cancel + &Cancelar + + + + MidiChannelInfo + + + MidiController + + + Velocity + Velocidad + + + + MidiControllerEditDialog + + + MusE: save midi controller list + MusE: guardar lista de controladores MIDI + + + + MusE: load midi controller list + MusE: Cargar lista de controladores MIDI + + + + MidiControllerEditDialogBase + + + MusE: Define Midi Controller + MusE: Define controlador MIDI + + + + replace controller set + reemplazar conjunto de controladores + + + + merge controller set + unir conjunto de controladores + + + + save controller set as + guardar conjunto de controladores como + + + + Name + Nombre + + + + Type + Tipo + + + + H-Ctrl + Control-H + + + + L-Ctrl + Control-L + + + + Min Val + Valor m�imo + + + + Max Val + Valor m�imo + + + + list of defined controllers + lista de controladores definidos + + + + This is the MusE list of defined controllers. + Esta es la lista de controladores definidos por MusE. + + + + Properties + Propiedades + + + + Name + Nombre + + + + Max Value + Valor m�imo + + + + Min Value + Valor m�imo + + + + Control7 + Control7 :-? + + + + Control14 + Control14 + + + + RPN + RPN + + + + NRPN + NRPN + + + + XG-SysEx + Sys-Ex-XG + + + + SysEx + Sistema Exclusivo + + + + Type + Tipo + + + + &New + &Nuevo + + + + create new entry + crear entrada nueva + + + + pressing the New button you create a new entry +in the MusE list of defined controllers + pulsando el bot� se crear�una nueva +clase de controladores en la lista de MusE. + + + + &Delete + &Borrar + + + + delete selected entry + borra la clase seleccionada + + + + &OK + &Aceptar + + + + &Cancel + &Cancelar + + + + Channel + Canal + + + + Pitch + Tono + + + + Range + Rango + + + + MidiEditor + + + &Edit + &Editar + + + + Cut + Cortar + + + + Copy + Copiar + + + + Paste + Pegar + + + + Play Events + Reproducir eventos + + + + Step Record + + + + + Midi Input + Entrada MIDI + + + + Follow Song + + + + + MidiFileConfig + + + Enable extended smf format + Habilita el formato extendido de smf + + + + Division + Divisi� + + + + Copyright + Copyright + + + + Config exported Midi Files + Configurar archivos MIDI exportados + + + + MusE: Config exported Midi Files + MusE: configurar archivos MIDi exportados + + + + MidiFilterConfigBase + + + MusE: Midi Input Filter + MusE: Filtro de entrada MIDI + + + + Record Filter + Filtro de grabaci� + + + + Note On + Nota on + + + + Poly Pressure + Presi� polif�ica + + + + Controller + Caontrolador + + + + Program Change + Cambio de programa + + + + After Touch + After Touch + + + + Pitch Bend + Rueda de bend + + + + Sysex + Sistema exclusivo + + + + Thru Filter + Filtro Thru + + + + Controller Filter + Filtrar controlador + + + + Channel Filter + Filtro de canal + + + + 14 + 14 + + + + 10 + 10 + + + + 6 + 6 + + + + 12 + 12 + + + + 4 + 4 + + + + 2 + 2 + + + + 9 + 9 + + + + 8 + 8 + + + + 3 + 3 + + + + 13 + 13 + + + + 15 + 15 + + + + 16 + 16 + + + + 7 + 7 + + + + 11 + 11 + + + + 5 + 5 + + + + 1 + 1 + + + + &Cancel + &Cancelar + + + + MidiInPortStrip + + + AlsaDevices + + + + + MidiChannel + + + + + JackDevices + + + + + MidiInputTransformDialog + + + New + Nueva + + + + MidiInputTransformDialogBase + + + MusE: Midi Input Transformator + MusE: Transformador de entrada MIDI + + + + Filter + Filtrar + + + + All + Todo + + + + Equal + Igual + + + + Unequal + Diferente + + + + Note + Nota + + + + Poly Pressure + Presi� poif�ica + + + + Control Change + Cambio de control + + + + Aftertouch + AfterTouch + + + + Pitch Bend + Rueda de modulaci� + + + + NRPN + NRPN + + + + RPN + RPN + + + + Value 2 + Valor 2 + + + + Value 1 + Valor 1 + + + + Event Type + Tipo de Evento + + + + Ignore + Ignorar + + + + Higher + Mayor + + + + Lower + Menor + + + + Inside + Entre + + + + Outside + Fuera + + + + Channel + Canal + + + + Port + Puerto + + + + Processing + Procesando + + + + Keep + Mantener + + + + Fix + Arreglar + + + + Plus + M� + + + + Minus + Menos + + + + Multiply + Multiplicar + + + + Divide + Dividir + + + + Invert + Invertir + + + + ScaleMap + Mapa de escalado + + + + Flip + cambiar + + + + Dyn + Din�ico + + + + Random + Aleatorio + + + + Modules + M�ulos + + + + 1 + 1 + + + + 2 + 2 + + + + 3 + 3 + + + + 4 + 4 + + + + enable modul 1 + habilitar m�ulo 1 + + + + enable modul 2 + habilitar m�ulo 2 + + + + enable modul 3 + habilitar m�ulo 3 + + + + enable modul 4 + habilitar m�ulo 4 + + + + Preset + Preselecci� + + + + Name: + Nombre: + + + + Comment: + Comentario: + + + + Function + Funci� + + + + &New + &Nueva + + + + create new preset + crea nueva preselecci� + + + + &Delete + &Borrar + + + + delete preset + borra la preselecci� + + + + &Dismiss + &Ocultar + + + + PresetList + Lista de Preselecciones + + + + MidiOutPortStrip + + + MidiChannel + + + + + AlsaDevices + + + + + JackDevices + + + + + MidiPluginDialog + + + MusE: select midi plugin + + + + + File + Archivo + + + + Name + Nombre + + + + Version + + + + + Description + + + + + Ok + Aceptar + + + + Cancel + Cancelar + + + + MidiPortRouteBase + + + Input + Entrada + + + + MidiRack + + + midi effect rack + + + + + move up + + + + + move down + + + + + remove + + + + + bypass + + + + + show gui + + + + + new + nuevo + + + + MidiRawDeviceDialogBase + + + MusE: raw midi device configuration + NusE: Condifuraci� de dispositivo MIDI directo + + + + Name + Nombre + + + + Device + Dispositivo + + + + Type + Tipo + + + + Virt. Ports + Puertos virtuales + + + + Speed + Velocidad + + + + Handshaking + Control de flujo + + + + Device Properties + Propiedades del dispositivo + + + + Virt.Ports + Ports Virtuales + + + + Raw Device + Dispositivo directo + + + + Serial Port + Puerto s�ie + + + + Pipe + Tuberia + + + + Device Path + Direcci� del dispositivo + + + + 9600 + 9600 + + + + 19200 + 19200 + + + + 38400 + 38400 + + + + None + Ninguno + + + + RTS/CTS + RTS/CTS + + + + Xon/Xoff + Xon/Xoff + + + + &New + &Nuevo + + + + &Delete + &Borrar + + + + &OK + &Aceptar + + + + &Cancel + &Cancelar + + + + MidiStrip + + + Var + Var + + + + Rev + Rev + + + + Cho + Cho + + + + off + apagado + + + + dB + dB + + + + Pan + Bal + + + + record + grabar + + + + mute + silencio + + + + pre fader listening + monitorizar pre fader + + + + VariationSend + + + + + ReverbSend + + + + + ChorusSend + + + + + Pan/Balance + + + + + Tracks + Pistas + + + + OutputPorts + + + + + MidiSyncConfigBase + + + MusE: Midi Sync + MusE: Sincronizaci� MIDI + + + + Apply + Aplicar + + + + Ok + Aceptar + + + + Cancel + Cancelar + + + + hour + hora + + + + h + h + + + + minute + minuto + + + + m + m + + + + second + segundo + + + + s + s + + + + frame + frame + + + + f + f + + + + subframe + sub-frame + + + + 24 + 24 + + + + 25 + 25 + + + + 30D + 30D + + + + 30N + 30N + + + + Id: + Id: + + + + device id + id de dispositivo + + + + Port: + Puerto: + + + + midi port + puerto MIDI + + + + Sync Source + Fuente de Sincronizaci� + + + + accept MTC + aceptar MTC + + + + accept Midi Clock + aceptar MIDI clock + + + + accept MMC + aceptar MMC + + + + Sync Gen + Generar Sync + + + + Midi Time Code (MTC) + C�igo de Tiempo Midi (MTC) + + + + Midi Clock + Reloj Midi + + + + Midi Machine Control (MMC) + Control de m�uina MIDI (MMC) + + + + Sync Mode + Modo de sincronizaci� + + + + Master + Maestro + + + + Slave + Esclavo + + + + all + todo + + + + MTC + MTC + + + + Type: + Tipo: + + + + Offset: + Desplazamiento: + + + + MidiSyntiStrip + + + OutputPorts + + + + + Channel + Canal + + + + Input Ports + + + + + MidiTimeDelegate + + + dB + dB + + + + off + apagado + + + + MidiTrackInfo + + + Channel %1 + + + + + Midi Port + Puerto MIDI + + + + MidiTrackInfoBase + + + MusE: TrackInfo + MusE: Informaci� de pista + + + + output channel + canal de salida + + + + all midi events are send to this output channel + todos los eventos MIDI se envian a �te canal de salida + + + + Track Info + Informaci� de Pista + + + + % + % + + + + Track Name + Nombre de Pista + + + + output port + puerto de salida + + + + off + apagado + + + + change stereo position + cambiar posici� estereof�ica + + + + OCh. + OCh. + + + + MidiThru + Midi Thru + + + + ??? + ??? + + + + select instrument patch + selecciona el grupo de instrumento + + + + Transp. + Transposici� + + + + Volume + Volumen + + + + Channel Info + Informaci� de Canal + + + + Pan + Balance + + + + Delay + Delay + + + + H-Bank + Banco-H + + + + Compr. + Compr. + + + + L-Bank + Banco-L + + + + Progr. + Progr. + + + + Velocity + Velocidad + + + + Length + Longitud + + + + input ports + puertos de entrada + + + + IChan. + Canal de entrada + + + + input channels + Canales de entrada + + + + Events from all configured channels are +recorded to this track. +You can specify more than one channel for +recording: + 1 2 3 record from channel 1 2 and 3 + 1-3 same + 1-3 5 record from channel 1 2 3 and 5 + Los eventos de todos los canales configurados +se graban en esta pista. +Puedes especificar m� de un canal para grabar: + 1 2 3Graba desde los canales 1, 2 y 3 + 1-3Lo mismo + 1-3 5Graba desde los canales 1, 2, 3 y 5 + + + + Rec + Grabar + + + + Output Port + Puerto de salida + + + + MidiTrackerEditor + + + &View + + + + + MidiTracker Tools + + + + + Panic + + + + + Transport + + + + + row features + + + + + Number of visible rows + + + + + Quantize + Cuantizar + + + + MidiTransformDialogBase + + + MusE: Midi Transformator + MusE: Transformador MIDI + + + + &New + &Nueva + + + + &Delete + &Borrar + + + + &Apply + &Aplicar + + + + &OK + Ac&eptar + + + + &Cancel + &Cancelar + + + + PresetList + Lista de preselecciones + + + + Processing + Procesando + + + + Event Type + Tipo de evento + + + + Keep + Mantener + + + + Fix + Arreglar + + + + Note + Nota + + + + Poly Pressure + Presi� polif�ica + + + + Control Change + Cambio de control + + + + Aftertouch + AfterTouch + + + + Pitch Bend + Rueda de modulaci� + + + + NRPN + NRPN + + + + RPN + RPN + + + + Plus + M� + + + + Minus + Menos + + + + Multiply + Multiplicar + + + + Divide + Dividir + + + + Value 2 + Valor 2 + + + + Invert + Invertir + + + + ScaleMap + Escalado de mapa + + + + Flip + Cambiar + + + + Dyn + Dyn + + + + Random + Aleatorio + + + + Value 1 + Valor 1 + + + + Length + Longitud + + + + Position + Posici� + + + + Filter + Filtro + + + + All + Todo + + + + Equal + Igual + + + + Unequal + Diferente + + + + Ignore + Ignora + + + + Higher + Mayor + + + + Lower + Menor + + + + Inside + Entre + + + + Outside + Fuera + + + + Bar Range + Rango de compases + + + + Preset + Preselecci� + + + + Name: + Nombre: + + + + Comment: + Comentario: + + + + Range + Rango + + + + process all events + procesar todos los eventos + + + + selected tracks + seleccionar pistas + + + + inside loop + dentro de bucle + + + + Function + Funci� + + + + Select + Seleccionar + + + + Quantize + Cuantizar + + + + Delete + Borrar + + + + Transform + Transformar + + + + Insert + Insertar + + + + Copy + Copiar + + + + Extract + Extraer + + + + Quantize Value + Cuantizar valor + + + + Sysex + Sistema exclusivo + + + + MidiTransformerDialog + + + New + Nueva + + + + MixdownFileDialog + + + Wave Files (*.wav);;All Files (*) + Archivos de onda (*.wav);;Todos los archivos(*) + + + + MusE: set mixdown file name + + + + + MixdownFileDialogBase + + + MusE: Set Mixdown Wavefile + MusE: Selecciona el archivo de Masterizaci� + + + + &OK + &Aceptar + + + + &Cancel + &Cancelar + + + + File Path + Directorio del archivo + + + + Channel + Canal + + + + Stereo + Est�eo + + + + Mono + Mono + + + + 5.1 + 5.1 + + + + wav,16 Bit + wav, 16 bits + + + + wav, 24 Bit + wav, 24 bits + + + + wav, 32 Bit (float) + wav, 32 bits + + + + Format + Formato + + + + Mixer + + + Mute + Silencio + + + + MusE: Midi Mixer + MusE: MExclador MIDI + + + + Rev + Rev + + + + Cho + Cho + + + + Var + Var + + + + Pan + Bal + + + + Master + Maestro + + + + Port + Puerto + + + + MusE: Mixer + + + + + &Create + &Crear + + + + &View + + + + + Routing + + + + + Show Midi Tracks + + + + + Show Midi Out Ports + + + + + Show Midi In Ports + + + + + Show Wave Tracks + + + + + Show Output Tracks + + + + + Show Group Tracks + + + + + Show Input Tracks + + + + + Show Synthesizer + + + + + MusE + + + &File + &Archivo + + + + Open &Recent + Abrir &Recientes + + + + Save &As + Guardar c&omo + + + + Config &Printer + Configurar &Impresi� + + + + Import Midifile + Importar archivo MIDI + + + + Export Midifile + Exportar archivo MIDI + + + + Import Wave File + Importar archivo de audio + + + + &Quit + &Salir + + + + &Edit + &Editar + + + + C&ut + C&ortar + + + + &Copy + &Copiar + + + + &Paste + &Pegar + + + + Delete Track + Borrar pista + + + + Add Track + A�dir Pista + + + + Select &All + Seleccion&ar Todo + + + + &Deselect All + &Deseleccionar Todo + + + + Invert &Selection + Invertir &Selecci� + + + + &Inside Loop + &Interior de bucle + + + + &Outside Loop + &Exterior de Bucle + + + + All &Parts on Track + Todas las &Partes de la pista + + + + Select + Seleccionar + + + + Drums + Percusi� + + + + List + Lista + + + + Graphic + Gr�ico + + + + Mastertrack + Pista Maestra + + + + Midi &Transform + &Transformaci� MIDI + + + + Modify Gate Time + Modificar el tiempo de puerta + + + + Modify Velocity + Modificar Velocidad + + + + Crescendo + Crescendo + + + + Transpose + Transponer + + + + Thin Out + Adelgazar? (Thin Out) + + + + Erase Event + Borrar Evento + + + + Note Shift + Desplazamiento de nota + + + + Move Clock + Mover reloj + + + + Copy Measure + Copiar comp� + + + + Erase Measure + Vaciar comp� + + + + Delete Measure + Borrar comp� + + + + Create Measure + Crear comp� + + + + Mix Track + Mezclar pista + + + + Midi + MIDI + + + + &Structure + E&structura + + + + Global Cut + Corte global + + + + Global Insert + Inserci� Global + + + + Global Split + Partici� Global + + + + Copy Range + Copiar Rango + + + + Cut Events + Cortar eventos + + + + &Display + &Mostrar + + + + Transport Panel + Panel de transporte + + + + Bigtime window + ventana BigTime + + + + dont follow Song + no sigas la canci� + + + + follow page + sigue la p�ina + + + + follow continuous + sigue cont�uamente + + + + &Config + &Configuraci� + + + + Global Settings + Selecciones Globales + + + + follow song + seguir canci� + + + + Metronome + Metr�omo + + + + Midi Sync + Sincronizaci� MIDI + + + + Midi File Config + Configuraci� de archivos MIDI + + + + Appearance settings + Selecciones de apariencia + + + + Soft Synthesizer + Sintetizador virtual + + + + Midi Ports + Puertos MIDI + + + + Audio System + Sistema de Audio + + + + Save Configuration + Guardar configuraci� + + + + Midi Input Transform + Transformaci� de entrada MIDI + + + + Midi Input Filter + Filtrado de entrada MIDI + + + + Midi Remote Control + Control remoto MIDI + + + + Random Rhythm Generator + generador aleatorio de ritmos + + + + &Midi + &MIDI + + + + Mixer + Mezclador + + + + Define Controller + Define Controlador + + + + Input Plugins + Plugins e entrada + + + + Reset Instr. + Reinicializa Instrumento + + + + Init Instr. + Inicializa Instruemnto + + + + local off + apagado local + + + + &Audio + &Audio + + + + Audio + Audio + + + + Cliplist + Lista de Clips + + + + Bounce to Track + Rebotar a pista + + + + Bounce to File + Rebotar a Archivo + + + + Bounce + Rebotar + + + + &Help + A&yuda + + + + Browser + Navegador + + + + &About + &Acerca de + + + + About&Qt + Acerca de &Qt + + + + What's &This + Qu�es esto + + + + MusE: load project + MusE: Carga proyecto + + + + The current Project contains unsaved data +Save Current Project? + El proyecto actual contiene datos no guardados +Guardamos el proyecto actual? + + + + &Save + &Guardar + + + + &Nosave + &No Guardar + + + + &Abort + &Abortar + + + + MusE: Save As + MusE: Guardar como + + + + MusE: Import Midi + MusE: Importar MIDI + + + + MusE: Export Midi + MusE: Exportar MIDI + + + + Nothing to edit + Nada para editar + + + + The current Project contains unsaved data +Load overwrites current Project: +Save Current Project? + El proyecto actual contine datos no guardados +Cargar sobreescribe el proyecto actual: +Guardar el proyecto actual? + + + + &Overwrite + S&obre escribir + + + + no help found at: + no se ha encontrado ayuda en: + + + + MusE: Open Help + MusE: Abre ayuda + + + + to import a audio file you have first to selecta audio track + para importar un archivo de audio tienes que tener seleccionada una pista de audio + + + + UndoRedo + Deshacer/Rehacer + + + + undo + deshacer + + + + Und&o + &Deshacer + + + + redo + rehacer + + + + Re&do + &Rehacer + + + + undo last change to song + deshace el ltimo cambio en la canci� + + + + redo last undo + rehace el ltimo deshacer + + + + Transport + Transporte + + + + loop + bucle + + + + Loop + Bucle + + + + punchin + pinchar + + + + Punchin + Pinchar + + + + punchout + fin pinchado + + + + Punchout + Fin pinchado + + + + start + empezar + + + + Start + Empezar + + + + rewind + retroceder + + + + Rewind + Retroceder + + + + forward + avanzar + + + + Forward + Avanzar + + + + stop + parar + + + + Stop + Parar + + + + play + reproducir + + + + Play + Reproducir + + + + record + grabar + + + + Record + Grabar + + + + panic + p�ico + + + + Panic + P�ico + + + + new + nuevo + + + + &New + &Nuevo + + + + open + abrir + + + + &Open + &Abrir + + + + save + guardar + + + + pianoroll + pianola + + + + Pianoroll + Pianola + + + + score + partitura + + + + Score + Partitura + + + + marker + marcador + + + + Marker + Marcador + + + + File Buttons + Botones de Archivo + + + + Unknown File Format + Formato de archivo desconocido + + + + none + ninguno + + + + MusE: Write File failed + MusE: La grabaci� del archivo ha fallado + + + + MusE: About + Muse: Acerca de + + + + MusE: Song: + MusE: Canci�: + + + + reading midifile + + leyendo archivo midi + + + + + +failed + +fall� + + + + MusE: Copy Range + MusE: Copiar Rango + + + + not implemented + no implementado + + + + MusE: Cut Events + MusE: Cortar Eventos + + + + MusE: Bounce to Track + MusE: Rebotar a la pista + + + + more than one target track selected + m� de una pista de destino seleccionada + + + + wrong target track type, +select wave track as target + tipo de pista err�ea, +selecciona una pista de audio como destino + + + + no target track selected + no hay pista de destino seleccionada + + + + +failed: + +fall� + + + + Arranger + Arreglador + + + + Cursor + Cursor + + + + Snap + Snap + + + + Pitch + Tono + + + + midi pitch + tono midi + + + + global midi pitch shift + desplazamiento de tono midi + + + + Tempo + Tempo + + + + midi tempo + tempo midi + + + + N + N + + + + MusE manual not found at: + + + + + to import a audio file you have first to selecta wave track + + + + + Failed to start audio! + + + + + Was not able to start audio, check if jack is running. + + + + + + Project Buttons + + + + + &Project + + + + + Delete Selected Tracks + + + + + Project Properties + + + + + &View + + + + + Edit Instrument + + + + + Restart Audio + + + + + Setti&ngs + + + + + Configure shortcuts + + + + + Midi File Export + + + + + Preferences + + + + + &Manual + + + + + &MusE homepage + + + + + &Report Bug... + + + + + &About MusE + + + + + What's &This? + + + + + Len + + + + + MusE: new project + + + + + Cannot create project folder <%1> + + + + + Cannot open template file +%1 + + + + + File <%1> read error + + + + + MusE: Create tmp file failed + + + + + MusE: Bounce + + + + + set left/right marker for bounce range + + + + + MusE: Bounce to File + + + + + no output track found + + + + + MusE: import midi file + + + + + rewind to start position + retrocede a la posici� de inicio + + + + start sequencer play + inicia el secuenciador + + + + Open + Abrir + + + + Save + Guardar + + + + MuseApplication + + + Transport: Goto Start + + + + + Goto Start + + + + + rewind to start position + retrocede a la posici� de inicio + + + + Transport: Toggle Loop section + + + + + Loop + Bucle + + + + loop between left mark and right mark + hace un bucle entre las marcas de izquierda y derecha + + + + Transport: Start playback from current location + + + + + Play + Reproducir + + + + start sequencer play + inicia el secuenciador + + + + Transport: Play, Stop, Rewind + + + + + Transport: Stop Playback + + + + + Stop + Parar + + + + stop sequencer + para el secuenciador + + + + Transport: Goto left marker + + + + + Transport: Goto right marker + + + + + Transport: Toggle metronome + + + + + Transport: Toggle Record + + + + + Record + Grabar + + + + to record press record and then play + para grabar pulsa grabar y despu� reproducir + + + + Transport: Punch In + + + + + Punchin + Pinchar + + + + record starts at left mark + la grabaci� comienza en la marca izquierda + + + + Transport: Punch Out + + + + + Punchout + Fin pinchado + + + + record stops at right mark + la grabaci� termina en la merca derecha + + + + Transport: Rewind + + + + + rewind + retroceder + + + + rewind current position + retrasa la posici� actual + + + + Transport: Forward + + + + + forward + avanzar + + + + move current position + mueve la posici� actual + + + + Panic + + + + + send note off to all midi channels + envia un apagado de nota (note off) a todos los canales midi + + + + Edit: Undo + + + + + undo + deshacer + + + + undo last change to song + deshace el ltimo cambio en la canci� + + + + Edit: Redo + + + + + redo + rehacer + + + + redo last undo + rehace el ltimo deshacer + + + + Edit: Cut + + + + + Cut + Cortar + + + + Edit: Copy + + + + + Copy + Copiar + + + + Edit: Paste, + + + + + Paste + Pegar + + + + Edit: Delete + + + + + Delete + Borrar + + + + Open + Abrir + + + + open project + + + + + Click this button to select a new project +You can also select the <b>Open command</b> from the Project menu. + + + + + Save + Guardar + + + + save project + + + + + Click this button to save the project you are editing. +You can also select the Save command from the Project menu. + + + + + File: Save as + + + + + save project as... + + + + + Click this button to save a new copy of the project. + + + + + + File: Save as Template + + + + + save project as template + + + + + Click this button to save the project you are editing +for later use as a template. + + + + + File: Open recent file + + + + + File: Import midi file + + + + + File: Export midi file + + + + + File: Import audio file + + + + + File: Quit MusE + + + + + Quit MusE + + + + + Edit: Select parts on track + + + + + All &Parts on Track + Todas las &Partes de la pista + + + + Open Pianoroll + + + + + Pianoroll + Pianola + + + + Start Pianoroll Editor + + + + + Open MidiTracker + + + + + MidiTracker + + + + + Start Midi Tracker + + + + + Open drumeditor + + + + + Drum Editor + + + + + Start Drum Editor + + + + + Open wave editor + + + + + Wave Editor + + + + + Open listeditor + + + + + Properties + Propiedades + + + + open Properties Editor + + + + + Open mastertrack editor + + + + + Mastertrack (Tempo) Editor + + + + + Start Mastertrack (Tempo) Editor + + + + + Add midi track + + + + + Add drum track + + + + + Add wave track + + + + + Add audio output + + + + + Add audio group + + + + + Add audio input + + + + + Structure: Global cut + + + + + Structure: Global insert + + + + + Structure: Global split + + + + + Structure: Copy range + + + + + Structure: Cut events + + + + + View: Open mixer 1 window + + + + + Mixer1 + + + + + Show Mixer 1 + + + + + View: Open mixer 2 window + + + + + Mixer2 + + + + + Show Mixer 2 + + + + + View: Toggle transport window + + + + + Transport + + + + + Show Transport Window + + + + + View: Toggle bigtime window + + + + + BigTime + + + + + Show BigTime Window + + + + + View: Open marker window + + + + + Marker + Marcador + + + + Show Marker List + + + + + Settings: Follow song by page + + + + + Settings: Follow song off + + + + + Settings: Follow song continuous + + + + + Settings: Configure shortcuts + + + + + Settings: Configure metronome + + + + + Settings: Midi sync configuration + + + + + Settings: Midi file export configuration + + + + + Settings: Midi ports / Soft Synth + + + + + Settings: Audio subsystem configuration + + + + + Midi: Edit midi instruments + + + + + Midi: Midi remote control + + + + + Midi: Reset midi + + + + + Midi: Init midi + + + + + Midi: Midi local off + + + + + Audio: Bounce audio to track + + + + + Audio: Bounce audio to file + + + + + Audio: Restart audio + + + + + Help: Open Manual + + + + + Help: Toggle whatsthis mode + + + + + Edit: Edit selected part + + + + + Edit: Select nearest part on track above + + + + + Edit: Add nearest part on track above + + + + + Edit: Select nearest part on track below + + + + + Edit: Add nearest part on track below + + + + + Midi: Transpose + + + + + Transpose + Transponer + + + + Edit: Select all + + + + + Select All + + + + + Edit: Select none + + + + + Deselect All + + + + + Edit: Invert selection + + + + + Invert Selection + + + + + Edit: Select events/parts inside locators + + + + + Select Inside Loop + + + + + Edit: Select events/parts outside locators + + + + + Select Outside Loop + + + + + Edit: Select nearest part/event to the left + + + + + Edit: Add nearest part/event to the left to selection + + + + + Edit: Add nearest part/event to the right to selection + + + + + Edit: Set locators to selection + + + + + Edit: Increase pitch + + + + + Edit: Decrease pitch + + + + + Edit: Set fixed length on midi events + + + + + Set fixed length + + + + + Quantize: Over Quantize + + + + + Over Quantize + Sobre cuantizar + + + + Quantize: Note On Quantize + + + + + Note On Quantize + Cuantizar inicio de nota + + + + Quantize: Note On/Off Quantize + + + + + Note On/Off Quantize + Cuantizar inicio y final de nota + + + + Quantize: Iterative Quantize + + + + + Iterative Quantize + Cuantizaci� iterativa + + + + Quantize: Configure quant + + + + + Quantize: Modify Gate Time + + + + + Modify Gate Time + Modifica el tiempo de puerta + + + + Quantize: Modify Velocity + + + + + Modify Velocity + Modifica la velocidad + + + + Edit: Crescendo + + + + + Crescendo + Crescendo + + + + Edit: Thin Out + + + + + Thin Out + Adelgazar + + + + Edit: Erase Event + + + + + Erase Event + Borrar evento + + + + Edit: Note Shift + + + + + Note Shift + Desplazar nota + + + + Edit: Move Clock + + + + + Move Clock + Mover reloj + + + + Edit: Copy Measure + + + + + Copy Measure + Copiar comp� + + + + Edit: Erase Measure + + + + + Erase Measure + Vaciar comp� + + + + Edit: Delete Measure + + + + + Delete Measure + Borrar comp� + + + + Edit: Create Measure + + + + + Create Measure + Crear comp� + + + + Edit: Change event color + + + + + Tool: Pointer + + + + + Pointer + + + + + select Pointer Tool: +with the pointer tool you can: + select parts + move parts + copy parts + selecciona la Herramienta de Puntero: +con la herramienta de puntero puedes: + seleccionar partes + mover partes + copiar partes + + + + Tool: Pencil + + + + + Pencil + + + + + select Pencil Tool: +with the pencil tool you can: + create new parts + modify length of parts + selecciona la Herramienta de L�iz: +con la herramienta de l�iz puedes: + crear nuevas partes + modificar la longitud de las partes + + + + Tool: Eraser + + + + + Eraser + + + + + select Delete Tool: +with the delete tool you can delete parts + selecciona la Herramienta de Borrado: +con la herramienta de borrado puedes borrar partes + + + + Tool: Scissor + + + + + Scissor + + + + + select Cut Tool: +with the cut tool you can split a part + selecciona la Herramienta de Corte: +con la herramienta de core puedes partir una parte + + + + Tool: Glue + + + + + Glue + + + + + select Glue Tool: +with the glue tool you can glue two parts + selecciona la Herramienta de Pegado: +con la herramienta de pegado puedes unir dos partes + + + + Declone + + + + + Tool: Quantize + + + + + Quantize + Cuantizar + + + + select Quantize Tool: +insert display quantize event + selecciona la Herramianta de Cuantizaci�: +inserta un evento de cuantizaci� de visualizaci� + + + + Tool: Line Draw + + + + + Draw + + + + + select Drawing Tool + selecciona la Herramienta de Dibujo + + + + Tool: Mute Parts + + + + + Mute + Silencio + + + + select Muting Tool: +click on part to mute/unmute + selecciona la Herramienta de Silenciar: +haz click en una parte para silenciar/des-silenciar + + + + Transport: Increase current position + + + + + Transport: Decrease current position + + + + + Quantize: Set quantize to 1/1 note + + + + + Quantize: Set quantize to 1/2 note + + + + + Quantize: Set quantize to 1/4 note + + + + + Quantize: Set quantize to 1/8 note + + + + + Quantize: Set quantize to 1/16 note + + + + + Quantize: Set quantize to 1/32 note + + + + + Quantize: Set quantize to 1/64 note + + + + + Quantize: Toggle triol quantization + + + + + Quantize: Toggle punctuation quantization + + + + + Quantize: Toggle punctuation quantization (2) + + + + + Insert + Insertar + + + + Insert Tempo + + + + + Insert Signature + + + + + Change Event Position + + + + + Edit Event Value + + + + + NoteInfo + + + Start + Inicio + + + + Len + Longitud + + + + Pitch + Tono + + + + Velo On + Velocidad On + + + + Velo Off + Velocidad Off + + + + Note Info + Informaci� de nota + + + + OrganGuiBase + + + MusE: Organ + MusE: �gano + + + + Presets + Preselecciones + + + + Set + Pon + + + + load preset list + cargar lista de preselecciones + + + + save preset list + guardar lista de preselecciones + + + + O-1 + 0-1 + + + + Oscillator + Oscilador + + + + Brass + Metales + + + + Reed + Reed + + + + Flute + Flauta + + + + Drawbars + Drawbars + + + + 16' + 16' + + + + 4' + 4' + + + + 2 2/3' + 2 2/3' + + + + 2' + 2' + + + + 8' + 8' + + + + 5 1/3' + 5 1/3' + + + + Envelope Lo + Envolvente Lo + + + + Attack(ms) + Ataque (ms) + + + + Decay(ms) + Decaimiento (ms) + + + + Sustain(%) + Sostenido (%) + + + + Release(ms) + Relajaci� (ms) + + + + Envelope Hi + Envolvente Hi + + + + Release + Relajaci� + + + + Sustain + Sostenido + + + + Decay + Decaimiento + + + + Attack + Ataque + + + + Velocity + Velocidad + + + + OutportCombo + + + Midi Output Port + + + + + PageSettings + + + Paper Size + Tama� del papel + + + + user + usuario + + + + Margins + M�genes + + + + Header + Cabecera + + + + Title + T�ulo + + + + Author + Autor + + + + Fonts + Tipos + + + + Page No. + P�ina n + + + + Measure No + Comp� n + + + + Track Name + Nombre de Pista + + + + Lyrics + Letra + + + + Layout + Disposici� + + + + Scale + Escala + + + + Flags + Se�lizadores + + + + show page no. + muestra el nmero de p�ina + + + + show measure no. + muestra el nmero de comp� + + + + show track name + muestra el nombre de la pista + + + + Ok + Aceptar + + + + Apply + Aplicar + + + + Cancel + Cancelar + + + + left Margin + Margen izquierdo + + + + top Margin + Margen Superior + + + + right Margin + Margen derecho + + + + bottom Margin + Margen inferior + + + + Bars across the Page + Barras a trav� de la p�ina + + + + PartCanvas + + + C&ut + C&ortar + + + + &Copy + &Copiar + + + + rename + renombrar + + + + delete + borrar + + + + split + partir + + + + glue + pegar + + + + pianoroll + pianola + + + + score + partitura + + + + list + lista + + + + drums + percusi� + + + + Cannot copy/move/clone to different Track-Type + No puedo copiar/mover/clonar a un tipo diferente de pista + + + + color + color + + + + de-clone + des-clonar + + + + wave edit + editar onda + + + + Cannot paste: multiple tracks selected + No puedo pegar: mtilpes pistas seleccionadas + + + + Cannot paste: no track selected + No puedo pegar: No hay pista seleccionada + + + + Cannot paste midi parts to wave track + No puedo pegar MIDI en una pista de audio + + + + Cannot paste wave parts to midi track + No puedo pegar audio en una pista MIDI + + + + Cannot paste: wrong data type + No puedo pegar: Tipo de datos equivocado + + + + AutoFill... + + + + + miditracker + + + + + MusE: Get auto fill loop len + + + + + Measures: + + + + + MusE: Change Part Name + + + + + PartName: + + + + + Rename + + + + + Color + + + + + PatchBay + + + MusE: ALSA MIDI Patch Bay + MusE: Panel de ruteado MIDI de ALSA + + + + PatchBayBase + + + ALSA Patch Bay + Panel de ruteado de ALSA + + + + PianoRoll + + + &Edit + &Editar + + + + Cut + Cortar + + + + Copy + Copiar + + + + Paste + Pegar + + + + Delete Events + Borrar eventos + + + + Select All + Seleccionar Todo + + + + Select None + De-seleccionar todo + + + + Invert + Invertir + + + + Inside Loop + Dentro del bucle + + + + Outside Loop + Fuera del bucle + + + + &Select + &Seleccionar + + + + blue + azul + + + + pitch colors + colores de tono + + + + velocity colors + colores de velocidad + + + + &Config + &Configurar + + + + event color + color de eventos + + + + &Functions + &Funciones + + + + Over Quantize + Sobre cuantizar + + + + Note On Quantize + Cuantizar inicio de nota + + + + Note On/Off Quantize + Cuantizar inicio y final de nota + + + + Iterative Quantize + Cuantizaci� iterativa + + + + Pianoroll Tools + Herramientas de pianola + + + + Step Record + Grabaci� por pasos + + + + Midi Input + Entrada MIDI + + + + Play Events + Reproducir eventos + + + + Add Controller View + A�de vista de controladores + + + + Config Quant... + Configura cuantizaci�... + + + + Modify Gate Time + Modifica el tiempo de puerta + + + + Modify Velocity + Modifica la velocidad + + + + Crescendo + Crescendo + + + + Transpose + Transponer + + + + Thin Out + Adelgazar + + + + Erase Event + Borrar evento + + + + Note Shift + Desplazar nota + + + + Move Clock + Mover reloj + + + + Copy Measure + Copiar comp� + + + + Erase Measure + Vaciar comp� + + + + Delete Measure + Borrar comp� + + + + Create Measure + Crear comp� + + + + ctrl + control + + + + Panic + + + + + Transport + + + + + PluginDialog + + + Ok + Aceptar + + + + Cancel + Cancelar + + + + MusE: select plugin + MusE: Selecciona el plugin + + + + Lib + Lib + + + + Label + Etiqueta + + + + Name + Nombre + + + + AI + AI + + + + AO + AO + + + + CI + CI + + + + CO + CO + + + + IP + IP + + + + id + id + + + + Maker + Fabricante + + + + Copyright + Copyright + + + + Stereo + Est�eo + + + + Mono + Mono + + + + All + Todo + + + + Mono and Stereo + + + + + Show All + + + + + Select which types of plugins should be visible in the list.<br>Note that using mono plugins on stereo tracks is not a problem, two will be used in parallell.<br>Also beware that the 'all' alternative includes plugins that probably not are usable by MusE. + + + + + Search in 'Label' and 'Name': + + + + + PluginGui + + + bypass plugin + saltar plugin + + + + MusE: load preset + MusE: Cargar plantilla + + + + MusE: save preset + MusE: Guardar plantilla + + + + File Buttons + Archivar botones + + + + Load Preset + Cargar plantilla + + + + Save Preset + Guardar plantilla + + + + PreferencesDialog + + + MusE: load image + MusE: carga imagen + + + + PrinterConfig + + + MusE: Config Printer + MusE: Configuraci� de impresora + + + + Print to file + Imprimir en archivo + + + + Print Command + Comando de impresi� + + + + Preview Command + Comando de previsualizaci� + + + + OK + Aceptar + + + + Cancel + Cancelar + + + + ProjectDialog + + + MusE: create new folder + + + + + new folder: + + + + + QHeader + + + Port Number + Nmero de puerto + + + + enable gui for device + habilitar gui para dispositivo + + + + enables recording from the device + habilita la grabaci� para el dispositivo + + + + Instrument connected to port + Instrumento conectado al puerto + + + + State: result of opening the device + Estado: resultado de abrir el puerto + + + + mute instrument + silenciar instrumento + + + + sound name + nombre del sonido + + + + quantisation +currently not used + cuantizaci� +actualmente sin usar + + + + this input note triggers the sound + ensta nota de entrada dispara el sonido + + + + note length + longitud de nota + + + + this note is send for the sound + esta nota se envia al sonido + + + + output channel +currently not used + canal de salida +actualmente sin uso + + + + output port +currently not used + puerto de salida +actualmente sin uso + + + + velocity level 1 + nivel de velocidad 1 + + + + velocity level 2 + nivel de velocidad 2 + + + + velocity level 3 + nivel de velocidad 3 + + + + velocity level 4 + nivel de velocidad 4 + + + + quantisation + cuantizaci� + + + + output channel + canal de salida + + + + output port + puerto de salida + + + + Enable Recording + Habilita grabaci� + + + + Track Activity + Actividad de pista + + + + Mute Indicator + Indicador de silencio + + + + Solo Indicator + Indicador de solo + + + + Track Type + Tipo de pista + + + + Track Name + Nombre de pista + + + + Output Channel Number + Nmero de canal de salida + + + + Output Port + Puerto de salida + + + + Time Lock + Bloqueo de tiempo + + + + Solo/Pre Fader Listening + Escucha de S�o/pre-fader + + + + Name of the midi device associated with this port number + Nombre del dispositivo MIDI asociado con este nmero de puerto + + + + QMenu + + + Add Midi Generator... + + + + + Add Soft Synth... + + + + + QWidget + + + Cannot transform non empty track + No puedo transformar una pista que no est�vacia + + + + Velocity + Velocidad + + + + Cannot convert sysex string + No puedo convertir el paquete de sistema exclusivo + + + + Hex String too long (2048 bytes limit) + Cadena hexadecimal demasiado larga (l�ite de 2048 bytes) + + + + generic midi + midi gen�ico + + + + new + nuevo + + + + create peakfile for + crear archivo de picos para + + + + MusE: get file name + MusE: obtener el nombre de archivo + + + + the directory + + el directorio + + + + + +does not exist +create? + +no existe + Lo creo ? + + + + &Create + &Crear + + + + Cancel + Cancelar + + + + MusE: create directory + MusE: crear directorio + + + + creating dir failed + fall�la creaci� de directorio + + + + File + + El archivo + + + + + +exists + +existe + + + + MusE: write + MusE: escribe + + + + Overwrite + Sobre escribe + + + + Quit + Salir + + + + Open File + + Abrir archivo + + + + +failed: + +fall� + + + + MusE: Open File + MusE: Abrir archivo + + + + None + Ninguno + + + + Master + Maestro + + + + Input + Entrada + + + + Group %c + Grupo %c + + + + Unknown + Desconocido + + + + copy + %1 +to + %2 + + + + + +converting sample rate +from %1 to %2 + + + + + Abort + + + + + MusE: export midi file: + + + + + QuantConfig + + + Config Quantize + Configurar Cuantizaci� + + + + Strength + Fuerza + + + + Don´t Quantize + No cuantizes + + + + Quant Len + Cuantizar la longitud + + + + MusE: Config Quantize + MusE: Configurar Cuantizaci� + + + + QuantDialog + + + Display Quantize + Mostrar la cuantizaci� + + + + Position + Posici� + + + + Note Quantize + Cuantizar Nota + + + + Rest Quantize + Cuantizar el resto + + + + Ok + Aceptar + + + + Cancel + Cancelar + + + + RecordButton + + + record + grabar + + + + RhythmBase + + + MusE: Random Rhythm Generator + MusE: Generador de r�mo aleatorio + + + + Instrument Properties + Propiedades del instrumento + + + + counts/bar + cuentar por barra + + + + steps/count + pasos por cuenta + + + + # bars + n barras + + + + test + probar + + + + contrib + contribuir + + + + randomize + aleartorizar + + + + Group 1 + Grupo 1 + + + + Group 2 + Grupo 2 + + + + Group 3 + Grupo 3 + + + + Group 4 + Grupo 4 + + + + Group 5 + Grupo 5 + + + + listen + escuchar + + + + Instrument + Instrumento + + + + Group + Grupo + + + + &New + &Nuevo + + + + create new entry + crear nueva entrada + + + + pressing the New button you create a new entry +in the MusE list of defined controllers + pulsando el bot� Nuevo creas una entrada nueva +en la lista de controles definidos por MusE + + + + &Delete + &Borrar + + + + delete selected entry + borra la entrada seleccionada + + + + Up + Arriba + + + + Down + Abajo + + + + Instrument + Instrumento + + + + steps/count + pasos por cuenta + + + + list of defined controllers + Lista de controladores definidos + + + + This is the MusE list of defined controllers. + Esta es la lista de controladores definidos en MusE. + + + + &File + &Archivo + + + + &Edit + &Editar + + + + &Help + A&yuda + + + + Tools + Herramientas + + + + New + Nuevo + + + + Open + Abrir + + + + &Open... + &Abrir... + + + + Save + Guardar + + + + &Save + &Guardar + + + + Save As + Guardar como + + + + Save &As... + Guardar &Como... + + + + Print + Imprimir + + + + &Print... + &Imprimir... + + + + Exit + Salir + + + + E&xit + &Salir + + + + Undo + Deshacer + + + + &Undo + &Deshacer + + + + Redo + Rehacer + + + + &Redo + &Rehacer + + + + Cut + Cortar + + + + &Cut + &Cortar + + + + Copy + Copiar + + + + C&opy + C&opiar + + + + Paste + Pegar + + + + &Paste + &Pegar + + + + Find + Buscar + + + + &Find... + &Buscar... + + + + Contents + Contenidos + + + + &Contents... + &Contenidos... + + + + Index + �dice + + + + &Index... + &Indice... + + + + About + Acerca de + + + + &About... + &Acerca de ... + + + + RhythmGenerator + + + Form3 + Formulario3 + + + + Instrument Settings: + Configuraci� de instrumento: + + + + Instrument + Instrumento + + + + Hi-Hat + Charli + + + + add + a�dir + + + + delete + borrar + + + + steps/count + pasos/cuenta + + + + count/bar + cuentas/comp� + + + + # bars + n compases + + + + Group Settings: + Configuraci� de grupo: + + + + Group + Grupo + + + + Group 1 + Grupo 1 + + + + Group 2 + Grupo 2 + + + + Group 3 + Grupo 3 + + + + Group 4 + Grupo 4 + + + + Group 5 + Grupo 5 + + + + contrib + contrib + + + + listen + escuchar + + + + Randomize + aleatorizar + + + + Rhythm Style: + Estilo de ritmo: + + + + Clear + L�pio + + + + Open... + Abrir... + + + + Save + Guardar + + + + Save as... + Guardar como... + + + + Generate + Generar + + + + Close + Cerrar + + + + SS_PluginChooserBase + + + Name + Nombre + + + + &Cancel + &Cancelar + + + + SS_PluginFront + + + Clear and unload effect + + + + + Load effect + + + + + Toggle display of effect parameters + + + + + Turn effect on/off + + + + + Score + + + &Config + &Configuraci� + + + + Page Settings + Configuraci� de p�ina + + + + Staff Settings + Configuraci� de pentagrama + + + + Background Pixmap + imagen de fondo + + + + Palettes + Paletas + + + + Dynamics + Din�icos + + + + Print + Imprimir + + + + Preview Print + Previsualizar la impresi� + + + + Lyrics + Letra + + + + enter lyrics + escribe la letra + + + + Text + Texto + + + + enter text + escribe el texto + + + + C7m + C7m + + + + enter chord symbol + escribe el s�bolo del acorde + + + + to previous voice + al timbre anterior + + + + to next voice + al timbre siguiente + + + + flip stem direction + intercambia la direcci� de la armadura + + + + move marked notes to previous voice or to upper stave in a split system + mueve las notas marcadas al timbre anterior o a la parte superior en sistemas partidos + + + + move marked notes to next voice or to lower stave in a split system + mueve las notas marcadas al timbre siguiente o a la parte inferior en sistemas partidos + + + + flip stem direction of selected notes + intercambia la direcci� de la armadura de las notas seleccionadas + + + + StaffSettings + Configuraci� de pentagrama + + + + MusE: config wallpaper + MusE: Configurar imagen de fondo + + + + Score + Partitura + + + + ScoreConfig + + + Staff Settings: + Configuraci� de Pentagrama: + + + + Track List + Lista de pistas + + + + Key/Clef + Clave + + + + Raster + Raster + + + + Note Quantize + Cuantizaci� de nota + + + + Rest Quantize + Restaurar cuantizaci� + + + + Mode + Modo + + + + Split System + Sistema partido + + + + Splitpoint + punto de separaci� + + + + Ok + Aceptar + + + + Apply + Aplicar + + + + Cancel + Cancelar + + + + Upper Staff + Pentagrama superior + + + + Lower Staff + Pentagrama inferior + + + + ScrollScale + + + next page + p�ina siguiente + + + + previous page + p�ina anterior + + + + current page number + numero de p�ina actual + + + + ShortcutCaptureDialog + + + Ok + Aceptar + + + + Cancel + Cancelar + + + + Shortcut conflicts with + + + + + Undefined + + + + + ShortcutCaptureDialogBase + + + OK + Aceptar + + + + Cancel + Cancelar + + + + ShortcutConfig + + + Arranger + Arreglador + + + + Insert Note + Insertar nota + + + + Insert SysEx + Insertar sistema exclusivo + + + + Insert Ctrl + Insertar controlador + + + + Insert Meta + Insertar Meta + + + + Insert Channel Aftertouch + Insertar AfterTouch de canal + + + + Insert Key Aftertouch + Insertar AfterTouch de tecla + + + + Global + Global + + + + Pianoroll + Pianola + + + + Drumeditor + + + + + List editor + + + + + List Mastertrack + + + + + All categories + + + + + Wave editor + + + + + ShortcutConfigBase + + + &Apply + &Aplicar + + + + SigScale + + + signature scale + Armadura de la escala + + + + SimpleSynthGui + + + Load sample dialog + + + + + Song + + + Jack shutdown! + + + + + Jack has detected a performance problem which has lead to +MusE being disconnected. +This could happen due to a number of reasons: +- a performance issue with your particular setup. +- a bug in MusE (or possibly in another connected software). +- a random hiccup which might never occur again. +- jack was voluntary stopped by you or someone else +- jack crashed +If there is a persisting problem you are much welcome to discuss it +on the MusE mailinglist. +(there is information about joining the mailinglist on the MusE + homepage which is available through the help menu) + +To proceed check the status of Jack and try to restart it and then . +click on the Restart button. + + + + + SplitLayerGui + + + start pitch for split + + + + + enable learn mode for start pitch + + + + + end pitch for split + + + + + enable learn mode for end pitch + + + + + pitch offset for split + + + + + start velocity for split + + + + + end velocity for split + + + + + velocity offset for split + + + + + StkGuiBase + + + MyDialog2 + MiDialogo2 + + + + Voices + Voces + + + + Edit + Editar + + + + SynthConfigBase + + + MusE: Soft Synth Configuration + MusE: Configuraci� del Sintetizador virtual + + + + Soft Synthesizer + Sintetizador Virtual + + + + File + Archivo + + + + Instances + Copias + + + + Name + Nombre + + + + list of available software synthesizers + lista de sintetizadores de software dispoibles + + + + Add Instance + A�dir copia + + + + Alsa Port + Puerto ALSA + + + + Remove Instance + Quitar copia + + + + TLSWidget + + + Remove Subtrack + + + + + Ctrl + + + + + Velocity + Velocidad + + + + Delete Controller + + + + + TLWidget + + + Delete Track + Borrar pista + + + + Copy Track + + + + + Show Gui + Mostrar GUI + + + + Add Subtrack + + + + + Midi Output Channel + + + + + TList + + + Midi + MIDI + + + + Drum + Percusi� + + + + Wave + Audio + + + + Delete Track + Borrar pista + + + + Track Comment + Comentario de pista + + + + Show Gui + Mostrar GUI + + + + Add Midi Track + A�dir pista MIDI + + + + Add Drum Track + A�dir pista de percusi� + + + + Add Wave Track + A�dir pista de audio + + + + TemplateDialog + + + MusE presets + + + + + User presets + + + + + TempoSig + + + Tempo/Sig + tempo/firma + + + + TimeCanvas + + + Ctrl + + + + + Add Controller View + + + + + Toolbar1 + + + Solo + Solo + + + + Snap + Snap + + + + Quantize + Cuantizar + + + + To + A + + + + All Events + Todos los eventos + + + + Looped Ev. + Eventos del bucle + + + + Selected Ev. + Eventos seleccionados + + + + Looped+Sel. + Bucle + Selecci� + + + + Cursor + Cursor + + + + TrackComment + + + MusE: Track Comment + MusE: Comentario de la pista + + + + Track Comment: + Comentario de la pista: + + + + TrackInfo + + + Track Type + Tipo de pista + + + + Track Name + + + + + Transport + + + Punch In + Pinchar + + + + Loop + Bucle + + + + Punch Out + Fin pinchado + + + + Left Mark + Marca izquierda + + + + Right Mark + Marca derecha + + + + Overdub + A�dir + + + + Replace + Reemplazar + + + + Rec Mode + Modo de grabaci� + + + + Normal + Normal + + + + Mix + Mezcla + + + + Cycle Rec + Ciclar Grabaci� + + + + punchin + pinchar + + + + loop + bucle + + + + punchout + fin pinchado + + + + rewind to start + retroceder al inicio + + + + rewind + retroceder + + + + forward + avanzar + + + + stop + parar + + + + play + reproducir + + + + record + grabar + + + + AC + AC + + + + quantize during record + cuantizar durante la grabaci� + + + + Click + Click + + + + metronom click on/off + Click del metr�omo encendido/apagado + + + + Sync + Sinconizaci� + + + + external sync on/off + Sincronizaci� externa encedida/apagada + + + + Master + Maestro + + + + use master track + usar pista maestra + + + + TransposeDialogBase + + + MusE: Midi Transpose + MusE: Transposici� MIDI + + + + Value + Valor + + + + halftones + semitonos + + + + Time + Tiempo + + + + all + todo + + + + between markers + entre marcadores + + + + Parts + Partes + + + + all in selected tracks + todo en las pistas seleccionadas + + + + OK + Aceptar + + + + Cancel + Cancelar + + + + VAMGui + + + MusE: Load VAM Presets + + + + + MusE: Save VAM Presets + + + + + VAMGuiBase + + + Virtual Analogue for MusE + Analogico virtual para MusE + + + + LFO + LFO + + + + Freq + Freq + + + + Waveform + Tipo Onda + + + + Sine + Seno + + + + Pulse + Pulso + + + + Saw + Sierra + + + + Triangle + Tri�gulo + + + + Filter + Filtro + + + + EnvMod + Modulaci� de envolvente + + + + Attack + Ataque + + + + Decay + Decaimiento + + + + Sustain + Sostenido + + + + Release + Relajaci� + + + + Cutoff + Frecuencia de corte + + + + Resonance + Resonancia + + + + Invert + Invertir + + + + KeyTrack + Seguir teclas + + + + Presets + Plantillas + + + + Set + Establecer + + + + load preset list + cargar lista de plantillas + + + + save preset list + guardar lista de plantillas + + + + save preset list to a new file + guardar lista de plantillas en un archivo nuevo + + + + delete preset + borrar plantilla + + + + DCO 1 + DCO 1 + + + + Pitch + Tono + + + + Detune + Desafinaci� + + + + PWM + PWM + + + + FM + FM + + + + PW + PW + + + + DCO 2 + DCO 2 + + + + On + Encendido + + + + VAM 1.0beta2 +Virtual Analog for MusE +Released under GPL. +Copyright(C) 2002 +Jotsif Lindman Hörnlund +( jotsif@linux.nu ) + VAM 1.0beta2 +Virtual Analog for MusE +Released under GPL. +Copyright(C) 2002 +Jotsif Lindman Hörnlund +( jotsif@linux.nu ) + + + + Velocity + + + MusE: Modify Velocity + MusE: Modificar velocidad + + + + VelocityBase + + + MusE: Modify Velocity + MusE: Modificar velocidad + + + + Range + Rango + + + + All Events + Todos los eventos + + + + Selected Events + Eventos seleccionados + + + + Looped Events + Eventos del bucle + + + + Selected & Looped + Seleccionados y bucle + + + + Values + Valores + + + + Rate: + Velocidad: + + + + Offset: + Desplazamiento: + + + + % + % + + + + OK + Aceptar + + + + Cancel + Cancelar + + + + WTScale + + + bar scale + escala de compases + + + + WaveEdit + + + Normalize + Normalizar + + + + weTools + Herramientas de Audio + + + + Solo + Solo + + + + Cursor + Cursor + + + + &File + &Archivo + + + + Functions + Funciones + + + + &Edit + &Editar + + + + Func&tions + + + + + &Gain + + + + + 200% + + + + + 150% + + + + + 75% + + + + + 50% + + + + + 25% + + + + + Other + + + + + Edit in E&xternal Editor + + + + + Mute Selection + + + + + Normalize Selection + + + + + Fade In Selection + + + + + Fade Out Selection + + + + + Reverse Selection + + + + + Select + Seleccionar + + + + waveedit-tools + + + + + Transport + + + + + pianoroll-tools + + + + + WaveTrackInfoBase + + + MusE: TrackInfo + MusE: Informaci� de pista + + + + Track Info + Informaci� de pista + + + + Track Name + Nombre de pista + + + + Output Route: + Ruta de salida: + + + + Input Route: + Ruta de netrada: + + + + Ports: + Puertos: + + + + Mono + Mono + + + + Stereo + Est�eo + + + + off + apagado + + + + WaveView + + + MusE - file size changed + + + + + When editing in external editor - you should not change the filesize +since it must fit the selected region. + +Missing data is muted + + + + diff --git a/attic/muse_qt4_evolution/share/locale/muse_fr.qm b/attic/muse_qt4_evolution/share/locale/muse_fr.qm new file mode 100644 index 00000000..8a61f889 Binary files /dev/null and b/attic/muse_qt4_evolution/share/locale/muse_fr.qm differ diff --git a/attic/muse_qt4_evolution/share/locale/muse_fr.ts b/attic/muse_qt4_evolution/share/locale/muse_fr.ts new file mode 100644 index 00000000..c4972635 --- /dev/null +++ b/attic/muse_qt4_evolution/share/locale/muse_fr.ts @@ -0,0 +1,9584 @@ + + + + + + + Click this button to enable recording + Cliquez sur ce bouton pour activer l'enregistrement + + + + sets amount of quantization: +0 - no quantization +100 - full quantization + Définit le niveau de quantisation: +0 - pas de quantisation +100 - quantisation complète + + + + select Pointer Tool: +with the pointer tool you can: + select parts + move parts + copy parts + Choisir l'Outil de Pointage: +avec l'outil de pointage vous pouvez: + choisir des pièces + déplacer des pièces + copier des pièces + + + + Insert Note + Insérer Note + + + + Insert SysEx + Insérer SysEx + + + + Insert Ctrl + Insérer Ctrl + + + + Insert Meta + Insérer Meta + + + + Insert Channel Aftertouch + Insérr Canal de Pression + + + + Insert Key Aftertouch + Insérer une note de Pression + + + + Default + + + + + Refrain + + + + + Bridge + + + + + Intro + + + + + Coda + + + + + Chorus + Chorus + + + + Solo + + + + + Brass + Cuivres + + + + Percussion + + + + + Drums + Batterie + + + + Guitar + + + + + Bass + + + + + Flute + Flute + + + + Strings + + + + + Keyboard + + + + + Piano + + + + + Saxophon + + + + + @default + + + Click this button to open a <em>new song</em>.<br>You can also select the <b>Open command</b> from the File menu. + Cliquez sur ce bouton pour ouvrir une <em>nouvelle chansong</em>.<br>Vous pouvez aussi sélectionner la <b>commande Ouvrir</b> à partir du menu Fichier. + + + + Click this button to save the song you are editing. You will be prompted for a file name. +You can also select the Save command from the File menu. + Cliquez sur ce bouton pour sauvegarder la chanson que vous éditez. Le nom de sauvegarde vous sera demandé. +Vous pouvez aussi choisir la commande Enregistrer dans le menu Fichier. + + + + Create New Song + Créer une nouvelle chanson + + + + Click this button to stop playback + Cliquez sur ce bouton pour arréter la lecture + + + + Click this button to start playback + Cliquez sur ce bouton pour démarrer la lecture + + + + Click this button to rewind to start position + Cliquez sur ce bouton pour revenir à la position de départ + + + + Click this button to rewind + Cliquez sur ce bouton pour revenir en arrière + + + + Click this button to forward current play position + Cliquez sur ce bouton pour avancer dans la lecture + + + + don't quantize notes above this tick limit + Ne pas quantiser les notes sur cette limite (en tick) + + + + quantize also note len as default + quantiser aussi la longueur de note par défault + + + + loop between left mark and right mark + Boucler entre les marqueurs gauche et droit + + + + record starts at left mark + l'enregistrement démarre au marqueur gauche + + + + record stops at right mark + l'enregistrement s'arrète au marqueur droit + + + + rewind to start position + revenir à la position de départ + + + + rewind current position + revenir à la position en cours + + + + move current position + déplacer la position en cours + + + + stop sequencer + arréter le séquenceur + + + + start sequencer play + démarrer la lecture du séquenceur + + + + to record press record and then play + pour enregistrer, presser Enregistrement (Record) puis Lecture (Play) + + + + send note off to all midi channels + envoyer ordre de relachement de note à tous les canaux midi + + + + select Pencil Tool: +with the pencil tool you can: + create new parts + modify length of parts + Choisir l'Outil Crayon +avec le crayon vous pouvez: + créer de nouvelles pièces + modifier la longueur des pièces + + + + select Delete Tool: +with the delete tool you can delete parts + choisir l'Outil Gomme: +avec la gomme vous pouvez effacer les pièces + + + + select Cut Tool: +with the cut tool you can split a part + Choisir l'Outil Ciseaux +avec les ciseaux vous pouver couper une pièce + + + + select Glue Tool: +with the glue tool you can glue two parts + Choisir l'Outil Colle: +avec la colle vous pouvez coller deux pièces ensemble + + + + select Score Tool: + + Choisir l'Outil Partition + + + + select Quantize Tool: +insert display quantize event + Choisir l'Outil Quantisation: +pour voir les marques de quantisation + + + + select Drawing Tool + Choisir l'Outil de Dessin + + + + select Muting Tool: +click on part to mute/unmute + Choisir l'Outil Silence: +cliquez sur une pièces pour la rendre muette ou pas. + + + + pointer + pointeur + + + + pencil + crayon + + + + rubber + élastique + + + + cutter + ciseaux + + + + score + partition + + + + glue + colle + + + + quantize + quantisation + + + + draw + dessin + + + + mute parts + silence + + + + Off + Arrt + + + + presets (*.pre *.pre.gz *.pre.bz2) + réglages (presets: *.pre *.pre.gz *.pre.bz2) + + + + All Files (*) + Tous les Fichiers + + + + Click this button to enable recording + Cliquez sur ce bouton pour activer l'enregistrement + + + + m + m + + + + mute + silence + + + + s + s + + + + solo + + + + + Mo + + + + + monitor + + + + + Dr + + + + + use drum map + + + + + off + + + + + aR + + + + + automation read + + + + + aW + + + + + automation write + + + + + sync + + + + + send sync events + + + + + 1/2 channel + 1/2 canal + + + + oR + + + + + output routing + chemin de sortie (routing) + + + + iR + + + + + input routing + + + + + Channels + + + + + Bar + Mesure + + + + Midi + Midi + + + + Add Midi Track + + + + + Add Midi Output + + + + + Add Midi Input + + + + + Audio + Audio + + + + Add Wave Track + + + + + Add Audio Output + + + + + Add Audio Group + + + + + Add Audio Input + + + + + MusE: create project directory + + + + + MusE: create template directory + + + + + Cannot find project <%1> + + + + + MusE: load Project + + + + + Save + Enregistrer + + + + MusE: create instruments directory + + + + + Appearance + + + MusE: load image + MusE: charger une image + + + + handle of transport window + Accroche de la fenêtre Transport + + + + track activity in arranger + Activité des pistes dans l'Arrangeur + + + + bigtime font color + Couleur de la police dans le GrandChrono + + + + bigtime background color + Couleur de fond du GrandChrono + + + + waveedit background color + Couleur du fond de l'éditeur d'échantillon + + + + AppearanceDialogBase + + + MusE: Appearance settings + MusE: réglages de l'apparence + + + + Apply + Appliquer + + + + Ok + Ok + + + + Cancel + Annuler + + + + Arranger + Arrangeur + + + + Parts + Pièces + + + + show frames + montrer les séparations + + + + show names + montrer les noms + + + + show events + montrer les évènements + + + + show Cakewalk Style + montrer dans le style Cakewalk + + + + Events + Evènement + + + + note on + note on + + + + poly pressure + pression poly + + + + controller + contrleurs + + + + aftertouch + pression (aftertouch) + + + + pitch bend + molette de hauteur (pitch) + + + + program change + sélection de programme (prog. change) + + + + special + spécial + + + + Background picture + image de fond + + + + bg + fond + + + + select... + choisissez... + + + + show snap grid + voir la grille de positionnement + + + + Colors + couleurs + + + + Items + Objets + + + + selected + sélectionné + + + + current: + en cours: + + + + change... + changer... + + + + dynamic colors for track activity in arranger + Choix auto des couleurs pour l'activité des pistes dans l'Arrangeur + + + + Style/Fonts + Styles/Polices + + + + QT Theme + Thème + + + + Windows + Windows + + + + MusE + MusE + + + + Metal + Metal + + + + Norwegian Wood + Norwegian Wood + + + + Platinum + Platinum + + + + CDE + CDE + + + + Motif + Motif + + + + Motif Plus + Motif Plus + + + + Fonts + Polices + + + + Family + Famille + + + + Size + Taille + + + + Font 1 + Police 1 + + + + Font 2 + Police 2 + + + + Font 3 + Police 3 + + + + Font 0 + Police 0 + + + + Bold + Gras + + + + Italic + Italique + + + + ... + ... + + + + Font 4 + Police 4 + + + + Font 5 + Police 5 + + + + S + S + + + + R + R + + + + Arranger + + + Cursor + Curseur + + + + Snap + Aligne + + + + Len + Longueur + + + + Type + Type + + + + NO + NON + + + + midi song type + type de fichier midi + + + + Pitch + Hauteur + + + + midi pitch + hauteur midi + + + + global midi pitch shift + transposition midi globale + + + + Tempo + Tempo + + + + midi tempo + tempo midi + + + + TrackInfo + InfoPiste + + + + Track + Piste + + + + O-Port + 0-Port + + + + Arranger + Arrangeur + + + + Off + Arrt + + + + Bar + Mesure + + + + GM + GM + + + + GS + GS + + + + XG + XG + + + + N + N + + + + R + R + + + + A + A + + + + M + M + + + + S + S + + + + C + C + + + + Ch + Ch + + + + T + T + + + + Master + Matre + + + + Group A + Groupe A + + + + Group B + Groupe B + + + + Group C + Groupe C + + + + Group D + Groupe D + + + + Mix + + + + + Config Tracklist + + + + + all mute off + + + + + all solo off + + + + + all autoRead off + + + + + all autoWrite off + + + + + i + + + + + Show Track Info + + + + + m + m + + + + Show Mixer Strip + + + + + AudioConfBase + + + MusE: Audio Configuration + MusE: Configuration Audio + + + + &Apply + &Appliquer + + + + &OK + &OK + + + + &Cancel + A&nnuler + + + + Audio Parameters + Paramètres Audio + + + + 32 + 32 + + + + 64 + 64 + + + + 128 + 128 + + + + 256 + 256 + + + + 512 + 512 + + + + 1024 + 1024 + + + + 2048 + 2048 + + + + 4096 + 4096 + + + + Frame Size: + Longueur des frames: + + + + Delay: + Délai: + + + + Sample Rate: + Vitesse d'échantillonage: + + + + 44100 + 44100 + + + + 48000 + 48000 + + + + 96000 + 96000 + + + + Audio Driver + Pilote Audio + + + + Use Alsa + Alsa + + + + Use JACK + JACK + + + + No Audio + Pas d'audio + + + + Status: + Etat: + + + + TextLabel6 + TextLabel6 + + + + AudioMixerApp + + + 1/2 channel + 1/2 canal + + + + pre fader - post fader + pre fader - post fader + + + + record + enregistrement + + + + mute + silence + + + + pre fader listening + écoute pre fader + + + + record downmix + enregistrer mixdown + + + + off + arr + + + + output routing + chemin de sortie (routing) + + + + &Config + &Configuration + + + + Add Input Strip + Ajouter une Bande d'Entrée + + + + S + S + + + + Pre + Pre + + + + dB + dB + + + + MusE: Audio Mixer + MusE: Mixer Audio + + + + Inputs + Entrées + + + + Synthi + Synth + + + + Tracks + Pistes + + + + Groups + Groupes + + + + Master + Matre + + + + Group A + Groupe A + + + + Group B + Groupe B + + + + Group C + Groupe C + + + + Group D + Groupe D + + + + None + Aucun + + + + AudioStrip + + + Pan + Pan + + + + S + S + + + + 1/2 channel + 1/2 canal + + + + Pre + Pre + + + + pre fader - post fader + pre fader - post fader + + + + dB + dB + + + + mute + silence + + + + record downmix + enregistrer mixdown + + + + pre fader listening + écoute pre fader + + + + output routing + chemin de sortie (routing) + + + + Channel + Canal + + + + panorama + + + + + Channel %1 + + + + + MidiChannel + + + + + Awl::MidiVolEntry + + + off + + + + + db + + + + + Awl::VolEntry + + + off + + + + + BigTime + + + MusE: Bigtime + MusE: GrandChrono + + + + ClipListEdit + + + MusE: Clip List Editor + MusE: Editeur de la Liste de Clips + + + + ClipListEditorBase + + + MusE: ClipList + MusE: Liste de Clips + + + + Name + Nom + + + + Refs + Réfs + + + + Start + Départ + + + + Len + Long + + + + Data + Données + + + + Clip Properties + Propriétés du Clip + + + + Pos: + Pos: + + + + Len: + Long: + + + + CommentBase + + + Form1 + Forme1 + + + + Track Comment + Commentaire pour la Piste + + + + Track 1 + Piste 1 + + + + ConfigMidiFileBase + + + 96 + 96 + + + + 192 + 192 + + + + 384 + 384 + + + + Enable extended smf format + Activer la prise en charge du format smf étendu + + + + ConfigTrackListBase + + + Soft Synthesizer + Synthétiseur virtuel + + + + CtrlDelegate + + + dB + dB + + + + off + + + + + CtrlDialog + + + controller name + + + + + flag if controller contains data + + + + + CtrlEdit + + + Sel + Sél + + + + select controller + Choisissez le contrlleur + + + + CtrlListEditor + + + dB + dB + + + + CtrlPanel + + + select controller + Choisissez le contrlleur + + + + remove panel + enlever le panneau + + + + other ... + autres... + + + + Sel + Sél + + + + x + x + + + + Velocity + Vélocité + + + + Pitch + Hauteur + + + + DeicsOnzeGui + + + Save configuration + + + + + Critical Error + + + + + Cannot open file %1 + + + + + Parsing error for file %1 + + + + + Load category dialog + + + + + Load set dialog + + + + + Save set dialog + + + + + New category + + + + + Delete category + + + + + Load category + + + + + Save category + + + + + Load set + + + + + Save set + + + + + Delete set + + + + + New subcategory + + + + + Delete subcategory + + + + + Load subcategory + + + + + Save subcategory + + + + + New preset + + + + + Delete preset + + + + + Load preset + + + + + Save preset + + + + + No more category supported + + + + + You can not add more categories + + + + + Do you really want to delete %1 ? + + + + + &Yes + + + + + &No + + + + + No category selected + + + + + You must first select a category. + + + + + Replace or add + + + + + %1 is supposed to be affected to the hbank number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + + + + + &Replace + + + + + &Add + + + + + Download error + + + + + There is no more free category slot. + + + + + Save category dialog + + + + + No more subcategory supported + + + + + You can not add more subcategories + + + + + No subcategory selected + + + + + You must first select a subcategory. + + + + + Load subcategory dialog + + + + + %1 is supposed to be affected to the lbank number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + + + + + There is no more free subcategory slot. + + + + + Save subcategory dialog + + + + + No more preset supported + + + + + You can not add more presets + + + + + No preset selected + + + + + You must first select a preset. + + + + + Load preset dialog + + + + + %1 is supposed to be affected to the prog number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + + + + + There is no more free preset slot. + + + + + Save preset dialog + + + + + Browse set dialog + + + + + Browse image dialog + + + + + DeicsOnzeGuiBase + + + Preset + Réglages enregistrés + + + + Speed + Vitesse + + + + Volume + Volume + + + + Pitch + Hauteur + + + + After Touch + Pression (After Touch) + + + + Transpose + Transposition + + + + &Config + &Configuration + + + + Save + Enregistrer + + + + Colors + couleurs + + + + Text + Texte + + + + DrumEdit + + + Load Map + Charger + + + + Save Map + Enregistrer + + + + &Edit + &Editer + + + + Cut + Couper + + + + Copy + Copier + + + + Paste + Coller + + + + Delete Events + Effacer + + + + Select All + Tout sélectionner + + + + Select None + Dé-sélectionner + + + + Invert + Inverser + + + + Inside Loop + Dans la boucle + + + + Outside Loop + Hors de la boucle + + + + &Select + &Sélectionner + + + + Step Record + Enregistrement pas-à-pas + + + + Midi Input + Entrée Midi + + + + Add Controller View + Ajouter une Vue de contrlleurs + + + + M + M + + + + Sound + Son + + + + QNT + QNT + + + + E-Note + E-Note + + + + Len + Long + + + + A-Note + A-Note + + + + Ch + Ch + + + + Port + Port + + + + LV1 + LV1 + + + + LV2 + LV2 + + + + LV3 + LV3 + + + + LV4 + LV4 + + + + &File + &Fichier + + + + Load Drummap + Charger Set de Batterie + + + + Store Drummap + Enregistrer Set de Batterie + + + + ctrl + ctrl + + + + drummaps + Sets de Batterie + + + + Muse: Load Drum Map + MusE: Charger Set de Batt. + + + + MusE: Store Drum Map + MusE: Enregistrer Set de Batt. + + + + &Functions + &Fonctions + + + + Modify Velocity + Modifier la vélocité + + + + Drum Tools + + + + + Transport + Transport + + + + EditCAfterDialog + + + Time Position + Position temporelle + + + + Pressure + Pression + + + + MusE: Enter Channel Aftertouch + MusE: Entrez le Canal de Pression (AfterTouch) + + + + EditCtrl14Dialog + + + Time Position + Position temporelle + + + + Controller-H + Contrlleur H + + + + Controller-L + Contrlleur L + + + + Value + Valeur + + + + MusE: Enter Controller14 Event + MusE: Entrer l'évènement Contrlleur 14 + + + + EditCtrl7Dialog + + + Time Position + Position temporelle + + + + Controller + Contrlleur + + + + Value + Valeur + + + + MusE: Enter Controller Event + MusE: Entrez l'Evénement Contrlleur + + + + EditCtrl7DialogBase + + + MusE: Enter Controller + Muse: Entrez le Contrlleur + + + + Controller: + Contrlleur: + + + + Time Position: + Position temporelle + + + + Value: + Valeur + + + + controller value + Valeur du Contrlleur + + + + OK + OK + + + + Cancel + Annuler + + + + EditCtrlBase + + + Value + Valeur + + + + H-Bank + H-Bank + + + + L-Bank + L-Bank + + + + off + arr + + + + EditEventDialog + + + Ok + Ok + + + + Cancel + Annuler + + + + EditInstrument + + + MusE: Create file failed + + + + + MusE: Write File failed + + + + + MusE: Save Instrument Definition + + + + + Instrument Definition (*.idf) + + + + + MusE: Enter new Category + + + + + Enter new Category: + + + + + MusE + MusE + + + + The current Instrument contains unsaved data +Save Current Instrument? + + + + + &Save + &Enregistrer + + + + &Nosave + + + + + &Abort + + + + + EditInstrumentBase + + + GM + GM + + + + GS + GS + + + + XG + XG + + + + Name + Nom + + + + Type + Type + + + + RPN + RPN + + + + NRPN + NRPN + + + + Pitch + Hauteur + + + + Range + Entre + + + + list of defined controllers + list des controleurs définis + + + + This is the MusE list of defined controllers. + C'est la liste des controleurs qui ont été définis + + + + SysEx + SysEx + + + + Panic + Panique! + + + + &File + &Fichier + + + + &New + &Nouveau + + + + Save + Enregistrer + + + + &Save + &Enregistrer + + + + EditMetaDialog + + + Time Position + Position temporelle + + + + Meta Type + Meta Type + + + + Enter Hex + Entrez en Hexa + + + + MusE: Enter Meta Event + MusE: Entrer un Evènement en Hexa + + + + EditMetaDialogBase + + + MusE: Enter Meta Event + MusE: Entrer un Méta Evènement + + + + OK + OK + + + + Cancel + Annuler + + + + TextLabel1 + TextLabel1 + + + + Time Position: + Position temporelle + + + + Meta Type: + Meta Type + + + + Enter Hex + Entrée Hexa + + + + EditNoteDialogBase + + + MusE: Enter Note + Mus2: Entrer la Note + + + + OK + OK + + + + Cancel + ANnuler + + + + Length: + Longueur: + + + + Time Position: + Position temporelle: + + + + Pitch: + Hauteur + + + + Velocity On: + Vélocité On: + + + + Velocity Off: + Vélocité Off: + + + + EditPAfterDialog + + + Time Position + Position temporelle + + + + Pitch + Hauteur + + + + Pressure + Pression + + + + MusE: Enter Poly Aftertouch + Muse: Entrer la Pression polyph. + + + + EditPitchDialog + + + Time Position + Editer la Position temporelle + + + + Pitch + Hauteur + + + + MusE: Enter Pitch Shift + MusE: Entrez le décalage de Hauteur: + + + + EditSysexDialogBase + + + MusE: Enter SysEx + MusE: Entrer le Sysex + + + + TimePosition: + Position temporelle + + + + Comment: + Commentaires: + + + + OK + OK + + + + Cancel + Annuler + + + + EditToolBar + + + Edit Tools + Outils d'Edition + + + + EffectRack + + + effect rack + rack d'effets + + + + move up + Déplacer vers le haut + + + + move down + Déplacer vers le bas + + + + remove + enlever + + + + bypass + direct + + + + show gui + montrer l'interface + + + + new + nouveau + + + + change + changement + + + + show native gui + + + + + New Plugin + + + + + New Aux Send + + + + + Replace effect + + + + + Do you really want to replace the effect %1? + + + + + &Yes + + + + + &No + + + + + ExportMidiDialog + + + Save + + + + + as smf midi file + + + + + MusE: export midi smf file + + + + + FLUIDGui + + + FLUID: open Soundfile + + + + + Fluid: select Sound Font + + + + + FLUIDGuiBase + + + Form1 + Form1 + + + + Soundfont + Set de Sons + + + + Load + Charger + + + + FLUIDSynthGuiBase + + + FLUID Synth + FLUID Synth + + + + Gain + Gain + + + + Room Size + Dimension de la chambre + + + + Damping + Atténuation + + + + Level + Niveau + + + + Width + Largeur + + + + Speed + Vitesse + + + + Depth + Profondeur + + + + Number + Nombre + + + + Type + Type + + + + Sine + Sinusoide + + + + Triangle + Triangle + + + + Reverb + Réverb + + + + Chorus + Chorus + + + + Pop + Pop + + + + Push + Pousser + + + + ... + ... + + + + show fluidsynth controls + Montrer les contrles de fluidsynth + + + + Load + charger + + + + Save + Enregistrer + + + + FileDialogButtons + + + Form1 + Form1 + + + + Global + Global + + + + User + Utilisateur + + + + Project + Projet + + + + FluidSynthGui + + + Choose soundfont + + + + + FontSel + + + Size: + Taille: + + + + GateTime + + + MusE: Modify Gate Time + MusE: modifier le temps de fermeture (Gate Time) + + + + GateTimeBase + + + MusE: Modify Gate Time + MusE: modifier le temps de fermeture (Gate Time) + + + + Range + Entre + + + + All Events + Tous les Evènements + + + + Selected Events + Evènements choisis + + + + Looped Events + Evènements bouclés + + + + Selected & Looped + Boucle & sélectionnée + + + + Values + Valeurs + + + + Rate: + Vitesse: + + + + Offset: + Décalage: + + + + % + % + + + + OK + OK + + + + Cancel + Annuler + + + + GlobalSettingsDialogBase + + + MusE: Global Settings + MusE: Paramètres + + + + Audio + Audio + + + + Mixer + Mixer + + + + dB + dB + + + + min. Meter Value + Métrage min. + + + + min.Slider Val + Val. mini. du Curseur + + + + Midi + Midi + + + + Ticks + Tic + + + + 1024 + 1024 + + + + 2048 + 2048 + + + + 4096 + 4096 + + + + 8172 + 8172 + + + + Displayed Resolution +(Ticks/Quarternote) + Résolution affichée (Tics par 1/4 de note) + + + + 48 + 48 + + + + 96 + 96 + + + + 192 + 192 + + + + 384 + 384 + + + + 768 + 768 + + + + 1536 + 1536 + + + + 3072 + 3072 + + + + 6144 + 6144 + + + + 12288 + 12288 + + + + RTC Resolution +(Ticks/Sec) + Résolution RTC (Tics par sec.) + + + + GUI + GUI + + + + /sec + /sec + + + + GUI Refresh Rate + Vitesse de rafraichissement de l'interface + + + + &Apply + &Appliquer + + + + &Ok + &Ok + + + + &Cancel + &Annuler + + + + Help Browser: + Navigateur pour l'aide: + + + + Arranger + Arrangeur + + + + Transport + Transport + + + + GreendotButton + + + record + + + + + LMaster + + + new tempo + nouveau tempo + + + + new signature + nouvelle signature + + + + Meter + Métrage + + + + Time + Temps + + + + Type + Type + + + + Value + Valeur + + + + MusE: Mastertrack + MusE: Piste principale + + + + Tempo + Tempo + + + + Timesig + Signature Temporelle + + + + ListEdit + + + &Edit + &Edition + + + + Cut + Couper + + + + Copy + Copier + + + + Paste + Coller + + + + Delete Events + Effacer évènements + + + + List Tools + Outils de Liste + + + + Insert Tools + Outils d'Insertion + + + + Insert Note + Insérer Note + + + + insert Note + insére une note + + + + Insert SysEx + Insérer SysEx + + + + insert SysEx + insère une commande midi SysEx + + + + Insert Ctrl + Insérer Ctrl + + + + insert Ctrl + insére un caractère de Controle + + + + Insert Meta + Insérer Meta + + + + insert Meta + insére une balise Meta + + + + Insert Pitch + Insérer Hauteur + + + + insert Pitch + insére un changement de tonalité + + + + Insert Channel Aftertouch + Insérr Canal de Pression + + + + insert Channel Aftertouch + insére un canal de Pression (AfterTouch) + + + + Insert Key Aftertouch + Insérer une note de Pression + + + + insert Poly Aftertouch + insère une Pression (AfterTouch) polyphonique + + + + Tick + Tic + + + + Bar + Mesure + + + + Typ + Typ + + + + Ch + Can + + + + Val A + Val A + + + + Val B + Val B + + + + Val C + Val C + + + + Len + Lon + + + + Comment + Comment. + + + + MusE: List Edit + + + + + Parts + Pièces + + + + Controller + + + + + MITTransposeBase + + + MusE: Midi Input Plugin: Transpose + MusE: Plugin d'Entrée Midi: Transposition + + + + On + On + + + + TriggerKey + Note de Déclenchement + + + + Transpose: + Transposition: + + + + +0 + +0 + + + + MPConfig + + + none + aucun + + + + other raw ... + autre brut (raw)... + + + + MusE: Midi Port Table + MusE: Table des ports Midi + + + + Port + Port + + + + GUI + GUI + + + + Rec + Enr + + + + Instrument + Instrument + + + + Device Name + Nom du Périphérique + + + + State + Etat + + + + unknown + inconnu + + + + MRConfigBase + + + MusE: Midi Input Plugin: Remote Control + MusE: Plugin d'Entrée Midi: Contrôle Distant + + + + Activate + Activer + + + + On + On + + + + Actions + Actions + + + + Stop + Stop + + + + Record + Enregistre + + + + Goto Left Mark + Aller à la Marque Gauche + + + + Play + Jouer + + + + MTScale + + + bar scale + Echelle de la mesure + + + + MarkerView + + + Bar:Beat:Tick + Mesure:Résolution(Beat):Tic + + + + Hr:Mn:Sc:Fr:Sf + Hr:Mn:Sc:Fr:Sf + + + + Lock + Verrouillage + + + + Text + Texte + + + + Marker Properties + Propriétés du Marqueur + + + + MusE: Marker + MusE: Marqueur + + + + add marker + Ajouter marqueur + + + + Add Marker + Ajoute un marqueur + + + + delete marker + Effacer Marqueur + + + + Delete Marker + Efface le marqueur + + + + &File + &Fichier + + + + &Edit + &Edition + + + + marker-tools + + + + + edit tools + + + + + Min:Sc:Fr:Sf + + + + + MasterEdit + + + Master + Maitre + + + + Cursor + Curseur + + + + Snap + Aligne + + + + time at cursor position + Temps à la position du curseur + + + + tempo at cursor position + Temps à la position du curseur + + + + CurPos + PosCur + + + + tempo at current position + tempo à la position en cours + + + + time signature at current position + Signature temporellet à la position en cours + + + + MusE: Mastertrack + MusE: PistePrincipale + + + + edit tools + outils d'édition + + + + EnableMaster + ActiverMaitre + + + + use master track + Utiliser la piste principale + + + + Info + Info + + + + Off + Off + + + + EnableTempomap + + + + + Tempomap + + + + + Enable use of tempo map + + + + + MetronomeConfigBase + + + MusE: Metronome Config + MusE: Configuration du Métronome + + + + Metronome + Métronome + + + + Audio Beep + Bip audio + + + + MIDI Click + Clic MIDI + + + + Midi Channel + Canal Midi + + + + Measure Note + Note Mesure + + + + Measure Velocity + Vélocité de la Mesure + + + + Beat Velocity + Résolution (Beat) de la Vélocité + + + + Beat Note + Note de Résolution (Beat) + + + + Midi Port + Port MIDI + + + + Precount + Pré-compte + + + + enable + activer + + + + Bars + Mesures + + + + From Mastertrack + de la Piste Principale + + + + / + / + + + + Signature + Signature + + + + Prerecord + Pré-enregistrement + + + + Preroll + PreRoll + + + + &Apply + &Appliquer + + + + &OK + &Ok + + + + &Cancel + &Annuler + + + + MidiChannelInfo + + + MidiController + + + Velocity + Vélocité + + + + MidiControllerEditDialog + + + MusE: save midi controller list + MusE: enregistrer la liste des controleurs midi + + + + MusE: load midi controller list + MusE: charger une liste de controleurs midi + + + + MidiControllerEditDialogBase + + + MusE: Define Midi Controller + MusE: Définir un Controleur Midi + + + + replace controller set + remplacer le groupe de controleurs + + + + merge controller set + ajouter le groupe de controleurs + + + + save controller set as + Enregistrer le groupe de controleurs sous... + + + + Name + Nom + + + + Type + Type + + + + H-Ctrl + H-Ctrl + + + + L-Ctrl + L-Ctrl + + + + Min Val + Val Min + + + + Max Val + Val Max + + + + list of defined controllers + list des controleurs définis + + + + This is the MusE list of defined controllers. + C'est la liste des controleurs qui ont été définis + + + + Properties + Propriétés + + + + Name + Nom + + + + Max Value + Valeur Max + + + + Min Value + Valeur Mini + + + + Control7 + Control7 + + + + Control14 + Control8 + + + + RPN + RPN + + + + NRPN + NRPN + + + + XG-SysEx + XG-SysEx + + + + SysEx + SysEx + + + + Type + Type + + + + &New + &Nouveau + + + + create new entry + Crée une nouvelle entrée + + + + pressing the New button you create a new entry +in the MusE list of defined controllers + Crée une nouvelle entrée dans la liste des controleurs + + + + &Delete + &Effacer + + + + delete selected entry + efface l'entrée sélectionnée + + + + &OK + &Ok + + + + &Cancel + &Annuler + + + + Channel + Canal + + + + Pitch + Hauteur + + + + Range + Entre + + + + MidiEditor + + + &Edit + + + + + Cut + Couper + + + + Copy + Copier + + + + Paste + Coller + + + + Play Events + Jouer Evènements + + + + Step Record + + + + + Midi Input + + + + + Follow Song + + + + + MidiFileConfig + + + Enable extended smf format + Activer la prise en charge du format smf étendu + + + + Division + Division + + + + Copyright + Copyright + + + + Config exported Midi Files + Configuration de l'export en fichier Midi + + + + MusE: Config exported Midi Files + MusE: Configurer l'export en fichier Midi + + + + MidiFilterConfigBase + + + MusE: Midi Input Filter + MusE: Filtre Entrée Midi + + + + Record Filter + Filtre d'Enregistrement + + + + Note On + Note On + + + + Poly Pressure + Pression Poly + + + + Controller + Controleur + + + + Program Change + Changement de son (Program Change) + + + + After Touch + Pression (After Touch) + + + + Pitch Bend + Molette de modulation - Hauteur + + + + Sysex + SysEx + + + + Thru Filter + Filtre Thru + + + + Controller Filter + Filtre Controleur + + + + Channel Filter + Filtre Canal + + + + 14 + 14 + + + + 10 + 10 + + + + 6 + 6 + + + + 12 + 12 + + + + 4 + 4 + + + + 2 + 2 + + + + 9 + 9 + + + + 8 + 8 + + + + 3 + 3 + + + + 13 + 13 + + + + 15 + 15 + + + + 16 + 16 + + + + 7 + 7 + + + + 11 + 11 + + + + 5 + 5 + + + + 1 + 1 + + + + MidiInPortStrip + + + AlsaDevices + + + + + MidiChannel + + + + + JackDevices + + + + + MidiInputTransformDialog + + + New + Nouveau + + + + MidiInputTransformDialogBase + + + MusE: Midi Input Transformator + MusE: Transformateur d'Entrée Midi + + + + Filter + Filtre + + + + All + Tous + + + + Equal + Egal + + + + Unequal + Différent de + + + + Note + Note + + + + Poly Pressure + Pression Poly + + + + Control Change + Controle de Changement + + + + Aftertouch + Pression + + + + Pitch Bend + Molette de modulation + + + + NRPN + NRPN + + + + RPN + RPN + + + + Value 2 + Valeur 2 + + + + Value 1 + Valeur 1 + + + + Event Type + Type d'Evènements + + + + Ignore + Ignore + + + + Higher + Plus Haut + + + + Lower + Plus Bas + + + + Inside + A l'intérieur + + + + Outside + Al'extérieur + + + + Channel + Canal + + + + Port + Port + + + + Processing + Travail + + + + Keep + Garder + + + + Fix + Fixer + + + + Plus + Plus + + + + Minus + Moins + + + + Multiply + Multiplier + + + + Divide + Diviser + + + + Invert + Inverser + + + + ScaleMap + Echelle + + + + Flip + Retourner + + + + Dyn + Dyn + + + + Random + Aléatoire + + + + Modules + Modules + + + + 1 + 1 + + + + 2 + 2 + + + + 3 + 3 + + + + 4 + 4 + + + + enable modul 1 + Activer module 1 + + + + enable modul 2 + Activer module 2 + + + + enable modul 3 + Activer module 3 + + + + enable modul 4 + Activer module 4 + + + + Preset + Réglages enregistrés + + + + Name: + Nom: + + + + Comment: + Commentaires: + + + + Function + Fonction + + + + &New + &Nouveau + + + + create new preset + Crée un nouveau réglage + + + + &Delete + &Efface + + + + delete preset + efface un réglage + + + + &Dismiss + &Rejeter + + + + PresetList + Liste de Réglages + + + + MidiOutPortStrip + + + MidiChannel + + + + + AlsaDevices + + + + + JackDevices + + + + + MidiPluginDialog + + + MusE: select midi plugin + + + + + File + + + + + Name + Nom + + + + Version + + + + + Description + + + + + Ok + Ok + + + + Cancel + + + + + MidiRack + + + midi effect rack + + + + + move up + + + + + move down + + + + + remove + + + + + bypass + + + + + show gui + + + + + new + nouveau + + + + MidiRawDeviceDialogBase + + + MusE: raw midi device configuration + MusE: configuration des périphériques Midi + + + + Name + Nom + + + + Device + Périphérique + + + + Type + Type + + + + Virt. Ports + Ports virtuels + + + + Speed + Vitesse + + + + Handshaking + Méthode (handshaking) + + + + Device Properties + Propriétés du périphérique + + + + Virt.Ports + Ports virtuels + + + + Raw Device + Périphérique pur (raw) + + + + Serial Port + Port série + + + + Pipe + Tuyau (Pipe) + + + + Device Path + Chemin du périphérique + + + + 9600 + 9600 + + + + 19200 + 19200 + + + + 38400 + 38400 + + + + None + Aucun + + + + RTS/CTS + RTS/CTS + + + + Xon/Xoff + Xon/Xoff + + + + &New + &Nouveau + + + + &Delete + &Effacer + + + + &OK + &OK + + + + &Cancel + &Annuler + + + + MidiStrip + + + Var + Var + + + + Rev + Rev + + + + Cho + Cho + + + + dB + dB + + + + Pan + Pan + + + + mute + silence + + + + pre fader listening + écoute pre fader + + + + VariationSend + + + + + ReverbSend + + + + + ChorusSend + + + + + Pan/Balance + + + + + Tracks + Pistes + + + + OutputPorts + + + + + MidiSyncConfigBase + + + MusE: Midi Sync + MusE: Synchro Midi + + + + Apply + Appliquer + + + + Ok + Ok + + + + Cancel + Annuler + + + + hour + heure + + + + h + h + + + + minute + minute + + + + m + m + + + + second + second + + + + s + s + + + + frame + Armature (frame) + + + + f + f + + + + subframe + Armature fine (subframe) + + + + 24 + 24 + + + + 25 + 25 + + + + 30D + 30D + + + + 30N + 30N + + + + Id: + Id: + + + + device id + Id. du périphérique + + + + Port: + Port: + + + + midi port + port midi + + + + Sync Source + Source de la synchro + + + + accept MTC + accepter MTC + + + + accept Midi Clock + accepter Horloge Midi + + + + accept MMC + accepter MMC + + + + Sync Gen + Générer Synchro + + + + Midi Time Code (MTC) + Code Temporel Midi (MTC) + + + + Midi Clock + Horloge Midi + + + + Midi Machine Control (MMC) + Controle Machine MIDI (MMC) + + + + Sync Mode + Mode de synchro + + + + Master + Maitre + + + + Slave + Esclave + + + + all + tous + + + + MTC + MTC + + + + Type: + Type: + + + + Offset: + Décalage: + + + + MidiSyntiStrip + + + OutputPorts + + + + + Channel + Canal + + + + Input Ports + + + + + MidiTimeDelegate + + + dB + dB + + + + MidiTrackInfo + + + Channel %1 + + + + + Midi Port + Port MIDI + + + + MidiTrackInfoBase + + + MusE: TrackInfo + MusE: InfoPiste + + + + output channel + canal de sortie + + + + all midi events are send to this output channel + tous les évènements midi seront envoyés vers cette sortie + + + + Track Info + Info Piste + + + + % + % + + + + Track Name + Nom de Piste + + + + output port + port de sortie (Output Ch.) + + + + off + off + + + + change stereo position + changer la position stéréo + + + + OCh. + OCh. + + + + MidiThru + MidiThru + + + + ??? + ??? + + + + select instrument patch + choisissez le groupe d'instruments + + + + Transp. + Transp. + + + + Volume + Volume + + + + Channel Info + Info canal + + + + Pan + Pan + + + + Delay + Délai + + + + H-Bank + H-Bank + + + + Compr. + Compr. + + + + L-Bank + L-Bank + + + + Progr. + Progr. + + + + Velocity + Vélocité + + + + Length + Longueur + + + + input ports + ports d'entrée (Input Ch.) + + + + IChan. + IChan: + + + + input channels + canaux d'entrée + + + + Events from all configured channels are +recorded to this track. +You can specify more than one channel for +recording: + 1 2 3 record from channel 1 2 and 3 + 1-3 same + 1-3 5 record from channel 1 2 3 and 5 + Les évènements de tous les canaux +configurés sont enregistrés sur cette piste. +Vous pouvez spécifier plus d'un canal +pour l'enregistrement: + 1 2 3enregistre depuis les canaux 1, 2 et 3 + 1-3idem + 1-3 5 enregistre depuis les canaux 1, 2, 3 et 5 + + + + Rec + Enr + + + + MidiTrackerEditor + + + &View + + + + + MidiTracker Tools + + + + + Panic + Panique! + + + + Transport + Transport + + + + row features + + + + + Number of visible rows + + + + + Quantize + Quantiser + + + + MidiTransformDialogBase + + + MusE: Midi Transformator + MusE: Transformateur Midi + + + + &New + &Nouveau + + + + &Delete + &Effacer + + + + &Apply + &Appliquer + + + + &OK + &Ok + + + + &Cancel + &Annuler + + + + PresetList + ListRéglages + + + + Processing + Transformations + + + + Event Type + Type d'évènements + + + + Keep + Garder + + + + Fix + Fixer + + + + Note + Note + + + + Poly Pressure + Pression Poly + + + + Control Change + Changement de Controle + + + + Aftertouch + Pression + + + + Pitch Bend + Molette de modulation + + + + NRPN + NRPN + + + + RPN + RPN + + + + Plus + Addition + + + + Minus + Soustraction + + + + Multiply + Multiplication + + + + Divide + Division + + + + Value 2 + Valeur 2 + + + + Invert + Inverser + + + + ScaleMap + Echelle + + + + Flip + Retourner + + + + Dyn + Dyn + + + + Random + Aléatoire + + + + Value 1 + Valeur 1 + + + + Length + Longueur + + + + Position + Position + + + + Filter + Filtre + + + + All + Tous + + + + Equal + Egal + + + + Unequal + Différent + + + + Ignore + Ignore + + + + Higher + Plus haut + + + + Lower + Plus bas + + + + Inside + A l'intérieur + + + + Outside + A l'extérieur + + + + Bar Range + Type de mesure + + + + Preset + Réglages + + + + Name: + Nom: + + + + Comment: + Commentaire: + + + + Range + Type + + + + process all events + Transformer tous les évènements + + + + selected tracks + pistes sélectionnées + + + + inside loop + dans la boucle + + + + Function + fonction + + + + Select + Sélectionner + + + + Quantize + Quantiser + + + + Delete + Effacer + + + + Transform + Transformer + + + + Insert + Insérer + + + + Copy + Copier + + + + Extract + Extraire + + + + Quantize Value + Valeur de Quantisation + + + + Sysex + SysEx + + + + MidiTransformerDialog + + + New + Nouveau + + + + MixdownFileDialog + + + Wave Files (*.wav);;All Files (*) + Fichiers Wave (*.wav);;Tous les Fichiers (*) + + + + MusE: set mixdown file name + + + + + MixdownFileDialogBase + + + MusE: Set Mixdown Wavefile + MusE: Fichier wav pour mixage + + + + &OK + &OK + + + + &Cancel + &Annuler + + + + File Path + Chemin d'accés + + + + Channel + Canal + + + + Stereo + Stéréo + + + + Mono + Mono + + + + 5.1 + 5.1 + + + + wav,16 Bit + wav,16 Bit + + + + wav, 24 Bit + v, 24 Bit + + + + wav, 32 Bit (float) + wav, 32 Bit (flottant) + + + + Format + Format + + + + Mixer + + + Mute + Muet + + + + MusE: Midi Mixer + MusE: Mixeur Midi + + + + Rev + Rev + + + + Cho + Cho + + + + Var + Var + + + + Pan + Pan + + + + Master + Maitre + + + + Port + Port + + + + MusE: Mixer + + + + + &Create + + + + + &View + + + + + Routing + + + + + Show Midi Tracks + + + + + Show Midi Out Ports + + + + + Show Midi In Ports + + + + + Show Wave Tracks + + + + + Show Output Tracks + + + + + Show Group Tracks + + + + + Show Input Tracks + + + + + Show Synthesizer + + + + + MusE + + + &File + &Fichier + + + + Open &Recent + Ouvrir &Récent + + + + Save &As + Enregistrer &Sous + + + + Config &Printer + Configuration Im&primante + + + + Import Midifile + Importer fichier MIDI + + + + Export Midifile + Exporter fichier MIDI + + + + Import Wave File + Importer fichier WAV + + + + &Quit + &Quitter + + + + &Edit + &Edition + + + + C&ut + Co&uper + + + + &Copy + &Copier + + + + &Paste + Co&ller + + + + Delete Track + Effacer Piste + + + + Add Track + Ajouter Piste + + + + Select &All + Selectionner &Tout + + + + &Deselect All + &Dé-selectionner tout + + + + Invert &Selection + Inverser la &Sélection + + + + &Inside Loop + A l'&intérieur de la Boucle + + + + &Outside Loop + A l'e&xtérieur de la Boucle + + + + All &Parts on Track + Tous les &bouts de la Piste + + + + Select + Sélectionner + + + + Drums + Batterie + + + + List + Liste + + + + Graphic + Graphique + + + + Mastertrack + PistePrincipale + + + + Midi &Transform + &Transformation MIDI + + + + Modify Gate Time + Modifier la Durée du Pont (Gate Time) + + + + Modify Velocity + Modifier la vélocité + + + + Crescendo + Crescendo + + + + Transpose + Transposition + + + + Thin Out + Sortie fine + + + + Erase Event + Effacer évènements + + + + Note Shift + Décalage de note + + + + Move Clock + Décalage horloge + + + + Copy Measure + Copier la mesure + + + + Erase Measure + Effacer la mesure + + + + Delete Measure + Supprimer la mesure + + + + Create Measure + Créer une mesure + + + + Mix Track + Mixer Piste + + + + Midi + MIDI + + + + &Structure + &Structure + + + + Global Cut + Couper tout + + + + Global Insert + Insérer tout + + + + Global Split + Diviser Tout + + + + Copy Range + Limites de Copie + + + + Cut Events + Couper Evènements + + + + &Display + &Affichage + + + + Transport Panel + Panneau de Controle + + + + Bigtime window + Fenetre GrandeHorloge + + + + dont follow Song + Ne pas suivre la chanson + + + + follow page + Défilement par page + + + + follow continuous + Défilement fin + + + + &Config + &Configuration + + + + Global Settings + Paramètres Généraux + + + + follow song + Suivre la chanson + + + + Metronome + Métronome + + + + Midi Sync + Synchro MIDI + + + + Midi File Config + Paramètres du fichier MIDI + + + + Appearance settings + Apparance + + + + Soft Synthesizer + Synthétiseur virtuel + + + + Midi Ports + Ports MIDI + + + + Audio System + System Audio + + + + Save Configuration + Sauvegarder la Configuration + + + + Midi Input Transform + Transformations Entrée MIDI + + + + Midi Input Filter + Filtres pour l'Entrée MIDI + + + + Midi Remote Control + Controle MIDI a distance + + + + Random Rhythm Generator + Générateur aléatoire de rythmes + + + + &Midi + &MIDI + + + + Mixer + Mixer + + + + Define Controller + Définir Controleur + + + + Input Plugins + Plugins d'Entrée + + + + Reset Instr. + Ré-initialisation des Instruments + + + + Init Instr. + Init. Instr. + + + + local off + local off + + + + &Audio + &Audio + + + + Cliplist + ListClip + + + + Bounce to Track + Rebondir (bounce) sur la piste + + + + Bounce to File + Rebondir (bounce) sur Fichier + + + + Bounce + Rebondir (bounce) + + + + &Help + &Aide + + + + Browser + Navigateur + + + + &About + &A propos + + + + About&Qt + A propos de &Qt + + + + What's &This + Qu'est-ce que c'es&t + + + + MusE: load project + Muse: charger Projet + + + + The current Project contains unsaved data +Save Current Project? + Le Projet en cours contient des données non encore sauvegardées. +Enregistrer? + + + + &Save + &Enregistrer + + + + &Nosave + &Pas d'enregistrement + + + + &Abort + &Annuler + + + + MusE: Save As + MusE: enregistrer sous + + + + MusE: Import Midi + MusE: importer fichier MIDI + + + + MusE: Export Midi + MusE: exporter fichier MIDI + + + + Nothing to edit + Rien à éditer + + + + The current Project contains unsaved data +Load overwrites current Project: +Save Current Project? + Le Projet en cours contient des données non sauvegardées. +Enregistrer? + + + + &Overwrite + Ec&raser + + + + no help found at: + Pas d'aide trouvée ici: + + + + MusE: Open Help + MusE: Ouvrir l'Aide + + + + to import a audio file you have first to selecta audio track + Pour importer in fichier AUDIO, sélectionner d'abord une piste AUDIO + + + + UndoRedo + AnnulerRefaire + + + + undo + annuler + + + + Und&o + &Annuler + + + + redo + Refaire + + + + Re&do + Re&faire + + + + undo last change to song + Annuler le dernier changement sur la chanson + + + + redo last undo + Annuler l'annulation (refaire) + + + + Transport + Transport + + + + loop + boucle + + + + Loop + Boucle + + + + punchin + Punch-In + + + + Punchin + Punch-In + + + + punchout + Punch-Out + + + + Punchout + Punch-Out + + + + start + démarrer + + + + Start + Démarrer + + + + rewind + rembobiner + + + + Rewind + Rembobiner + + + + forward + avance + + + + Forward + Avance + + + + stop + stop + + + + Stop + Stop + + + + play + jouer + + + + Play + Jouer + + + + record + enregistrer + + + + Record + Enregistrer + + + + panic + panique! + + + + Panic + Panique! + + + + new + nouveau + + + + &New + &Nouveau + + + + open + ouvrir + + + + &Open + &Ouvrir + + + + save + enregistrer + + + + pianoroll + rouleau Piano + + + + Pianoroll + Rouleau-Piano + + + + score + partition + + + + Score + Partition + + + + marker + marqueur + + + + Marker + Marker + + + + File Buttons + Boutons Fichiers + + + + Unknown File Format + Format de fichier inconnu + + + + none + aucun + + + + MusE: Write File failed + MusE: échec de l'enregistrement + + + + MusE: About + MusE: A propos + + + + MusE: Song: + MusE: chanson + + + + reading midifile + + lecture du fichier MIDI + + + + +failed + Echec + + + + MusE: Copy Range + MusE: limites de la copie + + + + not implemented + Non-implémenté (désolé) + + + + MusE: Cut Events + MusE: Couper Evènements + + + + MusE: Bounce to Track + MusE: Rebondir sur la piste (bounce) + + + + more than one target track selected + vous avez sélectionné plus d'une piste en destination + + + + wrong target track type, +select wave track as target + mauvais type de piste en destination, +choisissez une piste AUDIO en destination + + + + no target track selected + vous n'avez pas sélectionné de piste de destination + + + + Arranger + Arrangeur + + + + Cursor + Curseur + + + + Bar + Mesure + + + + Snap + Aligne + + + + Pitch + Hauteur + + + + midi pitch + hauteur midi + + + + global midi pitch shift + transposition midi globale + + + + Tempo + Tempo + + + + midi tempo + tempo midi + + + + N + N + + + + MusE manual not found at: + + + + + to import a audio file you have first to selecta wave track + + + + + Failed to start audio! + + + + + Was not able to start audio, check if jack is running. + + + + + + Project Buttons + + + + + &Project + + + + + Delete Selected Tracks + + + + + Project Properties + + + + + &View + + + + + Edit Instrument + + + + + Restart Audio + + + + + Setti&ngs + + + + + Configure shortcuts + + + + + Midi File Export + + + + + Preferences + + + + + &Manual + + + + + &MusE homepage + + + + + &Report Bug... + + + + + &About MusE + + + + + What's &This? + + + + + Len + + + + + MusE: new project + + + + + Cannot create project folder <%1> + + + + + Cannot open template file +%1 + + + + + File <%1> read error + + + + + MusE: Create tmp file failed + + + + + MusE: Bounce + + + + + set left/right marker for bounce range + + + + + MusE: Bounce to File + + + + + no output track found + + + + + MusE: import midi file + + + + + +failed: + + + + + rewind to start position + revenir à la position de départ + + + + start sequencer play + démarrer la lecture du séquenceur + + + + Save + Enregistrer + + + + MuseApplication + + + Transport: Goto Start + + + + + Goto Start + + + + + rewind to start position + revenir à la position de départ + + + + Transport: Toggle Loop section + + + + + Loop + Boucle + + + + loop between left mark and right mark + Boucler entre les marqueurs gauche et droit + + + + Transport: Start playback from current location + + + + + Play + Jouer + + + + start sequencer play + démarrer la lecture du séquenceur + + + + Transport: Play, Stop, Rewind + + + + + Transport: Stop Playback + + + + + Stop + Stop + + + + stop sequencer + arréter le séquenceur + + + + Transport: Goto left marker + + + + + Transport: Goto right marker + + + + + Transport: Toggle metronome + + + + + Transport: Toggle Record + + + + + Record + + + + + to record press record and then play + pour enregistrer, presser Enregistrement (Record) puis Lecture (Play) + + + + Transport: Punch In + + + + + Punchin + Punch-In + + + + record starts at left mark + l'enregistrement démarre au marqueur gauche + + + + Transport: Punch Out + + + + + Punchout + Punch-Out + + + + record stops at right mark + l'enregistrement s'arrète au marqueur droit + + + + Transport: Rewind + + + + + rewind + rembobiner + + + + rewind current position + revenir à la position en cours + + + + Transport: Forward + + + + + forward + avance + + + + move current position + déplacer la position en cours + + + + Panic + Panique! + + + + send note off to all midi channels + envoyer ordre de relachement de note à tous les canaux midi + + + + Edit: Undo + + + + + undo + annuler + + + + undo last change to song + Annuler le dernier changement sur la chanson + + + + Edit: Redo + + + + + redo + Refaire + + + + redo last undo + Annuler l'annulation (refaire) + + + + Edit: Cut + + + + + Cut + Couper + + + + Edit: Copy + + + + + Copy + Copier + + + + Edit: Paste, + + + + + Paste + Coller + + + + Edit: Delete + + + + + Delete + Effacer + + + + Open + + + + + open project + + + + + Click this button to select a new project +You can also select the <b>Open command</b> from the Project menu. + + + + + Save + Enregistrer + + + + save project + + + + + Click this button to save the project you are editing. +You can also select the Save command from the Project menu. + + + + + File: Save as + + + + + save project as... + + + + + Click this button to save a new copy of the project. + + + + + + File: Save as Template + + + + + save project as template + + + + + Click this button to save the project you are editing +for later use as a template. + + + + + File: Open recent file + + + + + File: Import midi file + + + + + File: Export midi file + + + + + File: Import audio file + + + + + File: Quit MusE + + + + + Quit MusE + + + + + Edit: Select parts on track + + + + + All &Parts on Track + Tous les &bouts de la Piste + + + + Open Pianoroll + + + + + Pianoroll + Rouleau-Piano + + + + Start Pianoroll Editor + + + + + Open MidiTracker + + + + + MidiTracker + + + + + Start Midi Tracker + + + + + Open drumeditor + + + + + Drum Editor + + + + + Start Drum Editor + + + + + Open wave editor + + + + + Wave Editor + + + + + Open listeditor + + + + + Properties + Propriétés + + + + open Properties Editor + + + + + Open mastertrack editor + + + + + Mastertrack (Tempo) Editor + + + + + Start Mastertrack (Tempo) Editor + + + + + Add midi track + + + + + Add drum track + + + + + Add wave track + + + + + Add audio output + + + + + Add audio group + + + + + Add audio input + + + + + Structure: Global cut + + + + + Structure: Global insert + + + + + Structure: Global split + + + + + Structure: Copy range + + + + + Structure: Cut events + + + + + View: Open mixer 1 window + + + + + Mixer1 + + + + + Show Mixer 1 + + + + + View: Open mixer 2 window + + + + + Mixer2 + + + + + Show Mixer 2 + + + + + View: Toggle transport window + + + + + Transport + Transport + + + + Show Transport Window + + + + + View: Toggle bigtime window + + + + + BigTime + + + + + Show BigTime Window + + + + + View: Open marker window + + + + + Marker + Marker + + + + Show Marker List + + + + + Settings: Follow song by page + + + + + Settings: Follow song off + + + + + Settings: Follow song continuous + + + + + Settings: Configure shortcuts + + + + + Settings: Configure metronome + + + + + Settings: Midi sync configuration + + + + + Settings: Midi file export configuration + + + + + Settings: Midi ports / Soft Synth + + + + + Settings: Audio subsystem configuration + + + + + Midi: Edit midi instruments + + + + + Midi: Midi remote control + + + + + Midi: Reset midi + + + + + Midi: Init midi + + + + + Midi: Midi local off + + + + + Audio: Bounce audio to track + + + + + Audio: Bounce audio to file + + + + + Audio: Restart audio + + + + + Help: Open Manual + + + + + Help: Toggle whatsthis mode + + + + + Edit: Edit selected part + + + + + Edit: Select nearest part on track above + + + + + Edit: Add nearest part on track above + + + + + Edit: Select nearest part on track below + + + + + Edit: Add nearest part on track below + + + + + Midi: Transpose + + + + + Transpose + Transposition + + + + Edit: Select all + + + + + Select All + + + + + Edit: Select none + + + + + Deselect All + + + + + Edit: Invert selection + + + + + Invert Selection + + + + + Edit: Select events/parts inside locators + + + + + Select Inside Loop + + + + + Edit: Select events/parts outside locators + + + + + Select Outside Loop + + + + + Edit: Select nearest part/event to the left + + + + + Edit: Add nearest part/event to the left to selection + + + + + Edit: Add nearest part/event to the right to selection + + + + + Edit: Set locators to selection + + + + + Edit: Increase pitch + + + + + Edit: Decrease pitch + + + + + Edit: Set fixed length on midi events + + + + + Set fixed length + + + + + Quantize: Over Quantize + + + + + Over Quantize + Plus de Quantisation + + + + Quantize: Note On Quantize + + + + + Note On Quantize + Quantisation Appui de Note + + + + Quantize: Note On/Off Quantize + + + + + Note On/Off Quantize + Quantisation Appui/Relachement de Note + + + + Quantize: Iterative Quantize + + + + + Iterative Quantize + Quantisation itérative + + + + Quantize: Configure quant + + + + + Quantize: Modify Gate Time + + + + + Modify Gate Time + Modifier temps de fermeture (gate time) + + + + Quantize: Modify Velocity + + + + + Modify Velocity + Modifier la vélocité + + + + Edit: Crescendo + + + + + Crescendo + Crescendo + + + + Edit: Thin Out + + + + + Thin Out + Sortie fine + + + + Edit: Erase Event + + + + + Erase Event + Effacer Evènements + + + + Edit: Note Shift + + + + + Note Shift + Décalage de Note + + + + Edit: Move Clock + + + + + Move Clock + Décalage temporel + + + + Edit: Copy Measure + + + + + Copy Measure + Copier mesure + + + + Edit: Erase Measure + + + + + Erase Measure + Effacer mesure + + + + Edit: Delete Measure + + + + + Delete Measure + Supprimer mesure + + + + Edit: Create Measure + + + + + Create Measure + Créer mesure + + + + Edit: Change event color + + + + + Tool: Pointer + + + + + Pointer + + + + + select Pointer Tool: +with the pointer tool you can: + select parts + move parts + copy parts + Choisir l'Outil de Pointage: +avec l'outil de pointage vous pouvez: + choisir des pièces + déplacer des pièces + copier des pièces + + + + Tool: Pencil + + + + + Pencil + + + + + select Pencil Tool: +with the pencil tool you can: + create new parts + modify length of parts + Choisir l'Outil Crayon +avec le crayon vous pouvez: + créer de nouvelles pièces + modifier la longueur des pièces + + + + Tool: Eraser + + + + + Eraser + + + + + select Delete Tool: +with the delete tool you can delete parts + choisir l'Outil Gomme: +avec la gomme vous pouvez effacer les pièces + + + + Tool: Scissor + + + + + Scissor + + + + + select Cut Tool: +with the cut tool you can split a part + Choisir l'Outil Ciseaux +avec les ciseaux vous pouver couper une pièce + + + + Tool: Glue + + + + + Glue + + + + + select Glue Tool: +with the glue tool you can glue two parts + Choisir l'Outil Colle: +avec la colle vous pouvez coller deux pièces ensemble + + + + Declone + + + + + Tool: Quantize + + + + + Quantize + Quantiser + + + + select Quantize Tool: +insert display quantize event + Choisir l'Outil Quantisation: +pour voir les marques de quantisation + + + + Tool: Line Draw + + + + + Draw + + + + + select Drawing Tool + Choisir l'Outil de Dessin + + + + Tool: Mute Parts + + + + + Mute + Muet + + + + select Muting Tool: +click on part to mute/unmute + Choisir l'Outil Silence: +cliquez sur une pièces pour la rendre muette ou pas. + + + + Transport: Increase current position + + + + + Transport: Decrease current position + + + + + Quantize: Set quantize to 1/1 note + + + + + Quantize: Set quantize to 1/2 note + + + + + Quantize: Set quantize to 1/4 note + + + + + Quantize: Set quantize to 1/8 note + + + + + Quantize: Set quantize to 1/16 note + + + + + Quantize: Set quantize to 1/32 note + + + + + Quantize: Set quantize to 1/64 note + + + + + Quantize: Toggle triol quantization + + + + + Quantize: Toggle punctuation quantization + + + + + Quantize: Toggle punctuation quantization (2) + + + + + Insert + Insérer + + + + Insert Tempo + + + + + Insert Signature + + + + + Change Event Position + + + + + Edit Event Value + + + + + NoteInfo + + + Start + Début + + + + Len + Lon + + + + Pitch + Hauteur + + + + Velo On + Velo on + + + + Velo Off + Velo off + + + + Note Info + Info Note + + + + OrganGuiBase + + + MusE: Organ + MusE: Orgue + + + + Presets + Presets + + + + Set + Set + + + + load preset list + charger la liste des presets + + + + save preset list + enregistrer la liste des presets + + + + O-1 + 0-1 + + + + Oscillator + Oscillateur + + + + Brass + Cuivres + + + + Reed + Roseau + + + + Flute + Flute + + + + Drawbars + Grands Tuyaux + + + + 16' + 16' + + + + 4' + 4' + + + + 2 2/3' + 2 2/3' + + + + 2' + 2' + + + + 8' + 8' + + + + 5 1/3' + 5 1/3' + + + + Envelope Lo + Enveloppe basse (Lo) + + + + Attack(ms) + Attaque (en ms) + + + + Decay(ms) + Affaiblissement (ms) + + + + Sustain(%) + Tenue (%) + + + + Release(ms) + Relachement (ms) + + + + Envelope Hi + Enveloppe Haute (Hi) + + + + Velocity + Vélocité + + + + OutportCombo + + + Midi Output Port + + + + + PageSettings + + + Paper Size + Dimension de la feuille + + + + user + utilisateur + + + + Margins + Marges + + + + Header + En-Tte + + + + Title + Titre + + + + Author + Auteur + + + + Fonts + Polices + + + + Page No. + N° de page + + + + Measure No + N° de mesure + + + + Track Name + Nom de la Piste + + + + Lyrics + Paroles + + + + Layout + Disposition + + + + Scale + Echelle + + + + Flags + Drapeaux + + + + show page no. + Montrer la page N° + + + + show measure no. + Montrer la mesure N° + + + + show track name + Montrer le nom des Pistes + + + + Ok + Ok + + + + Apply + Appliquer + + + + Cancel + Annuler + + + + left Margin + Marge de gauche + + + + top Margin + Marge du haut + + + + right Margin + Marge de droite + + + + bottom Margin + Marge du bas + + + + Bars across the Page + Mesures par Page + + + + PartCanvas + + + Cannot copy/move/clone to different Track-Type + Ne peut copier/déplacer vers une type de Piste différent + + + + C&ut + Co&uper + + + + &Copy + &Copier + + + + rename + renommer + + + + color + couleur + + + + delete + effacer + + + + split + séparer + + + + glue + coller + + + + de-clone + annuler-clonage + + + + pianoroll + piano-roll + + + + score + partition + + + + list + liste + + + + drums + batterie + + + + wave edit + édition wav + + + + Cannot paste: multiple tracks selected + Ne peut coller: plusieurs pistes sélectionnées + + + + Cannot paste: no track selected + Ne peut coller: pas de piste choisie + + + + Cannot paste midi parts to wave track + Ne peut coller des bouts MIDI sur des pistes AUDIO + + + + Cannot paste wave parts to midi track + Ne peut copier des bouts AUDIO sur des pistes MIDI + + + + Cannot paste: wrong data type + Ne peut coller: mauvais type de donnée + + + + AutoFill... + + + + + miditracker + + + + + MusE: Get auto fill loop len + + + + + Measures: + + + + + MusE: Change Part Name + + + + + PartName: + + + + + Rename + + + + + Color + + + + + PatchBay + + + MusE: ALSA MIDI Patch Bay + MusE: Baie de Patches MIDI ALSA + + + + PatchBayBase + + + ALSA Patch Bay + Baie de Patches ALSA + + + + PianoRoll + + + &Edit + &Edition + + + + Cut + Couper + + + + Copy + Copier + + + + Paste + Coller + + + + Delete Events + Effacer Evènements + + + + Select All + Sélectionner tout + + + + Select None + Dé-sélectionner + + + + Invert + Inverser + + + + Inside Loop + Dans la Boucle + + + + Outside Loop + Hors de la Boucle + + + + &Select + &Sélectionner + + + + blue + bleu + + + + pitch colors + couleurs pour la hauteur + + + + velocity colors + couleurs pour la vélocité + + + + &Config + &Configuration + + + + event color + couleur pour les évènements + + + + &Functions + &Fonctions + + + + Over Quantize + Plus de Quantisation + + + + Note On Quantize + Quantisation Appui de Note + + + + Note On/Off Quantize + Quantisation Appui/Relachement de Note + + + + Iterative Quantize + Quantisation itérative + + + + Config Quant... + Config. Quant. + + + + Modify Gate Time + Modifier temps de fermeture (gate time) + + + + Modify Velocity + Modifier la vélocité + + + + Crescendo + Crescendo + + + + Transpose + Transposition + + + + Thin Out + Sortie fine + + + + Erase Event + Effacer Evènements + + + + Note Shift + Décalage de Note + + + + Move Clock + Décalage temporel + + + + Copy Measure + Copier mesure + + + + Erase Measure + Effacer mesure + + + + Delete Measure + Supprimer mesure + + + + Create Measure + Créer mesure + + + + Pianoroll Tools + Outils de piano-roll + + + + Step Record + Enregistrement pas-a-pas + + + + Midi Input + Entrée MIDI + + + + Play Events + Jouer Evènements + + + + Add Controller View + Ajouter une vue de contrles + + + + ctrl + ctrl + + + + Panic + Panique! + + + + Transport + Transport + + + + PluginDialog + + + Ok + Ok + + + + Cancel + Annuler + + + + MusE: select plugin + MusE: choisir plugin + + + + Lib + Lib + + + + Label + Label + + + + Name + Nom + + + + Copyright + Copyright + + + + Stereo + Stéréo + + + + Mono + Mono + + + + All + Tous + + + + AI + + + + + AO + + + + + CI + + + + + CO + + + + + IP + + + + + id + + + + + Maker + + + + + Mono and Stereo + + + + + Show All + + + + + Select which types of plugins should be visible in the list.<br>Note that using mono plugins on stereo tracks is not a problem, two will be used in parallell.<br>Also beware that the 'all' alternative includes plugins that probably not are usable by MusE. + + + + + Search in 'Label' and 'Name': + + + + + PluginGui + + + File Buttons + Boutons Fichiers + + + + Load Preset + + + + + Save Preset + + + + + bypass plugin + + + + + MusE: load preset + + + + + MusE: save preset + + + + + PreferencesDialog + + + MusE: load image + MusE: charger une image + + + + ProjectDialog + + + MusE: create new folder + + + + + new folder: + + + + + QHeader + + + output channel + canal de sortie + + + + output port + port de sortie (Output Ch.) + + + + QMenu + + + Add Midi Generator... + + + + + Add Soft Synth... + + + + + QWidget + + + new + nouveau + + + + None + Aucun + + + + File + + + + + + +exists + + + + + MusE: write + + + + + Overwrite + + + + + Quit + + + + + Open File + + + + + + +failed: + + + + + MusE: Open File + + + + + generic midi + + + + + copy + %1 +to + %2 + + + + + +converting sample rate +from %1 to %2 + + + + + Abort + + + + + create peakfile for + + + + + MusE: export midi file: + + + + + Cannot convert sysex string + + + + + Hex String too long (2048 bytes limit) + + + + + RecordButton + + + record + + + + + RhythmBase + + + Instrument + Instrument + + + + &New + &Nouveau + + + + create new entry + Crée une nouvelle entrée + + + + pressing the New button you create a new entry +in the MusE list of defined controllers + Crée une nouvelle entrée dans la liste des controleurs + + + + delete selected entry + efface l'entrée sélectionnée + + + + list of defined controllers + list des controleurs définis + + + + This is the MusE list of defined controllers. + C'est la liste des controleurs qui ont été définis + + + + &File + &Fichier + + + + &Help + &Aide + + + + Save + Enregistrer + + + + &Save + &Enregistrer + + + + Cut + Couper + + + + Copy + Copier + + + + Paste + Coller + + + + &Paste + Co&ller + + + + RhythmGenerator + + + Form3 + Form3 + + + + Instrument + Instrument + + + + delete + effacer + + + + Save + Enregistrer + + + + SS_PluginChooserBase + + + Name + Nom + + + + Label + Label + + + + SS_PluginFront + + + Clear and unload effect + + + + + Load effect + + + + + Toggle display of effect parameters + + + + + Turn effect on/off + + + + + ShortcutCaptureDialog + + + Ok + Ok + + + + Shortcut conflicts with + + + + + Undefined + + + + + ShortcutCaptureDialogBase + + + OK + OK + + + + ShortcutConfig + + + Global + Global + + + + Arranger + Arrangeur + + + + Pianoroll + Rouleau-Piano + + + + Insert Note + Insérer Note + + + + Insert SysEx + Insérer SysEx + + + + Insert Ctrl + Insérer Ctrl + + + + Insert Meta + Insérer Meta + + + + Insert Channel Aftertouch + Insérr Canal de Pression + + + + Insert Key Aftertouch + Insérer une note de Pression + + + + Drumeditor + + + + + List editor + + + + + List Mastertrack + + + + + All categories + + + + + Wave editor + + + + + ShortcutConfigBase + + + &Apply + &Appliquer + + + + SimpleSynthGui + + + Load sample dialog + + + + + Song + + + Jack shutdown! + + + + + Jack has detected a performance problem which has lead to +MusE being disconnected. +This could happen due to a number of reasons: +- a performance issue with your particular setup. +- a bug in MusE (or possibly in another connected software). +- a random hiccup which might never occur again. +- jack was voluntary stopped by you or someone else +- jack crashed +If there is a persisting problem you are much welcome to discuss it +on the MusE mailinglist. +(there is information about joining the mailinglist on the MusE + homepage which is available through the help menu) + +To proceed check the status of Jack and try to restart it and then . +click on the Restart button. + + + + + SplitLayerGui + + + start pitch for split + + + + + enable learn mode for start pitch + + + + + end pitch for split + + + + + enable learn mode for end pitch + + + + + pitch offset for split + + + + + start velocity for split + + + + + end velocity for split + + + + + velocity offset for split + + + + + SynthConfigBase + + + Soft Synthesizer + Synthétiseur virtuel + + + + Name + Nom + + + + Midi Port + Port MIDI + + + + TLSWidget + + + Remove Subtrack + + + + + Ctrl + + + + + Velocity + Vélocité + + + + Delete Controller + + + + + TLWidget + + + Delete Track + Effacer Piste + + + + Copy Track + + + + + Show Gui + + + + + Add Subtrack + + + + + Midi Output Channel + + + + + TList + + + Delete Track + Effacer Piste + + + + Track Comment + Commentaire pour la Piste + + + + TemplateDialog + + + MusE presets + + + + + User presets + + + + + TimeCanvas + + + Ctrl + + + + + Add Controller View + + + + + Toolbar1 + + + Snap + Aligne + + + + Quantize + Quantiser + + + + All Events + Tous les Evènements + + + + Cursor + Curseur + + + + Solo + + + + + To + + + + + Looped Ev. + + + + + Selected Ev. + + + + + Looped+Sel. + + + + + TrackComment + + + MusE: Track Comment + + + + + Track Comment: + + + + + TrackInfo + + + Track Type + + + + + Track Name + + + + + Transport + + + Loop + Boucle + + + + punchin + Punch-In + + + + loop + boucle + + + + punchout + Punch-Out + + + + rewind + rembobiner + + + + forward + avance + + + + stop + stop + + + + play + jouer + + + + use master track + Utiliser la piste principale + + + + TransposeDialogBase + + + Value + Valeur + + + + Time + Temps + + + + all + tous + + + + Parts + Pièces + + + + OK + OK + + + + VAMGui + + + MusE: Load VAM Presets + + + + + MusE: Save VAM Presets + + + + + Velocity + + + MusE: Modify Velocity + + + + + VelocityBase + + + All Events + Tous les Evènements + + + + Selected Events + Evènements choisis + + + + Looped Events + Evènements bouclés + + + + Selected & Looped + Boucle & sélectionnée + + + + Values + Valeurs + + + + Rate: + Vitesse: + + + + Offset: + Décalage: + + + + % + % + + + + OK + OK + + + + Range + Entre + + + + WTScale + + + bar scale + Echelle de la mesure + + + + WaveEdit + + + Cursor + Curseur + + + + &File + &Fichier + + + + &Edit + + + + + Func&tions + + + + + &Gain + + + + + 200% + + + + + 150% + + + + + 75% + + + + + 50% + + + + + 25% + + + + + Other + + + + + Edit in E&xternal Editor + + + + + Mute Selection + + + + + Normalize Selection + + + + + Fade In Selection + + + + + Fade Out Selection + + + + + Reverse Selection + + + + + Select + Sélectionner + + + + waveedit-tools + + + + + Transport + Transport + + + + pianoroll-tools + + + + + Solo + + + + + WaveTrackInfoBase + + + MusE: TrackInfo + MusE: InfoPiste + + + + Track Info + Info Piste + + + + Mono + Mono + + + + Stereo + Stéréo + + + + Track Name + Nom de la Piste + + + + off + arr + + + + WaveView + + + MusE - file size changed + + + + + When editing in external editor - you should not change the filesize +since it must fit the selected region. + +Missing data is muted + + + + diff --git a/attic/muse_qt4_evolution/share/locale/muse_ru.qm b/attic/muse_qt4_evolution/share/locale/muse_ru.qm new file mode 100644 index 00000000..75162786 Binary files /dev/null and b/attic/muse_qt4_evolution/share/locale/muse_ru.qm differ diff --git a/attic/muse_qt4_evolution/share/locale/muse_ru.ts b/attic/muse_qt4_evolution/share/locale/muse_ru.ts new file mode 100644 index 00000000..0456972a --- /dev/null +++ b/attic/muse_qt4_evolution/share/locale/muse_ru.ts @@ -0,0 +1,7823 @@ + + + + + + + Insert Note + Ð’Ñтавить ноту + + + + Insert SysEx + Ð’Ñтавить SysEx + + + + Insert Ctrl + Ð’Ñтавить контроллер + + + + Insert Meta + Ð’Ñтавить Meta + + + + Insert Channel Aftertouch + Ð’Ñтавить Channel Aftertouch + + + + Insert Key Aftertouch + Ð’Ñтавить Key Aftertouch + + + + sets amount of quantization: +0 - no quantization +100 - full quantization + + + + + Click this button to enable recording + Ðажмите Ñту клавишу Ð´Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° запиÑи + + + + Default + + + + + Refrain + + + + + Bridge + + + + + Intro + + + + + Coda + + + + + Chorus + + + + + Solo + + + + + Brass + + + + + Percussion + + + + + Drums + Ударные + + + + Guitar + + + + + Bass + + + + + Flute + + + + + Strings + + + + + Keyboard + + + + + Piano + + + + + Saxophon + + + + + @default + + + Click this button to stop playback + Ðажмите Ñту кнопку Ð´Ð»Ñ Ð¾Ñтановки воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ + + + + Click this button to start playback + Ðажмите Ñту кнопку Ð´Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ + + + + Click this button to rewind to start position + Ðажмите Ñту кнопку Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ðº началу + + + + Click this button to rewind + Ðажмите Ñту кнопку Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼Ð¾Ñ‚ÐºÐ¸ назад + + + + Click this button to forward current play position + Ðажмите Ñту кнопку Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð²Ð¿ÐµÑ€Ñ‘Ð´ + + + + Click this button to open a <em>new song</em>.<br>You can also select the <b>Open command</b> from the File menu. + Ðажмите Ñту кнопку Ð´Ð»Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ <em>другой композиции</em>.<br>Ð’Ñ‹ также можете выбрать пункт <b>Открыть</b> в меню "Файл". + + + + Click this button to save the song you are editing. You will be prompted for a file name. +You can also select the Save command from the File menu. + Ðажмите Ñту кнопку Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€ÑƒÐµÐ¼Ð¾Ð¹ композиции. +Ð’Ñ‹ также можете выбрать пункт <b>Открыть</b> в меню "Файл". + + + + Create New Song + Создать новую композицию + + + + loop between left mark and right mark + Цикл между левым и правым маркерами + + + + record starts at left mark + ЗапиÑÑŒ начинаетÑÑ Ð¾Ñ‚ маркера Ñлева + + + + record stops at right mark + ЗапиÑÑŒ оÑтанавливаетÑÑ Ð¿Ð¾ маркеру Ñправа + + + + rewind to start position + Перемотать к начальной позиции + + + + rewind current position + Перемотать к текущей позиции + + + + move current position + ПеремеÑтить текущую позицию + + + + stop sequencer + ОÑтановить ÑеквенÑер + + + + start sequencer play + Ðачать воÑпроизведение из ÑеквенÑера + + + + to record press record and then play + Ð”Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° запиÑи нажмите "ЗапиÑать", а затем "ВоÑпроизвеÑти" + + + + send note off to all midi channels + ПоÑлать note off на вÑе MIDI-каналы + + + + presets (*.pre *.pre.gz *.pre.bz2) + ПредуÑтановки (*.pre *.pre.gz *.pre.bz2) + + + + All Files (*) + Ð’Ñе файлы (*) + + + + Add Midi Track + Добавить MIDI-дорожку + + + + Add Drum Track + Добавить дорожку Ñ ÑƒÐ´Ð°Ñ€Ð½Ñ‹Ð¼Ð¸ + + + + Add Wave Track + Добавить звуковую дорожку + + + + Add Audio Output + Добавить звуковой выход + + + + Add Audio Group + Добавить звуковую группу + + + + Add Audio Input + Добавить звуковой вход + + + + Add Aux Send + Добавить aux поÑыл + + + + Click this button to enable recording + Ðажмите Ñту клавишу Ð´Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° запиÑи + + + + Off + Выкл + + + + m + + + + + mute + + + + + s + + + + + solo + + + + + Mo + + + + + monitor + + + + + Dr + + + + + use drum map + + + + + off + выкл + + + + aR + + + + + automation read + + + + + aW + + + + + automation write + + + + + sync + + + + + send sync events + + + + + 1/2 channel + + + + + oR + + + + + output routing + + + + + iR + + + + + input routing + + + + + don't quantize notes above this tick limit + + + + + quantize also note len as default + + + + + Channels + + + + + Bar + Такт + + + + Midi + MIDI + + + + Add Midi Output + + + + + Add Midi Input + + + + + Audio + Звук + + + + MusE: create project directory + + + + + MusE: create template directory + + + + + Cannot find project <%1> + + + + + MusE: load Project + + + + + Open + Открыть + + + + Save + Сохранить + + + + MusE: create instruments directory + + + + + AboutBox + + + AboutBox + О программе + + + + Version 0.7.0 + +(C) Copyright 1999-2004 Werner Schweer and others. +See http://lmuse.sourceforge.net for new versions and +more information. + +Published under the GNU Public License + ВерÑÐ¸Ñ 0.7.0 + +(C) Copyright 1999-2004 Werner Schweer и другие. +Ðовые верÑии и подробноÑти Ñмотрите на Ñайте +http://lmuse.sourceforge.net + +Опубликовано на уÑловиÑÑ… GNU Public License + + + + Appearance + + + MusE: load image + MusE: загрузить изображение + + + + AppearanceDialogBase + + + MusE: Appearance settings + MusE: ÐаÑтройки облика + + + + Apply + Применить + + + + Ok + ОК + + + + Cancel + Отменить + + + + Arranger + Компоновщик + + + + Parts + ЧаÑти + + + + show names + показывать рамки + + + + show events + показывать ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ + + + + show Cakewalk Style + показывать в Ñтиле Cakewalk + + + + Events + Ð¡Ð¾Ð±Ñ‹Ñ‚Ð¸Ñ + + + + note on + note on + + + + poly pressure + полифоничеÑкое поÑлекаÑание + + + + controller + контроллер + + + + aftertouch + поÑлекаÑание + + + + pitch bend + Ñмена выÑоты звука + + + + program change + Ñмена программы + + + + special + ÑÐ¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ð°Ñ + + + + Background picture + Фоновое изображение + + + + bg + фон + + + + select... + выбрать... + + + + show snap grid + показывать Ñетку привÑзки + + + + Colors + Цвета + + + + Style/Fonts + Стиль/Шрифты + + + + QT Theme + Тема QT + + + + Windows + Окна + + + + MusE + MusE + + + + Metal + Металл + + + + Norwegian Wood + ÐорвежÑкое дерево + + + + Platinum + Платина + + + + CDE + CDE + + + + Motif + Motif + + + + Motif Plus + Motif Plus + + + + Fonts + Шрифты + + + + Family + СемейÑтво + + + + Size + Размер + + + + Font 1 + Шрифт 1 + + + + Font 2 + Шрифт 2 + + + + Font 3 + Шрифт 3 + + + + Font 0 + Шрифт 0 + + + + Bold + Жирный + + + + Italic + КурÑив + + + + ... + ... + + + + Font 4 + Шрифт 4 + + + + Font 5 + Шрифт 5 + + + + Palette + Палитра + + + + add to palette + Добавить в палитру + + + + B + B + + + + S + S + + + + H + H + + + + V + V + + + + G + G + + + + R + R + + + + Arranger + + + TrackInfo + + + + + Mix + Смешать + + + + Config Tracklist + + + + + all mute off + + + + + all solo off + + + + + all autoRead off + + + + + all autoWrite off + + + + + i + + + + + Show Track Info + + + + + m + + + + + Show Mixer Strip + + + + + AudioStrip + + + Pre + + + + + pre fader - post fader + + + + + dB + Дб + + + + record downmix + + + + + panorama + + + + + Pan + + + + + Channel %1 + + + + + MidiChannel + + + + + Channel + Канал + + + + Awl::MidiVolEntry + + + off + выкл + + + + db + + + + + Awl::VolEntry + + + off + выкл + + + + BigTime + + + MusE: Bigtime + + + + + ClipListEditorBase + + + MusE: ClipList + MusE: СпиÑок фрагментов + + + + Name + Ð˜Ð¼Ñ + + + + Start + Ðачало + + + + Len + Длн + + + + Data + Данные + + + + Clip Properties + СвойÑтва фрагмента + + + + Pos: + Поз.: + + + + Len: + Длн.: + + + + CommentBase + + + Form1 + Form1 + + + + Track Comment + Комментарий к дорожке + + + + Track 1 + Дорожка 1 + + + + ConfigMidiCtrlBase + + + MusE: Config Midi Controller + MusE: ÐаÑтройка MIDI-контроллера + + + + Midi Port: + MIDI-порт: + + + + Available Controller: + ДоÑтупный контроллер: + + + + Add + Добавить + + + + Remove + Удалить + + + + &OK + &ОК + + + + &Cancel + О&тменить + + + + ConfigMidiFileBase + + + MusE: Config Midi File Export + MusE: ÐаÑтройка ÑкÑпорта в MIDI + + + + &OK + &ОК + + + + &Cancel + О&тменить + + + + 0 (single track) + 0 (Ð¾Ð´Ð¸Ð½Ð¾Ñ‡Ð½Ð°Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ°) + + + + 1 (multiple tracks) + 1 (больше одной дорожки) + + + + Format: + Формат: + + + + 96 + 96 + + + + 192 + 192 + + + + 384 + 384 + + + + Copyright: + ÐвторÑкие и Ñмежные права: + + + + Enable extended smf format + Разрешить раÑширенный формат SMF + + + + ConfigTrackListBase + + + MusE: Config Track List + MusE: ÐаÑтройка ÑпиÑка дорожек + + + + Track Type: + Тип дорожки: + + + + Audio Output + Ðудиовыход + + + + Audio Group + Ðудиогруппа + + + + Audio Aux + Audio Aux + + + + Wave Track + Ðудиодорожка + + + + Audio Input + Ðудиовход + + + + Soft Synthesizer + Программный Ñинтезатор + + + + Midi Track + MIDI-дорожка + + + + Drum Track + ПеркуÑÑÐ¸Ð¾Ð½Ð½Ð°Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ° + + + + Available Items: + ДоÑтупные варианты: + + + + Add + Добавить + + + + Remove + Удалить + + + + Up + Вверх + + + + Down + Вниз + + + + Configured Items + ÐаÑтроенные дорожки + + + + &OK + &ОК + + + + &Cancel + О&тменить + + + + CtrlDelegate + + + dB + Дб + + + + off + выкл + + + + CtrlDialog + + + controller name + + + + + flag if controller contains data + + + + + CtrlEdit + + + CtrlListEditor + + + dB + Дб + + + + DeicsOnzeGui + + + Save configuration + + + + + Critical Error + + + + + Cannot open file %1 + + + + + Parsing error for file %1 + + + + + Load category dialog + + + + + Load set dialog + + + + + Save set dialog + + + + + New category + + + + + Delete category + + + + + Load category + + + + + Save category + + + + + Load set + + + + + Save set + + + + + Delete set + + + + + New subcategory + + + + + Delete subcategory + + + + + Load subcategory + + + + + Save subcategory + + + + + New preset + + + + + Delete preset + + + + + Load preset + + + + + Save preset + + + + + No more category supported + + + + + You can not add more categories + + + + + Do you really want to delete %1 ? + + + + + &Yes + + + + + &No + + + + + No category selected + + + + + You must first select a category. + + + + + Replace or add + + + + + %1 is supposed to be affected to the hbank number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + + + + + &Replace + &Заменить + + + + &Add + &Добавить + + + + Download error + + + + + There is no more free category slot. + + + + + Save category dialog + + + + + No more subcategory supported + + + + + You can not add more subcategories + + + + + No subcategory selected + + + + + You must first select a subcategory. + + + + + Load subcategory dialog + + + + + %1 is supposed to be affected to the lbank number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + + + + + There is no more free subcategory slot. + + + + + Save subcategory dialog + + + + + No more preset supported + + + + + You can not add more presets + + + + + No preset selected + + + + + You must first select a preset. + + + + + Load preset dialog + + + + + %1 is supposed to be affected to the prog number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + + + + + There is no more free preset slot. + + + + + Save preset dialog + + + + + Browse set dialog + + + + + Browse image dialog + + + + + DeicsOnzeGuiBase + + + Preset + ПредуÑтановка + + + + Pitch + Ð’Ñ‹Ñота тона + + + + After Touch + ПоÑлекаÑание + + + + Transpose + ТранÑпонировать + + + + Save + Сохранить + + + + Colors + Цвета + + + + DrumEdit + + + &Functions + + + + + &Select + + + + + Invert + Инвертировать + + + + Drum Tools + + + + + Transport + ТранÑпорт + + + + EditCtrl7DialogBase + + + MusE: Enter Controller + MusE: ВвеÑти контроллер + + + + Controller: + Контроллер: + + + + Time Position: + ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ Ð²Ð¾ времени: + + + + Value: + Значение: + + + + controller value + значение контроллера + + + + OK + ОК + + + + Cancel + Отменить + + + + EditCtrlBase + + + Time Position + ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ Ð²Ð¾ времени + + + + Available Controller: + ДоÑтупный контроллер: + + + + Create New Controller + Создать новый контроллер + + + + Value + Значение + + + + Controller + Контроллер + + + + H-Bank + H-банк + + + + L-Bank + L-банк + + + + Program + Программа + + + + off + выкл + + + + &OK + &ОК + + + + &Cancel + О&тменить + + + + Midi Port: + MIDI-порт: + + + + Time Position: + ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ Ð²Ð¾ времени: + + + + EditInstrument + + + MusE: Create file failed + + + + + MusE: Write File failed + + + + + MusE: Save Instrument Definition + + + + + Instrument Definition (*.idf) + + + + + MusE: Enter new Category + + + + + Enter new Category: + + + + + MusE + MusE + + + + The current Instrument contains unsaved data +Save Current Instrument? + + + + + &Save + &Сохранить + + + + &Nosave + + + + + &Abort + + + + + EditInstrumentBase + + + MusE: Instrument Editor + MusE: Редактор инÑтрументов + + + + Program: + Программа: + + + + &Delete + У&далить + + + + Alt+D + Alt+D + + + + Alt+N + Alt+N + + + + New Group + ÐÐ¾Ð²Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð° + + + + Drum + Ударные + + + + GM + GM + + + + GS + GS + + + + XG + XG + + + + Controller + Контроллер + + + + Predefined Controller: + Предопределённый контроллер: + + + + Properties + СвойÑтва + + + + Name + Ð˜Ð¼Ñ + + + + Type + Тип + + + + Control7 + Control7 + + + + Control14 + Control14 + + + + RPN + RPN + + + + NRPN + NRPN + + + + Pitch + Ð’Ñ‹Ñота тона + + + + Program + Программа + + + + H-Ctrl + H-Ctrl + + + + L-Ctrl + L-Ctrl + + + + Range + ОблаÑÑ‚ÑŒ + + + + Min + Мин + + + + Max + ÐœÐ°ÐºÑ + + + + Name + Ð˜Ð¼Ñ + + + + Type + Тип + + + + Min Val + Мин знач + + + + Max Val + ÐœÐ°ÐºÑ Ð·Ð½Ð°Ñ‡ + + + + list of defined controllers + ÑпиÑок назначенных контроллеров + + + + This is the MusE list of defined controllers. + Это ÑпиÑок назначенных контроллеров Ð´Ð»Ñ MusE. + + + + SysEx + SysEx + + + + &File + &Файл + + + + Tools + Ð¡ÐµÑ€Ð²Ð¸Ñ + + + + New + Ðовый + + + + &New + &Ðовый + + + + Ctrl+N + Ctrl+N + + + + Open + Открыть + + + + &Open... + &Открыть... + + + + Ctrl+O + Ctrl+O + + + + Save + Сохранить + + + + &Save + &Сохранить + + + + Ctrl+S + Ctrl+S + + + + Save As + Сохранить как + + + + Save &As... + Сохранить &как... + + + + Exit + Выйти + + + + E&xit + Ð’&ыйти + + + + EditMetaDialogBase + + + MusE: Enter Meta Event + MusE: ВвеÑти метаÑобытие + + + + OK + ОК + + + + Cancel + Отменить + + + + TextLabel1 + ТекÑтоваÑМетка1 + + + + Time Position: + ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ Ð²Ð¾ времени: + + + + Meta Type: + Метатип: + + + + Enter Hex + Введите Hex + + + + EditNoteDialogBase + + + MusE: Enter Note + MusE: ВвеÑти ноту + + + + OK + ОК + + + + Cancel + Отменить + + + + Length: + ПродолжительноÑÑ‚ÑŒ: + + + + Time Position: + ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ Ð²Ð¾ времени: + + + + Pitch: + Ð’Ñ‹Ñота тона: + + + + Velocity On: + СкороÑÑ‚ÑŒ вкл.: + + + + Velocity Off: + СкороÑÑ‚ÑŒ выкл.: + + + + EditSysexDialogBase + + + MusE: Enter SysEx + MusE: ВвеÑти SysEx + + + + TimePosition: + ВремÑ: + + + + Comment: + Комментарий: + + + + OK + ОК + + + + Cancel + Отменить + + + + Add + Добавить + + + + EditToolBar + + + Edit Tools + + + + + EffectRack + + + effect rack + + + + + move up + + + + + move down + + + + + remove + + + + + bypass + + + + + show gui + + + + + show native gui + + + + + New Plugin + + + + + New Aux Send + + + + + Replace effect + + + + + Do you really want to replace the effect %1? + + + + + &Yes + + + + + &No + + + + + ExportMidiDialog + + + Save + + + + + as smf midi file + + + + + MusE: export midi smf file + + + + + FLUIDGui + + + FLUID: open Soundfile + + + + + Fluid: select Sound Font + + + + + FLUIDGuiBase + + + Form1 + Form1 + + + + FLUIDSynthGuiBase + + + Type + Тип + + + + FileDialogButtons + + + Form1 + Form1 + + + + Global + Глобально + + + + User + Домашний +каталог + + + + Project + Проект + + + + Load: + Загрузить: + + + + Songdata + +Cofiguration + Композиции + +наÑтройки + + + + only +Songdata + только +композиции + + + + FluidSynthGui + + + Choose soundfont + + + + + FontSel + + + Size: + + + + + GateTime + + + MusE: Modify Gate Time + MusE: Изменить Ð²Ñ€ÐµÐ¼Ñ Ð·Ð²ÑƒÑ‡Ð°Ð½Ð¸Ñ + + + + GateTimeBase + + + MusE: Modify Gate Time + MusE: Изменить Ð²Ñ€ÐµÐ¼Ñ Ð·Ð²ÑƒÑ‡Ð°Ð½Ð¸Ñ + + + + Range + ОблаÑÑ‚ÑŒ + + + + All Events + Ð’Ñе ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ + + + + Selected Events + Выбранные ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ + + + + Looped Events + Ð¡Ð¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð² цикле + + + + Selected & Looped + Выбранные и в цикле + + + + Values + Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ + + + + Rate: + ЧаÑтота: + + + + Offset: + Смещение: + + + + % + % + + + + OK + ОК + + + + Cancel + Отменить + + + + GlobalSettingsDialogBase + + + MusE: Global Settings + MusE: Общие наÑтройки + + + + &Apply + &Применить + + + + &Ok + &ОК + + + + &Cancel + О&тменить + + + + Audio + Звук + + + + Mixer + Микшер + + + + dB + Дб + + + + min. Meter Value + мин. значение индикатора + + + + min.Slider Val + мин. значение ползунка + + + + Midi + MIDI + + + + Ticks + Тактовые импульÑÑ‹ (тики) + + + + 1024 + 1024 + + + + 2048 + 2048 + + + + 4096 + 4096 + + + + 8172 + 8172 + + + + Displayed Resolution +(Ticks/Quarternote) + Отображаемое разрешение +(Тиков/четвертей) + + + + 48 + 48 + + + + 96 + 96 + + + + 192 + 192 + + + + 384 + 384 + + + + 768 + 768 + + + + 1536 + 1536 + + + + 3072 + 3072 + + + + 6144 + 6144 + + + + 12288 + 12288 + + + + RTC Resolution +(Ticks/Sec) + RTC-разрешение +(тиков/Ñек) + + + + GUI + GUI + + + + Help Browser: + Ð’ чём читать Ñправку: + + + + GUI Refresh Rate + ЧаÑтота Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ GUI + + + + /sec + /Ñек + + + + Application + Приложение + + + + Views + Виды + + + + height + выÑота + + + + width + ширина + + + + Big Time + Хронометр + + + + Arranger + Компоновщик + + + + Transport + ТранÑпорт + + + + GreendotButton + + + record + запиÑать + + + + ListEdit + + + MusE: List Edit + + + + + Parts + ЧаÑти + + + + Controller + Контроллер + + + + MITTransposeBase + + + On + Вкл + + + + MPConfig + + + none + ничего + + + + Port + Порт + + + + GUI + GUI + + + + Instrument + ИнÑтрумент + + + + Device Name + Ð˜Ð¼Ñ ÑƒÑтройÑтва + + + + State + СоÑтоÑние + + + + unknown + неизвеÑтно + + + + I + I + + + + O + O + + + + MRConfigBase + + + MusE: Midi Input Plugin: Remote Control + MusE: Входной MIDI-модуль: ДиÑтан. управление + + + + Activate + Ðктивировать + + + + On + Вкл + + + + Actions + ДейÑÑ‚Ð²Ð¸Ñ + + + + Stop + ОÑтановить + + + + Record + ЗапиÑать + + + + Goto Left Mark + Перейти к левой метке + + + + Play + ВоÑпроизвеÑти + + + + MarkerView + + + MusE: Marker + + + + + add marker + + + + + Add Marker + + + + + &Edit + &Правка + + + + marker-tools + + + + + edit tools + + + + + Bar:Beat:Tick + + + + + Min:Sc:Fr:Sf + + + + + Lock + + + + + Text + + + + + Marker Properties + + + + + MasterEdit + + + MusE: Mastertrack + + + + + edit tools + + + + + EnableTempomap + + + + + Tempomap + + + + + Enable use of tempo map + + + + + Info + + + + + Cursor + + + + + Snap + + + + + time at cursor position + + + + + tempo at cursor position + + + + + CurPos + + + + + tempo at current position + + + + + time signature at current position + + + + + MidiChannelInfo + + + MidiController + + + Velocity + Сила Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ + + + + MidiControllerEditDialogBase + + + MusE: Define Midi Controller + MusE: Ðазначить MIDI-контроллер + + + + Name + Ð˜Ð¼Ñ + + + + Type + Тип + + + + H-Ctrl + H-Ctrl + + + + L-Ctrl + L-Ctrl + + + + Min Val + Мин знач + + + + Max Val + ÐœÐ°ÐºÑ Ð·Ð½Ð°Ñ‡ + + + + list of defined controllers + ÑпиÑок назначенных контроллеров + + + + This is the MusE list of defined controllers. + Это ÑпиÑок назначенных в MusE контроллеров. + + + + Properties + СвойÑтва + + + + Name + Ð˜Ð¼Ñ + + + + Max Value + ÐœÐ°ÐºÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ + + + + Min Value + Мин значение + + + + Control7 + Control7 + + + + Control14 + Control14 + + + + RPN + RPN + + + + NRPN + NRPN + + + + Type + Тип + + + + create new entry + Ñоздать новую запиÑÑŒ + + + + pressing the New button you create a new entry +in the MusE list of defined controllers + По нажатию кнопки "ÐоваÑ" ÑоздаётÑÑ Ð½Ð¾Ð²Ð°Ñ +запиÑÑŒ в ÑпиÑок назначенных в MusE контроллеров + + + + &Delete + У&далить + + + + delete selected entry + удалить выделенное Ñобытие + + + + &OK + &OK + + + + &Cancel + О&тменить + + + + Channel + Канал + + + + Pitch + Ð’Ñ‹Ñота тона + + + + Range + ОблаÑÑ‚ÑŒ + + + + &Add + &Добавить + + + + Alt+A + Alt+A + + + + Predefined Controller: + Предопределённый контроллер: + + + + Program + Программа + + + + MidiEditor + + + &Edit + &Правка + + + + Cut + Вырезать + + + + Copy + Скопировать + + + + Paste + Ð’Ñтавить + + + + Play Events + + + + + Step Record + + + + + Midi Input + + + + + Follow Song + + + + + MidiFilterConfigBase + + + MusE: Midi Input Filter + MusE: Фильтр входÑщих MIDI-Ñобытий + + + + Record Filter + Фильтр запиÑи + + + + Note On + Note On + + + + Poly Pressure + ПолифоничеÑкое поÑлекаÑание + + + + Controller + Контроллер + + + + Program Change + Смена программы + + + + After Touch + ПоÑлекаÑание + + + + Pitch Bend + Смена выÑоты звука + + + + Sysex + SysEx + + + + Thru Filter + Thru-фильтр + + + + Controller Filter + Фильтр контроллеров + + + + Channel Filter + Фильтр каналов + + + + 14 + 14 + + + + 10 + 10 + + + + 6 + 6 + + + + 12 + 12 + + + + 4 + 4 + + + + 2 + 2 + + + + 9 + 9 + + + + 8 + 8 + + + + 3 + 3 + + + + 13 + 13 + + + + 15 + 15 + + + + 16 + 16 + + + + 7 + 7 + + + + 11 + 11 + + + + 5 + 5 + + + + 1 + 1 + + + + &Cancel + О&тменить + + + + MidiInPortStrip + + + AlsaDevices + + + + + MidiChannel + + + + + JackDevices + + + + + MidiInputTransformDialogBase + + + MusE: Midi Input Transformator + MusE: Преобразование входÑщих MIDI-Ñообщений + + + + Filter + Фильтр + + + + All + Ð’Ñе + + + + Equal + Равно + + + + Unequal + Ðе равно + + + + Note + Ðота + + + + Poly Pressure + ПолифоничеÑкое поÑлекаÑание + + + + Control Change + Смена контроллера + + + + Aftertouch + ПоÑлекаÑание + + + + Pitch Bend + Смена выÑоты звука + + + + NRPN + NRPN + + + + RPN + RPN + + + + Value 2 + Значение 2 + + + + Value 1 + Значение 1 + + + + Event Type + Тип ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ + + + + Ignore + Игнорировать + + + + Higher + Выше + + + + Lower + Ðиже + + + + Inside + Внутри + + + + Outside + Снаружи + + + + Channel + Канал + + + + Port + Порт + + + + Processing + Идёт обработка + + + + Keep + Сохранить + + + + Fix + Поправить + + + + Plus + ÐŸÐ»ÑŽÑ + + + + Minus + ÐœÐ¸Ð½ÑƒÑ + + + + Multiply + Умножить + + + + Divide + Разделить + + + + Invert + Инвертировать + + + + Random + Случайно + + + + Modules + Модули + + + + 1 + 1 + + + + 2 + 2 + + + + 3 + 3 + + + + 4 + 4 + + + + enable modul 1 + разрешить модуль 1 + + + + enable modul 2 + разрешить модуль 2 + + + + enable modul 3 + разрешить модуль 3 + + + + enable modul 4 + разрешить модуль 4 + + + + Preset + ПредуÑтановка + + + + Name: + ИмÑ: + + + + Comment: + Комментарий: + + + + Function + Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ + + + + &New + &Ðовый + + + + create new preset + Ñоздать новую предуÑтановку + + + + &Delete + &Удалить + + + + delete preset + удалить предуÑтановку + + + + &Dismiss + &ПропуÑтить + + + + PresetList + СпиÑок предуÑтановок + + + + MidiOutPortStrip + + + MidiChannel + + + + + AlsaDevices + + + + + JackDevices + + + + + MidiPluginDialog + + + MusE: select midi plugin + + + + + File + + + + + Name + Ð˜Ð¼Ñ + + + + Version + + + + + Description + + + + + Ok + ОК + + + + Cancel + Отменить + + + + MidiPortRouteBase + + + Input + Вход + + + + MusE: Midi Port Routing + MusE: Маршруты между MIDI-портами + + + + Port 2 + Порт 2 + + + + Output + Выход + + + + MidiRack + + + midi effect rack + + + + + move up + + + + + move down + + + + + remove + + + + + bypass + + + + + show gui + + + + + new + новый + + + + MidiStrip + + + VariationSend + + + + + Var + + + + + ReverbSend + + + + + Rev + + + + + ChorusSend + + + + + Cho + + + + + Pan/Balance + + + + + Pan + + + + + Tracks + + + + + OutputPorts + + + + + MidiSyncConfigBase + + + Master + МаÑтер + + + + Apply + Применить + + + + Cancel + Отменить + + + + 24 + 24 + + + + 25 + 25 + + + + Offset: + Смещение: + + + + MidiSyntiStrip + + + OutputPorts + + + + + Channel + Канал + + + + Input Ports + + + + + MidiTimeDelegate + + + dB + Дб + + + + off + выкл + + + + MidiTrackInfo + + + Channel %1 + + + + + Midi Port + + + + + MidiTrackInfoBase + + + % + % + + + + off + выкл + + + + Velocity + Сила Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ + + + + MidiTrackerEditor + + + &View + + + + + MidiTracker Tools + + + + + Panic + + + + + Transport + ТранÑпорт + + + + row features + + + + + Number of visible rows + + + + + Quantize + + + + + MidiTransformDialogBase + + + &New + &Ðовый + + + + &Apply + &Применить + + + + &Cancel + О&тменить + + + + PresetList + СпиÑок предуÑтановок + + + + Processing + Идёт обработка + + + + Event Type + Тип ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ + + + + Keep + Сохранить + + + + Fix + Поправить + + + + Note + Ðота + + + + Poly Pressure + ПолифоничеÑкое поÑлекаÑание + + + + Control Change + Смена контроллера + + + + Aftertouch + ПоÑлекаÑание + + + + Pitch Bend + Смена выÑоты звука + + + + NRPN + NRPN + + + + RPN + RPN + + + + Plus + ÐŸÐ»ÑŽÑ + + + + Minus + ÐœÐ¸Ð½ÑƒÑ + + + + Multiply + Умножить + + + + Divide + Разделить + + + + Value 2 + Значение 2 + + + + Invert + Инвертировать + + + + Random + Случайно + + + + Value 1 + Значение 1 + + + + Filter + Фильтр + + + + All + Ð’Ñе + + + + Equal + Равно + + + + Unequal + Ðе равно + + + + Sysex + SysEx + + + + Ignore + Игнорировать + + + + Higher + Выше + + + + Lower + Ðиже + + + + Inside + Внутри + + + + Outside + Снаружи + + + + Preset + ПредуÑтановка + + + + Name: + ИмÑ: + + + + Comment: + Комментарий: + + + + Range + ОблаÑÑ‚ÑŒ + + + + Function + Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ + + + + Select + Выделить + + + + Copy + Скопировать + + + + MidiTransformerDialog + + + New + Ðовый + + + + MixdownFileDialog + + + MusE: set mixdown file name + + + + + Wave Files (*.wav);;All Files (*) + + + + + MixdownFileDialogBase + + + &Cancel + О&тменить + + + + Channel + Канал + + + + Stereo + Стерео + + + + Mono + Моно + + + + 5.1 + 5.1 + + + + Mixer + + + MusE: Mixer + + + + + &Create + + + + + &View + + + + + Routing + + + + + Show Midi Tracks + + + + + Show Midi Out Ports + + + + + Show Midi In Ports + + + + + Show Wave Tracks + + + + + Show Output Tracks + + + + + Show Group Tracks + + + + + Show Input Tracks + + + + + Show Synthesizer + + + + + MusE + + + Import Wave File + Импортировать WAV-файл + + + + undo + отменить + + + + Und&o + &Отменить + + + + redo + повторить + + + + Re&do + &Повторить + + + + undo last change to song + отменить поÑледнее изменение композиции + + + + redo last undo + повторить поÑледнюю отмену + + + + Transport + Пульт ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + + + + loop + цикл + + + + Loop + Цикл + + + + punchin + Ðачало врезки + + + + Punchin + Ðачало врезки + + + + punchout + Конец врезки + + + + Punchout + Конец врезки + + + + start + к началу + + + + Start + К началу + + + + rewind + перемотать назад + + + + Rewind + Перемотать назад + + + + forward + перемотать вперёд + + + + Forward + Перемотать вперёд + + + + stop + оÑтановить + + + + Stop + ОÑтановить + + + + play + воÑпроизвеÑти + + + + Play + ВоÑпроизвеÑти + + + + record + запиÑать + + + + Record + ЗапиÑать + + + + new + новый + + + + &New + &Ðовый + + + + open + открыть + + + + &Open + &Открыть + + + + save + Ñохранить + + + + &Save + &Сохранить + + + + pianoroll + pianoroll + + + + Pianoroll + Pianoroll + + + + Marker + Маркер + + + + File Buttons + Файловые кнопки + + + + &File + &Файл + + + + Open &Recent + Открыть из &недавних + + + + Save &As + Сохранить &как + + + + Import Midifile + Импортировать MIDI-файл + + + + Export Midifile + ЭкÑпортировать MIDI-файл + + + + &Quit + Ð’Ñ‹&йти + + + + &Edit + &Правка + + + + C&ut + &Вырезать + + + + &Copy + С&копировать + + + + &Paste + &Ð’Ñтавить + + + + Add Track + Добавить дорожку + + + + Select &All + Выделить &вÑÑ‘ + + + + &Deselect All + &Убрать выделение + + + + Invert &Selection + Обратить в&ыделение + + + + &Inside Loop + &Внутри цикла + + + + &Outside Loop + &Снаружи цикла + + + + All &Parts on Track + Ð’Ñе &чаÑти в дорожке + + + + Select + Выделить + + + + Drums + Ударные + + + + List + СпиÑок + + + + Graphic + Графика + + + + Mastertrack + МаÑтер-дорожка + + + + Midi &Transform + &Преобразовать MIDI-ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ + + + + Modify Gate Time + Изменить Ð²Ñ€ÐµÐ¼Ñ Ð·Ð²ÑƒÑ‡Ð°Ð½Ð¸Ñ + + + + Modify Velocity + Изменить ÑкороÑÑ‚ÑŒ + + + + Crescendo + Крещендо + + + + Transpose + ТранÑпонировать + + + + Thin Out + Удалить дубли + + + + Erase Event + Удалить Ñобытие + + + + Note Shift + Сдвиг ноты + + + + Copy Measure + Скопировать деление + + + + Erase Measure + Стереть деление + + + + Delete Measure + Удалить деление + + + + Create Measure + Создать деление + + + + Mix Track + СвеÑти дорожку + + + + Midi + MIDI + + + + &Structure + &Структура + + + + Global Cut + Глобальное вырезание + + + + Global Insert + Ð“Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð°Ñ Ð²Ñтавка + + + + Global Split + Глобальное разделение + + + + Copy Range + Скопировать облаÑÑ‚ÑŒ + + + + Cut Events + Вырезать ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ + + + + Transport Panel + Панель пульта ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + + + + Bigtime window + Окно хронометра + + + + dont follow Song + не Ñледовать за композицией + + + + follow page + Ñледовать поÑтранично + + + + follow continuous + Ñледовать плавно + + + + Global Settings + Общие наÑтройки + + + + follow song + Ñледовать за композицией + + + + Metronome + Метроном + + + + Midi Sync + MIDI-ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ + + + + Appearance settings + ÐаÑтройки облика + + + + Midi Input Transform + Преобразование входÑщих MIDI-Ñообщений + + + + Midi Input Filter + Фильтр входÑщих MIDI-Ñобытий + + + + Midi Remote Control + ДиÑтанционное управление MIDI + + + + Random Rhythm Generator + Генератор Ñлучайного ритма + + + + &Midi + &MIDI + + + + Mixer + Микшер + + + + Input Plugins + Модули на входе + + + + Reset Instr. + Перегрузить инÑтрументы + + + + Init Instr. + ЗапуÑтить инÑтрументы + + + + local off + откл. локальное управление + + + + &Audio + &Звук + + + + Bounce to Track + СвеÑти в дорожку + + + + Bounce to File + СвеÑти в файл + + + + &Help + &Помощь + + + + About&Qt + О &Qt + + + + Unknown File Format + ÐеизвеÑтный формат файла + + + + MusE: load project + MusE: Открыть проект + + + + MusE: Write File failed + MusE: Попытка запиÑать файл провалилаÑÑŒ + + + + The current Project contains unsaved data +Save Current Project? + Текущий проект Ñодержит не Ñохранённые данные. +Сохранить текущий проект? + + + + &Nosave + &Ðе ÑохранÑÑ‚ÑŒ + + + + &Abort + &Прервать + + + + MusE: Save As + MusE: Сохранить как + + + + MusE: Song: + MusE: ПеÑнÑ: + + + + MusE: Import Midi + MusE: Импортировать MIDI + + + + MusE: Export Midi + MusE: ЭкÑпортировать MIDI + + + + reading midifile + + читаетÑÑ MIDI-файл + + + + + Nothing to edit + Ðечего редактировать + + + + MusE: Copy Range + MusE: Скопировать облаÑÑ‚ÑŒ + + + + not implemented + не реализовано + + + + MusE: Cut Events + MusE: Вырезать ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ + + + + MusE: Bounce to Track + MusE: Сведение в дорожку + + + + more than one target track selected + выбрано больше одной конечной дорожки + + + + wrong target track type, +select wave track as target + Ñто неправильный тип конечной дорожки, +выберите звуковую дорожку + + + + no target track selected + ÐºÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ° не выбрана + + + + The current Project contains unsaved data +Load overwrites current Project: +Save Current Project? + Текущий проект Ñодержит не Ñохранённые данные. +Загрузка нового проекта приведёт к перезапиÑи данных Ñтого. +Сохранить текущий проект? + + + + &Overwrite + Пере&запиÑать + + + + no help found at: + Ñправка не найдена в: + + + + MusE: Open Help + MusE: Открыть Ñправку + + + + Midi Ports / Soft Synth + MIDI-порты / Прогр. Ñинтезаторы + + + + Delete Selected Tracks + Выбранные дорожки удалены + + + + View + Вид + + + + Edit Instrument + Изменить инÑтрумент + + + + Restart Audio + ПерезапуÑтить звуковой движок + + + + Take Snapshot + Сделать Ñнимок + + + + Settings + ÐаÑтройки + + + + Configure shortcuts + ÐаÑтроить горÑчие клавиши + + + + Midi File Export + ЭкÑпорт в MIDI-файл + + + + &Manual + &РуководÑтво + + + + &MusE homepage + ДомашнÑÑ &Ñтраница MusE + + + + &Report Bug... + Сообщить о&б ошибке... + + + + &About MusE + &О MusE + + + + What's &This? + &Что Ñто? + + + + Cannot read template + Ðевозможно прочитать шаблон + + + + File open error + Ошибка при открытии файла + + + + File read error + Ошибка при чтении файла + + + + MusE: load template + MusE: Загрузка шаблона + + + + MusE: Bounce + MusE: Сведение + + + + set left/right marker for bounce range + уÑтановите левый и правый маркеры Ð´Ð»Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¾Ð±Ð»Ð°Ñти ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ + + + + MusE: Bounce to File + MusE: Сведение в файл + + + + no output track found + не найдено ни одной дорожки выхода + + + + Add midi file to current project? + + Добавить MIDI-файл в текущий проект? + + + + + &Add to Project + &Добавить в проект + + + + &Replace + &Заменить + + + + +failed: + +не удалоÑÑŒ: + + + + Arranger + Компоновщик + + + + Cursor + КурÑор + + + + Off + Выкл + + + + Bar + Такт + + + + Snap + ПривÑзка + + + + Len + Длн + + + + Type + Тип + + + + NO + ÐЕТ + + + + GM + GM + + + + GS + GS + + + + XG + XG + + + + midi song type + тип MIDI-композиции + + + + Pitch + Ð’Ñ‹Ñота тона + + + + midi pitch + midi выÑота тона + + + + Tempo + Темп + + + + midi tempo + MIDI-темп + + + + MusE: Create tmp file failed + MusE: Попытка Ñоздать временный файл провалилаÑÑŒ + + + + MusE manual not found at: + + + + + to import a audio file you have first to selecta wave track + + + + + Failed to start audio! + + + + + Was not able to start audio, check if jack is running. + + + + + + Panic + + + + + Project Buttons + + + + + &Project + + + + + Project Properties + + + + + Move Clock + + + + + &View + + + + + Setti&ngs + + + + + Preferences + + + + + global midi pitch shift + + + + + N + + + + + MusE: new project + + + + + Cannot create project folder <%1> + + + + + Cannot open template file +%1 + + + + + File <%1> read error + + + + + MusE: import midi file + + + + + rewind to start position + Перемотать к начальной позиции + + + + start sequencer play + Ðачать воÑпроизведение из ÑеквенÑера + + + + Open + Открыть + + + + Save + Сохранить + + + + MuseApplication + + + Transport: Goto Start + + + + + Goto Start + + + + + rewind to start position + Перемотать к начальной позиции + + + + Transport: Toggle Loop section + + + + + Loop + Цикл + + + + loop between left mark and right mark + Цикл между левым и правым маркерами + + + + Transport: Start playback from current location + + + + + Play + ВоÑпроизвеÑти + + + + start sequencer play + Ðачать воÑпроизведение из ÑеквенÑера + + + + Transport: Play, Stop, Rewind + + + + + Transport: Stop Playback + + + + + Stop + ОÑтановить + + + + stop sequencer + ОÑтановить ÑеквенÑер + + + + Transport: Goto left marker + + + + + Transport: Goto right marker + + + + + Transport: Toggle metronome + + + + + Transport: Toggle Record + + + + + Record + ЗапиÑать + + + + to record press record and then play + Ð”Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° запиÑи нажмите "ЗапиÑать", а затем "ВоÑпроизвеÑти" + + + + Transport: Punch In + + + + + Punchin + Ðачало врезки + + + + record starts at left mark + ЗапиÑÑŒ начинаетÑÑ Ð¾Ñ‚ маркера Ñлева + + + + Transport: Punch Out + + + + + Punchout + Конец врезки + + + + record stops at right mark + ЗапиÑÑŒ оÑтанавливаетÑÑ Ð¿Ð¾ маркеру Ñправа + + + + Transport: Rewind + + + + + rewind + перемотать назад + + + + rewind current position + Перемотать к текущей позиции + + + + Transport: Forward + + + + + forward + перемотать вперёд + + + + move current position + ПеремеÑтить текущую позицию + + + + Panic + + + + + send note off to all midi channels + ПоÑлать note off на вÑе MIDI-каналы + + + + Edit: Undo + + + + + undo + отменить + + + + undo last change to song + отменить поÑледнее изменение композиции + + + + Edit: Redo + + + + + redo + повторить + + + + redo last undo + повторить поÑледнюю отмену + + + + Edit: Cut + + + + + Cut + Вырезать + + + + Edit: Copy + + + + + Copy + Скопировать + + + + Edit: Paste, + + + + + Paste + Ð’Ñтавить + + + + Edit: Delete + + + + + Delete + + + + + Open + Открыть + + + + open project + + + + + Click this button to select a new project +You can also select the <b>Open command</b> from the Project menu. + + + + + Save + Сохранить + + + + save project + + + + + Click this button to save the project you are editing. +You can also select the Save command from the Project menu. + + + + + File: Save as + + + + + save project as... + + + + + Click this button to save a new copy of the project. + + + + + + File: Save as Template + + + + + save project as template + + + + + Click this button to save the project you are editing +for later use as a template. + + + + + File: Open recent file + + + + + File: Import midi file + + + + + File: Export midi file + + + + + File: Import audio file + + + + + File: Quit MusE + + + + + Quit MusE + + + + + Edit: Select parts on track + + + + + All &Parts on Track + Ð’Ñе &чаÑти в дорожке + + + + Open Pianoroll + + + + + Pianoroll + Pianoroll + + + + Start Pianoroll Editor + + + + + Open MidiTracker + + + + + MidiTracker + + + + + Start Midi Tracker + + + + + Open drumeditor + + + + + Drum Editor + + + + + Start Drum Editor + + + + + Open wave editor + + + + + Wave Editor + + + + + Open listeditor + + + + + Properties + СвойÑтва + + + + open Properties Editor + + + + + Open mastertrack editor + + + + + Mastertrack (Tempo) Editor + + + + + Start Mastertrack (Tempo) Editor + + + + + Add midi track + + + + + Add drum track + + + + + Add wave track + + + + + Add audio output + + + + + Add audio group + + + + + Add audio input + + + + + Structure: Global cut + + + + + Structure: Global insert + + + + + Structure: Global split + + + + + Structure: Copy range + + + + + Structure: Cut events + + + + + View: Open mixer 1 window + + + + + Mixer1 + + + + + Show Mixer 1 + + + + + View: Open mixer 2 window + + + + + Mixer2 + + + + + Show Mixer 2 + + + + + View: Toggle transport window + + + + + Transport + ТранÑпорт + + + + Show Transport Window + + + + + View: Toggle bigtime window + + + + + BigTime + + + + + Show BigTime Window + + + + + View: Open marker window + + + + + Marker + Маркер + + + + Show Marker List + + + + + Settings: Follow song by page + + + + + Settings: Follow song off + + + + + Settings: Follow song continuous + + + + + Settings: Configure shortcuts + + + + + Settings: Configure metronome + + + + + Settings: Midi sync configuration + + + + + Settings: Midi file export configuration + + + + + Settings: Midi ports / Soft Synth + + + + + Settings: Audio subsystem configuration + + + + + Midi: Edit midi instruments + + + + + Midi: Midi remote control + + + + + Midi: Reset midi + + + + + Midi: Init midi + + + + + Midi: Midi local off + + + + + Audio: Bounce audio to track + + + + + Audio: Bounce audio to file + + + + + Audio: Restart audio + + + + + Help: Open Manual + + + + + Help: Toggle whatsthis mode + + + + + Edit: Edit selected part + + + + + Edit: Select nearest part on track above + + + + + Edit: Add nearest part on track above + + + + + Edit: Select nearest part on track below + + + + + Edit: Add nearest part on track below + + + + + Midi: Transpose + + + + + Transpose + ТранÑпонировать + + + + Edit: Select all + + + + + Select All + + + + + Edit: Select none + + + + + Deselect All + + + + + Edit: Invert selection + + + + + Invert Selection + + + + + Edit: Select events/parts inside locators + + + + + Select Inside Loop + + + + + Edit: Select events/parts outside locators + + + + + Select Outside Loop + + + + + Edit: Select nearest part/event to the left + + + + + Edit: Add nearest part/event to the left to selection + + + + + Edit: Add nearest part/event to the right to selection + + + + + Edit: Set locators to selection + + + + + Edit: Increase pitch + + + + + Edit: Decrease pitch + + + + + Edit: Set fixed length on midi events + + + + + Set fixed length + + + + + Quantize: Over Quantize + + + + + Over Quantize + + + + + Quantize: Note On Quantize + + + + + Note On Quantize + + + + + Quantize: Note On/Off Quantize + + + + + Note On/Off Quantize + + + + + Quantize: Iterative Quantize + + + + + Iterative Quantize + + + + + Quantize: Configure quant + + + + + Quantize: Modify Gate Time + + + + + Modify Gate Time + + + + + Quantize: Modify Velocity + + + + + Modify Velocity + + + + + Edit: Crescendo + + + + + Crescendo + + + + + Edit: Thin Out + + + + + Thin Out + + + + + Edit: Erase Event + + + + + Erase Event + + + + + Edit: Note Shift + + + + + Note Shift + + + + + Edit: Move Clock + + + + + Move Clock + + + + + Edit: Copy Measure + + + + + Copy Measure + + + + + Edit: Erase Measure + + + + + Erase Measure + + + + + Edit: Delete Measure + + + + + Delete Measure + + + + + Edit: Create Measure + + + + + Create Measure + + + + + Edit: Change event color + + + + + Tool: Pointer + + + + + Pointer + + + + + select Pointer Tool: +with the pointer tool you can: + select parts + move parts + copy parts + + + + + Tool: Pencil + + + + + Pencil + + + + + select Pencil Tool: +with the pencil tool you can: + create new parts + modify length of parts + + + + + Tool: Eraser + + + + + Eraser + + + + + select Delete Tool: +with the delete tool you can delete parts + + + + + Tool: Scissor + + + + + Scissor + + + + + select Cut Tool: +with the cut tool you can split a part + + + + + Tool: Glue + + + + + Glue + + + + + select Glue Tool: +with the glue tool you can glue two parts + + + + + Declone + + + + + Tool: Quantize + + + + + Quantize + + + + + select Quantize Tool: +insert display quantize event + + + + + Tool: Line Draw + + + + + Draw + + + + + select Drawing Tool + + + + + Tool: Mute Parts + + + + + Mute + + + + + select Muting Tool: +click on part to mute/unmute + + + + + Transport: Increase current position + + + + + Transport: Decrease current position + + + + + Quantize: Set quantize to 1/1 note + + + + + Quantize: Set quantize to 1/2 note + + + + + Quantize: Set quantize to 1/4 note + + + + + Quantize: Set quantize to 1/8 note + + + + + Quantize: Set quantize to 1/16 note + + + + + Quantize: Set quantize to 1/32 note + + + + + Quantize: Set quantize to 1/64 note + + + + + Quantize: Toggle triol quantization + + + + + Quantize: Toggle punctuation quantization + + + + + Quantize: Toggle punctuation quantization (2) + + + + + Insert + + + + + Insert Tempo + + + + + Insert Signature + + + + + Change Event Position + + + + + Edit Event Value + + + + + NoteInfo + + + Note Info + + + + + Start + + + + + Len + Длн + + + + Pitch + Ð’Ñ‹Ñота тона + + + + Velo On + + + + + Velo Off + + + + + OrganGuiBase + + + Velocity + Сила Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ + + + + OutportCombo + + + Midi Output Port + + + + + PartCanvas + + + AutoFill... + + + + + drums + + + + + pianoroll + pianoroll + + + + miditracker + + + + + wave edit + + + + + MusE: Get auto fill loop len + + + + + Measures: + + + + + MusE: Change Part Name + + + + + PartName: + + + + + Rename + + + + + Color + + + + + PatchBayBase + + + ALSA Patch Bay + ALSA Patch Bay + + + + PianoRoll + + + &Select + + + + + &Config + + + + + event color + + + + + blue + + + + + pitch colors + + + + + velocity colors + + + + + &Functions + + + + + Config Quant... + + + + + Transpose + ТранÑпонировать + + + + Pianoroll Tools + + + + + Panic + + + + + Transport + ТранÑпорт + + + + PluginDialog + + + MusE: select plugin + MusE: выбрать модуль + + + + Lib + Библ. + + + + Label + Метка + + + + Name + Ð˜Ð¼Ñ + + + + AI + AI + + + + AO + AO + + + + CI + CI + + + + CO + CP + + + + IP + IP + + + + id + id + + + + Maker + Создатель + + + + Copyright + ÐвторÑкое право + + + + Ok + Ok + + + + Cancel + Отменить + + + + Select which types of plugins should be visible in the list,<br>beware that 'all' includes plugins that probably are not usable by MusE. + Выберите ти модулей, которые будут видны в ÑпиÑке,<br>помните, что "вÑе" включит в ÑпиÑок модули, которые <br> +могут быть непригодны Ð´Ð»Ñ MusE. + + + + Stereo and Mono + Стерео и моно + + + + Stereo + Стерео + + + + Mono + Моно + + + + All + Ð’Ñе + + + + Mono and Stereo + + + + + Show All + + + + + Select which types of plugins should be visible in the list.<br>Note that using mono plugins on stereo tracks is not a problem, two will be used in parallell.<br>Also beware that the 'all' alternative includes plugins that probably not are usable by MusE. + + + + + Search in 'Label' and 'Name': + + + + + PluginGui + + + File Buttons + Файловые кнопки + + + + Load Preset + Загрузить предуÑтановку + + + + Save Preset + Сохранить предуÑтановку + + + + bypass plugin + обойти модуль + + + + MusE: load preset + MusE: загрузить предуÑтановку + + + + MusE: save preset + MusE: Ñохранить предуÑтановку + + + + PreferencesDialog + + + MusE: load image + MusE: загрузить изображение + + + + ProjectDialog + + + MusE: create new folder + + + + + new folder: + + + + + QHeader + + + Port Number + Ðомер порта + + + + enable gui for device + разрешить GUI Ð´Ð»Ñ ÑƒÑтройÑтва + + + + Name of the midi device associated with this port number + Ð˜Ð¼Ñ MIDI-уÑтройÑтва, аÑÑоциированного Ñ Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð¼ Ñтого порта + + + + Instrument connected to port + ИнÑтрумент, подÑоединённый к Ñтому порту + + + + State: result of opening the device + СоÑтоÑние: результат Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ ÑƒÑтройÑтва + + + + enables reading from device + разрешает чтение Ñ ÑƒÑтройÑтва + + + + enables writing to device + разрешает запиÑÑŒ на уÑтройÑтво + + + + QMenu + + + Add Midi Generator... + + + + + Add Soft Synth... + + + + + QPopupMenu + + + Add Soft Synth + Добавить программный Ñинтезатор + + + + QWidget + + + new + новый + + + + File + + Файл + + + + +exists + (new line) +ÑущеÑтвует + + + + MusE: write + MusE: запиÑать + + + + Overwrite + ПерезапиÑать + + + + Quit + Выйти + + + + None + Ðичего + + + + Open File + + + + + + +failed: + + + + + MusE: Open File + + + + + generic midi + + + + + copy + %1 +to + %2 + + + + + +converting sample rate +from %1 to %2 + + + + + Abort + + + + + create peakfile for + + + + + MusE: export midi file: + + + + + Cannot convert sysex string + + + + + Hex String too long (2048 bytes limit) + + + + + RecordButton + + + record + запиÑать + + + + RhythmBase + + + MusE: Random Rhythm Generator + MusE: Генератор Ñлучайного ритма + + + + Instrument Properties + СвойÑтва инÑтрумента + + + + test + теÑÑ‚ + + + + contrib + внеÑти + + + + randomize + перемешать + + + + Group 1 + Группа C + + + + Group 2 + Группа 2 + + + + Group 3 + Группа 3 + + + + Group 4 + Группа 4 + + + + Group 5 + Группа 5 + + + + listen + проÑлушать + + + + Instrument + ИнÑтрумент + + + + Group + Группа + + + + &New + &Ðовый + + + + create new entry + Ñоздать новую запиÑÑŒ + + + + pressing the New button you create a new entry +in the MusE list of defined controllers + По нажатию кнопки "ÐоваÑ" ÑоздаётÑÑ Ð½Ð¾Ð²Ð°Ñ +запиÑÑŒ в ÑпиÑок назначенных в MusE контроллеров + + + + &Delete + У&далить + + + + delete selected entry + удалить выделенное Ñобытие + + + + Up + Вверх + + + + Down + Вниз + + + + Instrument + ИнÑтрумент + + + + list of defined controllers + ÑпиÑок назначенных контроллеров + + + + This is the MusE list of defined controllers. + Это ÑпиÑок назначенных контроллеров Ð´Ð»Ñ MusE + + + + &File + &Файл + + + + &Edit + &Правка + + + + &Help + П&омощь + + + + Tools + Ð¡ÐµÑ€Ð²Ð¸Ñ + + + + New + Ðовый + + + + Open + Открыть + + + + &Open... + &Открыть... + + + + Save + Сохранить + + + + &Save + &Сохранить + + + + Save As + Сохранить как + + + + Save &As... + Сохранить &как... + + + + Print + Ðапечатать + + + + &Print... + &Печать... + + + + Exit + Выйти + + + + E&xit + Ð’&ыйти + + + + Undo + Отменить + + + + &Undo + &Отменить + + + + Redo + Повторить + + + + &Redo + П&овторить + + + + Cut + Вырезать + + + + &Cut + &Вырезать + + + + Copy + Скопировать + + + + C&opy + С&копировать + + + + Paste + Ð’Ñтавить + + + + &Paste + &Ð’Ñтавить + + + + Find + Ðайти + + + + &Find... + &Ðайти... + + + + Contents + Содержание + + + + &Contents... + &Содержание... + + + + Index + Ð˜Ð½Ð´ÐµÐºÑ + + + + &Index... + &ИндекÑ... + + + + About + О программе + + + + &About... + &О программе... + + + + <b>Notice!</b><br> +Random Rhythm Generator is not enabled yet! + <b>Внимание!</b><br> +Случайный генератор ритма пока ещё не работает! + + + + Ctrl+N + Ctrl+N + + + + Ctrl+O + Ctrl+O + + + + Ctrl+S + Ctrl+S + + + + Ctrl+P + Ctrl+P + + + + Ctrl+Z + Ctrl+Z + + + + Ctrl+Y + Ctrl+Y + + + + Ctrl+X + Ctrl+X + + + + Ctrl+C + Ctrl+C + + + + Ctrl+V + Ctrl+V + + + + Ctrl+F + Ctrl+F + + + + RouteDialogBase + + + MusE: Routing + MusE: Маршруты + + + + Add Route + Добавить маршрут + + + + Source: + ИÑточник: + + + + Destination: + Ðазначение: + + + + Connect + Соединить + + + + connect source to destination + Ñоединить иÑточник Ñ Ð¼ÐµÑтом Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ + + + + Current Routes + Текущие маршруты + + + + Source + ИÑточник + + + + Destination + Ðазначение + + + + Remove + Удалить + + + + remove selected route + удалить текущий маршрут + + + + SS_PluginChooserBase + + + Name + Ð˜Ð¼Ñ + + + + Label + Метка + + + + &Cancel + О&тменить + + + + SS_PluginFront + + + Clear and unload effect + + + + + Load effect + + + + + Toggle display of effect parameters + + + + + Turn effect on/off + + + + + ShortcutCaptureDialog + + + Ok + ОК + + + + Cancel + Отменить + + + + Shortcut conflicts with + + + + + Undefined + + + + + ShortcutCaptureDialogBase + + + OK + ОК + + + + Cancel + Отменить + + + + ShortcutConfig + + + Global + Глобально + + + + Arranger + Компоновщик + + + + Pianoroll + Pianoroll + + + + Insert Note + Ð’Ñтавить ноту + + + + Insert SysEx + Ð’Ñтавить SysEx + + + + Insert Ctrl + Ð’Ñтавить контроллер + + + + Insert Meta + Ð’Ñтавить Meta + + + + Insert Channel Aftertouch + Ð’Ñтавить Channel Aftertouch + + + + Insert Key Aftertouch + Ð’Ñтавить Key Aftertouch + + + + Drumeditor + + + + + List editor + + + + + List Mastertrack + + + + + All categories + + + + + Wave editor + + + + + ShortcutConfigBase + + + Alt+D + Alt+D + + + + &Apply + &Применить + + + + Alt+A + Alt+A + + + + SimpleSynthGui + + + Load sample dialog + + + + + Song + + + Jack shutdown! + + + + + Jack has detected a performance problem which has lead to +MusE being disconnected. +This could happen due to a number of reasons: +- a performance issue with your particular setup. +- a bug in MusE (or possibly in another connected software). +- a random hiccup which might never occur again. +- jack was voluntary stopped by you or someone else +- jack crashed +If there is a persisting problem you are much welcome to discuss it +on the MusE mailinglist. +(there is information about joining the mailinglist on the MusE + homepage which is available through the help menu) + +To proceed check the status of Jack and try to restart it and then . +click on the Restart button. + + + + + SplitLayerGui + + + start pitch for split + + + + + enable learn mode for start pitch + + + + + end pitch for split + + + + + enable learn mode for end pitch + + + + + pitch offset for split + + + + + start velocity for split + + + + + end velocity for split + + + + + velocity offset for split + + + + + TLSWidget + + + Remove Subtrack + + + + + Ctrl + + + + + Velocity + Сила Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ + + + + Delete Controller + + + + + TLWidget + + + Copy Track + + + + + Show Gui + + + + + Add Subtrack + + + + + Midi Output Channel + + + + + TemplateDialog + + + MusE presets + + + + + User presets + + + + + TempoSig + + + Tempo/Sig + Темп/Знаки альтерации + + + + TimeCanvas + + + Ctrl + + + + + Add Controller View + + + + + Toolbar1 + + + Solo + + + + + Cursor + + + + + Snap + + + + + Quantize + + + + + To + + + + + All Events + Ð’Ñе ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ + + + + Looped Ev. + + + + + Selected Ev. + + + + + Looped+Sel. + + + + + TrackComment + + + MusE: Track Comment + + + + + Track Comment: + + + + + TrackInfo + + + Track Type + + + + + Track Name + + + + + Transport + + + Overdub + Ðаложить + + + + Replace + Заменить + + + + Rec Mode + Режим запиÑи + + + + Normal + Ðорм. + + + + Mix + Смешать + + + + Cycle Rec + Циклич. запиÑÑŒ + + + + punchin + нач. врезки + + + + loop + цикл + + + + punchout + кнц. врезки + + + + Punch In + Ðачало врезки + + + + Loop + Цикл + + + + Punch Out + Конец врезки + + + + Left Mark + Левый маркер + + + + Right Mark + Правый маркер + + + + rewind to start + перемотать к началу + + + + rewind + перемотать назад + + + + forward + перемотать вперёд + + + + stop + оÑтановить + + + + play + воÑпроизвеÑти + + + + record + запиÑать + + + + AC + AC + + + + quantize during record + квантовать при запиÑи + + + + Click + Метр. + + + + metronom click on/off + Щелчки метронома + + + + Sync + Синхр. + + + + external sync on/off + Вкл/выкл внешнюю Ñинхронизацию + + + + Master + МаÑтер + + + + use master track + иÑпользовать маÑтер-дорожку + + + + TransposeDialogBase + + + Value + Значение + + + + Parts + ЧаÑти + + + + OK + ОК + + + + Cancel + Отменить + + + + VAMGui + + + MusE: Load VAM Presets + + + + + MusE: Save VAM Presets + + + + + Velocity + + + MusE: Modify Velocity + + + + + VelocityBase + + + Range + ОблаÑÑ‚ÑŒ + + + + All Events + Ð’Ñе ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ + + + + Selected Events + Выбранные ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ + + + + Looped Events + Ð¡Ð¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð² цикле + + + + Selected & Looped + Выбранные и в цикле + + + + Values + Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ + + + + Rate: + ЧаÑтота: + + + + Offset: + Смещение: + + + + % + % + + + + OK + ОК + + + + Cancel + Отменить + + + + WaveEdit + + + &File + &Файл + + + + &Edit + &Правка + + + + Func&tions + + + + + &Gain + + + + + 200% + + + + + 150% + + + + + 75% + + + + + 50% + + + + + 25% + + + + + Other + + + + + Edit in E&xternal Editor + + + + + Mute Selection + + + + + Normalize Selection + + + + + Fade In Selection + + + + + Fade Out Selection + + + + + Reverse Selection + + + + + Select + Выделить + + + + waveedit-tools + + + + + Transport + ТранÑпорт + + + + pianoroll-tools + + + + + Solo + + + + + Cursor + + + + + WaveTrackInfoBase + + + off + выкл + + + + WaveView + + + MusE - file size changed + + + + + When editing in external editor - you should not change the filesize +since it must fit the selected region. + +Missing data is muted + + + + diff --git a/attic/muse_qt4_evolution/share/locale/muse_sv_SE.qm b/attic/muse_qt4_evolution/share/locale/muse_sv_SE.qm new file mode 100644 index 00000000..dd6e6905 Binary files /dev/null and b/attic/muse_qt4_evolution/share/locale/muse_sv_SE.qm differ diff --git a/attic/muse_qt4_evolution/share/locale/muse_sv_SE.ts b/attic/muse_qt4_evolution/share/locale/muse_sv_SE.ts new file mode 100644 index 00000000..53a00f4e --- /dev/null +++ b/attic/muse_qt4_evolution/share/locale/muse_sv_SE.ts @@ -0,0 +1,12410 @@ + + + + + + + Click this button to enable recording + Klicka här för att spela in + + + + sets amount of quantization: +0 - no quantization +100 - full quantization + Sätter mängden kvantisering: +0 - ingen kvantisering +100 - full kvantisering + + + + select Pointer Tool: +with the pointer tool you can: + select parts + move parts + copy parts + välj pek-verktyg: +med pekverktyget kan du: + välja parter + flytta parter + kopiera parter + + + + Transport: Start playback from current location + Transport: Starta uppspelning frÃ¥n nuvarande position + + + + Transport: Toggle metronome + Transport: Metronom av/pÃ¥ + + + + Transport: Stop Playback + Transport: Stoppa uppspelning + + + + Transport: Play, Stop, Rewind + Transport: Spela, stoppa, spola tillbaka + + + + Transport: Goto left marker + Transport: GÃ¥ till vänster markering + + + + Transport: Goto right marker + Transport: GÃ¥ till höger markering + + + + Transport: Toggle Loop section + Transport: Loopa sektion av/pÃ¥ + + + + Transport: Toggle Record + Transport: Inspelning av/pÃ¥ + + + + Edit: Copy + Redigera: Kopiera + + + + Edit: Undo + Redigera: Ã…ngra + + + + Edit: Redo + Redigera: Gör om + + + + Edit: Cut + Redigera: Klipp ut + + + + Edit: Paste, + Redigera: Klistra in + + + + Edit: Delete + Redigera: Ta bort + + + + File: New project + Arkiv: Nytt projekt + + + + File: Open from disk + Arkiv: Öppna + + + + File: Save project + Arkiv: Spara + + + + File: Open recent file + Arkiv: Öppna föregÃ¥ende fil + + + + File: Save as + Arkiv: Spara som + + + + File: Load template + Arkiv: Ladda mall + + + + File: Import midi file + Arkiv: Importera midifil + + + + File: Export midi file + Arkiv: Exportera midifil + + + + File: Import audio file + Arkiv: Importera ljudfil + + + + File: Quit MusE + Arkiv: Avsluta + + + + Edit: Select parts on track + Arkiv: Välj alla parter i spÃ¥r + + + + Open pianoroll + Öppna pianorulle + + + + Open drumeditor + Öppna trumeditor + + + + Open listeditor + Öppna listeditor + + + + Open graphical mastertrack editor + Öppna masterspÃ¥r-editor (grafisk) + + + + Open list mastertrack editor + Öppna masterspÃ¥r-editor (lista) + + + + Open midi transformer + Öppna miditransformer + + + + Add midi track + Lägg till midispÃ¥r + + + + Add drum track + Lägg till trumspÃ¥r + + + + Add wave track + Lägg till ljudspÃ¥r + + + + Add audio output + Lägg till ljudutgÃ¥ng + + + + Add audio group + Lägg till ljudgrupp + + + + Add audio input + Lägg till ljudingÃ¥ng + + + + Add audio aux + Lägg till aux + + + + Structure: Global cut + Struktur: Globalt klipp + + + + Structure: Global insert + Struktur: Global insättning + + + + Structure: Global split + Struktur: Global delning + + + + Structure: Copy range + Struktur: Kopiera omrÃ¥de + + + + Structure: Cut events + Struktur: Klipp ut händelse + + + + View: Open mixer window + Vy: Öppna mixerfönster + + + + View: Toggle transport window + Vy: Transportfönster av/pÃ¥ + + + + View: Toggle bigtime window + Vy: Bigtimefönster av/pÃ¥ + + + + View: Open marker window + Vy: Öppna markörfönster + + + + Settings: Follow song by page + Inställningar: Följ sÃ¥ng efter sida + + + + Settings: Follow song off + Inställningar: Följ sÃ¥ng av + + + + Settings: Follow song continuous + Inställningar: Följ sÃ¥ng kontinuerligt + + + + Settings: Global configuration + Inställningar: Globala inställningar + + + + Settings: Configure shortcuts + Inställningar: Konfigurera tangentbordsgenvängar + + + + Settings: Configure metronome + Inställningar: Konfigurera metronom + + + + Settings: Midi sync configuration + Inställningar: Midi synk konfigurationg + + + + Settings: Midi file export configuration + Inställningar: Midi fil export-konfiguration + + + + Settings: Appearance settings + Inställningar: Utseendeinställningar + + + + Settings: Midi ports / Soft Synth + Inställningar: Midiportar / Mjukvarusynthar + + + + Settings: Audio subsystem configuration + Inställningar: Konfiguration av ljud-undersystem + + + + Midi: Edit midi instruments + Midi: Editera midi-instrument + + + + Midi: Open midi input transform + Midi: Öppna midi inputtransformator + + + + Midi: Open midi input filter + Midi: Öppna midi indatafilter + + + + Midi: Midi input transpose + Midi: Midi indata transponering + + + + Midi: Midi remote control + Midi: Midi fjärrkontroll + + + + Midi: Random rhythm generator + Midi: Slumprymtmgenerator + + + + Midi: Reset midi + Midi: Resetta midi + + + + Midi: Init midi + Midi: Initiera midi + + + + Midi: Midi local off + Midi: Midi lokal av + + + + Audio: Bounce audio to track + Audio: Bounce till spÃ¥r + + + + Audio: Bounce audio to file + Audio: Bounce till fil + + + + Audio: Restart audio + Audio: Starta om audio + + + + Automation: Mixer automation + Audio: Mixerautomation + + + + Automation: Take mixer snapshot + Audio: Mixer ögonblicksbild + + + + Automation: Clear mixer automation + Audio: Rensa mixerautomation + + + + Help: Open Manual + Hjälp: Öppna manual + + + + Help: Toggle whatsthis mode + Hjälp: What's this-läge av/pÃ¥ + + + + Edit: Edit selected part + Redigera: Editera vald part + + + + Edit: Select nearest part on track above + Redigera: Välj närmsta part pÃ¥ ovanstÃ¥ende spÃ¥r + + + + Edit: Add nearest part on track above + Redigera: Lägg till närmsta part pÃ¥ ovanstÃ¥ende spÃ¥r till val + + + + Edit: Select nearest part on track below + Redigera: Välj närmsta part pÃ¥ underliggande spÃ¥r + + + + Edit: Add nearest part on track below + Redigera: Lägg till närmsta part pÃ¥ underliggande spÃ¥r till val + + + + Midi: Transpose + Midi: Transponering + + + + Edit: Select all + Redigera: Välj alla + + + + Edit: Select none + Redigera: Välj ingen + + + + Edit: Invert selection + Redigera: Invertera val + + + + Edit: Select events/parts inside locators + Redigera: Välj händelser/parter inom sektion + + + + Edit: Select events/parts outside locators + Redigera: Välj händelser/parter utanför sektion + + + + Edit: Select nearest part/event to the left + Redigera: Välj närmsta part/händelse till vänster + + + + Edit: Add nearest part/event to the left to selection + Redigera: Lägg till närmsta part/händelse till vänster till val + + + + Edit: Add nearest part/event to the right to selection + Redigera: Lägg till närmsta part/händelse till höger till val + + + + Edit: Set locators to selection + Redigera: Sätt loopsektion till valda parter/händelser + + + + Edit: Increase pitch + Redigera: Höj pitch + + + + Edit: Decrease pitch + Redigera: Sänk pitch + + + + Edit: Set fixed length on midi events + Redigera: Sätt fix längd till valda midihändelser + + + + Quantize: Over Quantize + Redigera: Överkvantisera + + + + Quantize: Note On Quantize + Kvantisering: Not pÃ¥-kvantisering + + + + Quantize: Note On/Off Quantize + Kvantisering: Not pÃ¥/av-kvantisering + + + + Quantize: Iterative Quantize + Kvantisering: Iterativ kvantisering + + + + Quantize: Configure quant + Kvantisering: Konfigurera kvantisering + + + + Quantize: Modify Gate Time + Kvantisering: Modifiera gate-tid + + + + Quantize: Modify Velocity + Kvantisering: Modifiera velocity + + + + Edit: Crescendo + Redigera: Crescendo + + + + Edit: Thin Out + Redigera: Tunna ut + + + + Edit: Erase Event + Redigera: Ta bort händelse + + + + Edit: Note Shift + Redigera: Shifta Not + + + + Edit: Move Clock + Redigera: Flytta Klocka + + + + Edit: Copy Measure + Redigera: Kopiera Takt + + + + Edit: Erase Measure + Redigera: Ta bort Takt + + + + Edit: Delete Measure + Redigera: Ta bort Takt + + + + Edit: Create Measure + Redigera: Lägg till Takt + + + + Edit: Change event color + Redigera: Ändra färg pÃ¥ händelse + + + + Tool: Pointer + Verktyg: Pekare + + + + Tool: Pencil + Verktyg: Penna + + + + Tool: Eraser + Verktyg: Radergummi + + + + Tool: Line Draw + Verktyg: Rita linje + + + + Tool: Scissor + Verktyg: Delare + + + + Tool: Glue + Verktyg: Lim + + + + Tool: Mute + Verktyg: Tysta + + + + Transport: Increase current position + Transport: Öka nuvarande position + + + + Transport: Decrease current position + Transport: Minska nuvarande position + + + + Quantize: Set quantize to 1/1 note + Kvantisering: Sätt kvantisering till 1/1-not + + + + Quantize: Set quantize to 1/2 note + Kvantisering: Sätt kvantisering till 1/2-not + + + + Quantize: Set quantize to 1/4 note + Kvantisering: Sätt kvantisering till 1/4-not + + + + Quantize: Set quantize to 1/8 note + Kvantisering: Sätt kvantisering till 1/8-not + + + + Quantize: Set quantize to 1/16 note + Kvantisering: Sätt kvantisering till 1/16-not + + + + Quantize: Set quantize to 1/32 note + Kvantisering: Sätt kvantisering till 1/32-not + + + + Quantize: Set quantize to 1/64 note + Kvantisering: Sätt kvantisering till 1/64-not + + + + Quantize: Toggle triol quantization + Kvantisering: Växla triol-kvantisering + + + + Quantize: Toggle punctuation quantization + Kvantisering: Växla punktuerad kvantisering + + + + Quantize: Toggle punctuation quantization (2) + Kvantisering: Växla punktuerad kvantisering (2) + + + + Edit: Insert at location + Redigera: Sätt in pÃ¥ nuvarande position + + + + Insert Note + Mata in Not + + + + Insert SysEx + Mata in SysEx + + + + Insert Ctrl + Mata in Ctrl + + + + Insert Meta + Mata in Meta + + + + Insert Channel Aftertouch + Mata in Aftertouch för kanal + + + + Insert Key Aftertouch + Mata in Key Aftertouch + + + + Edit: Increase event position + Redigera: Öka position för händelse + + + + Edit: Decrease event position + Redigera: Minska position för händelse + + + + Insert Tempo + Mata in Tempo + + + + Insert Signature + Mata in tempo-signatur + + + + Change Event Position + Ändra position för händelse + + + + Edit Event Value + Redigera värde för händelse + + + + Default + + + + + Refrain + + + + + Bridge + + + + + Intro + + + + + Coda + + + + + Chorus + + + + + Solo + + + + + Brass + + + + + Percussion + + + + + Drums + Trummor + + + + Guitar + + + + + Bass + + + + + Flute + + + + + Strings + + + + + Keyboard + + + + + Piano + + + + + Saxophon + + + + + @default + + + Click this button to stop playback + Klicka här för att stoppa uppspelning + + + + Click this button to start playback + Klicka här för att starta uppspelning + + + + Click this button to rewind to start position + Klicka här för att spola tillbaks till början + + + + Click this button to rewind + Klicka här för att flytta markören bakÃ¥t + + + + Click this button to forward current play position + Klicka här för att flytta markören framÃ¥t + + + + don't quantize notes above this tick limit + Kvantisera inte över denna tick gräns + + + + quantize also note len as default + Kvantisera "note len" som standard + + + + Click this button to open a <em>new song</em>.<br>You can also select the <b>Open command</b> from the File menu. + Klicka här för att öppna en <em>ny sÃ¥ng</em>.<br>Du kan ocksÃ¥ välja menyvalet <b>Öppna</b> frÃ¥n Arkivmenyn. + + + + Click this button to save the song you are editing. You will be prompted for a file name. +You can also select the Save command from the File menu. + Klicka här för att spara den sÃ¥ng du hÃ¥ller pÃ¥ att redigera. En förfrÃ¥gan om filnamn kommer att ställas. +Du kan ocksÃ¥ välja menyalternativet Spara frÃ¥n Arkivmenyn. + + + + Create New Song + Ny sÃ¥ng + + + + loop between left mark and right mark + loopa mellan vänster och höger markering + + + + record starts at left mark + inspelning börjar vid vänster markering + + + + record stops at right mark + inspelning slutar vid höger markering + + + + rewind to start position + spola tillbaka till startposition + + + + rewind current position + flytta markörposition bakÃ¥t + + + + move current position + flytta markörposition + + + + stop sequencer + stoppa sequencer + + + + start sequencer play + starta sequenceruppspelning + + + + to record press record and then play + för att spela in, tryck pÃ¥ record och sen play + + + + send note off to all midi channels + skicka note off till alla midi kanaler + + + + select Pencil Tool: +with the pencil tool you can: + create new parts + modify length of parts + välj pennverktyg: +med pennverktyget kan du: + skapa parter + ändra längden pÃ¥ parter + + + + + select Delete Tool: +with the delete tool you can delete parts + välj Suddverktyg: +med suddverktyget kan du ta bort parter + + + + select Cut Tool: +with the cut tool you can split a part + välj Delningsverktyg: +med delningsverktyget kan du dela pÃ¥ parter + + + + select Glue Tool: +with the glue tool you can glue two parts + välj Limverktyg: +med limverktyget kan du limma ihop tvÃ¥ parter + + + + select Score Tool: + + välj Partiturverktyg: + + + + + select Quantize Tool: +insert display quantize event + välj Kvantiseringsverktyg: +sätt in kvantiseringshändelser + + + + select Drawing Tool + välj Ritverktyg + + + + + select Muting Tool: +click on part to mute/unmute + välj Tystningsverktyg: +klicka pÃ¥ en part för att Tysta/Avtysta + + + + pencil + penna + + + + rubber + sudd + + + + cutter + delare + + + + score + partitur + + + + glue + lim + + + + quantize + kvantisering + + + + draw + rita + + + + mute parts + muta parter + + + + Off + Av + + + + presets (*.pre *.pre.gz *.pre.bz2) + inställningar (*.pre *.pre.gz *.pre.bz2) + + + + All Files (*) + Alla filer (*) + + + + Add Midi Track + Lägg till MidispÃ¥r + + + + Add Drum Track + Lägg till TrumspÃ¥r + + + + Add Wave Track + Lägg till WavespÃ¥r + + + + Add Audio Output + Lägg till LjudutgÃ¥ng + + + + Add Audio Group + Lägg till Ljudgrupp + + + + Add Audio Input + Lägg till LjudingÃ¥ng + + + + Add Aux Send + Lägg till aux sänd + + + + Click this button to enable recording + Klicka här för att spela in + + + + Transport: Start playback from current location + Transport: Starta uppspelning frÃ¥n nuvarande position + + + + m + + + + + mute + tysta + + + + s + + + + + solo + + + + + Mo + + + + + monitor + + + + + Dr + + + + + use drum map + + + + + off + av + + + + aR + + + + + automation read + + + + + aW + + + + + automation write + + + + + sync + + + + + send sync events + + + + + 1/2 channel + 1/2 kanal + + + + oR + + + + + output routing + + + + + iR + + + + + input routing + + + + + Channels + + + + + Bar + Takt + + + + Midi + Midi + + + + Add Midi Output + + + + + Add Midi Input + + + + + Audio + Ljud + + + + MusE: create project directory + + + + + MusE: create template directory + + + + + Cannot find project <%1> + + + + + MusE: load Project + + + + + Transport: Toggle metronome + Transport: Metronom av/pÃ¥ + + + + Transport: Stop Playback + Transport: Stoppa uppspelning + + + + Transport: Play, Stop, Rewind + Transport: Spela, stoppa, spola tillbaka + + + + Transport: Goto left marker + Transport: GÃ¥ till vänster markering + + + + Transport: Goto right marker + Transport: GÃ¥ till höger markering + + + + Transport: Toggle Loop section + Transport: Loopa sektion av/pÃ¥ + + + + Transport: Toggle Record + Transport: Inspelning av/pÃ¥ + + + + Edit: Copy + Redigera: Kopiera + + + + Edit: Undo + Redigera: Ã…ngra + + + + Edit: Redo + Redigera: Gör om + + + + Edit: Cut + Redigera: Klipp ut + + + + Edit: Paste, + Redigera: Klistra in + + + + Edit: Delete + Redigera: Ta bort + + + + Open + Öppna + + + + Save + Spara + + + + File: Open recent file + Arkiv: Öppna föregÃ¥ende fil + + + + File: Import midi file + Arkiv: Importera midifil + + + + File: Export midi file + Arkiv: Exportera midifil + + + + File: Import audio file + Arkiv: Importera ljudfil + + + + File: Quit MusE + Arkiv: Avsluta + + + + Edit: Select parts on track + Arkiv: Välj alla parter i spÃ¥r + + + + Open pianoroll + Öppna pianorulle + + + + Open drumeditor + Öppna trumeditor + + + + Open listeditor + Öppna listeditor + + + + Open graphical mastertrack editor + Öppna masterspÃ¥r-editor (grafisk) + + + + Open list mastertrack editor + Öppna masterspÃ¥r-editor (lista) + + + + Add midi track + Lägg till midispÃ¥r + + + + Add drum track + Lägg till trumspÃ¥r + + + + Add wave track + Lägg till ljudspÃ¥r + + + + Add audio output + Lägg till ljudutgÃ¥ng + + + + Add audio group + Lägg till ljudgrupp + + + + Add audio input + Lägg till ljudingÃ¥ng + + + + Structure: Global cut + Struktur: Globalt klipp + + + + Structure: Global insert + Struktur: Global insättning + + + + Structure: Global split + Struktur: Global delning + + + + Structure: Copy range + Struktur: Kopiera omrÃ¥de + + + + Structure: Cut events + Struktur: Klipp ut händelse + + + + View: Open mixer window + Vy: Öppna mixerfönster + + + + View: Toggle transport window + Vy: Transportfönster av/pÃ¥ + + + + View: Toggle bigtime window + Vy: Bigtimefönster av/pÃ¥ + + + + View: Open marker window + Vy: Öppna markörfönster + + + + Settings: Follow song by page + Inställningar: Följ sÃ¥ng efter sida + + + + Settings: Follow song off + Inställningar: Följ sÃ¥ng av + + + + Settings: Follow song continuous + Inställningar: Följ sÃ¥ng kontinuerligt + + + + Settings: Configure shortcuts + Inställningar: Konfigurera tangentbordsgenvängar + + + + Settings: Configure metronome + Inställningar: Konfigurera metronom + + + + Settings: Midi sync configuration + Inställningar: Midi synk konfigurationg + + + + Settings: Midi file export configuration + Inställningar: Midi fil export-konfiguration + + + + Settings: Midi ports / Soft Synth + Inställningar: Midiportar / Mjukvarusynthar + + + + Settings: Audio subsystem configuration + Inställningar: Konfiguration av ljud-undersystem + + + + Midi: Edit midi instruments + Midi: Editera midi-instrument + + + + Midi: Midi remote control + Midi: Midi fjärrkontroll + + + + Midi: Reset midi + Midi: Resetta midi + + + + Midi: Init midi + Midi: Initiera midi + + + + Midi: Midi local off + Midi: Midi lokal av + + + + Audio: Bounce audio to track + Audio: Bounce till spÃ¥r + + + + Audio: Bounce audio to file + Audio: Bounce till fil + + + + Audio: Restart audio + Audio: Starta om audio + + + + Help: Open Manual + Hjälp: Öppna manual + + + + Help: Toggle whatsthis mode + Hjälp: What's this-läge av/pÃ¥ + + + + Edit: Edit selected part + Redigera: Editera vald part + + + + Edit: Select nearest part on track above + Redigera: Välj närmsta part pÃ¥ ovanstÃ¥ende spÃ¥r + + + + Edit: Add nearest part on track above + Redigera: Lägg till närmsta part pÃ¥ ovanstÃ¥ende spÃ¥r till val + + + + Edit: Select nearest part on track below + Redigera: Välj närmsta part pÃ¥ underliggande spÃ¥r + + + + Edit: Add nearest part on track below + Redigera: Lägg till närmsta part pÃ¥ underliggande spÃ¥r till val + + + + Midi: Transpose + Midi: Transponering + + + + Edit: Select all + Redigera: Välj alla + + + + Edit: Select none + Redigera: Välj ingen + + + + Edit: Invert selection + Redigera: Invertera val + + + + Edit: Select events/parts inside locators + Redigera: Välj händelser/parter inom sektion + + + + Edit: Select events/parts outside locators + Redigera: Välj händelser/parter utanför sektion + + + + Edit: Select nearest part/event to the left + Redigera: Välj närmsta part/händelse till vänster + + + + Edit: Add nearest part/event to the left to selection + Redigera: Lägg till närmsta part/händelse till vänster till val + + + + Edit: Add nearest part/event to the right to selection + Redigera: Lägg till närmsta part/händelse till höger till val + + + + Edit: Set locators to selection + Redigera: Sätt loopsektion till valda parter/händelser + + + + Edit: Increase pitch + Redigera: Höj pitch + + + + Edit: Decrease pitch + Redigera: Sänk pitch + + + + Edit: Set fixed length on midi events + Redigera: Sätt fix längd till valda midihändelser + + + + Quantize: Over Quantize + Redigera: Överkvantisera + + + + Quantize: Note On Quantize + Kvantisering: Not pÃ¥-kvantisering + + + + Quantize: Note On/Off Quantize + Kvantisering: Not pÃ¥/av-kvantisering + + + + Quantize: Iterative Quantize + Kvantisering: Iterativ kvantisering + + + + Quantize: Configure quant + Kvantisering: Konfigurera kvantisering + + + + Quantize: Modify Gate Time + Kvantisering: Modifiera gate-tid + + + + Quantize: Modify Velocity + Kvantisering: Modifiera velocity + + + + Edit: Crescendo + Redigera: Crescendo + + + + Edit: Thin Out + Redigera: Tunna ut + + + + Edit: Erase Event + Redigera: Ta bort händelse + + + + Edit: Note Shift + Redigera: Shifta Not + + + + Edit: Move Clock + Redigera: Flytta Klocka + + + + Edit: Copy Measure + Redigera: Kopiera Takt + + + + Edit: Erase Measure + Redigera: Ta bort Takt + + + + Edit: Delete Measure + Redigera: Ta bort Takt + + + + Edit: Create Measure + Redigera: Lägg till Takt + + + + Edit: Change event color + Redigera: Ändra färg pÃ¥ händelse + + + + Tool: Pointer + Verktyg: Pekare + + + + Tool: Pencil + Verktyg: Penna + + + + Tool: Eraser + Verktyg: Radergummi + + + + Tool: Line Draw + Verktyg: Rita linje + + + + Tool: Scissor + Verktyg: Delare + + + + Tool: Glue + Verktyg: Lim + + + + Tool: Mute + Verktyg: Tysta + + + + Transport: Increase current position + Transport: Öka nuvarande position + + + + Transport: Decrease current position + Transport: Minska nuvarande position + + + + Quantize: Set quantize to 1/1 note + Kvantisering: Sätt kvantisering till 1/1-not + + + + Quantize: Set quantize to 1/2 note + Kvantisering: Sätt kvantisering till 1/2-not + + + + Quantize: Set quantize to 1/4 note + Kvantisering: Sätt kvantisering till 1/4-not + + + + Quantize: Set quantize to 1/8 note + Kvantisering: Sätt kvantisering till 1/8-not + + + + Quantize: Set quantize to 1/16 note + Kvantisering: Sätt kvantisering till 1/16-not + + + + Quantize: Set quantize to 1/32 note + Kvantisering: Sätt kvantisering till 1/32-not + + + + Quantize: Set quantize to 1/64 note + Kvantisering: Sätt kvantisering till 1/64-not + + + + Quantize: Toggle triol quantization + Kvantisering: Växla triol-kvantisering + + + + Quantize: Toggle punctuation quantization + Kvantisering: Växla punktuerad kvantisering + + + + Quantize: Toggle punctuation quantization (2) + Kvantisering: Växla punktuerad kvantisering (2) + + + + Insert Tempo + Mata in Tempo + + + + Insert Signature + Mata in tempo-signatur + + + + Change Event Position + Ändra position för händelse + + + + Edit Event Value + Redigera värde för händelse + + + + MusE: create instruments directory + + + + + AboutBox + + + AboutBox + OmDialog + + + + Keep On Rocking! + Keep On Rocking! + + + + Version 0.7.0 + +(C) Copyright 1999-2004 Werner Schweer and others. +See http://lmuse.sourceforge.net for new versions and +more information. + +Published under the GNU Public License + Version 0.7.0 + +(C) Copyright 1999-2004 Werner Schweer m.fl. +Se http://lmuse.sourceforge.net för nya versioner och +mer information + +Published under the GNU Public License + + + + Appearance + + + handle of transport window + handtag för transportfönster + + + + track activity in arranger + spÃ¥r-aktivitet i Arrangeraren + + + + bigtime font color + bigtime typsnittsfärg + + + + bigtime background color + bigtime bakgrundsfärg + + + + waveedit background color + audioeditor bakgrundsfärg + + + + MusE: load image + MusE: ladda bild + + + + AppearanceDialogBase + + + MusE: Appearance settings + MusE: Utseendeinställningar + + + + Apply + Verkställ + + + + Ok + Ok + + + + Cancel + Avbryt + + + + Arranger + Arrangerare + + + + Parts + Parter + + + + show frames + visa ramar + + + + show names + visa namn + + + + show events + visa händelser(events) + + + + show Cakewalk Style + använd Cakewalkstil + + + + Events + Händelser + + + + note on + not pÃ¥ + + + + poly pressure + poly pressure + + + + controller + controller + + + + aftertouch + aftertouch + + + + pitch bend + pitch bend + + + + program change + program change + + + + Background picture + Bakgrundsbild + + + + select... + välj... + + + + show snap grid + visa rutnät + + + + Colors + Färger + + + + Items + Objekt + + + + selected + vald + + + + current: + nuvarande: + + + + change... + byt... + + + + dynamic colors for track activity in arranger + dynamisk färgallokering för spÃ¥raktivitet i arranger + + + + Style/Fonts + Style/Typsnitt + + + + QT Theme + QT-tema + + + + Fonts + Typsnitt + + + + Family + Familj + + + + Size + Storlek + + + + Font 1 + Typsnitt 1 + + + + Font 2 + Typsnitt 2 + + + + Font 3 + Typsnitt 3 + + + + Font 0 + Typsnitt 0 + + + + Bold + Fet + + + + Italic + Kursiv + + + + Font 4 + Typsnitt 4 + + + + Font 5 + Typsnitt 5 + + + + Palette + Palett + + + + add to palette + lägg till i palett + + + + Arranger + + + Arranger + Arrangerare + + + + Cursor + Markör + + + + Off + Av + + + + Bar + Takt + + + + Snap + Fäst vid + + + + Type + Typ + + + + midi song type + typ av midsÃ¥ng + + + + Pitch + Tonhöjd + + + + TrackInfo + SpÃ¥rinfo + + + + Track + SpÃ¥r + + + + Master + Master + + + + Group A + Grupp A + + + + Group B + Grupp B + + + + Group C + Grupp C + + + + Group D + Grupp D + + + + Mix + + + + + Config Tracklist + + + + + all mute off + + + + + all solo off + + + + + all autoRead off + + + + + all autoWrite off + + + + + i + + + + + Show Track Info + + + + + m + + + + + Show Mixer Strip + + + + + AudioConfBase + + + MusE: Audio Configuration + MusE: Ljudinställningar + + + + &Apply + &Verkställ + + + + &OK + &Ok + + + + &Cancel + &Avbryt + + + + Audio Parameters + Ljudparametrar + + + + Frame Size: + Ramstorlek: + + + + Delay: + Fördröjning(ms): + + + + Sample Rate: + Samplingsfrekvens: + + + + Audio Driver + Ljuddrivrutin + + + + Use Alsa + Använd Alsa + + + + Use JACK + Använd JACK + + + + No Audio + Ljud avstängt + + + + AudioMixerApp + + + 1/2 channel + 1/2 kanal + + + + record + inspelning + + + + mute + tysta + + + + pre fader listening + pre fader lyssning + + + + record downmix + spela in nermixning + + + + off + av + + + + &Config + &Inställningar + + + + Add Input Strip + Lägg till Input-remsa + + + + Inputs + IngÃ¥ngar + + + + Tracks + SpÃ¥r + + + + Groups + Grupper + + + + Master + Master + + + + Group A + Grupp A + + + + Group B + Grupp B + + + + Group C + Grupp C + + + + Group D + Grupp D + + + + None + Ingen + + + + &Create + &Skapa + + + + AudioStrip + + + off + av + + + + 1/2 channel + 1/2 kanal + + + + mute + tysta + + + + record downmix + spela in nermixning + + + + pre fader listening + pre fader lyssning + + + + Off + Av + + + + Channel + Kanal + + + + Pre + + + + + pre fader - post fader + + + + + dB + + + + + panorama + + + + + Pan + + + + + Channel %1 + + + + + MidiChannel + + + + + Awl::MidiVolEntry + + + off + av + + + + db + + + + + Awl::VolEntry + + + off + av + + + + BigTime + + + MusE: Bigtime + + + + + ClipListEdit + + + MusE: Clip List Editor + MusE: Clip-listredigerare + + + + ClipListEditorBase + + + MusE: ClipList + MusE: Clip-lista + + + + Name + Namn + + + + Clip Properties + Clip-egenskaper + + + + CommentBase + + + Track Comment + SpÃ¥r-kommentar + + + + Track 1 + SpÃ¥r 1 + + + + ConfigMidiCtrlBase + + + MusE: Config Midi Controller + MusE: Konfigurera Midi Controller + + + + Midi Port: + Midi Port: + + + + Available Controller: + Tillgänglig Controller: + + + + Add + Lägg till + + + + Remove + Ta bort + + + + Automated Controller: + Automatiserad Controller: + + + + &OK + &OK + + + + &Cancel + &Avbryt + + + + ConfigMidiFileBase + + + MusE: Config Midi File Export + MusE: Midi fil export-konfiguration + + + + &OK + &OK + + + + &Cancel + &Avbryt + + + + 0 (single track) + 0 (enskilt spÃ¥r) + + + + 1 (multiple tracks) + 1 (multipla spÃ¥r) + + + + Format: + Format: + + + + Enable extended smf format + SlÃ¥ pÃ¥ utbyggt smf-format + + + + ConfigTrackListBase + + + MusE: Config Track List + MusE: Konfigurera SpÃ¥rlista + + + + Track Type: + SpÃ¥rtyp: + + + + Audio Output + LjudutgÃ¥ng + + + + Audio Group + Ljudgrupp + + + + Audio Aux + Ljud Aux + + + + Wave Track + WavespÃ¥r + + + + Audio Input + LjudingÃ¥ng + + + + Soft Synthesizer + Mjukvarusynth + + + + Midi Track + MidispÃ¥r + + + + Drum Track + TrumspÃ¥r + + + + Available Items: + Tillgängliga Objekt: + + + + Add + Lägg till + + + + Remove + Ta bort + + + + Up + Upp + + + + Down + Ner + + + + Configured Items + Konfigurerade Objekt + + + + Track Name Size: + SpÃ¥rnamn Storlek: + + + + &OK + &OK + + + + &Cancel + &Avbryt + + + + CtrlDelegate + + + dB + + + + + off + av + + + + CtrlDialog + + + controller name + + + + + flag if controller contains data + + + + + CtrlEdit + + + select controller + välj controller + + + + CtrlListEditor + + + dB + + + + + CtrlPanel + + + select controller + välj controller + + + + remove panel + ta bort panel + + + + Velocity + Hastighet + + + + Pitch + Tonhöjd + + + + other ... + annat ... + + + + DeicsOnzeGui + + + Save configuration + + + + + Critical Error + + + + + Cannot open file %1 + + + + + Parsing error for file %1 + + + + + Load category dialog + + + + + Load set dialog + + + + + Save set dialog + + + + + New category + + + + + Delete category + + + + + Load category + + + + + Save category + + + + + Load set + + + + + Save set + + + + + Delete set + + + + + New subcategory + + + + + Delete subcategory + + + + + Load subcategory + + + + + Save subcategory + + + + + New preset + + + + + Delete preset + + + + + Load preset + + + + + Save preset + + + + + No more category supported + + + + + You can not add more categories + + + + + Do you really want to delete %1 ? + + + + + &Yes + + + + + &No + + + + + No category selected + + + + + You must first select a category. + + + + + Replace or add + + + + + %1 is supposed to be affected to the hbank number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + + + + + &Replace + E&rsätt + + + + &Add + &Lägg till + + + + Download error + + + + + There is no more free category slot. + + + + + Save category dialog + + + + + No more subcategory supported + + + + + You can not add more subcategories + + + + + No subcategory selected + + + + + You must first select a subcategory. + + + + + Load subcategory dialog + + + + + %1 is supposed to be affected to the lbank number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + + + + + There is no more free subcategory slot. + + + + + Save subcategory dialog + + + + + No more preset supported + + + + + You can not add more presets + + + + + No preset selected + + + + + You must first select a preset. + + + + + Load preset dialog + + + + + %1 is supposed to be affected to the prog number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + + + + + There is no more free preset slot. + + + + + Save preset dialog + + + + + Browse set dialog + + + + + Browse image dialog + + + + + DeicsOnzeGuiBase + + + Speed + Hastighet + + + + Volume + Volym + + + + Pitch + Tonhöjd + + + + Transpose + Transponera + + + + &Config + &Inställningar + + + + Save + Spara + + + + Colors + Färger + + + + Text + Text + + + + DrumEdit + + + &File + &Arkiv + + + + Load Map + Ladda mappning + + + + Save Map + Spara Mappning + + + + &Edit + &Redigera + + + + Cut + Klipp ut + + + + Copy + Kopiera + + + + Paste + Klistra in + + + + Delete Events + Ta bort händelser + + + + Select All + Välj Allt + + + + Select None + Välj Ingen + + + + Invert + Invertera + + + + Inside Loop + I loop + + + + Outside Loop + Utanför loop + + + + &Select + &Välj + + + + Load Drummap + Ladda trummappning + + + + Store Drummap + Spara trummappning + + + + Step Record + Stegvis inspelning + + + + Add Controller View + Lägg till Controller vy + + + + Sound + Ljud + + + + drummaps + trummappningar + + + + Muse: Load Drum Map + Muse: Ladda trummappning + + + + MusE: Store Drum Map + MusE: Spara trummappning + + + + &Functions + &Funktioner + + + + Modify Velocity + Modifiera Velocity + + + + Drum Tools + + + + + Transport + + + + + EditCAfterDialog + + + Time Position + Tidsposition + + + + EditCtrl14Dialog + + + MusE: Enter Controller14 Event + MusE: Mata in Controller14 Händelse + + + + Time Position + Tidsposition + + + + Value + Värde + + + + EditCtrl7Dialog + + + MusE: Enter Controller Event + MusE: Mata in Controller Händelse + + + + Time Position + Tidsposition + + + + Value + Värde + + + + EditCtrl7DialogBase + + + MusE: Enter Controller + MusE: Mata in Controller + + + + Controller: + Controller: + + + + Time Position: + Tidspositions: + + + + Value: + Värde: + + + + controller value + controllervärde + + + + OK + OK + + + + Cancel + Avbryt + + + + EditCtrlBase + + + MusE: Edit Controller Event + MusE: Redigera Controllerhändelse + + + + Time Position + Tidsposition + + + + Available Controller: + Tillgänglig Controller: + + + + Create New Controller + Skapa Ny Controller + + + + Value + Värde + + + + Controller + Controller + + + + off + av + + + + &OK + &Ok + + + + &Cancel + &Avbryt + + + + Midi Port: + Midi Port: + + + + Midi Channel: + Midi Kanal: + + + + Time Position: + Tidsposition: + + + + Patch Name + Patchnamn + + + + EditEventDialog + + + Cancel + Avbryt + + + + EditInstrument + + + MusE: Create file failed + + + + + MusE: Write File failed + + + + + MusE: Save Instrument Definition + + + + + Instrument Definition (*.idf) + + + + + MusE: Enter new Category + + + + + Enter new Category: + + + + + MusE + + + + + The current Instrument contains unsaved data +Save Current Instrument? + + + + + &Save + &Spara + + + + &Nosave + + + + + &Abort + + + + + EditInstrumentBase + + + Patches + Patchar + + + + Patch Name: + Patchnamn: + + + + High Bank: + Hög Bank: + + + + Low Bank: + LÃ¥g Bank: + + + + Program: + Program: + + + + Patch/Group + Patch/Grupp + + + + &Delete + &Ta bort + + + + &New Patch + &Ny Patch + + + + New Group + Ny Grupp + + + + Drum + Trumma + + + + Controller + Controller + + + + Predefined Controller: + Fördefinierad Controller: + + + + This is a list of commonly used midi controllers. +Note that in MusE pitch and program changes are +handled like normal controllers. + Detta är en lista över vanligt förekommande controllers. +Observera att i MusE hanteras pitch och program change som +vanliga controllers. + + + + Properties + Egenskaper + + + + Name + Namn + + + + Type + Typ + + + + Pitch + Tonhöjd + + + + Midi Controller Number High Byte + Midi Controllernummer Hög Byte + + + + Midi Controller Number Low Byte + Midi Controllernummer LÃ¥g Byte + + + + Range + OmrÃ¥de + + + + Name + Namn + + + + Type + Typ + + + + Min Val + Min värde + + + + Max Val + Max värde + + + + list of defined controllers + lista med definierade controllers + + + + This is the MusE list of defined controllers. + Detta är MusEs lista med definierade controllers. + + + + Initialization + Initiering + + + + Panic + Panik + + + + Hex Entry: + Hex Värde: + + + + &File + &Arkiv + + + + Tools + Verktyg + + + + New + Ny + + + + &New + &Ny + + + + Open + Öppna + + + + &Open... + &Öppna... + + + + Save + Spara + + + + &Save + &Spara + + + + Save As + Spara som + + + + Save &As... + S&para som... + + + + Exit + Stäng + + + + E&xit + S&täng + + + + EditMetaDialog + + + MusE: Enter Meta Event + MusE: Mata in Meta Händelse + + + + Time Position + Tidsposition + + + + Meta Type + Metatyp + + + + Enter Hex + Mata in Hex + + + + EditMetaDialogBase + + + MusE: Enter Meta Event + MusE: Mata in Meta Händelse + + + + OK + OK + + + + Cancel + Avbryt + + + + Time Position: + Tidsposition: + + + + Meta Type: + Metatyp: + + + + Enter Hex + Mata in hex + + + + EditNoteDialogBase + + + MusE: Enter Note + MusE: Mata in Not + + + + OK + OK + + + + Cancel + Avbryt + + + + Length: + Längd: + + + + Time Position: + Tidsposition: + + + + Pitch: + Tonhöjd: + + + + Velocity On: + Velocity PÃ¥: + + + + Velocity Off: + Velocity Av: + + + + EditPAfterDialog + + + MusE: Enter Poly Aftertouch + MusE: Mata in Poly Aftertouch + + + + Time Position + Tidsposition + + + + Pitch + Tonhöjd + + + + EditPitchDialog + + + MusE: Enter Pitch Shift + MusE: Mata in Pitch Shift + + + + Time Position + Tidsposition + + + + Pitch + Tonhöjd + + + + EditSysexDialogBase + + + MusE: Enter SysEx + MusE: Mata in SysEx + + + + TimePosition: + Tidsposition: + + + + Comment: + Kommentar: + + + + OK + OK + + + + Cancel + Avbryt + + + + Known SysEx: + Känd SysEx: + + + + Add + Lägg till + + + + EditToolBar + + + Edit Tools + Redigeringsverktyg + + + + EffectRack + + + effect rack + effektrack + + + + move up + flytta upp + + + + move down + flytta ner + + + + remove + ta bort + + + + show gui + visa gui + + + + new + ny + + + + change + ändra + + + + bypass + + + + + show native gui + + + + + New Plugin + + + + + New Aux Send + + + + + Replace effect + + + + + Do you really want to replace the effect %1? + + + + + &Yes + + + + + &No + + + + + ExportMidiDialog + + + Save + + + + + as smf midi file + + + + + MusE: export midi smf file + + + + + FLUIDGui + + + FLUID: open Soundfile + + + + + Fluid: select Sound Font + + + + + FLUIDGuiBase + + + Load + Ladda + + + + FLUIDSynthGuiBase + + + Gain + Förstärkning + + + + Room Size + Rumsstorlek + + + + Damping + Dämpning + + + + Level + NivÃ¥ + + + + Width + Bredd + + + + Speed + Hastighet + + + + Depth + Djup + + + + Number + Nummer + + + + Type + Typ + + + + Sine + Sinus + + + + Triangle + Triangel + + + + Load + Ladda + + + + Save + Spara + + + + Delete + Ta bort + + + + Fontname + Fontnamn + + + + FileDialogButtons + + + User + Användare + + + + Project + Projekt + + + + Load: + Öppna: + + + + Songdata + +Cofiguration + SÃ¥ngdata + Konfiguration + + + + only +Songdata + enbart SÃ¥ngdata + + + + FluidSynthGui + + + Choose soundfont + + + + + FontSel + + + Size: + Storlek: + + + + GateTime + + + MusE: Modify Gate Time + MusE: Ändra Gate-tid + + + + GateTimeBase + + + MusE: Modify Gate Time + MusE: Ändra Gate-tid + + + + Range + OmrÃ¥de + + + + All Events + Alla Händelser + + + + Selected Events + Valda Händelser + + + + Looped Events + Loopade Händelser + + + + Selected & Looped + Valda & Loopade + + + + Values + Värden + + + + Rate: + Hastighet: + + + + Offset: + Offset: + + + + OK + OK + + + + Cancel + Avbryt + + + + GlobalSettingsDialogBase + + + MusE: Global Settings + MusE: Globala Inställningar + + + + &Apply + &Verkställ + + + + &Ok + &Ok + + + + &Cancel + &Avbryt + + + + Audio + Ljud + + + + Mixer + Mixer + + + + min. Meter Value + min. Metervärde + + + + min.Slider Val + min. Slider värde + + + + Midi + Midi + + + + Displayed Resolution +(Ticks/Quarternote) + Visad upplösning +(Tick/Kvartsnot) + + + + RTC Resolution +(Ticks/Sec) + RTC-Upplösning +(Tick/Sek) + + + + Help Browser: + Hjälpläsare: + + + + GUI Refresh Rate + GUI-uppdateringsfrekvens + + + + /sec + /sek + + + + Application + Applikation + + + + Start Muse + Starta MusE + + + + start with last song + starta med senaste projekt + + + + start with song + starta med projekt + + + + start song: + starta projekt: + + + + Views + Vyer + + + + show + visa + + + + height + höjd + + + + width + bredd + + + + Arranger + Arrangerare + + + + Cur + Nuv + + + + set current values + sätt nuvarande värden + + + + start with template: default.med + starta med mall: default.med + + + + show splash screen + visa splashscreen + + + + use JACK freewheel mode if possible + använd JACK freewheel om möjligt + + + + GreendotButton + + + record + + + + + LMaster + + + MusE: Mastertrack + MusE: MasterspÃ¥r + + + + new tempo + nytt tempo + + + + new signature + ny signatur + + + + Time + Tid + + + + Type + Typ + + + + Value + Värde + + + + ListEdit + + + Insert Note + Mata in Not + + + + insert Note + Mata in Not + + + + Insert SysEx + Mata in SysEx + + + + insert SysEx + Mata in SysEx + + + + Insert Ctrl + Mata in Ctrl + + + + insert Ctrl + Mata in Ctrl + + + + Insert Meta + Mata in Meta + + + + insert Meta + Mata in Meta + + + + Insert Pitch + Mata in Pitch + + + + insert Pitch + Mata in Pitch + + + + Insert Channel Aftertouch + Mata in Aftertouch för kanal + + + + insert Channel Aftertouch + Mata in Aftertouch för kanal + + + + Insert Key Aftertouch + Mata in Key Aftertouch + + + + insert Poly Aftertouch + Mata in Poly Aftertouch + + + + &Edit + &Redigera + + + + Cut + Klipp ut + + + + Copy + Kopiera + + + + Paste + Klistra in + + + + Delete Events + Ta bort Händelser + + + + List Tools + Listverktyg + + + + Insert Tools + Inmatningsverktyg + + + + Bar + Takt + + + + Comment + Kommentar + + + + MusE: List Edit + + + + + Parts + Parter + + + + Controller + Controller + + + + MITTransposeBase + + + MusE: Midi Input Plugin: Transpose + MusE: Midi Inputplugin: Transponering + + + + On + PÃ¥ + + + + Transpose: + Transponering: + + + + MPConfig + + + none + inga + + + + other raw ... + annan raw ... + + + + MusE: Midi Port Table + MusE: Midiporttabell + + + + Device Name + Enhetsnamn + + + + State + Status + + + + unknown + okänd + + + + MRConfigBase + + + MusE: Midi Input Plugin: Remote Control + MusE: Midiinputplugin: Fjärrkontroll + + + + Activate + Aktivera + + + + On + PÃ¥ + + + + Actions + Kommandon + + + + Stop + Stopp + + + + Record + Inspelning + + + + Goto Left Mark + GÃ¥ till vänster markering + + + + Play + Spela + + + + MTScale + + + bar scale + takt skala + + + + MarkerView + + + MusE: Marker + MusE: Markör + + + + add marker + lägg till markör + + + + Add Marker + Lägg till Markör + + + + delete marker + ta bort markör + + + + Delete Marker + Ta bort Markör + + + + &File + &Arkiv + + + + &Edit + &Redigera + + + + Bar:Beat:Tick + Takt:Slag:Tick + + + + Lock + LÃ¥s + + + + Text + Text + + + + Marker Properties + Markörinställningar + + + + marker-tools + + + + + edit tools + + + + + Min:Sc:Fr:Sf + + + + + MasterEdit + + + MusE: Mastertrack + MusE: MasterspÃ¥r + + + + edit tools + redigeringsverktyg + + + + EnableMaster + Aktivera Master + + + + use master track + använd master track + + + + Cursor + Markör + + + + Off + Av + + + + Snap + Fäst vid + + + + time at cursor position + tid vid markörposition + + + + tempo at cursor position + tempo vid markörposition + + + + tempo at current position + tempo vid nuvarande position + + + + time signature at current position + time signature vid nuvarande position + + + + EnableTempomap + + + + + Tempomap + + + + + Enable use of tempo map + + + + + Info + + + + + CurPos + + + + + MetronomeConfigBase + + + MusE: Metronome Config + MusE: Metronomeconfiguration + + + + Metronome + Metronom + + + + Audio Beep + Audio - Ton + + + + Midi Channel + Midi kanal + + + + Measure Note + Takt Not + + + + Measure Velocity + Takt-anslag + + + + Beat Velocity + Slag-anslag + + + + Beat Note + Slag-not + + + + Precount + Inräkning + + + + enable + pÃ¥ + + + + Bars + Takter + + + + From Mastertrack + FrÃ¥n MasterspÃ¥r + + + + &Apply + &Verställ + + + + &OK + &Ok + + + + &Cancel + &Avbryt + + + + MidiChannelInfo + + + MidiController + + + Velocity + Hastighet + + + + MidiControllerEditDialog + + + MusE: save midi controller list + MusE: spara midi-controller lista + + + + MusE: load midi controller list + MusE:ladda midi-controller lista + + + + MidiControllerEditDialogBase + + + MusE: Define Midi Controller + MusE: Definiera Midi-controller + + + + replace controller set + ersätt controller-set + + + + merge controller set + slÃ¥ ihop controller-set + + + + save controller set as + spara controller-set + + + + Name + Namn + + + + Type + Typ + + + + Min Val + Min värde + + + + Max Val + Max värde + + + + list of defined controllers + lista med definierade controllers + + + + This is the MusE list of defined controllers. + Detta är MusEs lista med definierade controllers. + + + + Properties + Egenskaper + + + + Name + Namn + + + + Max Value + Max värde + + + + Min Value + Min värde + + + + Type + Typ + + + + &New + &Ny + + + + create new entry + skapa nytt inlägg + + + + pressing the New button you create a new entry +in the MusE list of defined controllers + tryck pÃ¥ Ny knappen för att skapa nytt inlägg +i MusEs lista med definierade controllers + + + + &Delete + &Ta bort + + + + delete selected entry + ta bort valt inlägg + + + + &OK + &Ok + + + + &Cancel + &Avbryt + + + + &Add + &Lägg till + + + + Alt+A + Alt+L + + + + Predefined Controller: + Fördefinierad Controller: + + + + Managed Controller for Port + Hanterad Controller för Port + + + + Channel + Kanal + + + + This is a list of commonly used midi controllers. +Note that in MusE pitch and program changes are +handled like normal controllers. + Detta är en lista över vanligt förekommande controllers. +Observera att i MusE hanteras pitch och program change som +vanliga controllers. + + + + Pitch + Tonhöjd + + + + Midi Controller Number High Byte + Midi Controllernummer Hög Byte + + + + Midi Controller Number Low Byte + Midi Controllernummer Hög Byte + + + + Range + OmrÃ¥de + + + + MidiEditor + + + &Edit + &Redigera + + + + Cut + Klipp ut + + + + Copy + Kopiera + + + + Paste + Klistra in + + + + Play Events + Spela Händelser + + + + Step Record + Stegvis inspelning + + + + Midi Input + + + + + Follow Song + + + + + MidiFileConfig + + + Config exported Midi Files + Inställningar exporterade midifiler + + + + MusE: Config exported Midi Files + MusE: Inställningar exporterade midifiler + + + + Enable extended smf format + SlÃ¥ pÃ¥ utbyggt smf-format + + + + MidiFilterConfigBase + + + MusE: Midi Input Filter + MusE: Midi Indatafilter + + + + Record Filter + Indata Filter + + + + Note On + Not PÃ¥ + + + + Controller + Controller + + + + &OK + &Ok + + + + &Cancel + &Avbryt + + + + MidiInPortStrip + + + AlsaDevices + + + + + MidiChannel + + + + + JackDevices + + + + + MidiInputTransformDialog + + + New + Ny + + + + MidiInputTransformDialogBase + + + MusE: Midi Input Transformator + MusE: Midi inputtransformator + + + + Filter + Filter + + + + All + Alla + + + + Equal + Lika + + + + Unequal + Ej lika + + + + Note + Not + + + + Value 2 + Värde 2 + + + + Value 1 + Värde 1 + + + + Event Type + Händelsetyp + + + + Ignore + Ignorera + + + + Higher + Högre + + + + Lower + Lägre + + + + Inside + Innanför + + + + Outside + Utanför + + + + Channel + Kanal + + + + Processing + Bearbetar + + + + Keep + BehÃ¥ll + + + + Multiply + Multiplicera + + + + Divide + Dividera + + + + Invert + Invertera + + + + Flip + Flippa + + + + Random + Slumpmässig + + + + Modules + Moduler + + + + enable modul 1 + aktivera modul 1 + + + + enable modul 2 + aktivera modul 2 + + + + enable modul 3 + aktivera modul 3 + + + + enable modul 4 + aktivera modul 4 + + + + Name: + Namn: + + + + Comment: + Kommentar: + + + + Function + Funktion + + + + &New + &Ny + + + + create new preset + skapa nytt preset + + + + &Delete + &Ta bort + + + + delete preset + ta bort preset + + + + &Dismiss + &Stäng + + + + PresetList + Presetlista + + + + MidiOutPortStrip + + + MidiChannel + + + + + AlsaDevices + + + + + JackDevices + + + + + MidiPluginDialog + + + MusE: select midi plugin + + + + + File + Arkiv + + + + Name + Namn + + + + Version + + + + + Description + + + + + Ok + Ok + + + + Cancel + Avbryt + + + + MidiPort + + + not configured + ej konfigurerad + + + + unknown + okänd + + + + MidiPortRouteBase + + + MusE: Midi Port Routing + MusE: Midi Port Routing + + + + MidiRack + + + midi effect rack + + + + + move up + + + + + move down + + + + + remove + + + + + bypass + + + + + show gui + + + + + new + ny + + + + MidiRawDeviceDialogBase + + + MusE: raw midi device configuration + MusE: raw midienhets-inställningar + + + + Name + Namn + + + + Type + Typ + + + + Virt. Ports + Virt. port + + + + Speed + Hastighet + + + + Handshaking + Handskakning + + + + Virt.Ports + Virt.port + + + + Serial Port + Serieport + + + + None + Ingen + + + + &New + &Ny + + + + &Delete + &Ta bort + + + + &OK + &Ok + + + + &Cancel + &Avbryt + + + + MidiStrip + + + off + av + + + + mute + tysta + + + + pre fader listening + pre fader lyssning + + + + Off + Av + + + + VariationSend + + + + + Var + + + + + ReverbSend + + + + + Rev + + + + + ChorusSend + + + + + Cho + + + + + Pan/Balance + + + + + Pan + + + + + Tracks + SpÃ¥r + + + + OutputPorts + + + + + MidiSyncConfigBase + + + MusE: Midi Sync + MusE: Midisync + + + + Master + Master + + + + Slave + Slav + + + + Sync Source + Sync-källa + + + + all + alla + + + + midi port + midiport + + + + Midi Clock + Midiklocka + + + + Apply + Verkställ + + + + Cancel + Avbryt + + + + Type: + Typ: + + + + Offset: + Offset: + + + + hour + timma + + + + minute + minut + + + + second + sekund + + + + Ok + Ok + + + + MidiSyntiStrip + + + OutputPorts + + + + + Channel + Kanal + + + + Input Ports + + + + + MidiTimeDelegate + + + off + av + + + + MidiTrackInfo + + + Channel %1 + + + + + Midi Port + + + + + MidiTrackInfoBase + + + MusE: TrackInfo + MusE: SpÃ¥rinfo + + + + output channel + utgÃ¥ngskanal + + + + all midi events are send to this output channel + alla midihändelser skickas till denna utkanal + + + + Track Info + SpÃ¥rinfo + + + + Track Name + SpÃ¥rnamn + + + + output port + utgÃ¥ngsport + + + + off + av + + + + change stereo position + byt stereoposition + + + + select instrument patch + välj instrumentpatch + + + + Volume + Volym + + + + Channel Info + Kanalinfo + + + + Velocity + Hastighet + + + + Length + Längd + + + + input ports + inputportar + + + + input channels + inputkanaler + + + + Events from all configured channels are +recorded to this track. +You can specify more than one channel for +recording: + 1 2 3 record from channel 1 2 and 3 + 1-3 same + 1-3 5 record from channel 1 2 3 and 5 + Händelser frÃ¥n alla konfigurerade kanaler +spelas in pÃ¥ detta spÃ¥r +Du kan specificera mer än en kanal för +inspelning: + 1 2 3 spela in pÃ¥ kanal 1 2 och 3 + 1-3 samma + 1-3 5 spela in pÃ¥ kanal 1 2 3 och 5 + + + + Output Port + UtgÃ¥ngsport + + + + MidiTrackerEditor + + + &View + + + + + MidiTracker Tools + + + + + Panic + Panik + + + + Transport + + + + + row features + + + + + Number of visible rows + + + + + Quantize + Kvantisera + + + + MidiTransformDialogBase + + + &New + &Ny + + + + &Delete + &Ta bort + + + + &Apply + &Verkställ + + + + &OK + &Ok + + + + &Cancel + &Avbryt + + + + Processing + Bearbetar + + + + Event Type + Händelsetyp + + + + Keep + BehÃ¥ll + + + + Note + Not + + + + Multiply + Multiplicera + + + + Value 2 + Värde 2 + + + + Invert + Invertera + + + + Random + Slumpmässig + + + + Value 1 + Värde 1 + + + + Length + Längd + + + + Filter + Filter + + + + All + Alla + + + + Equal + Lika + + + + Unequal + Ej lika + + + + Ignore + Ignorera + + + + Higher + Högre + + + + Lower + Lägre + + + + Inside + Innanför + + + + Outside + Utanför + + + + Bar Range + Takt OmrÃ¥de + + + + Name: + Namn: + + + + Comment: + Kommentar: + + + + Range + OmrÃ¥de + + + + process all events + bearbeta alla händelser + + + + selected tracks + valda spÃ¥r + + + + inside loop + I loop + + + + Select + Välj + + + + Quantize + Kvantisera + + + + Delete + Ta bort + + + + Transform + Transformera + + + + Insert + Sätt in + + + + Copy + Kopiera + + + + Quantize Value + Kvantisera värde + + + + PresetList + Presetlista + + + + Divide + Dividera + + + + Flip + Flippa + + + + Function + Funktion + + + + MidiTransformerDialog + + + New + Ny + + + + MixdownFileDialog + + + Wave Files (*.wav);;All Files (*) + Wavefiler (*.wav;;All FIles (*) + + + + MusE: set mixdown file name + + + + + MixdownFileDialogBase + + + MusE: Set Mixdown Wavefile + MusE: Välj mixdown-ljudfil + + + + &OK + &Ok + + + + &Cancel + &Avbryt + + + + File Path + Sökväg till fil + + + + Channel + Kanal + + + + Mixer + + + MusE: Midi Mixer + MusE: Midimixer + + + + Master + Master + + + + MusE: Mixer + + + + + &Create + &Skapa + + + + &View + + + + + Routing + + + + + Show Midi Tracks + + + + + Show Midi Out Ports + + + + + Show Midi In Ports + + + + + Show Wave Tracks + + + + + Show Output Tracks + + + + + Show Group Tracks + + + + + Show Input Tracks + + + + + Show Synthesizer + + + + + MusE + + + to import a audio file you have first to selecta audio track + för att importera en ljudfil mÃ¥ste du ha valt ett ljudspÃ¥r + + + + Import Wave File + Importera ljudfil + + + + UndoRedo + Ã…ngraGörom + + + + undo + Ã¥ngra + + + + Und&o + &Ã…ngra + + + + redo + gör om + + + + Re&do + &Gör om + + + + undo last change to song + Ã¥ngra sista ändring i sÃ¥ng + + + + redo last undo + gör om sista Ã¥ngring + + + + rewind + flytta tillbaka + + + + Rewind + Spola tillbaka + + + + forward + framÃ¥t + + + + Forward + FramÃ¥t + + + + stop + stopp + + + + Stop + Stopp + + + + play + spela + + + + Play + Spela + + + + record + spela in + + + + Record + Spela in + + + + panic + panik + + + + Panic + Panik + + + + new + ny + + + + &New + &Ny + + + + open + öppna + + + + &Open + &Öppna + + + + save + spara + + + + &Save + &Spara + + + + pianoroll + pianorulle + + + + Pianoroll + Pianorulle + + + + score + partitur + + + + Score + Partitur + + + + marker + markör + + + + Marker + Markör + + + + File Buttons + Arkivknappar + + + + &File + &Arkiv + + + + Open &Recent + &Nyligen öppnade + + + + Save &As + S&para som + + + + Config &Printer + &Konfigurera skrivare + + + + Import Midifile + Importera midifil + + + + Export Midifile + Exportera midifil + + + + &Quit + A&vsluta + + + + &Edit + &Redigera + + + + C&ut + Klipp &ut + + + + &Copy + &Kopiera + + + + &Paste + K&listra in + + + + Delete Track + Ta bort spÃ¥r + + + + Add Track + Lägg Till SpÃ¥r + + + + Select &All + Markera &Allt + + + + &Deselect All + A&vmarkera Allt + + + + Invert &Selection + Invertera &Markering + + + + &Inside Loop + &I Loop + + + + &Outside Loop + &Utanför Loop + + + + All &Parts on Track + Alla &Parter i spÃ¥r + + + + Select + Välj + + + + Drums + Trummor + + + + List + Lista + + + + Graphic + Grafik + + + + Mastertrack + MasterspÃ¥r + + + + Midi &Transform + Midi &Transform + + + + Modify Gate Time + Modifiera Gate Time + + + + Modify Velocity + Modifiera Velocity + + + + Transpose + Transponera + + + + Thin Out + Tunna ut + + + + Erase Event + Ta bort Händelse + + + + Note Shift + Shifta Not + + + + Move Clock + Flytta Klocka + + + + Copy Measure + Kopiera Takt + + + + Erase Measure + Radera Takt + + + + Delete Measure + Ta bort Takt + + + + Create Measure + Skapa Takt + + + + Mix Track + Mixa SpÃ¥r + + + + Midi + Midi + + + + &Structure + &Struktur + + + + Global Cut + Globalt klipp + + + + Global Insert + Global insättning + + + + Global Split + Global delning + + + + Copy Range + Kopiera OmrÃ¥de + + + + Cut Events + Klipp ut Händelse + + + + Bigtime window + Bigtime fönster + + + + dont follow Song + följ inte SÃ¥ng + + + + follow page + följ sida + + + + follow continuous + följ kontinuerligt + + + + &Config + &Inställningar + + + + Global Settings + Globala Inställningar + + + + follow song + följ sÃ¥ng + + + + Metronome + Metronom + + + + Midi Sync + Midi Synk + + + + Midi File Config + Midi Filkonfigurering + + + + Appearance settings + Utseende inställningar + + + + Soft Synthesizer + Mjukvarusynthar + + + + Midi Ports + Midiportar + + + + Audio System + Audiosubsystem + + + + Save Configuration + Spara Inställningar + + + + Midi Input Filter + Midi Indatafilter + + + + Midi Remote Control + Midi-fjärrkontroll + + + + Random Rhythm Generator + Slumprytmgenerator + + + + &Midi + &Midi + + + + Mixer + Mixer + + + + Define Controller + Definiera Controller + + + + Reset Instr. + Resetta Instr. + + + + Init Instr. + Initiera instr. + + + + local off + lokal av + + + + &Audio + Au&dio + + + + Bounce to Track + Bounce till SpÃ¥r + + + + Bounce to File + Bounce till Fil + + + + &Help + &Hjälp + + + + Browser + Läsare + + + + &About + &Om + + + + About&Qt + Om &Qt + + + + What's &This + Vad är &Detta + + + + Unknown File Format + Okänt filformat + + + + none + inget + + + + MusE: load project + MusE: Öppna projekt + + + + MusE: Write File failed + MusE: Misslyckades med att skriva Fil + + + + The current Project contains unsaved data +Save Current Project? + Det nuvarande Projektet innehÃ¥ller osparade ändringar +Spara nuvarande Projekt? + + + + &Nosave + Spara &inte + + + + &Abort + &Avbryt + + + + MusE: About + MusE: Om + + + + MusE: Save As + MusE: Spara Som + + + + MusE: Song: + MusE: SÃ¥ng: + + + + MusE: Import Midi + MusE: Importera Midi + + + + MusE: Export Midi + MusE: Exportera Midi + + + + reading midifile + + läser midifil + + + + +failed + misslyckades + + + + Nothing to edit + Inget att redigera + + + + MusE: Copy Range + MusE: Kopiera omrÃ¥de + + + + not implemented + ej implementerat + + + + MusE: Cut Events + MusE: Klipp ut Händelse + + + + MusE: Bounce to Track + MusE: Bounce till SpÃ¥r + + + + more than one target track selected + mer än ett spÃ¥r valt som mÃ¥l + + + + wrong target track type, +select wave track as target + fel spÃ¥rtyp som mÃ¥l +välj wave-spÃ¥r som mÃ¥l + + + + no target track selected + inget spÃ¥r valt som mÃ¥l + + + + The current Project contains unsaved data +Load overwrites current Project: +Save Current Project? + Det nuvarande Projektet innehÃ¥ller osparade ändringar +Öppning ersätter nuvarande Projekt +Spara nuvarande Projekt? + + + + &Overwrite + &Ersätt + + + + no help found at: + ingen h jälp hittad vid: + + + + MusE: Open Help + Muse: Arkiv hjälp + + + + Delete Selected Tracks + Ta Bort Valda SpÃ¥r + + + + View + Vy + + + + Edit Instrument + Editera Instrument + + + + Restart Audio + Starta om Audio + + + + Take Snapshot + Ta Ögonblicksbild + + + + Clear Automation Data + Rensa Automationsdata + + + + Settings + Inställningar + + + + Configure shortcuts + Konfigurera Tangentbordsgenvägar + + + + Midi File Export + Midi Fil Export + + + + Midi Ports / Soft Synth + Midiportar / Mjukvarusynthar + + + + &Manual + &Manual + + + + &MusE homepage + &MusE hemsida + + + + &Report Bug... + &Rapportera Bugg... + + + + &About MusE + &Om MusE + + + + What's &This? + Vad är de&t här? + + + + Cannot read template + Kan inte läsa mall + + + + File open error + Fel vid öppning av fil + + + + File read error + Fel vid läsning av fil + + + + MusE: load template + MusE: ladda mall + + + + MusE: Bounce + MusE: Mixa Ner + + + + set left/right marker for bounce range + sätt vänster/höger markör för nedmixningsomrÃ¥de + + + + MusE: Bounce to File + MusE: Mixa Ner till Fil + + + + no output track found + inget utmatningsspÃ¥r kunde hittas + + + + Add midi file to current project? + + Lägg till midifil i nuvarande projekt? + + + + + &Add to Project + &Lägg till i Projekt + + + + &Replace + E&rsätt + + + + +failed: + +misslyckades: + + + + Arranger + Arrangerare + + + + Cursor + Markör + + + + Off + Av + + + + Bar + Takt + + + + Snap + Fäst vid + + + + Pitch + Tonhöjd + + + + midi pitch + midi tonhöjd + + + + global midi pitch shift + global midi tonhöjdsförändring + + + + MusE: Create tmp file failed + MusE: Skapande av temporär fil misslyckades + + + + &View + &Vy + + + + Au&tomation + Au&tomation + + + + Setti&ngs + I&nställningar + + + + MusE manual not found at: + + + + + to import a audio file you have first to selecta wave track + + + + + Failed to start audio! + + + + + Was not able to start audio, check if jack is running. + + + + + + Project Buttons + + + + + Transport + + + + + &Project + + + + + Project Properties + + + + + Crescendo + + + + + Preferences + + + + + Len + + + + + Tempo + + + + + midi tempo + + + + + N + + + + + MusE: new project + + + + + Cannot create project folder <%1> + + + + + Cannot open template file +%1 + + + + + File <%1> read error + + + + + MusE: import midi file + + + + + rewind to start position + spola tillbaka till startposition + + + + Transport: Start playback from current location + Transport: Starta uppspelning frÃ¥n nuvarande position + + + + start sequencer play + starta sequenceruppspelning + + + + Transport: Stop Playback + Transport: Stoppa uppspelning + + + + Transport: Play, Stop, Rewind + Transport: Spela, stoppa, spola tillbaka + + + + Transport: Goto left marker + Transport: GÃ¥ till vänster markering + + + + Transport: Goto right marker + Transport: GÃ¥ till höger markering + + + + Transport: Toggle metronome + Transport: Metronom av/pÃ¥ + + + + Transport: Toggle Loop section + Transport: Loopa sektion av/pÃ¥ + + + + Transport: Toggle Record + Transport: Inspelning av/pÃ¥ + + + + Edit: Copy + Redigera: Kopiera + + + + Edit: Undo + Redigera: Ã…ngra + + + + Edit: Redo + Redigera: Gör om + + + + Edit: Cut + Redigera: Klipp ut + + + + Edit: Paste, + Redigera: Klistra in + + + + Edit: Delete + Redigera: Ta bort + + + + Open + Öppna + + + + Save + Spara + + + + File: Open recent file + Arkiv: Öppna föregÃ¥ende fil + + + + File: Import midi file + Arkiv: Importera midifil + + + + File: Export midi file + Arkiv: Exportera midifil + + + + File: Import audio file + Arkiv: Importera ljudfil + + + + File: Quit MusE + Arkiv: Avsluta + + + + Edit: Select parts on track + Arkiv: Välj alla parter i spÃ¥r + + + + Open pianoroll + Öppna pianorulle + + + + Open drumeditor + Öppna trumeditor + + + + Open listeditor + Öppna listeditor + + + + Open graphical mastertrack editor + Öppna masterspÃ¥r-editor (grafisk) + + + + Open list mastertrack editor + Öppna masterspÃ¥r-editor (lista) + + + + Add midi track + Lägg till midispÃ¥r + + + + Add drum track + Lägg till trumspÃ¥r + + + + Add wave track + Lägg till ljudspÃ¥r + + + + Add audio output + Lägg till ljudutgÃ¥ng + + + + Add audio group + Lägg till ljudgrupp + + + + Add audio input + Lägg till ljudingÃ¥ng + + + + Structure: Global cut + Struktur: Globalt klipp + + + + Structure: Global insert + Struktur: Global insättning + + + + Structure: Global split + Struktur: Global delning + + + + Structure: Copy range + Struktur: Kopiera omrÃ¥de + + + + Structure: Cut events + Struktur: Klipp ut händelse + + + + View: Open mixer window + Vy: Öppna mixerfönster + + + + View: Toggle transport window + Vy: Transportfönster av/pÃ¥ + + + + View: Toggle bigtime window + Vy: Bigtimefönster av/pÃ¥ + + + + View: Open marker window + Vy: Öppna markörfönster + + + + Settings: Follow song by page + Inställningar: Följ sÃ¥ng efter sida + + + + Settings: Follow song off + Inställningar: Följ sÃ¥ng av + + + + Settings: Follow song continuous + Inställningar: Följ sÃ¥ng kontinuerligt + + + + Settings: Configure shortcuts + Inställningar: Konfigurera tangentbordsgenvängar + + + + Settings: Configure metronome + Inställningar: Konfigurera metronom + + + + Settings: Midi sync configuration + Inställningar: Midi synk konfigurationg + + + + Settings: Midi file export configuration + Inställningar: Midi fil export-konfiguration + + + + Settings: Midi ports / Soft Synth + Inställningar: Midiportar / Mjukvarusynthar + + + + Settings: Audio subsystem configuration + Inställningar: Konfiguration av ljud-undersystem + + + + Midi: Edit midi instruments + Midi: Editera midi-instrument + + + + Midi: Midi remote control + Midi: Midi fjärrkontroll + + + + Midi: Reset midi + Midi: Resetta midi + + + + Midi: Init midi + Midi: Initiera midi + + + + Midi: Midi local off + Midi: Midi lokal av + + + + Audio: Bounce audio to track + Audio: Bounce till spÃ¥r + + + + Audio: Bounce audio to file + Audio: Bounce till fil + + + + Audio: Restart audio + Audio: Starta om audio + + + + Help: Open Manual + Hjälp: Öppna manual + + + + Help: Toggle whatsthis mode + Hjälp: What's this-läge av/pÃ¥ + + + + Edit: Edit selected part + Redigera: Editera vald part + + + + Edit: Select nearest part on track above + Redigera: Välj närmsta part pÃ¥ ovanstÃ¥ende spÃ¥r + + + + Edit: Add nearest part on track above + Redigera: Lägg till närmsta part pÃ¥ ovanstÃ¥ende spÃ¥r till val + + + + Edit: Select nearest part on track below + Redigera: Välj närmsta part pÃ¥ underliggande spÃ¥r + + + + Edit: Add nearest part on track below + Redigera: Lägg till närmsta part pÃ¥ underliggande spÃ¥r till val + + + + Midi: Transpose + Midi: Transponering + + + + Edit: Select all + Redigera: Välj alla + + + + Edit: Select none + Redigera: Välj ingen + + + + Edit: Invert selection + Redigera: Invertera val + + + + Edit: Select events/parts inside locators + Redigera: Välj händelser/parter inom sektion + + + + Edit: Select events/parts outside locators + Redigera: Välj händelser/parter utanför sektion + + + + Edit: Select nearest part/event to the left + Redigera: Välj närmsta part/händelse till vänster + + + + Edit: Add nearest part/event to the left to selection + Redigera: Lägg till närmsta part/händelse till vänster till val + + + + Edit: Add nearest part/event to the right to selection + Redigera: Lägg till närmsta part/händelse till höger till val + + + + Edit: Set locators to selection + Redigera: Sätt loopsektion till valda parter/händelser + + + + Edit: Increase pitch + Redigera: Höj pitch + + + + Edit: Decrease pitch + Redigera: Sänk pitch + + + + Edit: Set fixed length on midi events + Redigera: Sätt fix längd till valda midihändelser + + + + Quantize: Over Quantize + Redigera: Överkvantisera + + + + Quantize: Note On Quantize + Kvantisering: Not pÃ¥-kvantisering + + + + Quantize: Note On/Off Quantize + Kvantisering: Not pÃ¥/av-kvantisering + + + + Quantize: Iterative Quantize + Kvantisering: Iterativ kvantisering + + + + Quantize: Configure quant + Kvantisering: Konfigurera kvantisering + + + + Quantize: Modify Gate Time + Kvantisering: Modifiera gate-tid + + + + Quantize: Modify Velocity + Kvantisering: Modifiera velocity + + + + Edit: Crescendo + Redigera: Crescendo + + + + Edit: Thin Out + Redigera: Tunna ut + + + + Edit: Erase Event + Redigera: Ta bort händelse + + + + Edit: Note Shift + Redigera: Shifta Not + + + + Edit: Move Clock + Redigera: Flytta Klocka + + + + Edit: Copy Measure + Redigera: Kopiera Takt + + + + Edit: Erase Measure + Redigera: Ta bort Takt + + + + Edit: Delete Measure + Redigera: Ta bort Takt + + + + Edit: Create Measure + Redigera: Lägg till Takt + + + + Edit: Change event color + Redigera: Ändra färg pÃ¥ händelse + + + + Tool: Pointer + Verktyg: Pekare + + + + Tool: Pencil + Verktyg: Penna + + + + Tool: Eraser + Verktyg: Radergummi + + + + Tool: Line Draw + Verktyg: Rita linje + + + + Tool: Scissor + Verktyg: Delare + + + + Tool: Glue + Verktyg: Lim + + + + Tool: Mute + Verktyg: Tysta + + + + Transport: Increase current position + Transport: Öka nuvarande position + + + + Transport: Decrease current position + Transport: Minska nuvarande position + + + + Quantize: Set quantize to 1/1 note + Kvantisering: Sätt kvantisering till 1/1-not + + + + Quantize: Set quantize to 1/2 note + Kvantisering: Sätt kvantisering till 1/2-not + + + + Quantize: Set quantize to 1/4 note + Kvantisering: Sätt kvantisering till 1/4-not + + + + Quantize: Set quantize to 1/8 note + Kvantisering: Sätt kvantisering till 1/8-not + + + + Quantize: Set quantize to 1/16 note + Kvantisering: Sätt kvantisering till 1/16-not + + + + Quantize: Set quantize to 1/32 note + Kvantisering: Sätt kvantisering till 1/32-not + + + + Quantize: Set quantize to 1/64 note + Kvantisering: Sätt kvantisering till 1/64-not + + + + Quantize: Toggle triol quantization + Kvantisering: Växla triol-kvantisering + + + + Quantize: Toggle punctuation quantization + Kvantisering: Växla punktuerad kvantisering + + + + Quantize: Toggle punctuation quantization (2) + Kvantisering: Växla punktuerad kvantisering (2) + + + + Insert Tempo + Mata in Tempo + + + + Insert Signature + Mata in tempo-signatur + + + + Change Event Position + Ändra position för händelse + + + + Edit Event Value + Redigera värde för händelse + + + + MuseApplication + + + Transport: Goto Start + + + + + Goto Start + + + + + rewind to start position + spola tillbaka till startposition + + + + Transport: Toggle Loop section + Transport: Loopa sektion av/pÃ¥ + + + + Loop + + + + + loop between left mark and right mark + loopa mellan vänster och höger markering + + + + Transport: Start playback from current location + Transport: Starta uppspelning frÃ¥n nuvarande position + + + + Play + Spela + + + + start sequencer play + starta sequenceruppspelning + + + + Transport: Play, Stop, Rewind + Transport: Spela, stoppa, spola tillbaka + + + + Transport: Stop Playback + Transport: Stoppa uppspelning + + + + Stop + Stopp + + + + stop sequencer + stoppa sequencer + + + + Transport: Goto left marker + Transport: GÃ¥ till vänster markering + + + + Transport: Goto right marker + Transport: GÃ¥ till höger markering + + + + Transport: Toggle metronome + Transport: Metronom av/pÃ¥ + + + + Transport: Toggle Record + Transport: Inspelning av/pÃ¥ + + + + Record + + + + + to record press record and then play + för att spela in, tryck pÃ¥ record och sen play + + + + Transport: Punch In + + + + + Punchin + + + + + record starts at left mark + inspelning börjar vid vänster markering + + + + Transport: Punch Out + + + + + Punchout + + + + + record stops at right mark + inspelning slutar vid höger markering + + + + Transport: Rewind + + + + + rewind + flytta tillbaka + + + + rewind current position + flytta markörposition bakÃ¥t + + + + Transport: Forward + + + + + forward + + + + + move current position + flytta markörposition + + + + Panic + Panik + + + + send note off to all midi channels + skicka note off till alla midi kanaler + + + + Edit: Undo + Redigera: Ã…ngra + + + + undo + Ã¥ngra + + + + undo last change to song + Ã¥ngra sista ändring i sÃ¥ng + + + + Edit: Redo + Redigera: Gör om + + + + redo + gör om + + + + redo last undo + gör om sista Ã¥ngring + + + + Edit: Cut + Redigera: Klipp ut + + + + Cut + Klipp ut + + + + Edit: Copy + Redigera: Kopiera + + + + Copy + Kopiera + + + + Edit: Paste, + Redigera: Klistra in + + + + Paste + Klistra in + + + + Edit: Delete + Redigera: Ta bort + + + + Delete + Ta bort + + + + Open + Öppna + + + + open project + + + + + Click this button to select a new project +You can also select the <b>Open command</b> from the Project menu. + + + + + Save + Spara + + + + save project + + + + + Click this button to save the project you are editing. +You can also select the Save command from the Project menu. + + + + + File: Save as + Arkiv: Spara som + + + + save project as... + + + + + Click this button to save a new copy of the project. + + + + + + File: Save as Template + + + + + save project as template + + + + + Click this button to save the project you are editing +for later use as a template. + + + + + File: Open recent file + Arkiv: Öppna föregÃ¥ende fil + + + + File: Import midi file + Arkiv: Importera midifil + + + + File: Export midi file + Arkiv: Exportera midifil + + + + File: Import audio file + Arkiv: Importera ljudfil + + + + File: Quit MusE + Arkiv: Avsluta + + + + Quit MusE + + + + + Edit: Select parts on track + Arkiv: Välj alla parter i spÃ¥r + + + + All &Parts on Track + Alla &Parter i spÃ¥r + + + + Open Pianoroll + + + + + Pianoroll + Pianorulle + + + + Start Pianoroll Editor + + + + + Open MidiTracker + + + + + MidiTracker + + + + + Start Midi Tracker + + + + + Open drumeditor + Öppna trumeditor + + + + Drum Editor + + + + + Start Drum Editor + + + + + Open wave editor + + + + + Wave Editor + + + + + Open listeditor + Öppna listeditor + + + + Properties + Egenskaper + + + + open Properties Editor + + + + + Open mastertrack editor + + + + + Mastertrack (Tempo) Editor + + + + + Start Mastertrack (Tempo) Editor + + + + + Add midi track + Lägg till midispÃ¥r + + + + Add drum track + Lägg till trumspÃ¥r + + + + Add wave track + Lägg till ljudspÃ¥r + + + + Add audio output + Lägg till ljudutgÃ¥ng + + + + Add audio group + Lägg till ljudgrupp + + + + Add audio input + Lägg till ljudingÃ¥ng + + + + Structure: Global cut + Struktur: Globalt klipp + + + + Structure: Global insert + Struktur: Global insättning + + + + Structure: Global split + Struktur: Global delning + + + + Structure: Copy range + Struktur: Kopiera omrÃ¥de + + + + Structure: Cut events + Struktur: Klipp ut händelse + + + + View: Open mixer 1 window + + + + + Mixer1 + + + + + Show Mixer 1 + + + + + View: Open mixer 2 window + + + + + Mixer2 + + + + + Show Mixer 2 + + + + + View: Toggle transport window + Vy: Transportfönster av/pÃ¥ + + + + Transport + + + + + Show Transport Window + + + + + View: Toggle bigtime window + Vy: Bigtimefönster av/pÃ¥ + + + + BigTime + + + + + Show BigTime Window + + + + + View: Open marker window + Vy: Öppna markörfönster + + + + Marker + Markör + + + + Show Marker List + + + + + Settings: Follow song by page + Inställningar: Följ sÃ¥ng efter sida + + + + Settings: Follow song off + Inställningar: Följ sÃ¥ng av + + + + Settings: Follow song continuous + Inställningar: Följ sÃ¥ng kontinuerligt + + + + Settings: Configure shortcuts + Inställningar: Konfigurera tangentbordsgenvängar + + + + Settings: Configure metronome + Inställningar: Konfigurera metronom + + + + Settings: Midi sync configuration + Inställningar: Midi synk konfigurationg + + + + Settings: Midi file export configuration + Inställningar: Midi fil export-konfiguration + + + + Settings: Midi ports / Soft Synth + Inställningar: Midiportar / Mjukvarusynthar + + + + Settings: Audio subsystem configuration + Inställningar: Konfiguration av ljud-undersystem + + + + Midi: Edit midi instruments + Midi: Editera midi-instrument + + + + Midi: Midi remote control + Midi: Midi fjärrkontroll + + + + Midi: Reset midi + Midi: Resetta midi + + + + Midi: Init midi + Midi: Initiera midi + + + + Midi: Midi local off + Midi: Midi lokal av + + + + Audio: Bounce audio to track + Audio: Bounce till spÃ¥r + + + + Audio: Bounce audio to file + Audio: Bounce till fil + + + + Audio: Restart audio + Audio: Starta om audio + + + + Help: Open Manual + Hjälp: Öppna manual + + + + Help: Toggle whatsthis mode + Hjälp: What's this-läge av/pÃ¥ + + + + Edit: Edit selected part + Redigera: Editera vald part + + + + Edit: Select nearest part on track above + Redigera: Välj närmsta part pÃ¥ ovanstÃ¥ende spÃ¥r + + + + Edit: Add nearest part on track above + Redigera: Lägg till närmsta part pÃ¥ ovanstÃ¥ende spÃ¥r till val + + + + Edit: Select nearest part on track below + Redigera: Välj närmsta part pÃ¥ underliggande spÃ¥r + + + + Edit: Add nearest part on track below + Redigera: Lägg till närmsta part pÃ¥ underliggande spÃ¥r till val + + + + Midi: Transpose + Midi: Transponering + + + + Transpose + Transponera + + + + Edit: Select all + Redigera: Välj alla + + + + Select All + Välj Allt + + + + Edit: Select none + Redigera: Välj ingen + + + + Deselect All + + + + + Edit: Invert selection + Redigera: Invertera val + + + + Invert Selection + + + + + Edit: Select events/parts inside locators + Redigera: Välj händelser/parter inom sektion + + + + Select Inside Loop + + + + + Edit: Select events/parts outside locators + Redigera: Välj händelser/parter utanför sektion + + + + Select Outside Loop + + + + + Edit: Select nearest part/event to the left + Redigera: Välj närmsta part/händelse till vänster + + + + Edit: Add nearest part/event to the left to selection + Redigera: Lägg till närmsta part/händelse till vänster till val + + + + Edit: Add nearest part/event to the right to selection + Redigera: Lägg till närmsta part/händelse till höger till val + + + + Edit: Set locators to selection + Redigera: Sätt loopsektion till valda parter/händelser + + + + Edit: Increase pitch + Redigera: Höj pitch + + + + Edit: Decrease pitch + Redigera: Sänk pitch + + + + Edit: Set fixed length on midi events + Redigera: Sätt fix längd till valda midihändelser + + + + Set fixed length + + + + + Quantize: Over Quantize + Redigera: Överkvantisera + + + + Over Quantize + Över Kvantisera + + + + Quantize: Note On Quantize + Kvantisering: Not pÃ¥-kvantisering + + + + Note On Quantize + Note On-kvantisera + + + + Quantize: Note On/Off Quantize + Kvantisering: Not pÃ¥/av-kvantisering + + + + Note On/Off Quantize + Note On/Off Kvantisera + + + + Quantize: Iterative Quantize + Kvantisering: Iterativ kvantisering + + + + Iterative Quantize + Iterativ kvantisering + + + + Quantize: Configure quant + Kvantisering: Konfigurera kvantisering + + + + Quantize: Modify Gate Time + Kvantisering: Modifiera gate-tid + + + + Modify Gate Time + Modifiera Gate Time + + + + Quantize: Modify Velocity + Kvantisering: Modifiera velocity + + + + Modify Velocity + Modifiera Velocity + + + + Edit: Crescendo + Redigera: Crescendo + + + + Crescendo + + + + + Edit: Thin Out + Redigera: Tunna ut + + + + Thin Out + Tunna ut + + + + Edit: Erase Event + Redigera: Ta bort händelse + + + + Erase Event + Ta bort Händelse + + + + Edit: Note Shift + Redigera: Shifta Not + + + + Note Shift + Shifta Not + + + + Edit: Move Clock + Redigera: Flytta Klocka + + + + Move Clock + Flytta Klocka + + + + Edit: Copy Measure + Redigera: Kopiera Takt + + + + Copy Measure + Kopiera Takt + + + + Edit: Erase Measure + Redigera: Ta bort Takt + + + + Erase Measure + Radera Takt + + + + Edit: Delete Measure + Redigera: Ta bort Takt + + + + Delete Measure + Ta bort Takt + + + + Edit: Create Measure + Redigera: Lägg till Takt + + + + Create Measure + Skapa Takt + + + + Edit: Change event color + Redigera: Ändra färg pÃ¥ händelse + + + + Tool: Pointer + Verktyg: Pekare + + + + Pointer + + + + + select Pointer Tool: +with the pointer tool you can: + select parts + move parts + copy parts + välj pek-verktyg: +med pekverktyget kan du: + välja parter + flytta parter + kopiera parter + + + + Tool: Pencil + Verktyg: Penna + + + + Pencil + + + + + select Pencil Tool: +with the pencil tool you can: + create new parts + modify length of parts + välj pennverktyg: +med pennverktyget kan du: + skapa parter + ändra längden pÃ¥ parter + + + + + Tool: Eraser + Verktyg: Radergummi + + + + Eraser + + + + + select Delete Tool: +with the delete tool you can delete parts + välj Suddverktyg: +med suddverktyget kan du ta bort parter + + + + Tool: Scissor + Verktyg: Delare + + + + Scissor + + + + + select Cut Tool: +with the cut tool you can split a part + välj Delningsverktyg: +med delningsverktyget kan du dela pÃ¥ parter + + + + Tool: Glue + Verktyg: Lim + + + + Glue + + + + + select Glue Tool: +with the glue tool you can glue two parts + välj Limverktyg: +med limverktyget kan du limma ihop tvÃ¥ parter + + + + Declone + + + + + Tool: Quantize + + + + + Quantize + Kvantisera + + + + select Quantize Tool: +insert display quantize event + välj Kvantiseringsverktyg: +sätt in kvantiseringshändelser + + + + Tool: Line Draw + Verktyg: Rita linje + + + + Draw + + + + + select Drawing Tool + välj Ritverktyg + + + + + Tool: Mute Parts + + + + + Mute + + + + + select Muting Tool: +click on part to mute/unmute + välj Tystningsverktyg: +klicka pÃ¥ en part för att Tysta/Avtysta + + + + Transport: Increase current position + Transport: Öka nuvarande position + + + + Transport: Decrease current position + Transport: Minska nuvarande position + + + + Quantize: Set quantize to 1/1 note + Kvantisering: Sätt kvantisering till 1/1-not + + + + Quantize: Set quantize to 1/2 note + Kvantisering: Sätt kvantisering till 1/2-not + + + + Quantize: Set quantize to 1/4 note + Kvantisering: Sätt kvantisering till 1/4-not + + + + Quantize: Set quantize to 1/8 note + Kvantisering: Sätt kvantisering till 1/8-not + + + + Quantize: Set quantize to 1/16 note + Kvantisering: Sätt kvantisering till 1/16-not + + + + Quantize: Set quantize to 1/32 note + Kvantisering: Sätt kvantisering till 1/32-not + + + + Quantize: Set quantize to 1/64 note + Kvantisering: Sätt kvantisering till 1/64-not + + + + Quantize: Toggle triol quantization + Kvantisering: Växla triol-kvantisering + + + + Quantize: Toggle punctuation quantization + Kvantisering: Växla punktuerad kvantisering + + + + Quantize: Toggle punctuation quantization (2) + Kvantisering: Växla punktuerad kvantisering (2) + + + + Insert + Sätt in + + + + Insert Tempo + Mata in Tempo + + + + Insert Signature + Mata in tempo-signatur + + + + Change Event Position + Ändra position för händelse + + + + Edit Event Value + Redigera värde för händelse + + + + NoteInfo + + + Note Info + Notinfo + + + + Pitch + Tonhöjd + + + + Start + + + + + Len + + + + + Velo On + + + + + Velo Off + + + + + OrganGuiBase + + + Presets + Preset + + + + load preset list + öppna presetlista + + + + save preset list + spara presetlista + + + + Velocity + Hastighet + + + + OutportCombo + + + Midi Output Port + + + + + PageSettings + + + Paper Size + Pappersstorlek + + + + user + användare + + + + Margins + Marginal + + + + left Margin + vänster Marginal + + + + top Margin + övre Marginal + + + + right Margin + höger Marginal + + + + bottom Margin + undre Marginal + + + + Header + Överskrift + + + + Title + Titel + + + + Author + Författare + + + + Fonts + Typsnitt + + + + Page No. + Sidnummer. + + + + Measure No + Taktnummer + + + + Track Name + SpÃ¥rnamn + + + + Lyrics + Text + + + + Layout + Utseende + + + + Bars across the Page + Takter över sidan + + + + Scale + Skala + + + + Flags + Flaggor + + + + show page no. + visa sida nr. + + + + show measure no. + visa takt nr. + + + + show track name + visa spÃ¥rnamn + + + + Apply + Verkställ + + + + Cancel + Avbryt + + + + PartCanvas + + + Cannot copy/move/clone to different Track-Type + Kan inte kopiera/flytta/klona till annan SpÃ¥rtyp + + + + C&ut + Klipp &ut + + + + &Copy + &Kopiera + + + + rename + byt namn + + + + color + färg + + + + delete + ta bort + + + + split + dela + + + + glue + lim + + + + de-clone + häv kloning + + + + pianoroll + pianorulle + + + + score + partitur + + + + list + lista + + + + drums + trummor + + + + wave edit + wave redigering + + + + Cannot paste: multiple tracks selected + Kan inte klistra in: flera spÃ¥r valda + + + + Cannot paste: no track selected + Kan inte klistra in: inget spÃ¥r valt + + + + Cannot paste midi parts to wave track + Kan inte klistra in midipart till wavespÃ¥r + + + + Cannot paste wave parts to midi track + Kan inte klistra in wavepart pÃ¥ midispÃ¥r + + + + Cannot paste: wrong data type + Kan inte klistra in: fel datatyp + + + + AutoFill... + + + + + miditracker + + + + + MusE: Get auto fill loop len + + + + + Measures: + + + + + MusE: Change Part Name + + + + + PartName: + + + + + Rename + + + + + Color + + + + + PianoRoll + + + &Edit + &Redigera + + + + Cut + Klipp ut + + + + Copy + Kopiera + + + + Paste + Klistra in + + + + Delete Events + Ta bort Händelser + + + + Select All + Välj Allt + + + + Select None + Välj Ingen + + + + Invert + Invertera + + + + Inside Loop + I loop + + + + Outside Loop + Utanför loop + + + + &Select + &Välj + + + + blue + blÃ¥ + + + + pitch colors + pitchfärger + + + + velocity colors + velocityfärger + + + + &Config + &Inställningar + + + + event color + händelsefärg + + + + &Functions + &Funktioner + + + + Over Quantize + Över Kvantisera + + + + Note On Quantize + Note On-kvantisera + + + + Note On/Off Quantize + Note On/Off Kvantisera + + + + Iterative Quantize + Iterativ kvantisering + + + + Config Quant... + Konfigurera Kvant... + + + + Modify Gate Time + Modifiera Gate Time + + + + Modify Velocity + Modifiera Velocity + + + + Transpose + Transponera + + + + Thin Out + Tunna ut + + + + Erase Event + Ta bort Händelse + + + + Note Shift + Shifta Not + + + + Move Clock + Flytta Klocka + + + + Copy Measure + Kopiera Takt + + + + Erase Measure + Radera Takt + + + + Delete Measure + Ta bort Takt + + + + Create Measure + Skapa Takt + + + + Pianoroll Tools + Verktyg Pianorulle + + + + Step Record + Stegvis inspelning + + + + Play Events + Spela Händelser + + + + Add Controller View + Lägg till Controller Vy + + + + Panic + Panik + + + + Transport + + + + + PluginDialog + + + MusE: select plugin + MusE: välj plugin + + + + Label + Etikett + + + + Name + Namn + + + + Maker + Upphovsman + + + + Ok + Ok + + + + Cancel + Avbryt + + + + Select which types of plugins should be visible in the list,<br>beware that 'all' includes plugins that probably are not usable by MusE. + Välj vilka typer av plugins som ska vara synliga i lista,<br>Observera att 'alla' inkluderar plugins som möljigtvis inte är användbara i MusE. + + + + Stereo and Mono + Stereo och Mono + + + + All + Alla + + + + Lib + + + + + AI + + + + + AO + + + + + CI + + + + + CO + + + + + IP + + + + + id + + + + + Copyright + + + + + Mono and Stereo + + + + + Stereo + + + + + Mono + + + + + Show All + + + + + Select which types of plugins should be visible in the list.<br>Note that using mono plugins on stereo tracks is not a problem, two will be used in parallell.<br>Also beware that the 'all' alternative includes plugins that probably not are usable by MusE. + + + + + Search in 'Label' and 'Name': + + + + + PluginGui + + + File Buttons + Arkiv Knappar + + + + Load Preset + Öppna Preset + + + + Save Preset + Spara Preset + + + + bypass plugin + koppla ur plugin + + + + MusE: load preset + MusE: öppna preset + + + + MusE: save preset + MusE: spara preset + + + + PreferencesDialog + + + MusE: load image + MusE: ladda bild + + + + PrinterConfig + + + MusE: Config Printer + MusE: Konfigurera Skrivare + + + + Print to file + Skriv till fil + + + + Print Command + Utskriftskommando + + + + Preview Command + Förhandsgranskningskommando + + + + Cancel + Avbryt + + + + ProjectDialog + + + MusE: create new folder + + + + + new folder: + + + + + QHeader + + + Port Number + Portnummer + + + + enable gui for device + visa gui för enhet + + + + enables recording from the device + slÃ¥ pÃ¥ inspelning frÃ¥n enhet + + + + Name of the midi device associated with this port number + Namn pÃ¥ midienhet associerad med detta portnummer + + + + Instrument connected to port + Instrument kopplat till denna port + + + + State: result of opening the device + Status: resultat av öppning av enhet + + + + mute instrument + tysta instrument + + + + sound name + ljudnamn + + + + quantisation +currently not used + kvantisering +används inte för tillfället + + + + this input note triggers the sound + denna in-not triggar ljudet + + + + note length + notlängd + + + + this note is send for the sound + denna not skickas för ljudet + + + + output channel +currently not used + utgÃ¥ngskanal +används inte för tillfället + + + + output port +currently not used + utgÃ¥ngsport +används inte för tillfället + + + + velocity level 1 + velocity nivÃ¥ 1 + + + + velocity level 2 + velocity nivÃ¥ 2 + + + + velocity level 3 + velocity nivÃ¥ 3 + + + + velocity level 4 + velocity nivÃ¥ 4 + + + + quantisation + kvantisering + + + + output channel + utgÃ¥ngskanal + + + + output port + utgÃ¥ngsport + + + + Enable Recording + SlÃ¥ pÃ¥ Inspelning + + + + Track Activity + SpÃ¥raktivitet + + + + Mute Indicator + Tyst-Indikator + + + + Solo Indicator + Solo-Indikator + + + + Track Type + SpÃ¥rtyp + + + + Track Name + SpÃ¥rnamn + + + + Output Channel Number + Kanalnummer för utgÃ¥ng + + + + Output Port + UtgÃ¥ngsport + + + + Time Lock + TidlÃ¥s + + + + Solo/Pre Fader Listening + Solo/För-reglage lyssning + + + + enables reading from device + möjliggör läsning frÃ¥n enhet + + + + enables writing to device + möjliggör skrivning till enhet + + + + QMenu + + + Add Midi Generator... + + + + + Add Soft Synth... + + + + + QPopupMenu + + + Add Soft Synth + Lägg till Mjukvarusynth + + + + QWidget + + + Velocity + Hastighet + + + + Cannot convert sysex string + Kan inte konvertera sysex-sträng + + + + Hex String too long (2048 bytes limit) + Hex-sträng för lÃ¥ng (2048 bytes maxgräns) + + + + generic midi + generell midi + + + + new + ny + + + + create peakfile for + skapa "peak"-fil + + + + Cannot transform non empty track + Kan inte transformera ej tomt spÃ¥r + + + + MusE: get file name + MusE: hämta filnamn + + + + the directory + + katalogen + + + + +does not exist +create? + +finns inte +skapa? + + + + &Create + &Skapa + + + + Cancel + Avbryt + + + + MusE: create directory + MusE: skapa katalog + + + + creating dir failed + misslyckades med att skapa katalog + + + + File + + Filen + + + + + +exists + +existerar + + + + MusE: write + MusE: skriv + + + + Overwrite + Ersätt + + + + Quit + Avsluta + + + + Open File + + Öppna fil + + + + +failed: + +misslyckades: + + + + MusE: Open File + MusE: Öppna fil + + + + None + Ingen + + + + Master + Master + + + + Group %c + Grupp %c + + + + Unknown + Okänd + + + + Group + Grupp + + + + File + Filen + + + + exists + existerar + + + + copy + %1 +to + %2 + + + + + +converting sample rate +from %1 to %2 + + + + + Abort + + + + + MusE: export midi file: + + + + + QuantConfig + + + MusE: Config Quantize + MusE: Konfigurera Kvantisering + + + + Config Quantize + Konfigurera Kvantisering + + + + Strength + Styrka + + + + Don´t Quantize + Kvantisera Inte + + + + Quant Len + Kvant Längd + + + + QuantDialog + + + Display Quantize + Visa Kvantisering + + + + Note Quantize + Not Kvantisering + + + + Rest Quantize + Rest Kvantisering + + + + Cancel + Avbryt + + + + RecordButton + + + record + + + + + RhythmBase + + + MusE: Random Rhythm Generator + MusE: Slumprytmgenerator + + + + Instrument Properties + Instrumentinställningar + + + + counts/bar + slag/takt + + + + steps/count + steg/slag + + + + # bars + # takter + + + + randomize + slumpa + + + + Group 1 + Grupp 1 + + + + Group 2 + Grupp 2 + + + + Group 3 + Grupp 3 + + + + Group 4 + Grupp 4 + + + + Group 5 + Grupp 5 + + + + listen + lyssna + + + + Instrument + Instrument + + + + Group + Grupp + + + + &New + &Ny + + + + create new entry + skapa nytt inlägg + + + + pressing the New button you create a new entry +in the MusE list of defined controllers + skapa nytt inlägg genom att trycka pÃ¥ Ny knappen +i MusEs lista över definierade controllers + + + + &Delete + &Ta bort + + + + delete selected entry + ta bort valt inlägg + + + + Up + Upp + + + + Down + Ner + + + + steps/count + steg/slag + + + + list of defined controllers + lista med definierade controllers + + + + This is the MusE list of defined controllers. + Detta är MusEs lista med definierade controllers. + + + + &File + A&rkiv + + + + &Edit + &Redigera + + + + &Help + &Hjälp + + + + Tools + Verktyg + + + + New + Ny + + + + Open + Öppna + + + + &Open... + &Öppna... + + + + Save + Spara + + + + &Save + &Spara + + + + Save As + Spara som + + + + Save &As... + S&para som... + + + + Print + Skriv ut + + + + &Print... + Skriv &ut... + + + + Exit + Stäng + + + + E&xit + S&täng + + + + Undo + Ã…ngra + + + + &Undo + &Ã…ngra + + + + Redo + Gör om + + + + &Redo + Gör &om + + + + Cut + Klipp ut + + + + &Cut + Klipp &ut + + + + Copy + Kopiera + + + + C&opy + &Öppna + + + + Paste + Klistra in + + + + &Paste + K&listra in + + + + Find + Sök + + + + &Find... + &Sök... + + + + Contents + InnehÃ¥ll + + + + &Contents... + &InnehÃ¥ll... + + + + &Index... + &Index... + + + + About + Om + + + + &About... + &Om... + + + + <b>Notice!</b><br> +Random Rhythm Generator is not enabled yet! + <b>Observera!</b><br> +Slumprytms-generator fungerar inte än! + + + + RhythmGenerator + + + Instrument Settings: + Instrumentinställningar: + + + + Instrument + Instrument + + + + add + lägg till + + + + delete + ta bort + + + + count/bar + slag/takt + + + + # bars + # takt + + + + Group Settings: + Gruppinställningar: + + + + Group + Grupp + + + + Group 1 + Grupp 1 + + + + Group 2 + Grupp 2 + + + + Group 3 + Grupp 3 + + + + Group 4 + Grupp 4 + + + + Group 5 + Grupp 5 + + + + listen + lyssna + + + + Randomize + Slumpa + + + + Rhythm Style: + Rytmstil: + + + + Clear + Rensa + + + + Open... + Öppna... + + + + Save + Spara + + + + Save as... + Spara som... + + + + Generate + Generera + + + + Close + Stäng + + + + RouteDialogBase + + + Add Route + Lägg till rutt + + + + Source: + Källa: + + + + Destination: + Destination: + + + + Connect + Koppla + + + + connect source to destination + koppla källa till destination + + + + Current Routes + Nuvarande rutter + + + + Source + Källa + + + + Remove + Ta bort + + + + remove selected route + ta bort vald rutt + + + + SS_PluginChooserBase + + + Name + Namn + + + + Label + Etikett + + + + &Cancel + &Avbryt + + + + SS_PluginFront + + + Clear and unload effect + + + + + Load effect + + + + + Toggle display of effect parameters + + + + + Turn effect on/off + + + + + Score + + + Dynamics + Dynamik + + + + &Config + &Inställningar + + + + Page Settings + Sidinställningar + + + + Staff Settings + Notsystem inställningar + + + + Background Pixmap + Bakgrundsbild + + + + Palettes + Palett + + + + Print + Skriv ut + + + + Preview Print + Förhandsgranska utskrift + + + + Lyrics + Text + + + + enter lyrics + skriv in text + + + + Text + Text + + + + enter text + skriv in Text + + + + enter chord symbol + skriv in ackordsymbol + + + + Score + Partitur + + + + to previous voice + till föregÃ¥ende röst + + + + to next voice + till nästa röst + + + + flip stem direction + ändra stämriktning + + + + move marked notes to previous voice or to upper stave in a split system + flytta de markerade noterna till föregÃ¥ende röst eller till övre notsystem i ett delat notssystem + + + + move marked notes to next voice or to lower stave in a split system + flytta de markerade noterna till nästa röst eller undre notsystem i ett delat notsystem + + + + flip stem direction of selected notes + byt stämriktning för valda noter + + + + StaffSettings + Notsysteminställningar + + + + MusE: config wallpaper + MusE: konfigurera bakgrundsbild + + + + ScoreConfig + + + Staff Settings: + Partiturinställningar: + + + + Track List + SpÃ¥rlista + + + + Key/Clef + Stämma/Klav + + + + Upper Staff + Övre notplan + + + + Lower Staff + Nedre notplan + + + + Raster + Rutnät + + + + Note Quantize + Notkvantisera + + + + Rest Quantize + Restkvantisera + + + + Mode + Läge + + + + Split System + Delat system + + + + Splitpoint + Delningspunkt + + + + Apply + Verkställ + + + + Cancel + Avbryt + + + + ScrollScale + + + next page + nästa sida + + + + previous page + förra sidan + + + + current page number + nuvarande sidnummer + + + + ShortcutCaptureDialog + + + Ok + Ok + + + + Cancel + Avbryt + + + + Shortcut conflicts with + + + + + Undefined + + + + + ShortcutCaptureDialogBase + + + Cancel + Avbryt + + + + OK + OK + + + + ShortcutConfig + + + Transport: Start playback from current location + Transport: Starta uppspelning frÃ¥n nuvarande position + + + + Transport: Toggle metronome + Transport: Metronom av/pÃ¥ + + + + Transport: Stop Playback + Transport: Stoppa uppspelning + + + + Transport: Play, Stop, Rewind + Transport: Spela, stoppa, spola tillbaka + + + + Transport: Goto left marker + Transport: GÃ¥ till vänster markering + + + + Transport: Goto right marker + Transport: GÃ¥ till höger markering + + + + Transport: Toggle Loop section + Transport: Loopa sektion av/pÃ¥ + + + + Transport: Toggle Record + Transport: Inspelning av/pÃ¥ + + + + Edit: Copy + Redigera: Kopiera + + + + Edit: Undo + Redigera: Ã…ngra + + + + Edit: Redo + Redigera: Gör om + + + + Edit: Cut + Redigera: Klipp ut + + + + Edit: Paste, + Redigera: Klistra in + + + + Edit: Delete + Redigera: Ta bort + + + + File: New project + Arkiv: Nytt projekt + + + + File: Open from disk + Arkiv: Öppna + + + + File: Save project + Arkiv: Spara + + + + File: Open recent file + Arkiv: Öppna föregÃ¥ende fil + + + + File: Save as + Arkiv: Spara som + + + + File: Load template + Arkiv: Ladda mall + + + + File: Import midi file + Arkiv: Importera midifil + + + + File: Export midi file + Arkiv: Exportera midifil + + + + File: Import audio file + Arkiv: Importera ljudfil + + + + File: Quit MusE + Arkiv: Avsluta + + + + Edit: Select parts on track + Arkiv: Välj alla parter i spÃ¥r + + + + Open pianoroll + Öppna pianorulle + + + + Open drumeditor + Öppna trumeditor + + + + Open listeditor + Öppna listeditor + + + + Open graphical mastertrack editor + Öppna masterspÃ¥r-editor (grafisk) + + + + Open list mastertrack editor + Öppna masterspÃ¥r-editor (lista) + + + + Open midi transformer + Öppna miditransformer + + + + Add midi track + Lägg till midispÃ¥r + + + + Add drum track + Lägg till trumspÃ¥r + + + + Add wave track + Lägg till ljudspÃ¥r + + + + Add audio output + Lägg till ljudutgÃ¥ng + + + + Add audio group + Lägg till ljudgrupp + + + + Add audio input + Lägg till ljudingÃ¥ng + + + + Add audio aux + Lägg till aux + + + + Structure: Global cut + Struktur: Globalt klipp + + + + Structure: Global insert + Struktur: Global insättning + + + + Structure: Global split + Struktur: Global delning + + + + Structure: Copy range + Struktur: Kopiera omrÃ¥de + + + + Structure: Cut events + Struktur: Klipp ut händelse + + + + View: Open mixer window + Vy: Öppna mixerfönster + + + + View: Toggle transport window + Vy: Transportfönster av/pÃ¥ + + + + View: Toggle bigtime window + Vy: Bigtimefönster av/pÃ¥ + + + + View: Open marker window + Vy: Öppna markörfönster + + + + Settings: Follow song by page + Inställningar: Följ sÃ¥ng efter sida + + + + Settings: Follow song off + Inställningar: Följ sÃ¥ng av + + + + Settings: Follow song continuous + Inställningar: Följ sÃ¥ng kontinuerligt + + + + Settings: Global configuration + Inställningar: Globala inställningar + + + + Settings: Configure shortcuts + Inställningar: Konfigurera tangentbordsgenvängar + + + + Settings: Configure metronome + Inställningar: Konfigurera metronom + + + + Settings: Midi sync configuration + Inställningar: Midi synk konfigurationg + + + + Settings: Midi file export configuration + Inställningar: Midi fil export-konfiguration + + + + Settings: Appearance settings + Inställningar: Utseendeinställningar + + + + Settings: Midi ports / Soft Synth + Inställningar: Midiportar / Mjukvarusynthar + + + + Settings: Audio subsystem configuration + Inställningar: Konfiguration av ljud-undersystem + + + + Midi: Edit midi instruments + Midi: Editera midi-instrument + + + + Midi: Open midi input transform + Midi: Öppna midi inputtransformator + + + + Midi: Open midi input filter + Midi: Öppna midi indatafilter + + + + Midi: Midi input transpose + Midi: Midi indata transponering + + + + Midi: Midi remote control + Midi: Midi fjärrkontroll + + + + Midi: Random rhythm generator + Midi: Slumprymtmgenerator + + + + Midi: Reset midi + Midi: Resetta midi + + + + Midi: Init midi + Midi: Initiera midi + + + + Midi: Midi local off + Midi: Midi lokal av + + + + Audio: Bounce audio to track + Audio: Bounce till spÃ¥r + + + + Audio: Bounce audio to file + Audio: Bounce till fil + + + + Audio: Restart audio + Audio: Starta om audio + + + + Automation: Mixer automation + Audio: Mixerautomation + + + + Automation: Take mixer snapshot + Audio: Mixer ögonblicksbild + + + + Automation: Clear mixer automation + Audio: Rensa mixerautomation + + + + Help: Open Manual + Hjälp: Öppna manual + + + + Help: Toggle whatsthis mode + Hjälp: What's this-läge av/pÃ¥ + + + + Edit: Edit selected part + Redigera: Editera vald part + + + + Edit: Select nearest part on track above + Redigera: Välj närmsta part pÃ¥ ovanstÃ¥ende spÃ¥r + + + + Edit: Add nearest part on track above + Redigera: Lägg till närmsta part pÃ¥ ovanstÃ¥ende spÃ¥r till val + + + + Edit: Select nearest part on track below + Redigera: Välj närmsta part pÃ¥ underliggande spÃ¥r + + + + Edit: Add nearest part on track below + Redigera: Lägg till närmsta part pÃ¥ underliggande spÃ¥r till val + + + + Midi: Transpose + Midi: Transponering + + + + Edit: Select all + Redigera: Välj alla + + + + Edit: Select none + Redigera: Välj ingen + + + + Edit: Invert selection + Redigera: Invertera val + + + + Edit: Select events/parts inside locators + Redigera: Välj händelser/parter inom sektion + + + + Edit: Select events/parts outside locators + Redigera: Välj händelser/parter utanför sektion + + + + Edit: Select nearest part/event to the left + Redigera: Välj närmsta part/händelse till vänster + + + + Edit: Add nearest part/event to the left to selection + Redigera: Lägg till närmsta part/händelse till vänster till val + + + + Edit: Add nearest part/event to the right to selection + Redigera: Lägg till närmsta part/händelse till höger till val + + + + Edit: Set locators to selection + Redigera: Sätt loopsektion till valda parter/händelser + + + + Edit: Increase pitch + Redigera: Höj pitch + + + + Edit: Decrease pitch + Redigera: Sänk pitch + + + + Edit: Set fixed length on midi events + Redigera: Sätt fix längd till valda midihändelser + + + + Quantize: Over Quantize + Redigera: Överkvantisera + + + + Quantize: Note On Quantize + Kvantisering: Not pÃ¥-kvantisering + + + + Quantize: Note On/Off Quantize + Kvantisering: Not pÃ¥/av-kvantisering + + + + Quantize: Iterative Quantize + Kvantisering: Iterativ kvantisering + + + + Quantize: Configure quant + Kvantisering: Konfigurera kvantisering + + + + Quantize: Modify Gate Time + Kvantisering: Modifiera gate-tid + + + + Quantize: Modify Velocity + Kvantisering: Modifiera velocity + + + + Edit: Crescendo + Redigera: Crescendo + + + + Edit: Thin Out + Redigera: Tunna ut + + + + Edit: Erase Event + Redigera: Ta bort händelse + + + + Edit: Note Shift + Redigera: Shifta Not + + + + Edit: Move Clock + Redigera: Flytta Klocka + + + + Edit: Copy Measure + Redigera: Kopiera Takt + + + + Edit: Erase Measure + Redigera: Ta bort Takt + + + + Edit: Delete Measure + Redigera: Ta bort Takt + + + + Edit: Create Measure + Redigera: Lägg till Takt + + + + Edit: Change event color + Redigera: Ändra färg pÃ¥ händelse + + + + Tool: Pointer + Verktyg: Pekare + + + + Tool: Pencil + Verktyg: Penna + + + + Tool: Eraser + Verktyg: Radergummi + + + + Tool: Line Draw + Verktyg: Rita linje + + + + Tool: Scissor + Verktyg: Delare + + + + Tool: Glue + Verktyg: Lim + + + + Tool: Mute + Verktyg: Tysta + + + + Transport: Increase current position + Transport: Öka nuvarande position + + + + Transport: Decrease current position + Transport: Minska nuvarande position + + + + Quantize: Set quantize to 1/1 note + Kvantisering: Sätt kvantisering till 1/1-not + + + + Quantize: Set quantize to 1/2 note + Kvantisering: Sätt kvantisering till 1/2-not + + + + Quantize: Set quantize to 1/4 note + Kvantisering: Sätt kvantisering till 1/4-not + + + + Quantize: Set quantize to 1/8 note + Kvantisering: Sätt kvantisering till 1/8-not + + + + Quantize: Set quantize to 1/16 note + Kvantisering: Sätt kvantisering till 1/16-not + + + + Quantize: Set quantize to 1/32 note + Kvantisering: Sätt kvantisering till 1/32-not + + + + Quantize: Set quantize to 1/64 note + Kvantisering: Sätt kvantisering till 1/64-not + + + + Quantize: Toggle triol quantization + Kvantisering: Växla triol-kvantisering + + + + Quantize: Toggle punctuation quantization + Kvantisering: Växla punktuerad kvantisering + + + + Quantize: Toggle punctuation quantization (2) + Kvantisering: Växla punktuerad kvantisering (2) + + + + Edit: Insert at location + Redigera: Sätt in pÃ¥ nuvarande position + + + + Insert Note + Mata in Not + + + + Insert SysEx + Mata in SysEx + + + + Insert Ctrl + Mata in Ctrl + + + + Insert Meta + Mata in Meta + + + + Insert Channel Aftertouch + Mata in Aftertouch för kanal + + + + Insert Key Aftertouch + Mata in Key Aftertouch + + + + Edit: Increase event position + Redigera: Öka position för händelse + + + + Edit: Decrease event position + Redigera: Minska position för händelse + + + + Insert Tempo + Mata in Tempo + + + + Insert Signature + Mata in tempo-signatur + + + + Change Event Position + Ändra position för händelse + + + + Edit Event Value + Redigera värde för händelse + + + + Arranger + Arrangerare + + + + Pianoroll + Pianorulle + + + + Drumeditor + Trumeditor + + + + List Mastertrack + MasterspÃ¥r, lista + + + + All categories + Alla kategorier + + + + Global + + + + + List editor + + + + + Wave editor + + + + + ShortcutConfigBase + + + Alt+A + Alt+L + + + + SigScale + + + signature scale + signaturskala + + + + SimpleSynthGui + + + Load sample dialog + + + + + Song + + + Jack shutdown! + + + + + Jack has detected a performance problem which has lead to +MusE being disconnected. +This could happen due to a number of reasons: +- a performance issue with your particular setup. +- a bug in MusE (or possibly in another connected software). +- a random hiccup which might never occur again. +- jack was voluntary stopped by you or someone else +- jack crashed +If there is a persisting problem you are much welcome to discuss it +on the MusE mailinglist. +(there is information about joining the mailinglist on the MusE + homepage which is available through the help menu) + +To proceed check the status of Jack and try to restart it and then . +click on the Restart button. + + + + + SplitLayerGui + + + start pitch for split + + + + + enable learn mode for start pitch + + + + + end pitch for split + + + + + enable learn mode for end pitch + + + + + pitch offset for split + + + + + start velocity for split + + + + + end velocity for split + + + + + velocity offset for split + + + + + StkGuiBase + + + Voices + Röster + + + + Edit + Redigera + + + + SynthConfigBase + + + MusE: Soft Synth Configuration + MusE: Mjukvarusyntinställningar + + + + Soft Synthesizer + Mjukvarusynt + + + + File + Arkiv + + + + Instances + Instanser + + + + Name + Namn + + + + list of available software synthesizers + lista av tillgängliga mjukvarusyntar + + + + Add Instance + Lägg till instans + + + + Remove Instance + Ta bort instans + + + + TLSWidget + + + Remove Subtrack + + + + + Ctrl + + + + + Velocity + Hastighet + + + + Delete Controller + + + + + TLWidget + + + Delete Track + Ta bort spÃ¥r + + + + Copy Track + + + + + Show Gui + Visa Gui + + + + Add Subtrack + + + + + Midi Output Channel + + + + + TList + + + Show Gui + Visa Gui + + + + Add Midi Track + Lägg till MidispÃ¥r + + + + Add Drum Track + Lägg till TrumspÃ¥r + + + + Add Wave Track + Lägg till WavespÃ¥r + + + + Delete Track + Ta bort spÃ¥r + + + + Track Comment + SpÃ¥rkommentar + + + + Midi + Midi + + + + Drum + Trumma + + + + Wave + Wave + + + + This is your first wave track and the project +doesn't appear to be saved yet. + +It is recommended that you save a project file now! + +By doing that you are implicitly selecting a folder +where the audio files will end up. + Detta är ditt första ljudspÃ¥r och projektet verkar inte vara sparat ännu. + +Du rekommenderas att spara projektet nu! + +Genom att göra det sÃ¥ väljer du indirekt den katalog där +ljudfilerna skall hamna. + + + + Save dialog + Spara dialog + + + + Cancel + Avbryt + + + + TemplateDialog + + + MusE presets + + + + + User presets + + + + + TimeCanvas + + + Ctrl + + + + + Add Controller View + + + + + Toolbar1 + + + Cursor + Markör + + + + Snap + Fäst vid + + + + Quantize + Kvantisera + + + + To + Till + + + + All Events + Alla Händelser + + + + Looped Ev. + Loopade Händelser. + + + + Selected Ev. + Valda Händelser. + + + + Looped+Sel. + Loopade och Valda. + + + + Solo + + + + + TrackComment + + + MusE: Track Comment + MusE: SpÃ¥rkommentar + + + + Track Comment: + SpÃ¥rkommentar: + + + + TrackInfo + + + Track Type + SpÃ¥rtyp + + + + Track Name + SpÃ¥rnamn + + + + Transport + + + Replace + Ersätt + + + + Rec Mode + Recläge + + + + Left Mark + Vänster Markering + + + + Right Mark + Höger Markering + + + + rewind to start + flytta tillbaka till början + + + + rewind + flytta tillbaka + + + + forward + frammÃ¥t + + + + stop + stopp + + + + play + spela + + + + record + spela in + + + + quantize during record + kvantisera under inspelning + + + + metronom click on/off + metronomklick av/pÃ¥ + + + + Sync + Synk + + + + external sync on/off + externsynk. av/pÃ¥ + + + + Master + Master + + + + use master track + använder masterspÃ¥r + + + + TransposeDialogBase + + + MusE: Midi Transpose + MusE: Miditransponering + + + + Value + Värde + + + + halftones + halvtoner + + + + Time + Tid + + + + all + alla + + + + between markers + mellan markeringar + + + + Parts + Parter + + + + all in selected tracks + alla i valda spÃ¥r + + + + Cancel + Avbryt + + + + OK + OK + + + + VAMGui + + + MusE: Load VAM Presets + + + + + MusE: Save VAM Presets + + + + + VAMGuiBase + + + Virtual Analogue for MusE + Virtual Analogue för MusE + + + + Waveform + VÃ¥gform + + + + Sine + Sinus + + + + Pulse + Puls + + + + Saw + SÃ¥gtand + + + + Triangle + Triangel + + + + Filter + Filter + + + + Invert + Invertera + + + + Presets + Preset + + + + load preset list + öppna presetlista + + + + save preset list + spara presetlista + + + + save preset list to a new file + spara presetlista till ny fil + + + + delete preset + ta bort preset + + + + Pitch + Tonhöjd + + + + On + PÃ¥ + + + + Velocity + + + MusE: Modify Velocity + MusE: Modifiera Velocity + + + + VelocityBase + + + MusE: Modify Velocity + MusE: Modifiera Velocity + + + + Range + OmrÃ¥de + + + + All Events + Alla Händelser + + + + Selected Events + Valda Händelser + + + + Looped Events + Loopade Händelser + + + + Selected & Looped + Valda & Loopade + + + + Values + Värden + + + + Rate: + Hastighet: + + + + Offset: + Offset: + + + + Cancel + Avbryt + + + + OK + OK + + + + WTScale + + + bar scale + takt-skala + + + + WaveEdit + + + &File + &Arkiv + + + + Functions + Funktioner + + + + Normalize + Normalisera + + + + Cursor + Markör + + + + &Edit + &Redigera + + + + Func&tions + + + + + &Gain + + + + + 200% + + + + + 150% + + + + + 75% + + + + + 50% + + + + + 25% + + + + + Other + + + + + Edit in E&xternal Editor + + + + + Mute Selection + + + + + Normalize Selection + + + + + Fade In Selection + + + + + Fade Out Selection + + + + + Reverse Selection + + + + + Select + Välj + + + + waveedit-tools + + + + + Transport + + + + + pianoroll-tools + + + + + Solo + + + + + WaveTrackInfoBase + + + MusE: TrackInfo + MusE: SpÃ¥rinfo + + + + Track Info + SpÃ¥rinfo + + + + Track Name + SpÃ¥rnamn + + + + Ports: + Portar: + + + + off + av + + + + WaveView + + + MusE - file size changed + + + + + When editing in external editor - you should not change the filesize +since it must fit the selected region. + +Missing data is muted + + + + diff --git a/attic/muse_qt4_evolution/share/plugins/1050.ui b/attic/muse_qt4_evolution/share/plugins/1050.ui new file mode 100644 index 00000000..d73ec5a1 --- /dev/null +++ b/attic/muse_qt4_evolution/share/plugins/1050.ui @@ -0,0 +1,297 @@ + + + + + freeverb + + + + 0 + 0 + 398 + 120 + + + + FreeVerb + + + true + + + + 9 + + + 6 + + + + + 0 + + + 6 + + + + + 0 + + + 6 + + + + + + 5 + 0 + 0 + 0 + + + + Wet Level + + + + + + + + 4 + 0 + 0 + 0 + + + + 2 + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + 0 + + + 6 + + + + + + 5 + 0 + 0 + 0 + + + + Damping + + + + + + + + 4 + 0 + 0 + 0 + + + + 1 + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + 7 + 5 + 0 + 0 + + + + 1 + + + Qt::Vertical + + + + + + + + 7 + 5 + 0 + 0 + + + + 2 + + + Qt::Vertical + + + + + + + 0 + + + 6 + + + + + <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:20pt;">Freeverb1</span></p></body></html> + + + + + + + Qt::Vertical + + + + 127 + 51 + + + + + + + + + + + 7 + 5 + 0 + 0 + + + + Qt::Vertical + + + + + + + 0 + + + 6 + + + + + + 5 + 0 + 0 + 0 + + + + Room Size + + + + + + + + 4 + 0 + 0 + 0 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + qPixmapFromMimeSource + + + Awl::Slider + +
awl/slider.h
+ 0 + +
+ + Awl::FloatEntry + +
awl/floatentry.h
+ 0 + +
+
+ + +
diff --git a/attic/muse_qt4_evolution/share/plugins/1436.ui b/attic/muse_qt4_evolution/share/plugins/1436.ui new file mode 100644 index 00000000..ef801ebb --- /dev/null +++ b/attic/muse_qt4_evolution/share/plugins/1436.ui @@ -0,0 +1,1090 @@ + + + + + freeverb + + + + 0 + 0 + 721 + 335 + + + + FreeVerb + + + true + + + + 9 + + + 6 + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 9 + + + 6 + + + + + 0 + + + 6 + + + + + 0 + + + 6 + + + + + + 5 + 0 + 0 + 0 + + + + Delay (ms) + + + + + + + + 4 + 0 + 0 + 0 + + + + 2700 + + + + + + + + 7 + 5 + 0 + 0 + + + + + 200 + 12 + 100 + + + + 2700 + + + 10 + + + 100 + + + Qt::Vertical + + + + + + + + + 0 + + + 6 + + + + + + 5 + 0 + 0 + 0 + + + + Level + + + + + + + + 4 + 0 + 0 + 0 + + + + 1 + + + 50 + + + + + + + + 7 + 5 + 0 + 0 + + + + 1 + + + 50 + + + 0.5 + + + 2 + + + Qt::Vertical + + + + + + + + + + Sans Serif + 18 + 50 + false + false + false + false + + + + <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:18pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"><span style=" font-size:18pt;">Left</span></p></body></html> + + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 9 + + + 6 + + + + + 0 + + + 6 + + + + + 0 + + + 6 + + + + + + 5 + 0 + 0 + 0 + + + + Delay (ms) + + + + + + + + 4 + 0 + 0 + 0 + + + + 2 + + + 2700 + + + + + + + + 7 + 5 + 0 + 0 + + + + + 200 + 12 + 100 + + + + 2 + + + 2700 + + + 10 + + + 100 + + + Qt::Vertical + + + + + + + + + 0 + + + 6 + + + + + + 5 + 0 + 0 + 0 + + + + Level + + + + + + + + 4 + 0 + 0 + 0 + + + + 3 + + + 50 + + + + + + + + 7 + 5 + 0 + 0 + + + + 4 + + + 3 + + + 50 + + + 0.5 + + + 2 + + + Qt::Vertical + + + + + + + + + + Sans Serif + 18 + 50 + false + false + false + false + + + + <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:20pt;">Center</span></p></body></html> + + + + + + + + + + + + <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:20pt;">L/C/R Delay - 1436</span></p></body></html> + + + + + + + 0 + + + 6 + + + + + 0 + + + 6 + + + + + + 4 + 0 + 0 + 0 + + + + 9 + + + 50 + + + + + + + 9 + + + 50 + + + Qt::Horizontal + + + + + + + + + 0 + + + 6 + + + + + + 5 + 0 + 0 + 0 + + + + Spread + + + + + + + Qt::Horizontal + + + + 101 + 20 + + + + + + + + + + + + 0 + + + 6 + + + + + 0 + + + 6 + + + + + + 4 + 0 + 0 + 0 + + + + 10 + + + + + + + 10 + + + 0.01 + + + 0.1 + + + Qt::Horizontal + + + + + + + + + 0 + + + 6 + + + + + + 5 + 0 + 0 + 0 + + + + + Sans Serif + 9 + 50 + false + false + false + false + + + + Dry/Wet level + + + + + + + Qt::Horizontal + + + + 101 + 20 + + + + + + + + + + + + 0 + + + 6 + + + + + 0 + + + 6 + + + + + + 4 + 0 + 0 + 0 + + + + 6 + + + -100 + + + 100 + + + + + + + 6 + + + -100 + + + 100 + + + 0.5 + + + 1 + + + Qt::Horizontal + + + + + + + + + 0 + + + 6 + + + + + + 5 + 0 + 0 + 0 + + + + Feedback + + + + + + + Qt::Horizontal + + + + 101 + 20 + + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 9 + + + 6 + + + + + 0 + + + 6 + + + + + 0 + + + 6 + + + + + + 5 + 0 + 0 + 0 + + + + Delay (ms) + + + + + + + + 4 + 0 + 0 + 0 + + + + 4 + + + 2700 + + + + + + + + 7 + 5 + 0 + 0 + + + + + 200 + 12 + 100 + + + + 4 + + + 2700 + + + 10 + + + 100 + + + Qt::Vertical + + + + + + + + + 0 + + + 6 + + + + + + 5 + 0 + 0 + 0 + + + + Level + + + + + + + + 4 + 0 + 0 + 0 + + + + 5 + + + 50 + + + + + + + + 7 + 5 + 0 + 0 + + + + 5 + + + 50 + + + 0.5 + + + 2 + + + Qt::Vertical + + + + + + + + + <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:20pt;">Right</span></p></body></html> + + + + + + + + + + + + 0 + + + 6 + + + + + 0 + + + 6 + + + + + + 4 + 0 + 0 + 0 + + + + 7 + + + 100 + + + + + + + 7 + + + 100 + + + Qt::Horizontal + + + + + + + + + 0 + + + 6 + + + + + + 5 + 0 + 0 + 0 + + + + High frequency damping (%) + + + + + + + Qt::Horizontal + + + + 101 + 20 + + + + + + + + + + + + 0 + + + 6 + + + + + 0 + + + 6 + + + + + + 4 + 0 + 0 + 0 + + + + 8 + + + 100 + + + + + + + 8 + + + 100 + + + Qt::Horizontal + + + + + + + + + 0 + + + 6 + + + + + + 5 + 0 + 0 + 0 + + + + Low frequency damping (%) + + + + + + + Qt::Horizontal + + + + 101 + 20 + + + + + + + + + + + + qPixmapFromMimeSource + + + Awl::Slider + +
awl/slider.h
+ 0 + +
+ + Awl::FloatEntry + +
awl/floatentry.h
+ 0 + +
+
+ + +
diff --git a/attic/muse_qt4_evolution/share/plugins/2142.ui b/attic/muse_qt4_evolution/share/plugins/2142.ui new file mode 100644 index 00000000..63eb1542 --- /dev/null +++ b/attic/muse_qt4_evolution/share/plugins/2142.ui @@ -0,0 +1,525 @@ + + + + + Form1 + + + + 0 + 0 + 357 + 190 + + + + Tap-Reverberator + + + + 11 + + + 10 + + + + + 0 + + + 4 + + + + + + 7 + 5 + 0 + 0 + + + + 8 + + + 1 + + + -70 + + + 10 + + + true + + + Qt::Horizontal + + + + + + + + 7 + 5 + 0 + 0 + + + + 8 + + + 10000 + + + Qt::Horizontal + + + + + + + + 4 + 0 + 0 + 0 + + + + 1 + + + -70 + + + 10 + + + + + + + Decay [ms] + + + + + + + + 5 + 0 + 0 + 0 + + + + + + + + Dry Level [dB] + + + + + + + + 7 + 5 + 0 + 0 + + + + 8 + + + 2 + + + -70 + + + 10 + + + true + + + Qt::Horizontal + + + + + + + + 4 + 0 + 0 + 0 + + + + 2 + + + + + + + Wet Level [dB] + + + + + + + + + 0 + + + 6 + + + + + Comb filters + + + 3 + + + + + + + Allpass filters + + + 4 + + + + + + + Bandpass filters + + + 5 + + + + + + + + + Enhanced stereo + + + 6 + + + + + + + 0 + + + 6 + + + + + + 4 + 5 + 0 + 0 + + + + Preset: + + + + + + + 7 + + + + AfterBurn + + + + + AfterBurn (Long) + + + + + Ambience + + + + + Ambience (Thick) + + + + + Ambience (Thick) - HD + + + + + Cathedral + + + + + Cathedral - HD + + + + + Drum Chamber + + + + + Garage + + + + + Garage (Bright) + + + + + Gymnasium + + + + + Gymnasium (Bright) + + + + + Gymnasium (Bright) - HD + + + + + Hall (Small) + + + + + Hall (Medium) + + + + + Hall (Large) + + + + + Hall (Large) - HD + + + + + Plate (Small) + + + + + Plate (Medium) + + + + + Plate (Large) + + + + + Plate (Large) - HD + + + + + Pulse Chamber + + + + + Pulse Chamber (Reverse) + + + + + Resonator (96 ms) + + + + + Resonator (152 ms) + + + + + Resonator (208 ms) + + + + + Room (Small) + + + + + Room (Medium) + + + + + Room (Large) + + + + + Room (Large) - HD + + + + + Slap Chamber + + + + + Slap Chamber - HD + + + + + Slap Chamber (Bright) + + + + + Slap Chamber (Bright) HD + + + + + Smooth Hall (Small) + + + + + Smooth Hall (Medium) + + + + + Smooth Hall (Large) + + + + + Smooth Hall (Large) - HD + + + + + Vocal Plate + + + + + Vocal Plate - HD + + + + + Warble Chamber + + + + + Warehoouse + + + + + Warehouse - HD + + + + + + + + + + <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:15pt;">TAP Reverberator</span></p></body></html> + + + + + + + qPixmapFromMimeSource + + + Awl::Slider + +
awl/slider.h
+ 0 + +
+ + Awl::ComboBox + +
awl/combobox.h
+ 0 + +
+ + Awl::CheckBox + +
awl/checkbox.h
+ 0 + +
+ + Awl::FloatEntry + +
awl/floatentry.h
+ 0 + +
+
+ + +
diff --git a/attic/muse_qt4_evolution/share/plugins/CMakeLists.txt b/attic/muse_qt4_evolution/share/plugins/CMakeLists.txt new file mode 100644 index 00000000..4df55561 --- /dev/null +++ b/attic/muse_qt4_evolution/share/plugins/CMakeLists.txt @@ -0,0 +1,22 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +install_files ( /share/${MusE_INSTALL_NAME}/plugins .*\\.ui ) + diff --git a/attic/muse_qt4_evolution/share/templates/CMakeLists.txt b/attic/muse_qt4_evolution/share/templates/CMakeLists.txt new file mode 100644 index 00000000..9c8a8c17 --- /dev/null +++ b/attic/muse_qt4_evolution/share/templates/CMakeLists.txt @@ -0,0 +1,30 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +install_files ( /share/${MusE_INSTALL_NAME}/templates .med + audio.med + empty.med + default.med + midiGM.med + monorecord.med + synti.med + ns5r.med + ) + diff --git a/attic/muse_qt4_evolution/share/templates/audio.med b/attic/muse_qt4_evolution/share/templates/audio.med new file mode 100644 index 00000000..e35752d8 --- /dev/null +++ b/attic/muse_qt4_evolution/share/templates/audio.med @@ -0,0 +1,395 @@ + + + + 127 + 127 + 1 + + 00:00:00:00:00 + + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + + + 1 + 0 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + + + + + 0 + 0 + 0 + 1 + 0 + + Track 1 + 0 + 1 + 0 + 1 + + + + + 31 + 0 + + + Track 2 + 0 + 1 + 1 + 0 + + + + + 31 + 0 + + + Track 3 + 0 + 1 + 0 + + + + + 31 + 0 + + + Track 4 + 0 + 1 + 0 + + + + + 31 + 0 + + + Group 1 + 0 + 1 + 1 + 0 + + + + + 31 + 0 + + + Group 2 + 0 + 1 + 0 + + + + + 31 + 0 + + + Aux 1 + 0 + 2 + 1 + 0 + + + 31 + 0 + + + Aux 2 + 0 + 2 + 1 + 0 + + + 31 + 0 + + + Input 1 + 1 + 2 + 1 + 0 + + + + + 31 + 0 + + + Out 1 + 0 + 2 + 1 + 0 + + + 31 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 1 + 0.04 + 1 + 0 + 0 + + 144 + 578 + + + + + 0 + 500000 + + + + + 0 + 4 + 4 + + + + + + diff --git a/attic/muse_qt4_evolution/share/templates/default.med b/attic/muse_qt4_evolution/share/templates/default.med new file mode 100644 index 00000000..8edbfd8d --- /dev/null +++ b/attic/muse_qt4_evolution/share/templates/default.med @@ -0,0 +1,132 @@ + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 127 + 127 + 1 + -1 + 1 + 00:00:00:00:00 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + 2 + 63 + 127 + 63 + 70 + 9 + 0 + 0 + 0 + 4 + 4 + 0 + 0 + 1 + 0 + + 0 + 28 + 31 + 33 + 29 + + + 96 + 96 + 600 + 400 + 50 + 300 + 0 + + + 96 + 96 + 80 + 50 + 0 + 0 + 600 + 400 + 0 + + + 0 + + + + 600 + 400 + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + + Out 1 + 0 + 0 + 0 + 0 + 2 + 20 + 0 + 1 + 0 + 1 + + + + + + + + 0 + 500000 + + + + + 0 + 4 + 4 + + + + + + diff --git a/attic/muse_qt4_evolution/share/templates/empty.med b/attic/muse_qt4_evolution/share/templates/empty.med new file mode 100644 index 00000000..87b3901b --- /dev/null +++ b/attic/muse_qt4_evolution/share/templates/empty.med @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/share/templates/midiGM.med b/attic/muse_qt4_evolution/share/templates/midiGM.med new file mode 100644 index 00000000..ebd6333b --- /dev/null +++ b/attic/muse_qt4_evolution/share/templates/midiGM.med @@ -0,0 +1,409 @@ + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 127 + 127 + 1 + -1 + 1 + 00:00:00:00:00 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + 1 + 298 764 + +
7 6 5 4 3 2 1 0
+
+ 0 + 266 + 1 +
+ + + 2 + 63 + 127 + 63 + 70 + 9 + 0 + 1 + 1 + 4 + 4 + 0 + 0 + 1 + 0 + + 0 + 28 + 31 + 33 + 29 + + GM + + + 0 + + + 0 + + + 0 + + + + + 0 + + + 0 + + + 0 + + + + + 0 + + + 0 + + + 0 + + + + + 0 + + + 0 + + + 0 + + + + + 0 + + + 0 + + + 0 + + + + + 0 + + + 0 + + + 0 + + + + + 0 + + + 0 + + + 0 + + + + + 0 + + + 0 + + + 0 + + + + + 0 + + + 0 + + + 0 + + + + + 0 + + + 0 + + + 0 + + + + + 0 + + + 0 + + + 0 + + + + + 0 + + + 0 + + + 0 + + + + + 0 + + + 0 + + + 0 + + + + + 0 + + + 0 + + + 0 + + + + + 0 + + + 0 + + + 0 + + + + + 0 + + + 0 + + + 0 + + + + + + 96 + 96 + 600 + 400 + 50 + 300 + + + 96 + 96 + 80 + 50 + 0 + 0 + 600 + 400 + 0 + + + 0 + + + + 600 + 400 + +
+ + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + Track 1 + 0 + 0 + 0 + 0 + 0 + 20 + 0 + 1 + 0 + 0 + 65535 + 65535 + 0 + 0 + 0 + 0 + 100 + 100 + 1 + + + Track 2 + 0 + 0 + 0 + 0 + 0 + 20 + 0 + 0 + 0 + 65535 + 65535 + 0 + 0 + 0 + 0 + 100 + 100 + 1 + + + Track 3 + 0 + 0 + 0 + 0 + 0 + 20 + 0 + 0 + 0 + 65535 + 65535 + 0 + 0 + 0 + 0 + 100 + 100 + 1 + + + Track 4 + 0 + 0 + 0 + 0 + 0 + 20 + 0 + 0 + 0 + 65535 + 65535 + 0 + 0 + 0 + 0 + 100 + 100 + 1 + + + Track 5 + 0 + 0 + 0 + 0 + 0 + 20 + 0 + 0 + 9 + 65535 + 65535 + 0 + 0 + 0 + 0 + 100 + 100 + 1 + + + + 0 + 500000 + + + + + 0 + 4 + 4 + + + + + +
diff --git a/attic/muse_qt4_evolution/share/templates/monorecord.med b/attic/muse_qt4_evolution/share/templates/monorecord.med new file mode 100644 index 00000000..5b9c57a0 --- /dev/null +++ b/attic/muse_qt4_evolution/share/templates/monorecord.med @@ -0,0 +1,430 @@ + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 127 + 127 + 1 + -1 + 1 + 00:00:00:00:00 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + + 0 + 298 296 + +
7 6 5 4 3 2 1 0
+
+ 0 + 266 + 1 +
+ + + 2 + 63 + 127 + 63 + 70 + 9 + 0 + 1 + 1 + 4 + 4 + 0 + 0 + 1 + 0 + + 0 + 28 + 31 + 33 + 29 + + GM + TASCAM US-X2Y Port 0 + 1 + + 1 + 7 + 10 + 11 + 64 + 91 + 93 + 120 + 121 + 123 + 262144 + 262145 + + + 1 + 7 + 10 + 11 + 64 + 91 + 93 + 120 + 121 + 123 + 262144 + 262145 + + + 1 + 7 + 10 + 11 + 64 + 91 + 93 + 120 + 121 + 123 + 262144 + 262145 + + + 1 + 7 + 10 + 11 + 64 + 91 + 93 + 120 + 121 + 123 + 262144 + 262145 + + + 1 + 7 + 10 + 11 + 64 + 91 + 93 + 120 + 121 + 123 + 262144 + 262145 + + + 1 + 7 + 10 + 11 + 64 + 91 + 93 + 120 + 121 + 123 + 262144 + 262145 + + + 1 + 7 + 10 + 11 + 64 + 91 + 93 + 120 + 121 + 123 + 262144 + 262145 + + + 1 + 7 + 10 + 11 + 64 + 91 + 93 + 120 + 121 + 123 + 262144 + 262145 + + + 1 + 7 + 10 + 11 + 64 + 91 + 93 + 120 + 121 + 123 + 262144 + 262145 + + + 1 + 7 + 10 + 11 + 64 + 91 + 93 + 120 + 121 + 123 + 262144 + 262145 + + + 1 + 7 + 10 + 11 + 64 + 91 + 93 + 120 + 121 + 123 + 262144 + 262145 + + + 1 + 7 + 10 + 11 + 64 + 91 + 93 + 120 + 121 + 123 + 262144 + 262145 + + + 1 + 7 + 10 + 11 + 64 + 91 + 93 + 120 + 121 + 123 + 262144 + 262145 + + + 1 + 7 + 10 + 11 + 64 + 91 + 93 + 120 + 121 + 123 + 262144 + 262145 + + + 1 + 7 + 10 + 11 + 64 + 91 + 93 + 120 + 121 + 123 + 262144 + 262145 + + + 1 + 7 + 10 + 11 + 64 + 91 + 93 + 120 + 121 + 123 + 262144 + 262145 + + + + + 96 + 96 + 600 + 400 + 50 + 300 + + + 96 + 96 + 80 + 50 + 0 + 0 + 600 + 400 + 0 + + + 0 + + + + 600 + 400 + +
+ + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + + Track 1 + 1 + 0 + 0 + 0 + 1 + 20 + 0 + 0 + 0 + 0 + 0 + 0.000000 + 0.000000 + + + + + + + Input 1 + 0 + 0 + 0 + 0 + 1 + 20 + 1 + 1 + 0 + 0 + 0 + 0 + 0.000000 + 0.000000 + + + + + + + Out 1 + 0 + 0 + 0 + 0 + 1 + 20 + 1 + 0 + 0 + 0 + 0 + + + + + + + alsa_pcm:capture_1 + 1:Input 1 + + + Input 1 + Out 1 + + + Input 1 + Track 1 + + + + 0 + 500000 + + + + + 0 + 4 + 4 + + + + + + + + + + + + + +
diff --git a/attic/muse_qt4_evolution/share/templates/ns5r.med b/attic/muse_qt4_evolution/share/templates/ns5r.med new file mode 100644 index 00000000..471246ea --- /dev/null +++ b/attic/muse_qt4_evolution/share/templates/ns5r.med @@ -0,0 +1,266 @@ + + + + 1 + + 00:00:00:00:00 + + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + + + 1 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + + + 2006-10-24T21:21:56 + 0 + 0 + 0 + 0 + 1 + 0 + + MidiOut 1 + 1 + 1 + + 31 + Korg-NS5R + 0 + 127 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + 0.04 + 1 + 0 + 0 + 0 + + 144 + 763 + + + + + 0 + 500000 + + + + + 0 + 4 + 4 + + + + + + diff --git a/attic/muse_qt4_evolution/share/templates/synti.med b/attic/muse_qt4_evolution/share/templates/synti.med new file mode 100644 index 00000000..f9a811b5 --- /dev/null +++ b/attic/muse_qt4_evolution/share/templates/synti.med @@ -0,0 +1,353 @@ + + + + 127 + 127 + 1 + + 00:00:00:00:00 + + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + + + 0 + 0 + + + + 12288 + 0 + 0 + 1 + 18432 + + Track 1 + 0 + 31 + 0 + 0 + 0 + 100 + 100 + + Track 1 + + 0 + 0 + + + + Out 1 + 0 + 2 + + + 31 + 0 + + + fluid-1 + 0 + 1 + 2 + 1 + + + 31 + 0 + fluid + 0 + + + organ-1 + 0 + 1 + 1 + + + 31 + 0 + organ + 0 + + + + s1-1 + 0 + 1 + 1 + 1 + + + 31 + 0 + s1 + + + vam-1 + 0 + 1 + 1 + + + 31 + 0 + vam + 0 + + + + fluid-1 + Out 1 + + + organ-1 + Out 1 + + + s1-1 + Out 1 + + + vam-1 + Out 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 1 + 0.04 + 1 + 0 + 0 + + 144 + 578 + + + + + 0 + 500000 + + + + + 0 + 4 + 4 + + + + + + diff --git a/attic/muse_qt4_evolution/share/wallpapers/CMakeLists.txt b/attic/muse_qt4_evolution/share/wallpapers/CMakeLists.txt new file mode 100644 index 00000000..f098c244 --- /dev/null +++ b/attic/muse_qt4_evolution/share/wallpapers/CMakeLists.txt @@ -0,0 +1,22 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +install_files ( /share/${MusE_INSTALL_NAME}/wallpapers .*\\.gif ) +install_files ( /share/${MusE_INSTALL_NAME}/wallpapers .*\\.jpg ) diff --git a/attic/muse_qt4_evolution/share/wallpapers/gray.gif b/attic/muse_qt4_evolution/share/wallpapers/gray.gif new file mode 100644 index 00000000..cb30e856 Binary files /dev/null and b/attic/muse_qt4_evolution/share/wallpapers/gray.gif differ diff --git a/attic/muse_qt4_evolution/share/wallpapers/gray_rock.gif b/attic/muse_qt4_evolution/share/wallpapers/gray_rock.gif new file mode 100644 index 00000000..dcf1a19b Binary files /dev/null and b/attic/muse_qt4_evolution/share/wallpapers/gray_rock.gif differ diff --git a/attic/muse_qt4_evolution/share/wallpapers/gray_stucco.gif b/attic/muse_qt4_evolution/share/wallpapers/gray_stucco.gif new file mode 100644 index 00000000..bcebdb02 Binary files /dev/null and b/attic/muse_qt4_evolution/share/wallpapers/gray_stucco.gif differ diff --git a/attic/muse_qt4_evolution/share/wallpapers/paper1.jpg b/attic/muse_qt4_evolution/share/wallpapers/paper1.jpg new file mode 100644 index 00000000..1d4923e8 Binary files /dev/null and b/attic/muse_qt4_evolution/share/wallpapers/paper1.jpg differ diff --git a/attic/muse_qt4_evolution/share/wallpapers/paper2.jpg b/attic/muse_qt4_evolution/share/wallpapers/paper2.jpg new file mode 100644 index 00000000..a692fc41 Binary files /dev/null and b/attic/muse_qt4_evolution/share/wallpapers/paper2.jpg differ diff --git a/attic/muse_qt4_evolution/share/wallpapers/stone1.gif b/attic/muse_qt4_evolution/share/wallpapers/stone1.gif new file mode 100644 index 00000000..f45407cc Binary files /dev/null and b/attic/muse_qt4_evolution/share/wallpapers/stone1.gif differ diff --git a/attic/muse_qt4_evolution/synti/CMakeLists.txt b/attic/muse_qt4_evolution/synti/CMakeLists.txt new file mode 100644 index 00000000..7e5274ac --- /dev/null +++ b/attic/muse_qt4_evolution/synti/CMakeLists.txt @@ -0,0 +1,42 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +include_directories( + . + ${CMAKE_CURRENT_BINARY} + ${PROJECT_SOURCE_DIR} + ${PROJECT_SOURCE_DIR}/muse + ${PROJECT_SOURCE_DIR}/muse/widgets + ${PROJECT_SOURCE_DIR}/synti + ) + +set (SubDirs libsynti s1 organ deicsonze simpledrums vam mus) + +if (ENABLE_ZYNADDSUBFX) + set (SubDirs ${SubDirs} zynaddsubfx) +endif (ENABLE_ZYNADDSUBFX) + +if (ENABLE_FLUID) + set (SubDirs ${SubDirs} fluid fluidsynth ) +endif (ENABLE_FLUID) + +subdirs(${SubDirs}) + + diff --git a/attic/muse_qt4_evolution/synti/README b/attic/muse_qt4_evolution/synti/README new file mode 100644 index 00000000..cbda0fd4 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/README @@ -0,0 +1,14 @@ +s1 is a simple demo of the MusE software synthesizer interface. + It has no gui and no parameters to set. + +organ is a demo synthesizer which shows how to implement + polyphony and a gui + +fluid is demo synthesizer utilizing the fluid sythesizer library + +mus is a program which can load any of the MusE synthsizer plugins + turning them into standalone synthesizer with a JACK audio and + midi interface + + + diff --git a/attic/muse_qt4_evolution/synti/deicsonze/ARCH_ALIN b/attic/muse_qt4_evolution/synti/deicsonze/ARCH_ALIN new file mode 100644 index 00000000..87092d6f --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/ARCH_ALIN @@ -0,0 +1,24945 @@ +* TX81Z/DX11 Voice Archive +* $Header: /cvsroot/lmuse/muse/synti/deicsonze/ARCH_ALIN,v 1.3 2005/07/14 10:25:45 a-lin Exp $ +* Copyright 1991 by Bryan Sutula. See README file for restrictions. + + +--Bank 1 + +* CATEGORY ORCHESTRA + +* SUBCATEGORY Orchestra + +** Name: EleOrchtra +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +09 03 03 04 0b 00 02 4e 00 02 18 03 03 05 08 00 02 51 08 00 11 07 03 07 0b +00 05 63 04 06 09 10 03 05 0f 00 06 63 08 05 34 21 23 0f 00 12 18 05 04 00 +63 63 63 00 00 32 00 45 6c 65 4f 72 63 68 74 72 61 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: EleOrchtra +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +09 03 03 04 0b 00 00 4e 00 02 18 03 03 05 08 00 00 51 08 00 11 07 03 07 0b +00 00 63 04 06 09 10 03 05 0f 00 00 63 08 05 34 21 23 0f 00 12 18 05 04 00 +63 63 63 00 00 32 00 45 6c 65 4f 72 63 68 74 72 61 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Orchestra* +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 1f 00 02 0f 00 01 4b 0a 08 07 1f 00 05 0f 0b 00 61 09 0e 0f 1f 00 05 0f +00 01 63 0a 08 08 1f 00 05 0f 00 00 61 05 08 3e 21 21 07 00 32 05 02 04 00 +28 63 00 00 00 32 00 4f 72 63 68 65 73 74 72 61 2a 63 63 63 32 32 32 00 00 +00 12 00 00 00 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntOrkest +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 0c 03 04 0f 32 01 47 08 0d 10 0c 03 04 0f 32 02 3e 08 0a 0e 15 06 05 0f +1e 05 5d 13 0a 1f 15 06 05 0f 1e 05 61 08 0e 24 20 2c 14 00 42 0c 0c 04 00 +63 32 32 00 00 32 00 4f 72 6e 74 4f 72 6b 65 73 74 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntOrkest +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +10 0c 03 04 0f 32 00 47 08 0d 10 0c 03 04 0f 32 00 3e 08 0a 0e 15 06 05 0f +1e 00 5d 13 0a 1f 15 06 05 0f 1e 00 61 08 0e 24 20 2c 14 00 42 0c 0c 04 00 +63 32 32 00 00 32 00 4f 72 6e 74 4f 72 6b 65 73 74 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + +* SUBCATEGORY Symphony + +** Name: Sympathy.1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 03 0f 00 04 59 04 03 1f 1f 00 03 0f 00 04 5f 00 06 0f 1f 00 04 0f +00 05 5b 08 02 0f 1f 00 04 0f 00 06 5f 08 06 2c 23 00 00 00 02 18 04 04 00 +28 32 00 00 00 32 00 53 79 6d 70 61 74 68 79 2e 31 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sympathy.2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 03 0f 00 03 52 04 03 1f 1f 00 03 0f 00 04 55 08 06 0f 1f 00 04 0f +00 06 5b 08 02 0f 1f 00 04 0f 00 05 5e 08 06 2c 23 00 00 00 02 18 04 04 00 +28 32 00 00 00 32 00 53 79 6d 70 61 74 68 79 2e 32 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sympho * +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 04 03 04 0e 16 00 4a 03 03 0d 04 00 05 0e 1d 00 52 04 06 0c 04 03 05 0e +0e 00 63 03 03 07 04 03 05 0e 0c 00 63 04 00 3c 23 0e 0e 00 32 11 02 04 00 +28 63 00 00 00 32 00 53 79 6d 70 68 6f 20 20 20 2a 63 63 63 32 32 32 00 06 +00 18 00 06 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Symphony * +** Controls: KV, MW (LFO pitch), BC (EG amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 04 00 01 0e 00 49 4d 04 03 11 17 03 04 0f 00 00 45 04 06 0c 08 03 05 0f +00 78 63 04 03 0a 04 03 05 0e 00 78 63 03 00 3c 1f 0c 10 00 4e 05 02 04 00 +28 0c 07 00 00 32 19 53 79 6d 70 68 6f 6e 79 20 2a 63 63 63 32 32 32 00 08 +30 38 00 08 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Symphony.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +19 13 07 02 0e 0a 04 59 13 12 0e 09 00 05 0e 00 04 51 08 03 18 09 05 04 0e +0a 04 4b 0d 0b 0c 0d 00 05 0d 00 05 63 08 03 64 26 18 0f 00 26 0c 04 04 00 +63 32 63 00 00 32 00 53 79 6d 70 68 6f 6e 79 2e 31 63 63 63 32 32 32 00 10 +00 20 00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Symphony.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +19 13 07 02 0e 0a 02 59 13 12 0e 09 00 05 0e 00 01 51 08 03 18 09 05 04 0e +0a 01 4b 0d 0b 0c 0d 00 05 0d 00 00 63 08 03 64 26 18 0f 00 26 0c 04 04 00 +63 32 63 00 00 32 00 53 79 6d 70 68 6f 6e 79 2e 31 63 63 63 32 32 32 00 10 +00 20 00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Symphony.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +19 05 00 07 0e 41 01 51 08 05 19 13 06 04 0e 0a 03 4d 19 0a 0c 0a 00 07 0f +0a 05 62 08 01 1f 0a 06 04 0b 00 02 4d 0d 00 34 22 18 0f 00 22 0c 04 04 00 +63 32 63 00 00 32 00 53 79 6d 70 68 6f 6e 79 2e 32 63 63 63 32 32 32 00 10 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Symphony.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +19 05 00 07 0e 41 01 51 08 05 19 13 06 04 0e 0a 00 4d 19 0a 0c 0a 00 07 0f +0a 00 62 08 01 1f 0a 06 04 0e 00 00 4d 0d 00 34 22 18 0f 00 22 0c 04 04 00 +63 32 63 00 00 32 00 53 79 6d 70 68 6f 6e 79 2e 32 63 63 63 32 32 32 00 10 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Symphony.3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 05 00 04 0e 29 03 4c 04 01 0f 0c 01 05 0e 0a 03 39 08 02 0d 0a 00 06 0e +0a 03 5d 08 03 12 08 03 06 0d 00 06 58 08 01 2c 1e 00 06 00 32 0c 04 04 00 +63 32 63 00 00 32 00 53 79 6d 70 68 6f 6e 79 2e 33 63 63 63 32 32 32 00 00 +00 20 00 00 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Symphony.3 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 05 00 04 0e 29 00 4c 04 01 0f 0c 01 05 0e 0a 00 39 08 02 0d 0a 00 06 0e +0a 00 5d 08 03 12 08 03 06 0d 00 00 58 08 01 2c 1e 00 06 00 32 0c 04 04 00 +63 32 63 00 00 32 00 53 79 6d 70 68 6f 6e 79 2e 33 63 63 63 32 32 32 00 00 +00 20 00 00 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Symphony.4 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 1a 05 07 0d 34 02 49 08 0c 17 0c 00 07 0f 0a 03 4b 13 05 15 0d 05 07 0e +34 05 63 08 0b 0c 0a 00 05 0f 0a 03 63 08 01 74 1e 0b 09 00 32 00 04 04 00 +63 32 63 00 00 32 00 53 79 6d 70 68 6f 6e 79 2e 34 63 63 63 32 32 32 00 30 +00 20 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Symphony.4 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 1a 05 07 0d 34 00 49 08 0c 17 0d 00 07 0f 0a 00 3f 13 05 15 0d 05 07 0e +34 00 63 08 0b 0c 0a 00 05 0f 0a 00 5a 08 01 74 1e 0b 09 00 32 00 04 04 00 +63 32 63 00 00 32 00 53 79 6d 70 68 6f 6e 79 2e 34 63 63 63 32 32 32 00 30 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Symphony.5 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1d 03 06 05 0a 29 03 48 08 14 0c 0a 08 06 09 0a 00 4a 0d 0a 0d 0b 06 05 09 +1a 03 61 0a 04 0c 09 08 07 09 15 03 63 08 01 35 1e 1a 0c 00 22 00 04 04 00 +63 32 63 00 00 32 00 53 79 6d 70 68 6f 6e 79 2e 35 63 63 63 32 32 32 00 40 +00 40 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Symphony.5 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 03 06 04 0f 29 00 48 08 14 0c 0a 01 05 0e 0a 00 4a 08 0a 0d 0b 06 04 0f +1a 00 4f 0a 04 0c 09 00 04 0e 15 00 5e 08 01 35 1e 1a 0c 00 22 00 04 04 00 +63 32 63 00 00 32 00 53 79 6d 70 68 6f 6e 79 2e 35 63 63 63 32 32 32 00 40 +00 10 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Symphony.6 +** Controls: KV, MW (LFO pitch), MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 0a 02 05 05 00 40 4c 08 0a 1a 05 00 07 0e 0a 6d 50 19 04 0b 0a 03 05 0f +00 40 56 08 10 17 0a 00 06 0f 14 44 5b 0d 05 24 1d 19 3d 25 26 0c 04 04 00 +63 32 63 00 00 32 00 53 79 6d 70 68 6f 6e 79 2e 36 63 63 63 32 32 32 00 30 +00 20 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Symphony.6 +** Controls: KV, MW (LFO pitch), MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +09 0a 02 05 05 00 40 4c 08 0a 0a 05 00 07 0e 0a 41 35 13 04 13 08 02 05 0f +00 40 56 08 10 10 0a 00 06 0f 14 40 5b 08 05 24 1c 00 2a 0b 26 0c 04 04 00 +63 32 63 00 00 32 00 53 79 6d 70 68 6f 6e 79 2e 36 63 63 63 32 32 32 00 10 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Symphony.7 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 0c 04 04 0e 49 03 51 04 08 12 0c 04 04 0e 0a 04 4d 08 0a 0e 10 00 07 0e +49 03 5f 08 04 12 10 00 05 0e 00 04 51 08 01 2c 1c 00 0f 00 42 18 04 04 00 +63 32 63 00 00 32 00 53 79 6d 70 68 6f 6e 79 2e 37 63 63 63 32 32 32 00 40 +00 10 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Symphony.7 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 0c 04 04 0e 49 00 51 04 08 12 0c 04 04 0e 0a 00 4d 08 0a 0e 10 00 07 0e +49 00 5f 08 04 12 10 00 05 0e 00 00 51 08 01 2c 1c 00 0f 00 42 18 04 04 00 +63 32 63 00 00 32 00 53 79 6d 70 68 6f 6e 79 2e 37 63 63 63 32 32 32 00 40 +00 10 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* CATEGORY WIND + +* SUBCATEGORY Brass + +** Name: AnlgBrass1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0d 07 00 07 0e 0f 04 55 08 0b 0d 1f 00 07 0f 0a 04 5f 04 03 0d 1f 00 08 0f +00 04 5f 08 03 0d 1f 00 07 0f 0a 04 5f 04 03 2e 1f 0e 10 00 52 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 72 61 73 73 31 63 63 63 32 32 32 00 00 +00 20 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBrass1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0d 07 00 07 0e 0f 01 55 08 0b 0d 1f 00 07 0f 0a 00 5f 04 03 0d 1f 00 08 0f +00 01 5f 08 03 0d 1f 00 07 0f 0a 00 5f 04 03 2e 1f 0e 10 00 52 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 72 61 73 73 31 63 63 63 32 32 32 00 00 +00 20 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBrass2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0d 04 03 07 0c 00 02 53 04 03 0f 05 01 08 0f 00 04 56 04 03 10 1f 00 09 0f +00 06 55 04 03 0f 05 01 08 0f 00 06 5a 04 03 2d 1f 00 05 00 62 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 72 61 73 73 32 63 63 63 32 32 32 00 00 +00 20 00 30 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBrass2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0d 04 03 07 0c 00 02 53 04 03 0f 05 01 08 0f 00 00 56 04 03 10 1f 00 09 0f +00 01 55 04 03 0f 05 01 08 0f 00 00 5a 04 03 2d 23 00 05 00 52 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 72 61 73 73 32 63 63 63 32 32 32 00 00 +00 20 00 30 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBrass3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0d 07 00 07 0e 00 04 4d 04 01 0d 1f 00 07 0f 0a 02 5f 04 04 0d 1f 00 08 0f +00 05 5f 08 04 0f 1f 00 07 0f 0a 05 5f 08 06 3e 1f 0e 10 00 52 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 72 61 73 73 33 63 63 63 32 32 32 00 20 +00 20 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBrass3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0d 07 00 07 0e 00 01 4d 08 01 0d 1f 00 07 0f 0a 01 5f 04 04 0d 1f 00 08 0f +00 01 5f 08 04 0d 1f 00 07 0f 0a 01 5f 08 06 3e 1f 0e 10 00 52 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 72 61 73 73 33 63 63 63 32 32 32 00 20 +00 20 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBrass4 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0d 04 00 07 0f 00 05 53 04 0a 0f 03 04 08 01 00 03 55 04 06 10 1f 00 09 05 +00 05 55 04 04 0f 03 04 08 01 00 05 5a 04 06 2d 23 00 00 00 62 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 72 61 73 73 34 63 63 63 32 32 32 00 30 +00 30 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBrass4 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +0d 04 00 07 0f 00 01 53 04 0a 0f 03 04 08 01 00 00 55 04 06 10 1f 00 09 05 +00 01 55 04 04 0f 03 04 08 01 00 00 5a 04 06 2d 23 00 00 00 62 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 72 61 73 73 34 63 63 63 32 32 32 00 30 +00 30 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBrass5 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 0a 06 07 0c 00 02 53 04 0b 15 10 06 07 09 00 03 49 04 06 16 07 06 08 0f +00 03 63 04 03 10 1b 06 07 0c 00 03 62 04 06 34 23 00 05 00 32 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 72 61 73 73 35 63 63 63 32 32 32 00 00 +00 20 00 30 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBrass5 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +12 0a 06 07 0c 00 01 5b 04 0b 15 10 06 07 09 00 00 59 04 06 16 07 06 08 0f +00 01 63 04 03 10 1b 06 07 0c 00 00 62 04 06 34 23 00 05 00 32 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 72 61 73 73 35 63 63 63 32 32 32 00 00 +00 20 00 30 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBrass6 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 0a 06 07 0c 00 02 53 04 09 15 09 06 06 0b 1e 02 52 04 0d 0f 07 06 08 0f +00 06 4c 04 04 11 0a 05 07 0c 0f 05 62 04 06 23 1e 25 25 00 32 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 72 61 73 73 36 63 63 63 32 32 32 00 20 +00 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBrass6 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +12 0a 06 07 0c 00 02 53 04 09 15 09 06 06 0b 1e 01 52 04 0d 16 07 06 08 0f +00 01 4c 04 04 11 0a 05 07 0c 0f 00 62 04 06 23 28 25 02 00 32 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 72 61 73 73 36 63 63 63 32 32 32 00 20 +00 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBrass7 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +14 0a 03 0d 0c 00 02 58 04 0c 10 1f 09 0e 0d 00 02 63 04 05 16 1f 05 0d 0e +00 05 63 04 06 10 1f 06 0e 0d 00 05 62 04 06 25 22 24 0f 00 42 0c 02 05 00 +63 63 00 00 00 32 00 41 6e 6c 67 42 72 61 73 73 37 63 63 63 32 32 32 00 20 +00 40 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBrass7 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +14 0a 03 0d 0c 00 02 58 04 0c 0f 1f 09 0e 0d 00 00 63 04 05 16 1f 05 0d 0e +00 00 63 04 06 10 1f 06 0e 0d 00 00 62 04 06 25 22 24 0f 00 42 0c 02 05 00 +63 63 00 00 00 32 00 41 6e 6c 67 42 72 61 73 73 37 63 63 63 32 32 32 00 20 +00 20 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBrass8 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0a 06 0d 0f 00 01 61 00 0a 1f 0a 06 0d 0f 00 03 5e 00 04 1f 18 06 0d 0f +00 03 5e 04 03 1f 18 06 0d 0f 00 03 5e 00 05 26 28 00 00 00 32 18 02 05 00 +63 63 00 00 00 32 00 41 6e 6c 67 42 72 61 73 73 38 63 63 63 32 32 32 00 00 +00 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBrass8 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0a 06 0d 0f 00 01 61 00 0a 1f 0a 06 0d 0f 00 00 5e 00 04 1f 18 06 0d 0f +00 00 5e 04 03 1f 18 06 0d 0f 00 00 5e 00 05 26 28 00 00 00 32 18 02 05 00 +63 63 00 00 00 32 00 41 6e 6c 67 42 72 61 73 73 38 63 63 63 32 32 32 00 00 +00 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBrass9 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0a 06 0d 0f 00 01 51 04 0b 12 0c 02 0f 0a 0a 03 51 04 0e 1f 16 08 0f 0c +00 04 63 04 06 1f 06 04 0d 0c 00 03 5e 04 03 3c 2b 00 00 00 32 0c 02 05 00 +63 63 00 00 00 32 00 41 6e 6c 67 42 72 61 73 73 39 63 63 63 32 32 32 00 00 +00 10 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBrass9 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0a 06 0d 0f 00 01 51 04 0b 12 0c 02 0f 0a 0a 01 51 04 0e 1f 16 08 0f 0c +00 00 63 04 06 1f 06 04 0d 0c 00 00 5e 04 03 3c 2b 00 00 00 32 0c 02 05 00 +63 63 00 00 00 32 00 41 6e 6c 67 42 72 61 73 73 39 63 63 63 32 32 32 00 00 +00 10 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AtackBrass +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank B, voice 6 +0f 1f 04 07 0f 00 02 53 05 0d 0f 0e 00 08 0e 00 01 5b 04 02 10 1f 00 09 0f +00 04 61 05 05 10 05 00 07 0e 00 04 63 04 09 34 1c 15 06 00 52 11 04 04 00 +63 32 00 00 00 32 00 41 74 61 63 6b 42 72 61 73 73 63 63 63 32 32 32 00 01 +00 38 00 01 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Back Brass +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +0d 1f 00 08 0f 00 00 43 04 03 0d 0e 00 0f 00 00 00 47 04 03 1f 1f 00 0f 0f +00 00 00 04 03 0f 1f 00 08 0f 00 00 5a 04 03 3a 1e 00 00 00 52 0c 04 04 00 +63 32 00 00 00 32 00 42 61 63 6b 20 42 72 61 73 73 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BC1 Feed +** Controls: KV, MW (LFO pitch), BC (EG amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 03 00 0a 0e 00 3c 47 04 03 12 1f 00 0a 0f 00 04 4b 08 02 12 1f 00 0a 0f +45 04 4f 08 03 12 1f 00 0a 0f 01 05 5f 08 03 3b 23 01 0a 00 62 0c 02 04 00 +63 32 00 00 00 32 63 42 43 31 20 46 65 65 64 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BC1 Horns +** Controls: KV, MW (LFO pitch), BC (EG amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0b 09 00 08 0e 00 3b 4a 04 0b 09 1f 00 08 0f 00 24 3d 04 03 0a 1f 00 0f 0f +00 25 21 0b 03 0e 1f 00 09 0f 00 2e 63 04 0b 3a 20 05 03 00 62 0c 02 04 00 +63 63 00 00 00 32 63 42 43 31 20 48 6f 72 6e 73 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BC1 Horns +** Controls: MW (LFO pitch), BC (EG amplitude) +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +0e 09 00 08 0e 00 00 4a 04 0b 0e 1f 00 08 0f 00 20 3d 04 03 0f 1f 00 0f 0f +00 20 21 0b 03 12 1f 00 09 0f 00 28 63 04 0b 3a 20 05 03 00 62 0c 02 04 00 +63 63 00 00 00 32 63 42 43 31 20 48 6f 72 6e 73 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Brass 1 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank C, voice 9 +10 09 00 09 0a 00 01 50 04 09 10 0b 00 09 0a 00 01 52 04 0a 14 1f 00 0a 0f +00 01 62 04 0a 13 1f 00 0a 0f 00 01 62 08 0c 3c 20 06 03 00 52 18 02 04 00 +28 32 00 00 00 32 00 42 72 61 73 73 20 20 20 20 31 63 63 63 32 32 32 00 00 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Brass 1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +10 09 00 09 0d 00 01 50 04 09 10 0b 00 09 0d 00 01 52 04 0d 14 1f 00 0a 0f +00 01 62 04 0a 13 1f 00 0a 0f 00 01 62 08 0c 3c 20 06 03 00 52 18 02 04 00 +28 32 00 00 00 32 00 42 72 61 73 73 20 20 20 20 31 63 63 63 32 32 32 00 00 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Brass 1 +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +0d 0d 00 07 0d 01 00 47 04 0e 0d 0d 00 0a 0f 2d 00 4f 04 0e 0d 0d 00 08 0b +00 00 63 04 08 0d 0d 00 08 0b 00 00 63 04 09 3c 23 00 00 00 62 18 04 04 00 +63 32 00 00 00 32 00 42 72 61 73 73 20 20 20 20 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Brass 2 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank C, voice 10 +11 0a 00 09 0a 00 02 53 04 0c 0a 08 00 08 0a 00 02 59 00 08 15 1f 00 0a 0f +00 01 62 04 0e 12 1f 00 09 0f 00 01 63 00 0a 3c 20 06 03 00 52 18 02 04 00 +28 32 00 00 00 32 00 42 72 61 73 73 20 20 20 20 32 63 63 63 32 32 32 00 00 +00 30 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Brass 2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +11 0d 00 09 0d 00 02 53 04 0c 0d 08 00 08 0d 00 02 59 00 08 15 1f 00 0a 0f +00 01 62 04 0e 12 1f 00 09 0f 00 01 63 00 0a 3c 20 06 03 00 52 18 02 04 00 +28 32 00 00 00 32 00 42 72 61 73 73 20 20 20 20 32 63 63 63 32 32 32 00 00 +00 30 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Brass 2 +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +0c 07 03 04 0f 16 00 4e 00 06 0e 07 02 06 0e 21 00 54 00 06 17 0d 00 04 0f +00 00 5c 00 08 16 0d 00 06 0f 00 00 5c 00 08 34 23 00 00 00 62 18 04 04 00 +63 32 00 00 00 32 00 42 72 61 73 73 20 20 20 20 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Brass 3 +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +19 05 00 05 0e 0a 00 51 04 06 1f 04 00 05 0a 00 00 37 04 00 14 0b 0f 0a 0f +00 00 50 04 06 14 1f 00 0a 0f 00 00 63 04 00 32 23 00 00 00 62 0c 04 04 00 +63 32 00 00 00 32 00 42 72 61 73 73 20 20 20 20 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Brass 4 +** Controls: MW (LFO pitch) +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +0f 0a 00 05 0d 00 00 49 04 03 15 1f 00 0a 0f 00 00 5c 04 03 15 1f 00 0a 0f +00 00 5c 04 03 15 1f 00 0a 0f 00 00 5c 04 03 3d 23 14 0a 00 62 0c 04 04 00 +63 32 00 00 00 32 00 42 72 61 73 73 20 20 20 20 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Brass 5 +** Controls: MW (LFO pitch) +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +11 0e 00 05 0e 0a 00 4a 04 03 11 11 00 09 0c 00 00 46 04 03 1f 10 00 0f 05 +20 00 34 0b 0b 15 1f 00 0b 0f 00 00 60 04 0b 3a 23 1b 0a 00 62 0c 04 04 00 +63 32 00 00 00 32 00 42 72 61 73 73 20 20 20 20 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Brass 6 +** Controls: MW (LFO pitch) +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +1f 13 00 03 0b 00 00 55 04 03 1f 15 11 03 0c 1e 00 4f 10 03 1f 1f 00 03 0f +1e 00 46 04 03 1f 1f 00 05 0f 00 00 5a 04 03 3b 23 0f 10 00 62 0c 04 04 00 +63 32 00 00 00 32 00 42 72 61 73 73 20 20 20 20 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Brass 7 +** Controls: MW (LFO pitch) +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +1f 11 13 0c 0b 0f 00 48 22 03 1f 0b 00 03 0f 1e 00 39 04 03 1f 11 00 03 0e +1e 00 5d 04 03 19 1f 00 05 0f 00 00 5a 08 03 39 23 0f 10 00 62 0c 04 04 00 +63 32 00 00 00 32 00 42 72 61 73 73 20 20 20 20 37 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Brass 5th +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 06 06 08 0b 21 02 55 0a 02 13 05 06 08 0b 0a 04 4b 08 06 13 15 06 08 0b +0a 06 63 0a 02 13 05 06 08 0b 0a 05 63 08 06 2c 26 21 00 47 12 0c 04 05 00 +28 32 00 00 00 32 00 42 72 61 73 73 20 35 74 68 20 63 63 63 32 32 32 00 00 +00 20 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Brass 5th +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +10 06 06 08 0b 21 02 55 0a 02 13 05 06 08 0b 0a 02 4b 08 06 13 15 06 08 0b +0a 01 63 0a 02 13 05 06 08 0b 0a 00 63 08 06 2c 26 21 00 47 12 0c 04 05 00 +28 32 00 00 00 32 00 42 72 61 73 73 20 35 74 68 20 63 63 63 32 32 32 00 00 +00 20 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Brass....1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +08 07 06 08 0c 27 02 58 04 06 08 09 05 09 0e 47 03 60 04 04 14 08 06 08 0d +00 05 5a 04 02 13 07 06 08 0c 00 04 5f 04 00 3c 1f 2d 01 00 42 18 04 05 00 +28 32 00 00 00 32 00 42 72 61 73 73 2e 2e 2e 2e 31 63 63 63 32 32 32 00 20 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Brass....1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +08 07 06 08 0c 27 02 58 04 06 08 09 05 09 0e 47 01 60 04 04 15 08 06 08 0d +00 00 5a 04 02 15 07 06 08 0c 00 00 5f 04 00 3c 1f 2d 01 00 42 18 04 05 00 +28 32 00 00 00 32 00 42 72 61 73 73 2e 2e 2e 2e 31 63 63 63 32 32 32 00 20 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Brass....2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +14 1b 06 07 09 27 01 51 04 04 0e 0a 04 0a 00 00 05 4b 04 0c 0f 0a 06 07 0c +00 06 4e 04 05 11 07 06 08 0c 00 06 63 04 0d 3b 23 2d 05 00 22 18 04 05 00 +28 32 00 00 00 32 00 42 72 61 73 73 2e 2e 2e 2e 32 63 63 63 32 32 32 00 50 +00 30 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Brass....2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +14 1b 06 07 09 27 01 51 04 04 0e 0a 04 0a 00 00 01 4b 04 0c 0f 0a 06 07 0c +00 02 4e 00 05 11 07 06 08 0c 00 01 63 04 0d 3b 23 2d 05 00 22 18 04 05 00 +28 32 00 00 00 32 00 42 72 61 73 73 2e 2e 2e 2e 32 63 63 63 32 32 32 00 50 +00 30 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Brass....3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 1b 06 07 09 27 05 59 04 05 0c 0a 04 0a 00 00 05 43 04 08 0f 0a 06 07 0c +00 05 49 04 04 10 07 06 08 0c 00 05 63 04 0c 33 23 0c 0f 00 32 18 04 05 00 +28 32 00 00 00 32 00 42 72 61 73 73 2e 2e 2e 2e 33 63 63 63 32 32 32 00 20 +00 40 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Brass....3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +15 1b 06 07 09 27 02 59 04 05 0c 0a 04 0a 00 00 01 43 04 08 0f 0a 06 07 0c +00 01 49 04 04 10 07 06 08 0c 00 01 63 04 0c 33 23 0c 0f 00 32 18 04 05 00 +28 32 00 00 00 32 00 42 72 61 73 73 2e 2e 2e 2e 33 63 63 63 32 32 32 00 20 +00 40 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BrassChime +** Controls: KV, MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +11 04 04 09 0f 00 03 50 04 0b 1f 06 06 05 0d 00 45 52 19 03 14 07 05 06 0e +00 44 61 04 0b 1f 06 06 06 0d 00 46 53 0d 02 64 24 23 00 2b 06 18 04 04 00 +63 01 63 00 00 32 00 42 72 61 73 73 43 68 69 6d 65 63 63 63 32 32 32 00 10 +00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BrassChime +** Controls: KV, MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +11 04 04 09 0f 00 01 50 04 0b 1f 06 06 05 0d 00 41 52 19 03 14 07 05 06 0e +00 40 61 04 0b 1f 06 06 06 0d 00 41 53 0d 02 64 24 23 00 2b 06 18 04 04 00 +63 01 63 00 00 32 00 42 72 61 73 73 43 68 69 6d 65 63 63 63 32 32 32 00 10 +00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BrassEns.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0c 11 03 06 0f 00 02 47 00 0e 15 13 05 07 0f 3c 03 44 00 00 10 1f 04 06 0f +00 04 61 00 02 0e 0c 07 06 0e 14 04 60 00 02 5c 0e 00 0d 00 12 18 04 04 00 +63 32 00 00 00 32 00 42 72 61 73 73 45 6e 73 2e 31 63 63 63 32 32 32 00 00 +00 30 00 20 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BrassEns.1 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 11 03 06 0f 00 00 47 00 0e 15 13 05 07 0f 3c 00 44 00 00 13 1f 04 06 0f +00 00 61 00 02 14 0c 07 06 0e 14 00 60 00 02 5c 0e 00 0d 00 12 18 04 04 00 +63 32 00 00 00 32 00 42 72 61 73 73 45 6e 73 2e 31 63 63 63 32 32 32 00 00 +00 30 00 20 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BrassEns.2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 11 03 06 0f 00 01 4f 04 0d 0e 13 04 07 0f 2b 01 60 04 01 13 1f 04 06 0f +00 45 62 04 01 14 0c 07 06 0e 14 04 63 04 05 35 26 00 00 26 16 18 04 04 00 +63 32 00 00 00 32 00 42 72 61 73 73 45 6e 73 2e 32 63 63 63 32 32 32 00 30 +00 60 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BrassEns.2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 11 03 06 0f 00 01 4f 04 0d 0e 13 04 07 0f 2b 01 60 04 01 13 1f 04 06 0f +00 40 62 04 01 14 0c 07 06 0e 14 01 63 04 05 35 26 00 00 26 16 18 04 04 00 +63 32 00 00 00 32 00 42 72 61 73 73 45 6e 73 2e 32 63 63 63 32 32 32 00 30 +00 60 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BrassEns.3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0e 05 03 04 0f 00 01 57 04 0a 0e 09 04 06 0f 00 02 45 04 00 0c 1f 04 06 0f +00 04 5c 04 05 0f 0c 04 05 0e 00 05 60 04 05 64 20 33 0b 00 22 18 04 04 00 +63 32 00 00 00 32 00 42 72 61 73 73 45 6e 73 2e 33 63 63 63 32 32 32 00 30 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BrassEns.3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +13 05 03 04 0f 00 01 52 00 0b 16 09 04 06 0f 00 01 45 04 03 10 1f 04 06 0f +00 00 5c 00 03 13 0c 04 05 0e 00 00 60 00 03 64 20 33 0b 00 22 18 04 04 00 +63 32 00 00 00 32 00 42 72 61 73 73 45 6e 73 2e 33 63 63 63 32 32 32 00 40 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BrassEns.4 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0f 03 09 0c 00 02 3a 04 09 14 08 04 09 0f 00 02 41 04 02 0c 0c 09 07 0f +00 05 3f 04 05 11 05 04 07 0e 00 04 63 04 04 63 20 33 0b 00 32 18 02 04 00 +63 32 00 00 00 32 00 42 72 61 73 73 45 6e 73 2e 34 63 63 63 32 32 32 00 00 +00 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BrassEns.4 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0f 03 09 0c 00 02 3a 04 09 1f 08 04 09 0f 00 02 41 04 02 1f 0c 09 07 0f +00 01 3f 04 05 0f 05 04 07 0e 00 00 63 04 04 63 20 33 0b 00 32 18 02 04 00 +63 32 00 00 00 32 00 42 72 61 73 73 45 6e 73 2e 34 63 63 63 32 32 32 00 00 +00 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BrassSynth +** Controls: KV, MW (LFO pitch) +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +0d 0a 00 06 0d 00 39 53 04 0c 09 05 00 05 0d 00 39 59 00 08 0e 16 00 07 0f +00 01 62 04 0e 0e 16 00 06 0f 00 01 63 00 0a 3c 20 06 03 00 52 18 02 04 00 +28 32 00 00 00 32 00 42 72 61 73 73 53 79 6e 74 68 63 63 63 32 32 32 00 00 +00 30 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Brass.Vibe +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 1f 06 07 09 00 02 54 04 06 10 0a 05 0a 00 00 03 52 04 03 0f 0a 06 07 0c +5a 06 4d 04 03 11 07 06 08 0c 00 06 60 04 00 73 23 00 19 00 32 18 02 05 00 +63 32 00 32 00 32 00 42 72 61 73 73 2e 56 69 62 65 63 63 63 32 32 32 00 10 +00 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Brass.Vibe +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +15 1f 06 07 09 00 02 54 04 06 10 0a 05 0a 00 00 02 52 04 03 0f 0a 06 07 0c +5a 00 4d 04 03 11 07 06 08 0c 00 01 60 04 00 73 23 00 19 00 32 18 02 05 00 +63 32 00 32 00 32 00 42 72 61 73 73 2e 56 69 62 65 63 63 63 32 32 32 00 10 +00 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Brassy * +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0e 08 00 03 0f 19 01 51 04 06 0d 08 00 04 0f 27 00 4d 04 00 12 1f 00 06 0f +09 00 63 04 06 10 0c 00 05 0f 0d 00 63 04 03 34 17 00 0b 00 52 05 02 04 00 +28 1e 00 00 00 32 00 42 72 61 73 73 79 20 20 20 2a 63 63 63 32 32 32 00 08 +00 08 00 08 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Chariots +** Controls: KV, MW (LFO amplitude) +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +0e 0e 00 02 0f 00 40 4e 04 00 0d 0e 00 02 0f 00 00 32 00 06 0f 0c 00 04 0f +00 42 63 08 08 0d 0e 00 04 0f 00 02 63 04 0e 3c 1d 00 00 08 0d 18 02 04 00 +28 32 0d 00 00 32 00 43 68 61 72 69 6f 74 73 20 20 63 63 63 32 32 32 00 20 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ChorusBras +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank B, voice 4 +0e 08 00 06 0d 00 02 4e 05 06 0e 08 00 09 0d 00 02 57 04 00 0e 12 00 08 0f +00 02 63 05 06 0e 12 00 08 0f 00 02 63 04 00 3c 1c 06 06 00 52 05 04 04 00 +63 32 00 00 00 32 00 43 68 6f 72 75 73 42 72 61 73 63 63 63 32 32 32 00 01 +00 38 00 01 00 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ensemble * +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 0c 00 02 0f 00 00 46 0a 00 0d 14 00 04 0f 2f 00 4e 09 06 0b 0b 00 05 0f +00 02 63 09 06 0d 0b 00 05 0f 00 02 63 13 04 3c 1e 2d 0c 00 42 05 02 04 00 +28 63 00 00 00 32 00 45 6e 73 65 6d 62 6c 65 20 2a 63 63 63 32 32 32 00 30 +00 12 00 02 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ensemble 1 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank C, voice 3 +14 06 00 04 0a 14 02 3d 1c 06 0b 04 02 04 07 14 01 52 13 00 0a 07 02 05 0a +00 01 63 09 06 0f 06 01 05 0b 00 01 5e 0a 00 3c 21 08 0c 00 52 05 02 04 00 +63 32 00 00 00 32 00 45 6e 73 65 6d 62 6c 65 20 31 63 63 63 32 32 32 00 40 +00 30 00 22 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ensemble 1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +14 06 00 04 0a 14 02 3d 1c 06 0b 04 02 04 07 14 01 52 13 00 0a 07 02 05 0d +00 01 63 09 06 0f 06 01 05 0b 00 01 5e 0a 00 3c 21 08 0c 00 52 05 02 04 00 +63 32 00 00 00 32 00 45 6e 73 65 6d 62 6c 65 20 31 63 63 63 32 32 32 00 40 +00 30 00 22 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ensemble 2 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank C, voice 4 +14 06 00 04 08 14 02 3d 1c 06 0b 04 02 04 08 14 01 50 13 00 0c 07 02 05 0b +00 01 63 09 06 11 06 01 05 0b 00 01 5e 0a 00 3c 21 08 0c 00 52 05 02 04 00 +63 32 00 00 00 32 00 45 6e 73 65 6d 62 6c 65 20 32 63 63 63 32 32 32 00 50 +00 30 00 42 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Full Brass +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank B, voice 2 +0f 1f 08 09 0f 00 03 4f 04 05 0f 1f 09 09 0f 00 02 63 04 03 10 1f 00 08 0f +00 02 63 04 05 11 1f 00 08 0f 00 02 63 04 06 3d 1d 0f 08 00 52 0c 04 04 00 +63 32 00 00 00 32 00 46 75 6c 6c 20 42 72 61 73 73 63 63 63 32 32 32 00 00 +00 30 00 00 00 00 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hard Brass +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +14 1f 00 0a 0f 00 00 47 04 03 1f 1f 00 0f 0f 00 00 3a 04 03 1f 1f 00 0f 0f +00 00 34 04 03 19 1f 00 0a 0f 00 00 63 04 03 3a 23 00 00 00 62 18 07 04 00 +63 63 00 00 00 32 00 48 61 72 64 20 42 72 61 73 73 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Horn +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank C, voice 14 +0a 07 00 09 0e 0a 01 4d 00 0b 10 08 00 0a 0a 1c 02 43 00 0b 10 0f 00 0a 05 +09 03 40 06 0b 0f 18 00 0a 0f 00 02 63 00 0b 3a 1e 09 02 00 62 18 02 04 00 +28 13 00 00 00 32 00 48 6f 72 6e 20 20 20 20 20 20 63 63 63 32 32 32 00 00 +00 20 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Horn +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0d 07 00 09 0e 0d 01 4d 00 0b 10 08 00 0a 0a 1c 02 43 00 0b 10 0f 00 0a 05 +09 03 40 06 0b 0f 18 00 0a 0f 00 02 63 00 0b 3a 1e 09 02 00 62 18 02 04 00 +28 13 00 00 00 32 00 48 6f 72 6e 20 20 20 20 20 20 63 63 63 32 32 32 00 00 +00 20 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Horn +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +10 09 00 09 0d 0a 00 41 04 03 0f 0b 00 08 0e 00 00 3f 04 03 1f 11 00 0f 03 +0a 00 31 18 0b 12 1f 00 0a 0f 00 00 5a 04 03 3a 23 00 00 00 62 0c 04 04 00 +63 32 00 00 00 32 00 48 6f 72 6e 20 20 20 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Horn.....1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0d 1f 0b 07 0f 00 02 55 04 04 0e 1f 00 08 0f 00 03 51 04 06 10 1f 00 09 0f +00 05 5a 08 04 0f 1f 00 08 0f 00 05 5b 04 06 3d 23 00 00 00 62 0c 02 04 00 +63 63 00 00 00 32 00 48 6f 72 6e 2e 2e 2e 2e 2e 31 63 63 63 32 32 32 00 20 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Horn.....1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +0d 1f 0b 07 0f 00 02 55 04 04 0e 1f 00 08 0f 00 01 51 04 06 10 1f 00 09 0f +00 01 5a 08 04 0f 1f 00 08 0f 00 00 5b 04 06 3d 23 00 00 00 62 0c 02 04 00 +63 63 00 00 00 32 00 48 6f 72 6e 2e 2e 2e 2e 2e 31 63 63 63 32 32 32 00 20 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Horn.....2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 0a 06 07 09 00 01 50 08 06 0f 08 06 08 0a 00 05 49 04 03 16 10 06 0a 00 +00 05 46 1a 14 10 07 06 09 0c 00 06 60 04 01 22 23 00 04 00 32 0c 02 04 00 +63 63 00 00 00 32 00 48 6f 72 6e 2e 2e 2e 2e 2e 32 63 63 63 32 32 32 00 30 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Horn.....2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 0a 06 07 09 00 01 50 08 06 0f 08 06 08 0a 00 01 49 04 03 16 10 06 0a 00 +00 02 46 1a 14 10 07 06 09 0c 00 01 60 04 01 22 23 00 04 00 32 0c 02 04 00 +63 63 00 00 00 32 00 48 6f 72 6e 2e 2e 2e 2e 2e 32 63 63 63 32 32 32 00 30 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Horn.....3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0b 1f 06 07 0f 00 01 4e 04 05 0f 09 05 07 05 42 06 54 04 1a 0f 09 06 07 04 +00 04 49 04 14 10 06 04 08 0b 00 06 60 04 02 2b 23 00 08 00 42 0c 02 04 00 +63 63 00 00 00 32 00 48 6f 72 6e 2e 2e 2e 2e 2e 33 63 63 63 32 32 32 00 10 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Horn.....3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0b 1f 06 07 0f 00 01 4e 04 05 0f 09 05 07 05 42 01 54 04 1a 0f 09 06 07 04 +00 00 49 04 14 10 06 04 08 0b 00 01 60 04 02 2b 23 00 08 00 42 0c 02 04 00 +63 63 00 00 00 32 00 48 6f 72 6e 2e 2e 2e 2e 2e 33 63 63 63 32 32 32 00 10 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Horn.....4 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 07 03 08 0c 00 03 51 04 06 10 0a 04 0a 0c 00 04 63 04 04 0f 0a 03 0a 0f +00 04 63 04 02 12 16 02 0a 0b 00 06 61 04 04 2d 20 13 09 00 32 0c 02 04 00 +63 63 00 00 00 32 00 48 6f 72 6e 2e 2e 2e 2e 2e 34 63 63 63 32 32 32 00 50 +00 10 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Horn.....4 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +12 07 03 08 0c 00 03 51 04 06 10 0a 04 0a 0c 00 00 63 04 04 0f 0a 03 0a 0f +00 01 63 04 02 12 16 02 0a 0b 00 00 61 04 04 2d 20 13 09 00 32 0c 02 04 00 +63 63 00 00 00 32 00 48 6f 72 6e 2e 2e 2e 2e 2e 34 63 63 63 32 32 32 00 50 +00 10 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Horn.....5 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 07 08 0a 0f 00 04 49 04 01 11 09 08 09 0d 00 03 53 04 0d 15 04 01 0c 0f +1e 06 3c 04 01 11 06 05 09 0f 00 05 5a 03 05 63 23 00 00 00 32 11 02 04 00 +63 63 00 00 00 32 00 48 6f 72 6e 2e 2e 2e 2e 2e 35 63 63 63 32 32 32 00 08 +00 38 00 08 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Horn.....5 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +12 07 08 0a 0f 00 02 49 04 01 11 09 08 09 0d 00 01 53 04 0d 15 04 01 0c 0f +1e 00 3c 04 01 11 06 05 09 0f 00 00 5a 03 05 63 23 00 00 00 32 11 02 04 00 +63 63 00 00 00 32 00 48 6f 72 6e 2e 2e 2e 2e 2e 35 63 63 63 32 32 32 00 08 +00 38 00 08 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Horn.....6 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 07 02 0a 0f 00 02 4f 08 06 11 08 06 09 0d 00 04 63 08 0c 15 04 01 0c 0f +1e 06 57 0d 02 10 06 05 09 0f 00 05 63 04 04 75 23 00 08 00 42 0c 02 04 00 +63 63 00 00 00 32 00 48 6f 72 6e 2e 2e 2e 2e 2e 36 63 63 63 32 32 32 00 00 +00 30 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Horn.....6 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +12 07 02 0a 0f 00 02 4f 08 06 11 08 06 09 0d 00 00 63 08 0c 15 04 01 0c 0f +1e 00 57 0d 02 10 06 05 09 0f 00 00 63 04 04 75 23 00 08 00 42 0c 02 04 00 +63 63 00 00 00 32 00 48 6f 72 6e 2e 2e 2e 2e 2e 36 63 63 63 32 32 32 00 00 +00 30 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Horn.....7 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 0a 06 07 09 00 01 4e 08 06 13 08 06 08 0a 00 04 47 04 03 0f 03 06 07 09 +55 06 3e 10 04 15 07 06 09 0c 00 05 62 04 01 2b 23 00 00 00 32 0c 02 04 00 +63 63 00 00 00 32 00 48 6f 72 6e 2e 2e 2e 2e 2e 37 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Horn.....7 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +10 0a 06 07 09 00 01 4e 08 06 13 08 06 08 0a 00 00 47 04 03 0f 03 06 07 09 +55 01 3e 10 04 15 07 06 09 0c 00 01 62 04 01 2b 23 00 00 00 32 0c 02 04 00 +63 63 00 00 00 32 00 48 6f 72 6e 2e 2e 2e 2e 2e 37 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Horns +** Controls: KV +** Source: DX100 GLIB patch (Michael Kesti and others) +0e 1f 08 07 0f 00 00 46 04 03 0e 1f 04 08 0f 00 07 4b 04 06 10 1f 05 09 0f +00 00 56 04 03 0f 1f 13 08 0f 00 00 46 04 06 3d 23 00 00 00 62 0c 02 04 00 +63 63 00 00 00 32 00 48 6f 72 6e 73 20 20 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Horns +** Controls: KV +** Source: DX100 GLIB patch (Michael Kesti and others) +1f 08 08 07 08 00 03 52 04 03 1f 0a 04 08 0f 00 03 48 04 06 1f 10 05 09 0f +00 04 5b 08 03 1f 05 09 08 0f 00 04 63 08 03 3d 23 00 00 00 62 0c 02 04 00 +63 63 00 00 00 32 00 48 6f 72 6e 73 20 20 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Horns +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +0d 1f 0b 07 0f 00 00 46 04 03 0e 1f 00 08 0f 00 00 48 04 06 10 1f 00 09 0f +00 00 5b 04 03 0f 1f 00 08 0f 00 00 5b 04 06 3d 23 00 00 00 62 0c 02 04 00 +63 63 00 00 00 32 00 48 6f 72 6e 73 20 20 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Horns BC +** Controls: KV, BC (EG amplitude) +** Source: Yamaha TX81Z factory preset, bank B, voice 8 +0e 09 00 07 0e 00 22 51 04 03 0f 1f 00 08 0f 00 22 52 05 06 11 1f 00 09 0f +00 23 63 04 00 10 1f 00 09 0f 00 2a 60 04 00 3d 1d 00 00 00 52 05 04 04 00 +63 32 00 00 00 32 63 48 6f 72 6e 73 20 42 43 20 20 63 63 63 32 32 32 00 08 +00 01 00 08 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: JonesBrass +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +0b 03 01 07 0d 1f 00 49 04 06 0b 03 01 07 0d 00 00 5d 04 0e 11 01 01 05 0d +00 00 63 04 10 16 04 01 05 0d 00 00 3c 04 10 3c 23 00 00 00 62 0c 02 04 00 +63 32 00 32 00 32 00 4a 6f 6e 65 73 42 72 61 73 73 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: LightBrass +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 04 01 06 0d 00 00 3b 04 04 1d 12 13 06 0c 00 03 41 08 03 1d 0a 09 06 0c +5a 05 42 04 03 10 03 01 09 0f 00 05 60 04 03 02 1c 0f 10 00 42 18 02 05 00 +63 32 00 32 00 32 00 4c 69 67 68 74 42 72 61 73 73 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: LightBrass +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +10 04 01 06 0d 00 00 3b 04 04 1d 12 13 06 0c 00 00 41 08 03 1d 0a 09 06 0c +5a 00 42 04 03 10 03 01 09 0f 00 01 60 04 03 02 1c 0f 10 00 42 18 02 05 00 +63 32 00 32 00 32 00 4c 69 67 68 74 42 72 61 73 73 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + +--Bank 2 + +** Name: MelloBrass +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0e 11 02 06 0d 00 02 53 04 00 0e 07 02 07 0c 00 05 5a 04 06 0f 0f 01 08 0f +5a 06 63 04 00 10 12 00 07 0f 00 06 5f 04 05 34 1c 0f 0b 00 42 18 02 05 00 +63 32 00 32 00 32 00 4d 65 6c 6c 6f 42 72 61 73 73 63 63 63 32 32 32 00 00 +00 20 00 00 00 20 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MelloBrass +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0e 11 02 06 0d 00 02 53 04 00 0e 07 02 07 0c 00 02 5a 04 06 0f 0f 01 08 0f +5a 01 63 04 00 10 12 00 07 0f 00 01 5f 04 05 34 1c 0f 0b 00 42 18 02 05 00 +63 32 00 32 00 32 00 4d 65 6c 6c 6f 42 72 61 73 73 63 63 63 32 32 32 00 00 +00 20 00 00 00 20 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MufflBrass +** Controls: KV, MW (LFO pitch) +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +16 0f 00 09 0d 00 02 52 04 0c 12 0a 00 08 0d 00 02 47 00 08 1a 1f 00 0a 0f +00 01 63 04 0e 17 1f 00 09 0f 00 01 63 00 0a 3c 20 06 03 00 52 18 02 04 00 +28 32 00 00 00 32 00 4d 75 66 66 6c 42 72 61 73 73 63 63 63 32 32 32 00 00 +00 30 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ornt Brass +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 09 09 07 0d 3f 03 4b 08 0b 12 09 09 07 0d 0d 04 52 04 0b 0f 09 09 07 0d +63 05 42 04 13 10 09 09 07 0d 23 06 63 04 0b 7a 20 3e 06 00 22 0c 02 04 00 +63 63 00 00 00 32 00 4f 72 6e 74 20 42 72 61 73 73 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ornt Brass +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +15 09 09 07 0d 3f 00 4b 08 0b 12 09 09 07 0d 0d 00 52 04 0b 0f 09 09 07 0d +63 00 42 04 13 10 09 09 07 0d 23 00 63 04 0b 7a 20 3e 06 00 22 0c 02 04 00 +63 63 00 00 00 32 00 4f 72 6e 74 20 42 72 61 73 73 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PianoBrass +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 12 06 07 0f 0a 04 5d 04 0b 1b 06 06 07 08 00 06 56 04 0b 15 07 06 08 0f +00 05 5c 04 02 1b 06 06 07 08 00 05 63 04 0d 64 23 00 00 00 22 0c 02 04 00 +28 02 00 00 00 32 00 50 69 61 6e 6f 42 72 61 73 73 63 63 63 32 32 32 00 20 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PianoBrass +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +08 1f 00 05 0f 10 04 4e 04 06 1f 05 00 0f 0b 63 06 46 0d 1b 0a 1f 00 09 0f +63 03 63 04 1b 1f 06 04 06 0f 00 06 63 08 13 3c 23 34 03 00 62 0c 07 04 00 +63 32 63 32 00 32 00 50 69 61 6e 6f 42 72 61 73 73 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PianoBrass +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +18 12 06 07 0f 0a 01 5d 04 0b 1b 06 06 07 08 00 01 56 04 0b 15 07 06 08 0f +00 00 5c 04 02 1b 06 06 07 08 00 00 63 04 0d 64 23 00 00 00 22 0c 02 04 00 +28 02 00 00 00 32 00 50 69 61 6e 6f 42 72 61 73 73 63 63 63 32 32 32 00 20 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PianoBrass +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +08 1f 00 05 0f 10 01 4e 04 06 1f 05 00 0f 0b 63 02 46 0d 1b 0a 1f 00 09 0f +63 00 63 04 1b 1f 06 04 06 0f 00 00 63 08 13 3c 23 34 03 00 62 0c 07 04 00 +63 32 63 32 00 32 00 50 69 61 6e 6f 42 72 61 73 73 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Pianobrass +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +0b 03 01 07 0d 1f 00 48 04 0e 16 0c 08 04 0b 34 00 35 2a 16 11 01 01 05 0d +00 00 63 04 10 16 04 01 05 0d 00 00 63 04 10 3c 23 00 00 00 62 0c 02 04 00 +63 32 00 32 00 32 00 50 69 61 6e 6f 62 72 61 73 73 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: POWERBRASS +** Controls: MW (LFO pitch) +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +10 0f 00 03 0c 00 00 49 0a 06 1a 1f 00 03 0f 00 00 49 04 03 13 1f 00 05 0f +00 00 48 04 03 1b 1f 00 0b 0f 00 00 63 04 03 38 20 14 1f 00 52 0c 07 04 00 +63 63 00 00 00 32 00 50 4f 57 45 52 42 52 41 53 53 63 63 63 32 32 32 00 30 +00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PowerBrass +** Controls: MW (LFO pitch) +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +10 0f 00 03 0c 00 00 49 0a 06 1a 1f 00 03 0f 00 00 49 04 03 13 1f 00 05 0f +00 00 48 04 03 1b 1f 00 0b 0f 00 00 63 04 03 38 20 14 1f 00 52 0c 07 04 00 +63 63 00 00 00 32 00 50 6f 77 65 72 42 72 61 73 73 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SplatBrass +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 1f 00 08 0f 63 02 5b 04 03 0c 0a 04 09 0a 00 05 54 04 0c 15 1f 00 0a 0b +4c 05 45 0d 03 14 07 03 09 0c 00 05 62 04 03 73 23 01 0d 00 32 18 04 05 00 +28 32 00 00 00 32 00 53 70 6c 61 74 42 72 61 73 73 63 63 63 32 32 32 00 40 +00 20 00 20 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SplatBrass +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 1f 00 08 0f 63 02 5b 04 03 0c 0a 04 09 0a 00 01 54 04 0c 15 1f 00 0a 0b +4c 01 45 0d 03 14 07 03 09 0c 00 01 62 04 03 73 23 01 0d 00 32 18 04 05 00 +28 32 00 00 00 32 00 53 70 6c 61 74 42 72 61 73 73 63 63 63 32 32 32 00 40 +00 20 00 20 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SpitBoneBC +** Controls: KV, MW (LFO pitch), BC (EG amplitude) +** Source: Yamaha TX81Z factory preset, bank B, voice 7 +0c 05 00 08 0e 00 2a 52 04 0b 10 1f 00 08 0f 00 1a 46 04 03 1f 0f 00 08 06 +23 23 48 0b 03 0f 1f 00 09 0f 00 2a 63 04 0c 3a 1f 19 07 00 52 0c 04 04 00 +63 32 00 00 00 32 63 53 70 69 74 42 6f 6e 65 42 43 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Brass 1 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank A, voice 3 +12 0a 00 09 0e 00 01 53 04 08 12 0b 00 09 0e 00 01 52 04 0e 18 1f 00 0b 0f +00 01 62 04 00 18 1f 00 0b 0f 00 01 62 04 06 3c 21 1e 04 00 62 18 02 04 00 +28 32 00 00 00 32 00 53 79 2e 42 72 61 73 73 20 31 63 5f 63 31 32 32 00 00 +00 30 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Brass 2 +** Controls: KV +** Source: Yamaha DX11 factory preset, bank A, voice 4 +12 0c 00 09 06 00 01 55 04 08 12 0c 00 09 06 00 01 5a 04 0e 18 1f 00 0b 0f +00 01 62 04 00 18 1f 00 0b 0f 00 01 62 04 06 2c 21 00 00 00 62 0c 02 04 00 +28 32 00 00 00 32 00 53 79 2e 42 72 61 73 73 20 32 63 63 63 32 32 32 00 30 +00 30 00 70 00 70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Brass 3 +** Controls: KV +** Source: Yamaha DX11 factory preset, bank A, voice 5 +0f 08 00 04 0e 07 01 52 04 0b 12 0a 00 07 0b 00 00 2d 04 0b 0f 0b 00 05 0b +00 00 4d 04 0b 11 1f 00 0a 0f 00 01 61 04 0b 3a 1f 00 00 00 62 0c 02 04 00 +28 32 00 00 00 32 00 53 79 2e 42 72 61 73 73 20 33 63 63 63 32 32 32 00 30 +00 60 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Brass 3 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 08 00 04 0e 07 01 52 04 0b 12 0d 00 07 0b 00 00 2d 04 0b 0f 0b 00 05 0b +00 00 4d 04 0b 11 1f 00 0a 0f 00 01 61 04 0b 3a 1f 00 00 00 62 0c 02 04 00 +28 32 00 00 00 32 00 53 79 2e 42 72 61 73 73 20 33 63 63 63 32 32 32 00 30 +00 60 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Brass 4 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank A, voice 6 +0f 0f 00 01 0e 00 01 4c 04 06 0f 0f 00 01 0e 00 02 4c 04 00 11 09 00 0a 0c +00 00 63 04 06 11 09 00 0a 0c 00 00 63 04 00 3c 1c 1c 0a 00 52 18 02 04 00 +63 32 00 00 00 32 00 53 79 2e 42 72 61 73 73 20 34 63 60 63 30 32 32 00 10 +00 10 00 30 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: TightBrass +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 06 03 09 0a 21 02 5b 04 0b 13 0e 09 0a 0a 00 04 53 08 0c 15 06 06 09 0b +0a 06 63 04 0b 15 06 08 09 0c 00 05 61 04 1b 2c 22 21 00 10 32 18 04 05 00 +28 32 00 00 00 32 00 54 69 67 68 74 42 72 61 73 73 63 63 63 32 32 32 00 20 +00 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: TightBrass +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +12 06 03 09 0a 21 02 5b 04 0b 13 0e 09 0a 0a 00 01 53 08 0c 15 06 06 09 0b +0a 01 63 04 0b 15 06 08 09 0c 00 00 61 04 1b 2c 22 21 00 10 32 18 04 05 00 +28 32 00 00 00 32 00 54 69 67 68 74 42 72 61 73 73 63 63 63 32 32 32 00 20 +00 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tpt.Sect.* +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +14 0e 00 09 0e 00 01 54 04 03 15 0f 00 0a 0c 00 00 5f 08 0e 19 11 00 0a 0f +00 00 63 04 01 17 0e 00 0a 0e 00 03 63 08 05 3c 23 00 00 00 52 0c 02 04 00 +28 63 00 00 00 32 00 54 70 74 2e 53 65 63 74 2e 2a 63 63 63 32 32 32 00 00 +00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tpt&Woodwd +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 02 05 0f 1b 42 4d 05 06 07 1f 02 05 0f 27 03 4f 04 00 11 1f 00 07 0f +00 01 63 05 0e 0a 1f 00 04 0f 0c 01 60 04 08 3c 1f 0e 1c 00 32 11 04 05 00 +28 32 00 00 00 32 00 54 70 74 26 57 6f 6f 64 77 64 63 63 63 32 32 32 00 31 +00 38 00 11 00 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: WindEns..1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0e 0d 03 09 0f 23 02 49 08 05 0f 10 06 07 09 00 02 41 0b 03 12 0c 05 08 0f +45 05 4c 04 02 0c 07 05 07 0b 00 03 5f 04 02 2b 1d 1e 35 00 12 18 02 04 00 +63 32 00 00 01 32 00 57 69 6e 64 45 6e 73 2e 2e 31 63 63 63 32 32 32 00 20 +00 20 00 00 00 10 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: WindEns..1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0e 0d 03 09 0f 23 02 49 08 05 0f 10 06 07 09 00 02 41 0b 03 12 0c 05 08 0f +45 01 4c 04 02 15 07 05 07 0b 00 00 5f 04 02 2b 1d 1e 35 00 12 18 02 04 00 +63 32 00 00 01 32 00 57 69 6e 64 45 6e 73 2e 2e 31 63 63 63 32 32 32 00 20 +00 20 00 00 00 10 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: WindEns..2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0d 03 09 0f 23 02 50 00 05 16 10 06 07 09 00 02 47 04 03 0d 0c 07 08 0f +45 04 4c 00 02 0d 07 05 07 0b 00 04 5f 04 02 2b 1d 1e 35 00 12 18 02 04 00 +63 32 00 00 01 32 00 57 69 6e 64 45 6e 73 2e 2e 32 63 63 63 32 32 32 00 10 +00 10 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: WindEns..2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0d 03 09 0f 23 02 50 00 05 1f 10 06 07 09 00 01 47 04 03 14 0c 07 08 0f +45 00 4c 00 02 0f 07 05 07 0b 00 00 5f 04 02 2b 1d 1e 35 00 12 18 02 04 00 +63 32 00 00 01 32 00 57 69 6e 64 45 6e 73 2e 2e 32 63 63 63 32 32 32 00 10 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Wood Wind +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank C, voice 18 +12 08 00 0a 0e 36 01 4c 08 08 1f 1f 00 07 0f 00 01 41 08 05 10 1f 00 0c 0f +1a 03 56 04 01 0e 1f 00 0b 0f 00 03 63 08 0e 3c 20 06 04 00 52 0c 02 04 00 +28 32 00 00 00 32 00 57 6f 6f 64 20 57 69 6e 64 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 61 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Wood Wind +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +12 08 00 0a 0e 36 01 4c 08 08 1f 1f 00 07 0f 00 01 41 08 05 10 1f 00 0c 0f +1a 03 56 04 01 0e 1f 00 0b 0f 00 03 63 08 0e 3c 20 06 04 00 52 0c 02 04 00 +28 32 00 00 00 32 00 57 6f 6f 64 20 57 69 6e 64 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: pianohorn +** Description: a horn sound +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: GLIB (Michael Kesti and others) +13 05 00 0e 0a 00 05 59 04 06 1f 09 00 0b 00 43 05 4d 04 13 1f 09 05 08 0e +00 05 59 08 03 1f 12 08 08 0a 00 05 62 04 03 3c 1c 1d 10 00 52 18 01 04 00 +63 32 00 32 00 32 00 70 69 61 6e 6f 68 6f 72 6e 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Accordion + + +** Name: Accordion* +** Controls: BC (EG amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 04 03 0a 02 10 50 40 00 03 13 04 03 07 02 00 00 43 04 02 1f 04 03 07 02 +23 50 38 13 04 0f 04 03 0a 02 10 00 63 08 03 02 23 00 00 00 5a 18 02 04 00 +28 00 00 00 00 32 63 41 63 63 6f 72 64 69 6f 6e 2a 63 63 63 32 32 32 00 60 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Accordion +** Controls: KV +** Source: Yamaha DX11 factory preset, bank C, voice 32 +14 12 00 08 0f 00 02 54 04 08 1f 1f 00 08 0f 00 00 46 04 0e 0e 1f 00 08 0f +0e 00 53 0a 08 0e 1f 00 08 0f 06 02 5c 08 0e 1c 1c 0a 00 00 62 18 02 04 00 +28 32 00 00 00 32 00 41 63 63 6f 72 64 69 6f 6e 20 63 63 63 32 32 32 00 70 +00 10 00 10 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Accordion1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 05 03 07 0f 0a 02 3e 19 03 1f 04 00 05 0f 00 06 49 0d 00 12 05 03 0a 0d +63 06 63 08 04 0e 1f 00 0a 0f 00 06 62 04 06 2c 12 00 03 00 62 18 02 04 00 +28 02 00 00 00 32 00 41 63 63 6f 72 64 69 6f 6e 31 63 63 63 32 32 32 00 20 +00 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Accordion1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 05 03 07 0f 0a 01 3e 19 03 1f 04 00 05 0f 00 01 49 0d 00 12 05 03 0a 0d +63 01 63 08 04 0e 1f 00 0a 0f 00 01 62 04 06 2c 12 00 03 00 62 18 02 04 00 +28 02 00 00 00 32 00 41 63 63 6f 72 64 69 6f 6e 31 63 63 63 32 32 32 00 20 +00 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Accordion2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 06 00 05 0e 0a 01 41 0a 00 1f 04 00 05 0f 00 05 37 0d 00 1f 0b 00 0a 0f +00 05 36 08 06 0e 1f 00 0a 0f 00 06 5d 04 06 3a 12 00 03 00 62 18 02 04 00 +28 02 00 00 00 32 00 41 63 63 6f 72 64 69 6f 6e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Accordion2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +10 06 00 05 0e 0a 01 41 0a 00 1f 04 00 05 0f 00 00 37 0d 00 1f 0b 00 0a 0f +00 00 36 08 06 0e 1f 00 0a 0f 00 01 5d 04 06 3a 12 00 03 00 62 18 02 04 00 +28 02 00 00 00 32 00 41 63 63 6f 72 64 69 6f 6e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Accordion3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 06 00 05 0e 0a 03 3e 1c 00 1f 04 00 05 0f 00 04 37 0d 00 1f 0b 00 0a 0f +00 04 36 0d 06 0e 1f 00 0a 0f 00 06 5c 04 06 3a 12 00 03 00 62 18 02 04 00 +28 02 00 00 00 32 00 41 63 63 6f 72 64 69 6f 6e 33 63 63 63 32 32 32 00 00 +00 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Accordion3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +10 06 00 05 0e 0a 02 3e 1c 00 1f 04 00 05 0f 00 00 37 0d 00 1f 0b 00 0a 0f +00 00 36 0d 06 0e 1f 00 0a 0f 00 01 5c 04 06 3a 12 00 03 00 62 18 02 04 00 +28 02 00 00 00 32 00 41 63 63 6f 72 64 69 6f 6e 33 63 63 63 32 32 32 00 00 +00 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Accordion4 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 06 00 05 0e 0a 02 3e 0d 00 1f 04 00 05 0f 00 06 3d 08 00 1f 0b 00 0a 0f +00 05 36 08 06 0e 1f 00 0a 0f 00 06 5c 08 06 3a 12 00 03 00 62 18 02 04 00 +28 02 00 00 00 32 00 41 63 63 6f 72 64 69 6f 6e 34 63 63 63 32 32 32 00 10 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Accordion4 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +10 06 00 05 0e 0a 02 3e 0d 00 1f 04 00 05 0f 00 01 3d 08 00 1f 0b 00 0a 0f +00 00 36 08 06 0e 1f 00 0a 0f 00 01 5c 08 06 3a 12 00 03 00 62 18 02 04 00 +28 02 00 00 00 32 00 41 63 63 6f 72 64 69 6f 6e 34 63 63 63 32 32 32 00 10 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Squeezebox +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank A, voice 32 +10 06 00 05 0e 0a 01 4a 0a 00 1f 04 00 05 0f 00 01 49 0d 00 1f 0b 00 0a 0f +00 01 46 08 06 0e 1f 00 0a 0f 00 01 5a 04 06 39 19 00 03 00 52 18 02 04 00 +63 32 00 00 00 32 00 53 71 75 65 65 7a 65 62 6f 78 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Bag Pipe + + +** Name: Bag Pipe +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 0a 04 02 0c 00 05 57 0a 03 17 0a 04 02 0d 00 05 4e 04 03 13 07 06 0a 0c +00 06 60 04 0b 13 07 06 0a 0f 00 06 63 0a 0b 24 26 3c 06 00 32 00 02 04 00 +63 32 00 32 00 32 00 20 42 61 67 20 50 69 70 65 20 63 63 63 32 32 32 00 00 +00 20 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bag Pipe +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +18 0a 04 02 0c 00 01 57 0a 03 17 0a 04 02 0d 00 00 4e 04 03 13 07 06 0a 0c +00 01 60 04 0b 13 07 06 0a 0f 00 01 63 0a 0b 24 26 3c 06 00 32 00 02 04 00 +63 32 00 32 00 32 00 20 42 61 67 20 50 69 70 65 20 63 63 63 32 32 32 00 00 +00 20 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Bassoon + + +** Name: Bassoon +** Controls: KV, MW (LFO pitch), MW (LFO amplitude), BC (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank B, voice 13 +10 17 00 06 0f 00 41 44 00 03 19 1f 00 07 0f 35 42 4e 00 03 10 1f 00 01 0f +00 42 4b 04 03 0f 1f 00 09 0f 00 02 5b 08 03 38 1f 08 07 0a 5e 0c 02 04 00 +63 23 1e 32 00 32 00 42 61 73 73 6f 6f 6e 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bassoon..1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 00 03 0a 0d 47 05 50 00 03 12 0d 09 0a 0d 41 05 41 04 03 12 0d 09 0a 0d +43 04 62 08 03 12 0d 09 0a 0e 00 05 63 04 04 1c 25 29 00 00 12 0c 02 04 00 +63 32 00 32 00 32 00 42 61 73 73 6f 6f 6e 2e 2e 31 63 63 63 32 32 32 00 30 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bassoon..1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +12 00 03 0a 0d 47 01 50 00 03 12 0d 09 0a 0d 41 00 41 04 03 12 0d 09 0a 0d +43 00 62 08 03 12 0d 09 0a 0e 00 00 63 04 04 1c 25 29 00 00 12 0c 02 04 00 +63 32 00 32 00 32 00 42 61 73 73 6f 6f 6e 2e 2e 31 63 63 63 32 32 32 00 30 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bassoon..2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +11 16 00 06 0f 00 02 38 04 03 18 1f 00 08 0f 47 05 53 00 03 11 1f 00 01 0f +00 04 45 04 03 0f 1f 00 08 0f 00 04 58 08 03 20 20 0c 06 00 52 0c 00 04 00 +63 32 00 32 00 32 00 42 61 73 73 6f 6f 6e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bassoon..2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +11 16 00 06 0f 00 00 38 04 03 18 1f 00 08 0f 47 01 53 00 03 11 1f 00 01 0f +00 01 45 04 03 0f 1f 00 08 0f 00 00 58 08 03 20 20 0c 06 00 52 0c 00 04 00 +63 32 00 32 00 32 00 42 61 73 73 6f 6f 6e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bassoon..3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 18 06 04 0f 63 01 45 04 03 13 06 06 09 0f 47 03 63 0d 03 13 18 06 09 0f +00 45 63 04 03 12 18 06 09 0f 00 03 63 08 03 35 27 21 00 26 36 0c 00 04 00 +63 32 00 32 00 32 00 42 61 73 73 6f 6f 6e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 20 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bassoon..3 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +12 18 06 04 0f 63 01 45 04 03 13 06 06 09 0f 47 00 63 0d 03 13 18 06 09 0f +00 40 63 04 03 12 18 06 09 0f 00 00 63 08 03 35 27 21 00 26 26 0c 00 04 00 +63 32 00 32 00 32 00 42 61 73 73 6f 6f 6e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 20 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bassoon..4 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +13 06 03 0a 0e 63 01 4e 00 03 12 0c 06 0a 0d 47 03 49 08 0b 13 0d 09 0a 0e +00 45 63 08 03 12 0c 06 0a 0e 00 05 63 04 0b 1c 27 21 00 26 26 0c 00 04 00 +63 32 00 32 00 32 00 42 61 73 73 6f 6f 6e 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bassoon..4 +** Source: from a library of patches collected by Duane Bowker, author unknown +13 06 03 0a 0e 63 00 4e 00 03 12 0c 06 0a 0d 47 00 49 08 0b 13 0d 09 0a 0e +00 40 63 08 03 12 0c 06 0a 0e 00 00 63 04 0b 1c 27 21 00 26 26 0c 00 04 00 +63 32 00 32 00 32 00 42 61 73 73 6f 6f 6e 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BassoonSyn +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 08 05 08 07 19 02 59 00 0e 16 10 00 04 0f 46 05 55 00 03 0f 06 00 0b 0f +00 06 63 04 05 10 1f 00 0a 0f 00 05 60 0a 0b 0d 23 00 00 00 02 0c 07 04 01 +63 32 00 1e 0a 32 63 42 61 73 73 6f 6f 6e 53 79 6e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BassoonSyn +** Source: from a library of patches collected by Duane Bowker, author unknown +16 08 05 08 07 19 00 59 00 0e 16 10 00 04 0f 46 00 55 00 03 0f 06 00 0b 0f +00 00 63 04 05 10 1f 00 0a 0f 00 00 60 0a 0b 0d 23 00 00 00 02 0c 07 04 01 +63 32 00 1e 0a 32 63 42 61 73 73 6f 6f 6e 53 79 6e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Clarinet + + +** Name: Bass Clair +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +13 12 00 09 0d 22 01 47 08 0c 1f 1b 06 04 0e 41 05 3f 08 03 1f 11 00 06 0c +5a 04 52 0d 03 10 1f 00 0b 0f 00 45 55 04 0c 02 25 00 00 29 16 00 02 05 00 +63 32 00 32 00 32 00 42 61 73 73 20 43 6c 61 69 72 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bass Clair +** Source: from a library of patches collected by Duane Bowker, author unknown +13 12 00 09 0d 22 00 47 08 0c 1f 1b 06 04 0e 41 00 3f 08 03 1f 11 00 06 0c +5a 00 52 0d 03 10 1f 00 0b 0f 00 40 55 04 0c 02 25 00 00 29 16 00 02 05 00 +63 32 00 32 00 32 00 42 61 73 73 20 43 6c 61 69 72 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clairnet.1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +13 12 00 09 0d 22 01 4c 08 0b 0c 14 00 05 0e 3c 05 3b 04 03 1f 11 00 06 0c +5a 45 4f 10 03 10 1f 00 0b 0f 00 05 55 04 03 3a 22 14 0a 18 5e 0c 02 04 00 +63 32 00 32 00 32 00 43 6c 61 69 72 6e 65 74 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clairnet.1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +13 12 00 09 0d 22 01 4c 08 0b 0c 14 00 05 0e 3c 00 3b 04 03 1f 11 00 06 0c +5a 40 4f 10 03 10 1f 00 0b 0f 00 00 55 04 03 3a 22 14 0a 18 5e 0c 02 04 00 +63 32 00 32 00 32 00 43 6c 61 69 72 6e 65 74 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clairnet.2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1e 0c 0f 07 0f 41 01 33 0d 05 1f 06 04 06 0f 5c 02 46 0d 04 10 0c 0c 07 0e +47 05 54 0d 03 0f 06 06 07 0e 28 05 63 08 0b 7c 24 27 00 00 12 00 0c 04 00 +63 32 32 00 00 32 00 43 6c 61 69 72 6e 65 74 2e 32 63 63 63 32 32 32 00 30 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clairnet.2 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0c 0f 07 0f 41 00 33 0d 05 1f 06 04 06 0f 5c 00 46 0d 04 1f 0c 0c 07 0e +47 00 54 0d 03 0f 06 06 07 0e 28 00 63 08 0b 7c 24 27 00 00 12 00 0c 04 00 +63 32 32 00 00 32 00 43 6c 61 69 72 6e 65 74 2e 32 63 63 63 32 32 32 00 30 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clairnet.3 +** Controls: KV, MW (LFO pitch), MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 06 06 0f 36 01 51 04 03 1f 1f 04 06 0f 34 44 50 04 03 12 1f 05 09 0f +0e 05 63 00 03 12 1f 05 07 0f 0e 45 63 00 0b 3e 24 02 1f 51 16 24 0c 04 00 +63 32 32 00 00 32 00 43 6c 61 69 72 6e 65 74 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clairnet.3 +** Controls: KV, MW (LFO pitch), MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 06 06 0f 36 01 51 04 03 1f 1f 04 06 0f 34 41 50 04 03 12 1f 05 09 0f +0e 00 63 00 03 12 1f 05 07 0f 0e 40 63 00 0b 3e 24 02 1f 51 16 24 0c 04 00 +63 32 32 00 00 32 00 43 6c 61 69 72 6e 65 74 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ClaraPiano +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 07 07 08 07 00 03 47 13 0e 0b 06 07 04 07 00 04 4a 08 0b 13 06 07 03 07 +00 04 36 0d 0b 1f 07 07 04 07 00 45 62 04 0b 20 14 00 00 10 66 18 01 04 00 +63 00 00 32 00 32 00 43 6c 61 72 61 50 69 61 6e 6f 63 63 63 32 32 32 00 30 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ClaraPiano +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 07 07 08 07 00 01 47 13 0e 0b 06 07 04 07 00 01 4a 08 0b 13 06 07 03 07 +00 00 36 0d 0b 1f 07 07 04 07 00 40 62 04 0b 20 14 00 00 10 66 18 01 04 00 +63 00 00 32 00 32 00 43 6c 61 72 61 50 69 61 6e 6f 63 63 63 32 32 32 00 30 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clarinet +** Controls: KV, MW (LFO pitch), MW (LFO amplitude) +** Source: Yamaha TX81Z factory preset, bank B, voice 15 +12 02 00 09 0e 09 02 51 08 0b 0e 14 00 05 0e 00 02 48 08 0b 13 11 00 06 0b +00 43 56 0a 0b 11 1f 00 09 0f 00 02 59 04 0b 02 1f 14 07 10 5e 0c 02 04 00 +63 32 1e 00 00 32 00 43 6c 61 72 69 6e 65 74 20 20 63 63 63 32 32 32 00 00 +00 20 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clarinet 1 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank C, voice 19 +15 0a 00 07 0e 2f 01 4b 08 03 15 0f 00 07 0a 1b 03 54 08 13 10 10 00 07 0e +1f 03 41 10 0b 11 1f 00 0a 0f 00 02 5c 04 0b 3a 1e 0a 03 05 6e 18 02 04 00 +28 1a 0f 00 00 32 00 43 6c 61 72 69 6e 65 74 20 31 63 63 63 32 32 32 00 00 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clarinet 1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +15 0d 00 07 0e 2f 01 4b 08 03 15 0f 00 07 0d 1b 03 54 08 13 10 10 00 07 0e +1f 03 41 10 0b 11 1f 00 0a 0f 00 02 5c 04 0b 3a 1e 0a 03 05 6e 18 02 04 00 +28 1a 0f 00 00 32 00 43 6c 61 72 69 6e 65 74 20 31 63 63 63 32 32 32 00 00 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clarinet 2 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank C, voice 20 +1f 1f 00 09 0f 0f 02 4b 08 03 0f 0f 00 09 0a 52 02 4c 08 13 12 12 00 09 0a +3a 01 4a 0a 0b 11 1f 00 0b 0f 00 02 5e 04 0b 22 1e 0a 03 05 6e 0c 02 04 00 +28 1a 0f 00 00 32 00 43 6c 61 72 69 6e 65 74 20 32 63 63 63 32 32 32 00 00 +00 50 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clarinet 2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 09 0f 0f 02 4b 08 03 0f 0f 00 09 0d 52 02 4c 08 13 12 12 00 09 0d +3a 01 4a 0a 0b 11 1f 00 0b 0f 00 02 5e 04 0b 22 1e 0a 03 05 6e 0c 02 04 00 +28 1a 0f 00 00 32 00 43 6c 61 72 69 6e 65 74 20 32 63 63 63 32 32 32 00 00 +00 50 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: HolowClair +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 0b 06 04 0d 22 02 47 04 0c 10 04 03 08 0d 3c 04 44 08 03 0f 10 03 07 0c +04 04 5a 00 03 10 04 03 09 0f 00 05 5a 04 0c 2c 26 07 03 00 42 0c 02 04 00 +63 32 00 32 00 32 00 48 6f 6c 6f 77 43 6c 61 69 72 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: HolowClair +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 0b 06 04 0d 22 00 47 04 0c 10 04 03 08 0d 3c 01 44 13 03 0f 10 03 07 0c +04 00 5a 00 03 10 04 03 09 0f 00 00 5a 04 0c 2c 26 07 03 00 42 0c 02 04 00 +63 32 00 32 00 32 00 48 6f 6c 6f 77 43 6c 61 69 72 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynClarnet +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +07 06 01 06 0f 21 02 37 08 15 0e 07 01 06 0c 1b 03 45 0d 0b 0e 05 01 06 0b +10 02 4d 16 18 0f 08 00 06 0d 00 01 63 04 13 39 1d 00 00 00 52 18 02 04 00 +63 32 00 16 00 32 00 53 79 6e 43 6c 61 72 6e 65 74 63 63 63 32 32 32 00 70 +00 30 00 10 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY EnglishHorn + + +** Name: English Hn +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +14 0a 04 02 0c 52 02 4b 08 03 1f 0a 04 02 0c 3a 26 47 08 03 10 0a 04 0a 0b +5c 1e 63 08 03 12 07 06 0a 0d 0a 75 60 0a 03 14 1d 3c 00 24 26 0c 02 04 00 +63 32 00 00 00 32 00 45 6e 67 6c 69 73 68 20 48 6e 63 63 63 32 32 32 00 20 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: English Hn +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +14 0a 04 02 0c 52 02 4b 08 03 1f 0a 04 02 0c 3a 22 47 08 03 10 0a 04 0a 0b +5c 18 63 08 03 12 07 06 0a 0d 0a 70 60 0a 03 14 1d 3c 00 24 26 0c 02 04 00 +63 32 00 00 00 32 00 45 6e 67 6c 69 73 68 20 48 6e 63 63 63 32 32 32 00 20 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY FlugelHorn + + +** Name: Flugel * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0e 0a 00 07 0d 00 01 4d 04 0e 10 0a 00 0a 00 0d 01 3d 04 0b 15 11 00 07 06 +05 02 4f 09 0b 0e 07 01 08 0d 00 02 63 04 0b 3a 23 00 00 00 32 18 02 04 00 +28 63 00 00 00 32 00 46 6c 75 67 65 6c 20 20 20 2a 63 63 63 32 32 32 00 00 +00 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: FlugelHorn +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0c 05 00 08 00 00 01 51 04 0b 0f 1f 00 08 0f 00 04 3c 04 04 1f 0f 00 08 00 +00 06 37 07 04 10 1f 00 09 0f 00 06 5d 04 0c 2a 23 19 04 00 52 18 02 04 00 +63 63 00 00 00 32 00 46 6c 75 67 65 6c 48 6f 72 6e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: FlugelHorn +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0c 05 00 08 00 00 01 51 04 0b 0f 1f 00 08 0f 00 00 3c 04 04 1f 0f 00 08 00 +00 00 37 07 04 10 1f 00 09 0f 00 01 5d 04 0c 2a 23 19 04 00 52 18 02 04 00 +63 63 00 00 00 32 00 46 6c 75 67 65 6c 48 6f 72 6e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Flugelhorn +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank B, voice 3 +0c 05 00 08 00 00 02 4a 04 0b 0f 1f 00 08 0f 00 02 3f 04 03 1f 0f 00 08 00 +23 03 44 0b 03 10 1f 00 09 0f 00 02 5e 04 0c 3a 1f 19 07 00 52 18 04 04 00 +63 32 00 00 00 32 00 46 6c 75 67 65 6c 68 6f 72 6e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +--Bank 3 + +* SUBCATEGORY Flute + + +** Name: AdditivFlt +** Controls: KV, MW (LFO pitch), BC (LFO pitch), BC (EG amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +02 02 01 01 0f 00 52 3c 1a 01 05 06 01 02 0d 26 63 50 0a 00 04 05 01 01 0c +12 6b 4d 09 06 0d 1f 00 04 0f 00 42 63 04 0b 03 1e 24 07 00 5a 11 02 04 00 +63 15 00 08 00 32 0e 41 64 64 69 74 69 76 46 6c 74 63 63 63 32 32 32 00 16 +00 30 00 32 00 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Alto Flute +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 0f 05 06 0f 00 00 28 08 03 0c 13 07 07 0f 47 04 3c 04 03 16 1f 04 01 0f +00 45 3d 04 03 0d 12 04 09 0f 00 04 53 04 03 2b 23 29 07 36 16 0c 02 04 00 +63 32 00 32 00 32 00 41 6c 74 6f 20 46 6c 75 74 65 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Alto Flute +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 0f 05 06 0f 00 00 28 08 03 0c 13 07 07 0f 47 00 3c 04 03 16 1f 04 01 0f +00 40 3d 04 03 0d 12 04 09 0f 00 00 53 04 03 2b 23 29 07 36 16 0c 02 04 00 +63 32 00 32 00 32 00 41 6c 74 6f 20 46 6c 75 74 65 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Alto Flute +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +0f 0f 05 06 0f 00 00 28 08 03 0c 13 07 07 0f 47 00 3c 04 03 16 1f 04 00 0f +00 40 3d 04 03 0d 12 04 09 0f 00 00 53 04 03 2b 23 29 07 36 16 0c 02 04 00 +63 32 00 32 00 32 00 41 6c 74 6f 20 46 6c 75 74 65 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bass Flute +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 0f 05 06 0f 00 03 32 04 03 0c 13 07 07 0f 47 04 3c 00 03 16 1f 04 01 0f +00 44 41 00 03 0d 12 04 09 0f 00 05 5a 04 03 2b 23 29 07 36 16 0c 02 04 00 +63 32 00 32 00 32 00 42 61 73 73 20 46 6c 75 74 65 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bass Flute +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 0f 05 06 0f 00 00 32 04 03 0c 13 07 07 0f 47 00 3c 00 03 16 1f 04 01 0f +00 40 41 04 03 0d 12 04 09 0f 00 00 5a 00 03 2b 23 29 07 36 16 0c 02 04 00 +63 32 00 32 00 32 00 42 61 73 73 20 46 6c 75 74 65 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bass Flute +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +0f 0f 05 06 0f 00 00 32 04 03 0c 13 07 07 0f 47 00 3c 00 03 16 1f 04 00 0f +00 40 41 04 03 0d 12 04 09 0f 00 00 5a 00 03 2b 23 29 07 36 16 0c 02 04 00 +63 32 00 32 00 32 00 42 61 73 73 20 46 6c 75 74 65 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Flute * +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 03 02 05 0f 19 03 4f 04 0e 1d 12 12 07 0e 00 06 47 05 0c 1d 0a 09 06 0d +00 02 59 04 08 0f 03 01 09 0f 00 04 63 04 0a 02 1d 18 06 19 42 18 02 04 00 +28 31 00 29 12 32 00 46 6c 75 74 65 20 20 20 20 2a 63 63 63 32 32 32 00 00 +00 04 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Flute +** Controls: KV, MW (LFO pitch), MW (LFO amplitude), BC (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank B, voice 11 +10 16 00 06 07 00 42 49 07 03 19 1f 00 07 0f 0b 43 47 04 03 12 19 00 01 0f +0d 42 3a 04 03 0f 1f 00 09 0f 00 42 5a 04 0b 3b 1e 07 07 0d 5e 24 02 04 00 +63 1e 40 32 00 32 00 46 6c 75 74 65 20 20 20 20 20 63 63 63 32 32 32 00 30 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Flute 1 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank C, voice 22 +11 0e 03 05 09 0e 47 39 04 0e 0b 04 00 05 0a 18 42 4d 08 16 11 10 02 05 0a +1b 42 4c 0a 0b 0f 04 00 09 0f 00 43 5a 08 0b 3b 1f 08 20 02 4a 18 02 04 00 +28 63 00 00 00 32 00 46 6c 75 74 65 20 20 20 20 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Flute 1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +11 0e 03 05 09 0e 47 39 04 0e 0b 04 00 05 0d 18 42 4d 08 16 11 10 02 05 0a +1b 42 4c 0d 0b 0f 04 00 09 0f 00 43 5a 08 0b 3b 1f 08 20 02 4a 18 02 04 00 +28 63 00 00 00 32 00 46 6c 75 74 65 20 20 20 20 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Flute 2 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank C, voice 23 +13 04 00 05 0e 03 41 35 13 10 13 04 00 05 0e 03 42 48 09 16 0f 00 00 09 0f +00 43 63 0a 08 0f 00 00 09 0f 00 43 63 09 0e 3c 1f 08 20 02 4a 05 02 04 00 +28 32 00 00 00 32 00 46 6c 75 74 65 20 20 20 20 32 63 63 63 32 32 32 00 00 +00 02 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Flute....1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 19 00 01 0d 45 04 5d 08 03 16 15 12 01 0d 59 04 56 08 02 0b 00 03 09 0d +46 05 35 08 04 11 00 03 09 0d 14 04 5a 08 03 2b 1e 14 2d 63 32 18 02 04 00 +63 32 00 00 01 32 00 46 6c 75 74 65 2e 2e 2e 2e 31 63 63 63 32 32 32 00 20 +00 30 00 00 00 20 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Flute....1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 19 00 01 0d 45 02 5d 04 03 16 15 12 01 0d 59 02 56 08 02 12 00 03 09 0d +46 01 35 04 04 12 00 03 09 0d 14 00 5a 04 03 2b 23 14 07 63 32 18 02 04 00 +63 32 00 00 01 32 00 46 6c 75 74 65 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 30 00 00 00 10 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Flute....2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 19 00 01 0d 45 02 4b 04 03 12 15 12 01 0d 59 44 58 04 03 1f 00 03 09 0d +46 45 3c 04 03 0f 00 03 09 0d 14 04 5b 04 03 02 1c 16 2a 00 36 24 02 04 00 +63 32 00 00 01 32 00 46 6c 75 74 65 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 20 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Flute....2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 19 00 01 0d 45 01 4b 04 03 12 15 12 01 0d 59 41 58 04 03 1f 00 03 09 0d +46 42 3c 04 03 0f 00 03 09 0d 14 00 5b 04 03 02 1e 16 0c 00 36 24 02 04 00 +63 32 00 00 01 32 00 46 6c 75 74 65 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 20 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Flute....3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 19 00 01 0d 45 00 41 04 03 0f 0d 0f 09 0f 00 43 29 04 03 1f 00 03 09 0d +46 45 33 04 03 0d 00 03 09 0d 14 05 5b 04 03 0a 20 14 35 00 16 24 02 04 00 +63 32 00 00 01 32 00 46 6c 75 74 65 2e 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Flute....3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 19 00 01 0d 45 00 41 04 03 0f 0d 0f 09 0f 00 43 29 1f 03 1f 00 03 09 0d +46 41 33 04 03 0d 00 03 09 0d 14 00 5b 04 03 0a 20 14 0a 00 16 24 02 04 00 +63 32 00 00 01 32 00 46 6c 75 74 65 2e 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Flute....4 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 12 00 09 0d 22 03 3b 08 08 1f 12 00 05 0e 2e 45 34 04 00 19 13 00 05 06 +00 45 53 07 06 10 1a 00 08 0f 00 04 5d 04 0e 3a 1f 09 0f 1e 5e 18 04 04 00 +63 32 00 32 00 32 00 46 6c 75 74 65 2e 2e 2e 2e 34 63 63 63 32 32 32 00 10 +00 10 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Flute....4 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 12 00 09 0d 22 01 3b 0d 08 1f 12 00 05 0e 2e 42 34 0d 00 19 13 00 05 06 +00 41 53 12 06 10 1a 00 08 0f 00 00 5d 04 0e 3a 1f 09 0f 1e 5e 18 04 04 00 +63 32 00 32 00 32 00 46 6c 75 74 65 2e 2e 2e 2e 34 63 63 63 32 32 32 00 10 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Flute....5 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 17 00 06 00 00 05 36 09 03 15 1f 00 07 0f 47 05 45 08 03 10 1f 00 01 0f +00 04 3b 04 03 10 1f 00 09 0f 00 06 57 04 03 3b 23 04 07 00 52 18 02 04 00 +63 32 00 32 00 32 00 46 6c 75 74 65 2e 2e 2e 2e 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Flute....5 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +10 17 00 06 00 00 01 36 09 03 15 1f 00 07 0f 47 01 45 08 03 10 1f 00 01 0f +00 01 3b 04 03 10 1f 00 09 0f 00 00 57 04 03 3b 23 04 07 00 52 18 02 04 00 +63 32 00 32 00 32 00 46 6c 75 74 65 2e 2e 2e 2e 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Jazz Flute +** Controls: KV, MW (LFO pitch), MW (LFO amplitude) +** Source: Yamaha TX81Z factory preset, bank C, voice 24 +13 1e 00 09 0e 00 00 63 3f 0b 1f 14 00 05 0e 24 01 51 04 03 1f 14 00 0f 01 +00 41 4d 08 03 0f 1f 00 0b 0f 00 02 63 04 0b 3b 20 11 12 33 56 18 04 04 00 +63 37 0e 00 00 32 00 4a 61 7a 7a 20 46 6c 75 74 65 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Pan Floot +** Controls: KV, MW (LFO pitch), MW (LFO amplitude) +** Source: Yamaha TX81Z factory preset, bank B, voice 12 +1b 12 00 09 0d 14 02 42 0d 08 1f 14 00 05 0e 00 42 40 08 10 19 14 00 06 06 +00 03 50 12 06 10 1f 00 08 0f 00 02 5f 04 0e 02 1e 0d 08 1a 5e 18 04 04 00 +63 32 23 00 00 32 00 50 61 6e 20 46 6c 6f 6f 74 20 63 63 63 32 32 32 00 00 +00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Pan Flute1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 15 0f 08 0f 2e 05 46 14 02 1f 06 03 07 09 00 04 3e 0a 04 12 06 03 08 0d +00 06 3a 00 0a 10 06 02 09 0e 00 06 63 0a 06 7c 2e 0e 09 00 32 0c 02 04 00 +63 32 00 32 00 32 00 50 61 6e 20 46 6c 75 74 65 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Pan Flute1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +12 15 0f 08 0f 2e 00 46 14 02 1f 06 03 07 09 00 00 3e 0a 04 12 06 03 08 0d +00 01 3a 00 0a 10 06 02 09 0e 00 01 63 0a 06 7c 2e 0e 09 00 32 0c 02 04 00 +63 32 00 32 00 32 00 50 61 6e 20 46 6c 75 74 65 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Pan Flute2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 12 00 09 0d 22 01 46 10 08 1f 14 00 05 0e 24 44 2e 08 00 19 14 00 06 07 +00 05 37 04 06 10 1f 00 08 0f 00 05 60 04 0e 3b 1f 0d 0e 1e 5e 18 04 04 00 +63 32 00 32 00 32 00 50 61 6e 20 46 6c 75 74 65 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Pan Flute2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 12 00 09 0d 22 01 46 10 08 1f 14 00 05 0e 24 40 2e 08 00 19 14 00 06 07 +00 00 37 04 06 10 1f 00 08 0f 00 01 60 04 0e 3b 1f 0d 0e 1e 5e 18 04 04 00 +63 32 00 32 00 32 00 50 61 6e 20 46 6c 75 74 65 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Pan Flute2 +** Controls: MW (LFO pitch) +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +11 17 01 01 06 00 40 63 0d 03 11 17 01 01 06 00 00 35 04 03 10 04 04 0a 07 +11 00 3b 04 1b 10 04 04 0a 07 11 00 63 04 02 04 63 00 14 37 47 24 04 04 00 +28 32 00 00 00 32 00 50 61 6e 20 46 6c 75 74 65 32 63 63 63 32 32 32 00 30 +00 30 00 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PanFlute * +** Controls: KV, MW (LFO pitch), BC (voice pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 19 07 0f 0f 3b 00 37 18 00 1f 1f 11 0f 0f 00 03 5a 0d 03 0c 19 0a 08 0f +00 02 59 04 02 0f 1f 04 07 0f 00 01 63 04 03 04 63 00 0c 13 6f 18 02 04 00 +3b 1f 00 00 00 31 00 50 61 6e 46 6c 75 74 65 20 2a 63 63 63 32 32 32 00 02 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Perc Flute +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 12 12 09 0a 00 07 5a 10 05 1f 1f 1d 07 0f 47 05 48 04 04 15 1f 00 0a 0f +00 46 63 04 03 13 15 15 09 0a 00 05 63 04 01 04 23 29 07 36 16 18 02 04 00 +63 32 00 32 00 32 00 50 65 72 63 20 46 6c 75 74 65 63 63 63 32 32 32 00 20 +00 40 00 20 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Perc Flute +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 12 12 09 0a 00 01 5a 10 05 1f 1f 1d 07 0f 47 00 48 04 04 15 1f 00 0a 0f +00 41 63 04 03 13 15 15 09 0a 00 00 63 04 01 04 23 29 07 36 16 18 02 04 00 +63 32 00 32 00 32 00 50 65 72 63 20 46 6c 75 74 65 63 63 63 32 32 32 00 00 +00 40 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PercFlute +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank B, voice 31 +1f 17 11 0a 0d 00 02 55 13 09 1f 19 00 01 0d 00 42 47 0a 00 1f 14 09 09 0b +00 02 5d 09 06 10 08 00 06 0e 00 42 63 04 0b 43 1c 04 0b 00 5a 05 04 04 00 +63 32 00 00 00 32 00 50 65 72 63 46 6c 75 74 65 20 63 63 63 32 32 32 00 00 +00 00 00 02 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Soft Flute +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 17 00 06 00 00 03 34 07 03 0f 1f 00 07 0f 47 03 3b 08 03 10 1f 00 01 0f +00 45 2c 04 03 0f 1f 00 09 0f 00 05 5e 08 03 2b 23 12 0a 35 16 18 02 04 00 +63 32 00 32 00 32 00 53 6f 66 74 20 46 6c 75 74 65 63 63 63 32 32 32 00 03 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Soft Flute +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +10 17 00 06 00 00 00 34 07 03 0f 1f 00 07 0f 47 00 3b 04 03 10 1f 00 01 0f +00 40 2c 04 03 0f 1f 00 09 0f 00 02 5e 08 03 2b 23 12 0a 35 16 18 02 04 00 +63 32 00 32 00 32 00 53 6f 66 74 20 46 6c 75 74 65 63 63 63 32 32 32 00 00 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Song Flute +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 12 15 01 0e 02 03 58 08 0b 15 1c 15 0a 0d 00 03 63 08 08 07 01 03 0a 0d +00 05 63 04 0b 12 01 03 0a 0d 00 06 63 04 0b 2e 21 00 05 00 42 18 02 04 00 +63 32 00 32 00 32 00 53 6f 6e 67 20 46 6c 75 74 65 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Song Flute +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +18 12 15 01 0e 02 00 58 08 0b 15 1c 15 0a 0d 00 00 63 08 08 07 01 03 0a 0d +00 00 63 04 0b 12 01 03 0a 0d 00 00 63 04 0b 2e 21 00 05 00 42 18 02 04 00 +63 32 00 32 00 32 00 53 6f 6e 67 20 46 6c 75 74 65 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Song Flute +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +18 12 15 00 0e 02 00 58 08 0b 15 1c 15 0a 0d 00 00 63 08 08 07 01 03 0a 0d +00 00 63 04 0b 12 01 03 0a 0d 00 00 63 04 0b 2e 21 00 05 00 42 18 02 04 00 +63 32 00 32 00 32 00 53 6f 6e 67 20 46 6c 75 74 65 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthFlute +** Controls: KV, MW (LFO pitch) +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +12 18 01 02 0b 16 03 58 21 03 12 18 00 02 0d 00 02 4b 10 13 0d 0e 04 04 07 +00 04 63 16 13 0d 18 03 04 0e 00 01 5e 04 13 14 63 00 0c 00 33 18 02 04 00 +28 32 00 00 00 32 00 53 79 6e 74 68 46 6c 75 74 65 63 63 63 32 32 32 00 40 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY FrenchHorn + + +** Name: Fr.Horn * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0c 08 03 04 0f 00 02 54 00 00 0a 08 05 07 0f 0a 02 5a 00 06 0e 1f 00 06 0f +1d 01 63 04 06 16 0d 00 06 0f 00 00 63 00 00 34 16 00 00 00 32 18 02 04 00 +28 63 00 00 00 32 00 46 72 2e 48 6f 72 6e 20 20 2a 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: FrenchHorn +** Controls: KV, MW (LFO pitch), MW (LFO amplitude) +** Source: Yamaha TX81Z factory preset, bank B, voice 5 +08 05 00 06 00 00 42 47 04 08 0e 1f 00 06 0f 00 42 43 04 00 1f 0e 00 06 00 +0e 43 3b 0b 06 0c 1f 00 06 0f 00 42 61 04 0c 39 1a 19 08 0a 4a 0c 04 04 00 +63 32 1e 00 00 32 00 46 72 65 6e 63 68 48 6f 72 6e 63 63 63 32 32 32 00 00 +20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: FrnchHorn1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 05 00 08 00 00 01 4b 04 0b 0f 1f 00 08 0f 00 03 36 04 04 0d 0f 00 08 00 +00 05 39 0b 04 12 1f 00 09 0f 00 06 62 04 0c 3a 25 00 04 00 22 18 02 04 00 +63 63 00 00 00 32 00 46 72 6e 63 68 48 6f 72 6e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: FrnchHorn1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 05 00 08 00 00 01 4b 04 0b 0f 1f 00 08 0f 00 00 36 04 04 0d 0f 00 08 00 +00 00 39 0b 04 12 1f 00 09 0f 00 01 62 04 0c 3a 25 00 04 00 22 18 02 04 00 +63 63 00 00 00 32 00 46 72 6e 63 68 48 6f 72 6e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: FrnchHorn2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 05 00 08 00 00 05 4e 04 0b 0f 1f 00 08 0f 00 04 48 04 03 0d 0f 00 08 00 +00 05 40 0d 03 12 1f 00 09 0f 00 05 5f 04 0b 1b 25 00 0a 00 32 18 02 04 00 +63 63 00 00 00 32 00 46 72 6e 63 68 48 6f 72 6e 32 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: FrnchHorn2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 05 00 08 00 00 02 4e 04 0b 0f 1f 00 08 0f 00 01 48 04 03 0d 0f 00 08 00 +00 00 40 0d 03 12 1f 00 09 0f 00 01 5f 04 0b 1b 25 00 0a 00 32 18 02 04 00 +63 63 00 00 00 32 00 46 72 6e 63 68 48 6f 72 6e 32 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Harmonica + + +** Name: Harmonic.1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 0d 01 0a 0f 0a 03 4e 08 03 12 0c 06 09 0f 00 04 4f 04 0e 10 1f 04 0c 0f +00 06 63 08 03 1d 1f 00 0d 0f 00 05 4e 04 03 64 29 00 00 00 22 0c 02 04 00 +28 02 00 00 00 32 00 48 61 72 6d 6f 6e 69 63 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harmonic.1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +10 0d 01 0a 0f 0a 01 4e 08 03 12 0c 06 09 0f 00 01 4f 04 0e 10 1f 04 0c 0f +00 00 63 08 03 1d 1f 00 0d 0f 00 00 4e 04 03 64 29 00 00 00 22 0c 02 04 00 +28 02 00 00 00 32 00 48 61 72 6d 6f 6e 69 63 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harmonic.2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0b 0d 01 0a 0f 0a 02 57 04 0b 12 0c 06 09 0f 00 05 56 00 0e 10 1f 04 0c 0f +00 05 5a 04 0b 1d 1f 00 0d 0f 00 06 63 04 03 6c 29 00 00 00 22 18 02 04 00 +28 02 00 00 00 32 00 48 61 72 6d 6f 6e 69 63 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harmonic.2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +0b 0d 01 0a 0f 0a 02 57 04 0b 12 0c 06 09 0f 00 01 56 00 0e 10 1f 04 0c 0f +00 00 5a 04 0b 1d 1f 00 0d 0f 00 00 63 04 03 6c 29 00 00 00 22 18 02 04 00 +28 02 00 00 00 32 00 48 61 72 6d 6f 6e 69 63 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harmonica* +** Controls: KV, BC (EG amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0d 0d 01 09 0d 00 01 42 00 03 0c 08 00 09 0c 00 00 3e 00 06 0e 09 01 09 0f +00 60 3c 10 03 0d 05 01 09 0f 00 40 63 04 00 19 1f 21 00 25 3a 24 02 04 00 +28 63 00 00 00 32 29 48 61 72 6d 6f 6e 69 63 61 2a 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harmonica +** Controls: KV, MW (LFO pitch), MW (LFO amplitude), BC (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank B, voice 16 +10 09 02 06 0d 00 41 3e 04 15 0c 0b 02 03 0e 00 41 4f 04 12 0c 0e 02 08 0d +00 42 4b 0a 1c 0d 0b 01 09 0e 00 03 63 0a 14 00 23 0f 02 1b 5e 18 04 05 00 +63 28 50 32 00 32 00 48 61 72 6d 6f 6e 69 63 61 20 63 63 63 32 32 32 00 50 +10 50 00 50 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harmonica +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank C, voice 25 +0e 1f 00 09 0f 00 02 4b 0a 0b 0c 1f 00 09 0f 00 41 5f 04 0b 0c 1f 00 09 0f +00 41 5c 04 0b 0a 1f 00 0a 0f 00 41 5a 04 0b 06 1d 04 01 27 56 18 02 04 00 +28 32 00 00 00 32 00 48 61 72 6d 6f 6e 69 63 61 20 63 63 63 32 32 32 00 40 +00 50 00 30 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harmonica +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0e 1f 00 09 0f 00 02 4b 0a 0b 0c 1f 00 09 0f 00 41 5f 04 0b 0c 1f 00 09 0f +00 41 5c 04 0b 0d 1f 00 0a 0f 00 41 5a 04 0b 06 1d 04 01 27 56 18 02 04 00 +28 32 00 00 00 32 00 48 61 72 6d 6f 6e 69 63 61 20 63 63 63 32 32 32 00 40 +00 50 00 30 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harmonica1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 09 0f 00 79 29 17 00 1f 1f 00 03 0f 00 5b 3b 04 03 0f 10 09 09 0f +00 5d 61 04 03 0d 1f 00 08 0f 00 7c 63 08 03 04 1f 00 0b 00 46 18 02 04 00 +63 32 00 00 00 32 00 48 61 72 6d 6f 6e 69 63 61 31 63 63 63 32 32 32 00 10 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harmonica1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 09 0f 00 79 29 17 00 1f 1f 00 03 0f 00 59 3b 04 03 0f 10 09 09 0f +00 59 61 04 03 0d 1f 00 08 0f 00 78 63 08 03 04 1f 00 0b 00 46 18 02 04 00 +63 32 00 00 00 32 00 48 61 72 6d 6f 6e 69 63 61 31 63 63 63 32 32 32 00 10 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harmonica2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 09 1f 09 0a 00 3a 2f 2c 00 10 0a 05 0a 06 00 1c 4b 04 03 0f 10 09 09 0f +00 1e 5b 04 03 0d 1f 00 08 0f 00 3d 63 04 03 04 1d 3c 04 00 00 18 02 04 00 +63 32 00 00 00 32 00 48 61 72 6d 6f 6e 69 63 61 32 63 63 63 32 32 32 00 10 +00 20 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harmonica2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 09 1f 09 0a 00 3a 2f 2c 00 10 0a 05 0a 06 00 19 4b 04 03 0f 10 09 09 0f +00 19 5b 04 03 0d 1f 00 08 0f 00 38 63 04 03 04 1d 3c 04 00 10 18 02 04 00 +63 32 00 00 00 32 00 48 61 72 6d 6f 6e 69 63 61 32 63 63 63 32 32 32 00 10 +00 20 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harmonica3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 09 0f 00 7a 2a 08 00 1f 1f 00 07 0f 00 5a 3b 00 03 0f 10 09 09 0f +00 5d 5a 08 03 0d 1f 00 08 0f 00 7d 63 04 03 06 1f 00 0b 00 46 18 02 04 00 +63 32 00 00 00 32 00 48 61 72 6d 6f 6e 69 63 61 33 63 63 63 32 32 32 00 00 +00 30 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harmonica3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 09 0f 00 7a 2a 08 00 1f 1f 00 07 0f 00 58 3b 00 03 0f 10 09 09 0f +00 58 5a 08 03 0d 1f 00 08 0f 00 78 63 04 03 06 1f 00 0b 00 46 18 02 04 00 +63 32 00 00 00 32 00 48 61 72 6d 6f 6e 69 63 61 33 63 63 63 32 32 32 00 00 +00 30 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Oboe + + +** Name: BC1 Oboe +** Controls: MW (LFO pitch), BC (LFO pitch), BC (LFO amplitude), BC (EG amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0b 11 00 07 0f 63 40 63 00 1b 0f 0d 00 08 0f 12 40 40 00 1b 0e 18 00 08 0f +63 78 50 0a 1b 09 0f 00 09 0f 00 78 54 08 1b 22 23 0b 08 0a 56 18 07 04 00 +63 32 00 18 1e 32 63 42 43 31 20 4f 62 6f 65 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Oboe * +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 0a 00 02 0c 23 43 33 04 00 1f 0a 00 02 0d 22 42 3a 08 06 10 07 00 0a 0f +08 01 63 08 08 0f 07 00 0a 0f 09 01 63 0a 0e 04 22 14 19 1b 3a 18 02 04 00 +28 63 00 00 00 32 00 4f 62 6f 65 20 20 20 20 20 2a 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Oboe +** Controls: KV, MW (LFO pitch), MW (LFO amplitude) +** Source: Yamaha TX81Z factory preset, bank B, voice 14 +10 12 00 09 0d 05 01 51 00 03 12 14 00 05 0e 23 41 5b 00 03 10 0a 00 06 0d +30 02 4b 08 1b 0f 1a 00 0a 0e 06 03 59 08 0b 02 1f 11 08 0e 5e 24 02 04 00 +63 28 19 00 00 32 00 4f 62 6f 65 20 20 20 20 20 20 63 63 63 32 32 32 00 20 +00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Oboe +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank C, voice 21 +14 12 00 07 0a 0a 02 53 0a 0b 1f 1f 00 03 0f 00 01 4e 04 0b 15 14 00 05 0a +09 01 3c 08 0b 12 1f 00 0b 0f 06 03 5a 0a 0b 03 1f 0a 0f 00 52 18 02 04 00 +28 32 00 00 00 32 00 4f 62 6f 65 20 20 20 20 20 20 63 63 63 32 32 32 00 20 +00 10 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Oboe +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +14 12 00 07 0d 0a 02 53 0a 0b 1f 1f 00 03 0f 00 01 4e 04 0b 15 14 00 05 0d +09 01 3c 08 0b 12 1f 00 0b 0f 06 03 5a 0a 0b 03 1f 0a 0f 00 52 18 02 04 00 +28 32 00 00 00 32 00 4f 62 6f 65 20 20 20 20 20 20 63 63 63 32 32 32 00 20 +00 10 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Oboe.....1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 04 06 07 0c 00 02 4d 08 0e 10 04 06 07 0c 00 03 4d 04 03 0f 04 06 07 0c +00 04 50 10 04 10 04 06 07 0c 00 04 5b 04 02 0d 22 07 0c 43 52 0c 02 04 00 +63 63 00 00 00 32 00 4f 62 6f 65 2e 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Oboe.....1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 04 06 07 0c 00 01 4d 08 0e 10 04 06 07 0c 00 00 4d 04 03 0f 04 06 07 0c +00 00 50 10 04 10 04 06 07 0c 00 00 5b 04 02 0d 22 07 0c 43 52 0c 02 04 00 +63 63 00 00 00 32 00 4f 62 6f 65 2e 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Oboe.....2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 04 06 07 0c 00 01 46 0d 0e 10 04 06 07 0c 00 04 45 04 03 0f 04 06 07 0c +00 05 5f 08 04 10 04 06 07 0c 00 04 5f 08 02 34 22 07 0c 43 52 18 02 04 00 +63 63 00 00 00 32 00 4f 62 6f 65 2e 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Oboe.....2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 04 06 07 0c 00 01 46 0d 0e 10 04 06 07 0c 00 00 45 04 03 0f 04 06 07 0c +00 00 5f 08 04 10 04 06 07 0c 00 00 5f 0a 02 34 22 07 0c 43 52 18 02 04 00 +63 63 00 00 00 32 00 4f 62 6f 65 2e 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Oboe.....3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0c 11 00 09 0f 63 41 55 00 0c 0f 0d 00 08 0f 12 43 47 00 1c 0d 18 00 08 00 +63 45 49 0a 1b 09 0f 00 09 0f 00 44 50 0a 1b 72 23 25 08 1e 56 18 02 05 00 +63 63 00 00 00 32 00 4f 62 6f 65 2e 2e 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Oboe.....3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0c 11 00 09 0f 63 41 55 00 0c 0f 0d 00 08 0f 12 40 47 00 1c 0e 18 00 08 00 +63 41 49 0a 1b 09 0f 00 09 0f 00 40 50 0a 1b 72 23 25 08 1e 56 18 02 05 00 +63 63 00 00 00 32 00 4f 62 6f 65 2e 2e 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ornt Oboe +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 10 02 06 0b 1b 04 49 08 0b 14 08 07 07 0b 42 42 35 2a 0b 1e 0c 04 07 0b +42 44 50 08 0b 16 06 01 09 0b 0a 04 60 0a 03 42 22 0a 11 1e 36 0c 04 04 00 +63 32 00 00 00 32 00 4f 72 6e 74 20 4f 62 6f 65 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ornt Oboe +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 10 02 06 0b 1b 00 49 08 0b 14 08 07 07 0b 42 40 35 2a 0b 1e 0c 04 07 0b +42 40 50 08 0b 16 06 01 09 0b 0a 00 60 0a 03 42 22 0a 11 1e 36 0c 04 04 00 +63 32 00 00 00 32 00 4f 72 6e 74 20 4f 62 6f 65 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Ocarina + + +** Name: Ocarina +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 03 18 03 0f 00 04 63 0d 0b 13 03 0f 06 03 00 05 31 0d 12 13 1d 00 0a 0f +00 06 5d 0d 0b 12 03 1f 09 0e 00 07 5a 0d 13 3c 2e 27 07 36 22 0c 02 04 00 +63 63 00 00 00 32 00 4f 63 61 72 69 6e 61 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ocarina +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 03 18 03 0f 00 01 63 0d 0b 13 03 0f 06 03 00 00 31 0d 12 13 1d 00 0a 0f +00 01 5d 0d 0b 12 03 1f 09 0e 00 01 5a 0d 13 3c 2e 27 07 36 22 0c 02 04 00 +63 63 00 00 00 32 00 4f 63 61 72 69 6e 61 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Piccolo + + +** Name: Piccolo * +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +19 12 00 05 0f 2c 40 31 23 06 0c 12 00 05 0f 13 40 3c 13 06 0e 13 00 09 0f +0a 02 63 12 08 10 13 00 09 0f 0b 01 63 13 09 3c 21 0d 0e 21 4a 11 02 04 00 +28 63 00 00 00 32 00 50 69 63 63 6f 6c 6f 20 20 2a 63 63 63 32 32 32 00 17 +00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Piccolo..1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 15 04 0a 09 00 06 32 12 03 15 03 04 0a 08 47 06 63 08 03 0f 04 05 0a 09 +00 06 63 08 03 10 06 04 0a 09 00 05 63 08 03 06 28 29 00 00 12 18 02 04 00 +63 32 00 32 00 32 00 50 69 63 63 6f 6c 6f 2e 2e 31 63 63 63 32 32 32 00 20 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Piccolo..1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 15 04 0a 09 00 01 32 12 03 15 03 04 0a 08 47 01 63 04 03 15 04 05 0a 09 +00 00 63 04 03 15 06 04 0a 09 00 00 63 08 03 06 28 29 00 00 12 18 02 04 00 +63 32 00 32 00 32 00 50 69 63 63 6f 6c 6f 2e 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Piccolo..2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 1f 0a 0e 00 00 2c 08 03 12 04 0c 0a 0e 47 04 63 08 03 12 09 09 0a 0e +00 05 63 08 03 12 12 0f 0a 0e 00 05 63 08 03 06 28 22 07 00 22 18 02 04 00 +63 32 00 32 00 32 00 50 69 63 63 6f 6c 6f 2e 2e 32 63 63 63 32 32 32 00 00 +00 20 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Piccolo..2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 1f 0a 0e 00 00 2c 04 03 12 04 0c 0a 0e 47 01 63 0d 03 12 09 09 0a 0e +00 03 63 0d 03 12 12 0f 0a 0e 00 00 63 04 03 06 28 22 07 00 22 18 02 04 00 +63 32 00 32 00 32 00 50 69 63 63 6f 6c 6f 2e 2e 32 63 63 63 32 32 32 00 00 +00 20 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Piccolo..3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 05 05 0a 0e 00 04 4a 19 03 12 05 05 0a 0e 00 04 50 0d 03 12 05 05 0a 0e +00 04 52 0d 03 12 05 05 0a 0e 00 04 58 0d 03 06 28 29 00 00 12 18 02 04 00 +63 32 00 32 00 32 00 50 69 63 63 6f 6c 6f 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Piccolo..3 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +12 05 05 0a 0e 00 01 4a 19 03 12 05 05 0a 0e 00 01 50 0d 03 12 05 05 0a 0e +00 01 52 0d 03 12 05 05 0a 0e 00 00 58 0d 03 06 28 29 00 00 12 18 02 04 00 +63 32 00 32 00 32 00 50 69 63 63 6f 6c 6f 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + +--Bank 4 + +* SUBCATEGORY Recorder + + +** Name: OrntRecord +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +13 18 00 09 0c 00 03 4e 16 03 12 16 12 0a 07 00 04 51 08 03 12 12 00 09 0d +00 05 63 04 03 12 16 0f 09 06 00 05 5e 04 03 34 23 00 00 00 62 18 04 04 00 +28 32 00 00 00 32 00 4f 72 6e 74 52 65 63 6f 72 64 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntRecord +** Source: from a library of patches collected by Duane Bowker, author unknown +13 18 00 09 0c 00 00 4e 16 03 12 16 12 0a 07 00 00 51 08 03 12 12 00 09 0d +00 00 63 04 03 12 16 0f 09 06 00 00 5e 04 03 34 23 00 00 00 62 18 04 04 00 +28 32 00 00 00 32 00 4f 72 6e 74 52 65 63 6f 72 64 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Recorder +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank C, voice 24 +14 0a 00 0a 0a 00 44 36 08 06 14 00 00 03 0f 00 42 2d 0a 00 14 1f 0f 08 0f +00 44 32 04 03 11 08 00 0b 0e 02 43 63 04 06 3a 1b 04 0f 06 46 18 02 04 00 +28 43 00 00 00 32 00 52 65 63 6f 72 64 65 72 20 20 63 63 63 31 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Recorder +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +14 0a 00 0a 0a 00 44 36 08 06 14 00 00 03 0f 00 42 2d 0d 00 14 1f 0f 08 0f +00 44 32 04 03 11 08 00 0b 0e 02 43 63 04 06 3a 1b 04 0f 06 46 18 02 04 00 +28 43 00 00 00 32 00 52 65 63 6f 72 64 65 72 20 20 63 63 63 31 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Recorder.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 1f 16 01 0e 00 01 5d 08 1b 0f 00 03 0a 0d 00 44 61 04 0b 0f 00 03 0a 0d +00 05 61 04 0b 0f 00 03 0a 0d 00 06 61 04 0b 2e 25 2a 26 36 16 18 02 04 00 +63 63 00 00 00 32 00 52 65 63 6f 72 64 65 72 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Recorder.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +18 1f 16 01 0e 00 01 5d 08 1b 0f 00 03 0a 0d 00 41 61 04 0b 0f 00 03 0a 0d +00 01 61 04 0b 0f 00 03 0a 0d 00 01 61 04 0b 2e 25 2a 26 36 16 18 02 04 00 +63 63 00 00 00 32 00 52 65 63 6f 72 64 65 72 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Recorder.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 1f 10 01 0e 00 03 00 08 1b 0d 0a 06 0a 00 00 05 63 08 03 0d 15 07 09 0c +00 45 63 08 03 0f 12 07 09 0c 00 05 5f 08 03 45 20 2a 15 43 26 18 02 04 00 +63 63 00 00 00 32 00 52 65 63 6f 72 64 65 72 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Recorder.2 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +18 1f 10 01 0e 00 00 00 08 1b 0d 0a 06 0a 00 00 00 63 08 03 0d 15 07 09 0c +00 40 63 08 03 0f 12 07 09 0c 00 00 5f 08 03 45 20 2a 15 43 26 18 02 04 00 +63 63 00 00 00 32 00 52 65 63 6f 72 64 65 72 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Recorder.2 +** Controls: MW (LFO pitch) +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +18 1f 10 00 0e 00 00 00 08 1b 0d 0a 06 0a 00 00 00 63 08 03 0d 15 07 09 0c +00 40 63 08 03 0f 12 07 09 0c 00 00 5f 08 03 45 20 2a 15 43 26 18 02 04 00 +63 63 00 00 00 32 00 52 65 63 6f 72 64 65 72 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Recorder.3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 1c 15 0c 0e 00 01 3f 08 1b 13 1d 15 0c 0e 00 06 63 08 03 10 03 03 0a 0d +00 45 63 04 0b 10 03 03 0a 0d 00 05 63 08 0b 76 20 2a 15 43 26 18 02 04 00 +63 63 00 00 00 32 00 52 65 63 6f 72 64 65 72 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Recorder.3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +18 1c 15 0c 0e 00 01 3f 08 1b 13 1d 15 0c 0e 00 00 63 08 03 10 03 03 0a 0d +00 41 63 04 0b 10 03 03 0a 0d 00 01 63 04 0b 76 20 2a 15 43 26 18 02 04 00 +63 63 00 00 00 32 00 52 65 63 6f 72 64 65 72 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Recorder.4 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 1c 15 0c 0e 00 01 3f 08 1b 13 1d 15 0c 0e 00 05 63 08 03 10 03 03 0a 0d +00 46 63 04 0b 10 03 03 0a 0d 00 07 63 04 0b 76 20 2a 15 43 26 18 02 04 00 +63 63 00 00 00 32 00 52 65 63 6f 72 64 65 72 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Recorder.4 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +18 1d 15 0a 0f 00 01 5e 08 13 10 0f 0a 0a 0f 00 01 62 04 0b 0f 09 0a 0c 04 +00 01 5e 04 0b 10 1f 03 09 0f 00 01 63 00 0b 2e 21 2a 00 00 12 18 02 04 00 +63 63 00 00 00 32 00 52 65 63 6f 72 64 65 72 2e 34 63 63 63 32 32 32 00 30 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Saxophone + + +** Name: Alto Sax +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 1f 00 08 0f 31 00 52 00 1b 0c 1f 00 09 0f 3a 03 44 08 1b 11 1f 00 08 0f +00 01 37 12 03 0f 1f 00 08 0f 00 00 63 00 03 78 23 00 00 00 42 18 02 04 00 +63 32 00 00 00 32 00 41 6c 74 6f 20 53 61 78 20 20 63 63 63 32 32 32 00 00 +00 10 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BC1 AltSax +** Controls: KV, BC (EG amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 1f 00 08 0f 31 25 63 00 1c 0c 1f 00 08 0f 3a 25 49 00 1b 11 1f 00 08 0f +00 1d 35 12 04 0f 1f 00 08 0f 00 3d 63 04 03 28 23 00 00 00 42 18 05 04 00 +63 32 00 0a 56 32 63 42 43 31 20 41 6c 74 53 61 78 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sax +** Controls: BC (EG amplitude) +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +10 1f 00 09 0f 00 20 44 00 03 10 1f 00 09 0f 2a 20 42 00 03 10 1f 00 09 0f +00 18 30 12 06 10 1f 00 09 0f 00 38 63 04 03 3a 21 00 00 00 52 18 02 04 00 +63 32 00 00 00 32 63 3c 42 43 31 3e 20 53 61 78 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BCSexyPhon +** Controls: KV, MW (LFO pitch), BC (EG amplitude) +** Source: Yamaha TX81Z factory preset, bank C, voice 19 +1d 04 00 06 0e 00 01 51 04 09 1d 1f 00 03 0f 11 01 4b 04 08 1d 0f 00 08 0a +00 01 46 27 0b 10 1f 00 0a 0f 00 3b 63 08 0b 3a 1e 17 0c 00 52 18 02 0d 0f +63 32 01 00 00 32 63 42 43 53 65 78 79 50 68 6f 6e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ElectroSax +** Controls: KV, MW (LFO pitch) +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +1f 0a 00 09 0e 0d 39 52 00 0e 1f 0b 00 0a 0a 1c 1a 46 00 08 1f 12 00 0a 0d +09 1a 4c 10 0b 16 1b 00 0a 0f 00 02 63 00 0b 3a 1e 09 02 00 62 18 02 04 00 +28 0b 00 00 00 32 00 45 6c 65 63 74 72 6f 53 61 78 63 63 63 32 32 32 00 20 +00 30 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: GreatDXled +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0d 00 0a 0f 0c 04 40 08 03 12 0c 06 09 0f 00 05 5c 04 06 1b 1f 04 0c 0f +00 05 5c 04 03 18 1f 00 0c 0f 00 06 62 04 03 7c 29 00 00 00 32 0c 02 04 00 +28 02 00 00 00 32 00 47 72 65 61 74 44 58 6c 65 64 63 63 63 32 32 32 00 10 +00 00 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: GreatDXled +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0d 00 0a 0f 0c 01 40 08 03 12 0c 06 09 0f 00 01 5c 04 06 1b 1f 04 0c 0f +00 00 5c 04 03 18 1f 00 0c 0f 00 00 62 04 03 7c 29 00 00 00 32 0c 02 04 00 +28 02 00 00 00 32 00 47 72 65 61 74 44 58 6c 65 64 63 63 63 32 32 32 00 10 +00 00 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MelloTenor +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank B, voice 9 +11 04 00 06 0e 33 01 4c 04 0b 0f 1f 00 03 0f 34 02 50 04 0b 10 0e 00 08 0c +63 03 44 22 13 10 1f 00 0a 0f 00 02 63 08 0b 3a 1e 11 0b 00 52 0c 04 05 00 +63 32 02 32 00 32 00 4d 65 6c 6c 6f 54 65 6e 6f 72 63 63 63 32 32 32 30 30 +20 30 20 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: RaspAlto +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank B, voice 10 +10 1f 00 08 0f 00 42 4a 00 03 11 1f 00 08 0f 0a 43 51 00 03 11 09 00 08 0d +00 42 2b 16 06 10 1f 00 09 0f 00 42 63 04 0b 3a 1e 09 09 00 5a 24 04 04 00 +63 32 31 00 00 32 00 52 61 73 70 41 6c 74 6f 20 20 63 63 63 32 32 32 00 10 +00 20 00 54 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sax 1 +** Controls: KV +** Source: Yamaha DX11 factory preset, bank C, voice 16 +14 08 00 08 0a 17 03 49 04 0b 10 0c 00 09 0a 21 04 45 04 0b 12 13 00 06 0b +1b 04 50 0a 0b 14 1f 00 0a 0f 00 01 5f 04 0b 32 20 00 00 00 52 0c 02 04 00 +28 32 00 00 00 32 00 53 61 78 20 20 20 20 20 20 31 63 63 63 32 32 32 00 00 +00 10 00 60 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sax 1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +14 08 00 08 0d 17 03 49 04 0b 10 0c 00 09 0d 21 04 45 04 0b 12 13 00 06 0b +1b 04 50 0a 0b 14 1f 00 0a 0f 00 01 5f 04 0b 32 20 00 00 00 52 0c 02 04 00 +28 32 00 00 00 32 00 53 61 78 20 20 20 20 20 20 31 63 63 63 32 32 32 00 00 +00 10 00 60 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sax 2 +** Controls: KV +** Source: Yamaha DX11 factory preset, bank C, voice 17 +10 08 00 08 0a 2c 03 49 04 0b 11 0f 00 09 0a 0f 04 4e 04 0b 15 13 00 06 09 +00 04 41 0e 0b 12 13 00 0a 0a 00 01 5f 08 0b 32 20 00 00 00 52 0c 02 04 00 +28 32 00 00 00 32 00 53 61 78 20 20 20 20 20 20 32 63 63 63 32 32 32 00 00 +00 10 00 60 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sax 2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +10 08 00 08 0d 2c 03 49 04 0b 11 0f 00 09 0d 0f 04 4e 04 0b 15 13 00 06 09 +00 04 41 0e 0b 12 13 00 0a 0d 00 01 5f 08 0b 32 20 00 00 00 52 0c 02 04 00 +28 32 00 00 00 32 00 53 61 78 20 20 20 20 20 20 32 63 63 63 32 32 32 00 00 +00 10 00 60 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sax Synth +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 06 12 04 03 31 03 63 00 0c 0a 1f 00 08 0f 3a 26 59 00 1b 0a 1f 00 08 0f +00 1d 29 13 04 11 1f 00 08 0f 00 3e 63 04 03 28 23 00 00 00 42 18 05 04 01 +63 32 00 00 00 32 00 53 61 78 20 53 79 6e 74 68 20 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sax Synth +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +10 06 12 04 03 31 01 63 00 0c 0a 1f 00 08 0f 3a 21 59 00 1b 0a 1f 00 08 0f +00 19 29 13 04 11 1f 00 08 0f 00 38 63 04 03 28 23 00 00 00 42 18 05 04 01 +63 32 00 00 00 32 00 53 61 78 20 53 79 6e 74 68 20 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Saxophone* +** Controls: KV, MW (LFO pitch), BC (EG amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0a 04 00 06 0e 1d 61 45 04 0b 0f 1f 00 03 0f 36 02 54 04 0b 0c 0e 00 08 0c +0f 63 4d 22 0b 18 1f 00 0a 0f 00 02 63 08 0b 39 1e 11 0b 00 4a 0c 02 05 00 +63 32 04 00 00 32 23 53 61 78 6f 70 68 6f 6e 65 2a 63 63 63 32 32 32 00 30 +00 30 30 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Saxophone1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 03 01 09 0f 00 01 37 00 03 12 07 04 09 0f 2a 22 4a 04 03 10 04 02 09 0f +00 1d 3d 12 06 11 03 03 09 0f 00 3c 58 04 03 7b 22 0b 07 00 42 18 02 04 00 +63 32 00 00 00 32 00 53 61 78 6f 70 68 6f 6e 65 31 63 63 63 32 32 32 00 00 +00 20 00 44 00 10 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Saxophone1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 03 01 09 0f 00 01 37 00 03 12 07 04 09 0f 2a 22 4a 00 03 1f 04 02 09 0f +00 1a 3d 12 06 11 03 03 09 0f 00 38 58 04 03 7b 22 0b 07 00 42 18 02 04 00 +63 32 00 00 00 32 00 53 61 78 6f 70 68 6f 6e 65 31 63 63 63 32 32 32 00 00 +00 20 00 40 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Saxophone2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +13 1e 00 08 0f 00 00 2e 03 03 0e 1f 00 09 0d 2a 22 4b 04 03 11 1f 00 09 0e +00 1b 3b 12 06 11 05 00 08 0e 00 3b 5e 04 03 3b 21 00 00 00 52 18 02 04 00 +63 32 00 00 00 32 00 53 61 78 6f 70 68 6f 6e 65 32 63 63 63 32 32 32 00 00 +00 40 00 14 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Saxophone2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +13 1e 00 08 0f 00 00 37 03 03 0e 1f 00 09 0d 2a 22 4b 00 03 11 1f 00 09 0e +00 1b 3b 12 06 11 05 00 08 0e 00 38 5e 04 03 3b 21 00 00 00 52 18 02 04 00 +63 32 00 00 00 32 00 53 61 78 6f 70 68 6f 6e 65 32 63 63 63 32 32 32 00 00 +00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Saxophone3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +14 03 01 08 0f 19 00 41 04 03 0f 1f 00 09 0d 4b 23 4f 04 03 1f 03 00 09 0e +3d 1d 3d 0f 06 10 1e 00 08 0e 00 3d 63 04 03 3b 21 00 00 00 52 18 02 04 00 +63 32 00 00 00 32 00 53 61 78 6f 70 68 6f 6e 65 33 63 63 63 32 32 32 00 00 +00 10 00 43 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Saxophone3 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +14 03 01 08 0f 19 00 41 00 03 0f 1f 00 09 0d 4b 22 4f 00 03 1f 03 00 09 0e +3d 1a 3d 15 06 10 1e 00 08 0e 00 39 63 04 03 3b 21 00 00 00 52 18 02 04 00 +63 32 00 00 00 32 00 53 61 78 6f 70 68 6f 6e 65 33 63 63 63 32 32 32 00 00 +00 10 00 40 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Saxophone4 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 1f 00 08 0f 31 02 52 04 1c 0c 1f 00 07 0f 3a 25 42 00 1b 11 1f 00 08 0f +00 1c 3d 12 04 0f 1f 00 08 0f 00 3c 63 00 03 78 23 00 00 00 42 18 02 04 00 +63 32 00 00 00 32 00 53 61 78 6f 70 68 6f 6e 65 34 63 63 63 32 32 32 00 00 +00 30 00 04 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Saxophone4 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 1f 00 08 0f 31 02 52 00 1c 0c 1f 00 07 0f 3a 22 42 04 1b 11 1f 00 08 0f +00 19 3d 12 04 0f 1f 00 08 0f 00 38 63 04 03 78 23 00 00 00 42 18 02 04 00 +63 32 00 00 00 32 00 53 61 78 6f 70 68 6f 6e 65 34 63 63 63 32 32 32 00 00 +00 30 00 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Saxophone5 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 0f 00 09 0f 0a 03 4f 00 03 11 1f 00 08 0e 14 04 4e 00 0b 11 0f 00 08 0e +00 05 2f 17 03 11 1f 00 09 0f 00 04 63 04 03 32 1e 11 0a 00 52 18 02 04 00 +63 32 00 00 00 32 00 53 61 78 6f 70 68 6f 6e 65 35 63 63 63 32 32 32 00 10 +00 30 00 42 00 30 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Saxophone5 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +10 0f 00 09 0f 0a 01 4f 00 03 11 1f 00 08 0e 14 01 4e 00 0b 11 0f 00 08 0e +00 03 2f 17 03 11 1f 00 09 0f 00 01 63 04 03 32 1e 11 0a 00 52 18 02 04 00 +63 32 00 00 00 32 00 53 61 78 6f 70 68 6f 6e 65 35 63 63 63 32 32 32 00 10 +00 30 00 42 00 30 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Saxophone6 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +13 1e 00 08 0f 00 03 46 04 03 0c 1f 00 09 0d 2a 24 4b 04 03 0f 1f 00 09 0e +00 1c 39 10 03 11 1e 00 08 0e 00 3c 63 04 03 7b 21 05 09 00 52 18 02 04 00 +63 32 00 00 00 32 00 53 61 78 6f 70 68 6f 6e 65 36 63 63 63 32 32 32 00 40 +00 40 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Saxophone6 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +13 1e 00 08 0f 00 00 46 04 03 0c 1f 00 09 0d 2a 21 4b 00 03 0f 1f 00 09 0e +00 19 39 04 03 11 1e 00 08 0e 00 38 63 04 03 7b 21 05 09 00 52 18 02 04 00 +63 32 00 00 00 32 00 53 61 78 6f 70 68 6f 6e 65 36 63 63 63 32 32 32 00 00 +00 30 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SopranoSax +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +10 1f 00 08 0f 0c 42 2c 04 03 13 1f 00 08 0f 26 42 58 00 03 11 09 00 08 08 +2d 42 1e 16 06 11 1f 00 09 0f 00 44 63 04 0b 02 1e 09 09 00 5a 24 04 04 00 +63 32 31 12 00 32 00 53 6f 70 72 61 6e 6f 53 61 78 63 63 63 32 32 32 00 00 +00 20 00 50 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Trombone + + +** Name: Mute Trmbn +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 1f 00 08 0f 00 01 4a 00 03 15 1f 00 08 0f 00 03 2c 00 03 16 19 12 09 0f +01 05 54 00 0b 12 1f 00 08 0f 00 05 5e 04 03 3a 27 00 29 00 22 0c 06 04 00 +63 63 00 00 00 32 00 4d 75 74 65 20 54 72 6d 62 6e 63 63 63 32 32 32 00 00 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Mute Trmbn +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 1f 00 08 0f 00 01 4a 00 03 15 1f 00 08 0f 00 00 2c 00 03 16 19 12 09 0f +01 01 54 00 0b 12 1f 00 08 0f 00 01 5e 04 03 3a 27 00 29 00 22 0c 06 04 00 +63 63 00 00 00 32 00 4d 75 74 65 20 54 72 6d 62 6e 63 63 63 32 32 32 00 00 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Trombone * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0b 0a 00 08 0d 00 03 4e 04 0e 0c 0a 00 06 0d 00 02 53 04 0e 1f 08 00 08 0d +14 03 2a 0a 0b 0e 07 00 08 0d 00 00 63 04 0b 3a 1d 00 00 00 52 0c 05 04 00 +28 63 00 00 00 32 00 54 72 6f 6d 62 6f 6e 65 20 2a 63 63 63 32 32 32 00 00 +00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Trombone +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank C, voice 13 +0e 0b 00 09 0e 0f 02 50 00 0b 10 0c 00 0a 0a 1c 02 47 00 0b 10 11 00 0a 05 +09 03 47 06 0b 0f 18 00 0b 0f 00 02 63 00 0b 3a 20 09 03 00 52 18 02 04 00 +28 32 00 00 00 32 00 54 72 6f 6d 62 6f 6e 65 20 20 63 52 63 2f 32 32 00 00 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Trombone +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +0f 1f 00 08 0f 00 00 42 04 03 0f 1f 00 08 0f 00 00 2e 04 03 1f 0e 00 08 00 +01 00 52 0b 13 13 1f 00 08 0f 00 00 5a 04 04 3a 23 00 00 00 62 0c 02 04 00 +63 63 00 00 00 32 00 54 72 6f 6d 62 6f 6e 65 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Trombone.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 1f 00 08 0f 00 01 52 04 03 15 1f 00 08 0f 00 04 36 04 03 14 0e 00 08 00 +01 05 57 08 13 12 1f 00 08 0f 00 06 5e 04 03 32 27 00 29 00 22 0c 06 04 00 +63 63 00 00 00 32 00 54 72 6f 6d 62 6f 6e 65 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Trombone.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 1f 00 08 0f 00 01 52 04 03 15 1f 00 08 0f 00 01 36 04 03 14 0e 00 08 00 +01 01 57 08 13 12 1f 00 08 0f 00 01 5e 04 03 32 27 00 29 00 22 0c 06 04 00 +63 63 00 00 00 32 00 54 72 6f 6d 62 6f 6e 65 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Trombone.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 1f 00 08 0f 00 01 4f 00 03 15 1f 00 08 0f 00 04 2b 04 03 0f 10 05 08 06 +01 06 50 0b 13 12 1f 00 08 0f 00 04 5d 04 03 3a 27 00 29 00 22 0c 06 04 00 +63 63 00 00 00 32 00 54 72 6f 6d 62 6f 6e 65 2e 32 63 63 63 32 32 32 00 00 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Trombone.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 1f 00 08 0f 00 01 4f 00 03 15 1f 00 08 0f 00 02 2b 04 03 0f 10 05 08 06 +01 00 50 0b 13 12 1f 00 08 0f 00 00 5d 04 03 3a 27 00 29 00 22 0c 06 04 00 +63 63 00 00 00 32 00 54 72 6f 6d 62 6f 6e 65 2e 32 63 63 63 32 32 32 00 00 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Trumpet + + +** Name: 2 Trumpets +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +10 05 00 08 0b 0f 05 58 04 08 10 1f 00 07 0f 0f 05 54 05 0e 0f 10 00 0c 00 +1a 04 2d 0a 0c 10 1f 00 07 0f 00 07 60 04 0b 02 23 19 06 00 52 11 04 04 00 +63 1d 00 08 27 32 00 32 20 54 72 75 6d 70 65 74 73 63 63 63 32 32 32 00 38 +00 31 20 02 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BC1Trumpet +** Controls: MW (LFO pitch), BC (EG amplitude) +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +10 1f 00 08 0f 00 38 48 04 0b 0e 1f 00 08 0f 00 20 3c 04 03 10 1f 00 08 0f +00 38 24 0b 03 12 1f 00 09 0f 00 20 63 04 0b 3a 23 13 04 00 62 18 02 04 00 +63 63 00 00 00 32 63 42 43 31 54 72 75 6d 70 65 74 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BC1 Trumpt +** Controls: KV, MW (LFO pitch), BC (LFO pitch), BC (EG amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 1f 00 08 0f 00 3d 49 04 0b 0e 1f 00 08 0f 00 25 42 04 03 10 1f 00 08 0f +00 3d 20 0b 03 12 1f 00 09 0f 00 26 63 04 0b 2a 23 13 04 00 62 18 02 04 00 +63 63 00 03 03 32 63 42 43 31 20 54 72 75 6d 70 74 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: FanfarTpts +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank B, voice 29 +1f 06 06 04 0f 00 40 48 05 00 0c 08 07 05 0f 05 00 52 04 00 0f 07 03 07 0e +08 03 63 04 06 0f 08 04 05 0f 00 03 63 04 06 7c 1f 00 06 00 4a 11 02 04 00 +63 32 00 00 00 32 00 46 61 6e 66 61 72 54 70 74 73 63 63 63 32 32 32 06 01 +00 38 00 08 00 48 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Mute Trmpt +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 0a 08 08 0d 00 01 4c 08 00 15 1b 07 08 0a 00 04 43 08 14 0f 10 07 07 09 +02 05 36 0a 14 12 07 09 09 0f 00 06 63 08 0c 1a 22 23 05 00 22 0c 02 04 00 +63 63 00 00 00 32 00 4d 75 74 65 20 54 72 6d 70 74 63 63 63 32 32 32 00 20 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Mute Trmpt +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 0a 08 08 0d 00 01 4c 04 00 15 1b 07 08 0a 00 00 43 0a 14 0f 10 07 07 09 +02 00 36 0b 14 12 07 09 09 0f 00 00 63 0a 0c 1a 22 23 05 00 22 0c 02 04 00 +63 63 00 00 00 32 00 4d 75 74 65 20 54 72 6d 70 74 63 63 63 32 32 32 00 20 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ornt Trmpt +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +11 05 06 07 0d 00 02 32 04 03 12 10 06 07 0d 00 03 55 04 0b 13 16 06 07 09 +00 05 4a 04 13 12 10 06 07 0f 01 04 63 04 0b 7b 24 00 0c 00 52 0c 02 04 00 +63 63 00 00 00 32 00 4f 72 6e 74 20 54 72 6d 70 74 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ornt Trmpt +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +11 05 06 07 0d 00 00 32 04 03 12 10 06 07 0d 00 00 55 04 0b 13 16 06 07 09 +00 00 4a 04 13 12 10 06 07 0f 01 00 63 04 0b 7b 24 00 0c 00 52 0c 02 04 00 +63 63 00 00 00 32 00 4f 72 6e 74 20 54 72 6d 70 74 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Trumpet * +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 09 00 07 0e 0a 53 52 04 10 15 1f 00 09 0f 00 2a 63 04 03 15 1f 00 09 0f +00 2a 63 04 04 15 1f 00 09 0f 00 12 63 04 02 3d 63 00 0e 00 4a 18 02 04 00 +28 63 00 48 00 32 00 54 72 75 6d 70 65 74 20 20 2a 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Trumpet +** Controls: KV +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +0c 05 00 06 0f 00 02 49 04 03 19 1f 00 07 0f 0b 03 47 04 03 12 0b 00 01 0f +0d 02 3a 04 03 10 1f 00 09 0f 00 42 5a 04 0c 02 1c 19 00 00 5e 18 04 04 00 +63 0b 00 00 19 32 63 54 72 75 6d 70 65 74 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Trumpet +** Controls: MW (LFO pitch) +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +10 1f 00 08 0f 00 38 48 04 0b 0e 1f 00 08 0f 00 20 3c 04 03 10 1f 00 08 0f +00 38 24 0b 03 12 1f 00 09 0f 00 20 63 04 0b 3a 23 13 04 00 62 18 02 04 00 +63 63 00 00 00 32 00 20 20 20 54 72 75 6d 70 65 74 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Trumpet 1 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank C, voice 11 +12 10 00 09 0a 0a 01 4e 04 0b 13 0e 00 0a 0a 1c 02 43 04 0b 10 0f 00 0a 05 +09 03 40 06 0b 14 18 00 0b 0f 00 02 63 04 0b 3a 1f 09 04 00 62 18 02 04 00 +28 13 00 00 00 32 00 54 72 75 6d 70 65 74 20 20 31 63 63 63 32 32 32 00 00 +00 30 00 30 00 50 00 00 00 0c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Trumpet 1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +12 10 00 09 0d 0d 01 4e 04 0b 13 0e 00 0a 0a 1c 02 43 04 0b 10 0f 00 0a 05 +09 03 40 06 0b 14 18 00 0b 0f 00 02 63 04 0b 3a 1f 09 04 00 62 18 02 04 00 +28 13 00 00 00 32 00 54 72 75 6d 70 65 74 20 20 31 63 63 63 32 32 32 00 00 +00 30 00 30 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Trumpet 2 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank C, voice 12 +10 0e 00 03 0e 00 01 4e 04 03 0c 0e 00 03 0e 28 01 40 04 03 0c 0c 00 09 00 +00 07 33 03 03 13 09 00 0a 0f 12 04 63 04 03 3a 20 14 1a 00 32 18 02 04 00 +63 3c 00 00 00 32 00 54 72 75 6d 70 65 74 20 20 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Trumpet 3 +** Description: A trumpet similar to DX11 factory preset 'Trumpet 2' +** Controls: KV +** Source: Art Hitzeman +0e 0d 00 03 0e 00 01 4e 00 03 0a 0d 00 03 0e 28 01 40 04 03 0a 0b 00 09 00 +00 07 33 03 03 11 08 00 0a 0f 12 04 63 04 03 3a 20 14 1a 00 32 24 02 04 00 +63 00 00 00 00 32 00 54 72 75 6d 70 65 74 20 20 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Trumpet..1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 0a 07 09 0f 00 02 50 04 0a 0f 0f 05 0a 00 00 06 46 07 13 0f 07 09 07 0b +00 06 42 04 0b 12 07 05 0a 0d 00 07 63 04 04 7a 1d 1e 0f 00 42 0c 02 04 00 +63 63 00 00 00 32 00 54 72 75 6d 70 65 74 2e 2e 31 63 63 63 32 32 32 00 00 +00 03 00 20 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Trumpet..1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 0a 07 09 0f 00 02 50 04 0a 0f 0f 05 0a 00 00 01 46 07 13 0f 07 09 07 0b +00 00 42 04 0b 12 07 05 0a 0d 00 01 63 04 04 7a 1d 1e 0f 00 42 0c 02 04 00 +63 63 00 00 00 32 00 54 72 75 6d 70 65 74 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 20 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Trumpet..2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 0a 07 09 0f 00 41 4e 04 0a 0f 0f 05 0a 00 00 04 41 04 13 0f 10 06 07 0e +02 06 46 0b 0b 12 07 05 0a 0d 00 06 63 04 04 3a 23 1e 17 10 36 0c 02 04 00 +63 63 00 00 00 32 00 54 72 75 6d 70 65 74 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Trumpet..2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 0a 07 09 0f 00 41 4e 04 0a 0f 0f 05 0a 00 00 00 41 04 13 0f 10 06 07 0e +02 00 46 0b 0b 12 07 05 0a 0d 00 01 63 04 04 3a 23 1e 17 10 36 0c 02 04 00 +63 63 00 00 00 32 00 54 72 75 6d 70 65 74 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Trumpet..3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 0a 06 08 0d 00 02 59 04 0a 15 1c 06 08 0c 00 04 4f 04 15 0f 10 06 09 0e +02 06 49 0d 09 13 07 06 09 0d 00 06 63 04 04 2a 23 00 00 00 22 0c 02 04 00 +63 63 00 00 00 32 00 54 72 75 6d 70 65 74 2e 2e 33 63 63 63 32 32 32 00 00 +00 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Trumpet..3 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 0a 06 08 0d 00 02 59 04 0a 15 1c 06 08 0c 00 00 4f 04 15 0f 10 06 09 0e +02 00 49 0d 09 13 07 06 09 0d 00 01 63 04 04 2a 23 00 00 00 22 0c 02 04 00 +63 63 00 00 00 32 00 54 72 75 6d 70 65 74 2e 2e 33 63 63 63 32 32 32 00 00 +00 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Trumpet..4 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 0a 06 08 0d 00 42 53 04 0a 15 1c 06 08 0c 00 03 4d 04 13 0f 03 06 07 09 +02 06 31 10 0a 13 07 06 09 0d 00 07 63 04 04 3a 22 00 08 2e 46 0c 02 04 00 +63 63 00 00 00 32 00 54 72 75 6d 70 65 74 2e 2e 34 63 63 63 32 32 32 00 00 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Trumpet..4 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 0a 06 08 0d 00 42 53 04 0a 15 1c 06 08 0c 00 00 4d 04 13 0f 03 06 07 09 +02 00 31 10 0a 13 07 06 09 0d 00 01 63 04 04 3a 22 00 08 2e 46 0c 02 04 00 +63 63 00 00 00 32 00 54 72 75 6d 70 65 74 2e 2e 34 63 63 63 32 32 32 00 00 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Trumpet..5 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0c 0a 06 08 0d 00 02 4d 04 0a 15 1c 06 08 0c 00 05 46 04 13 0f 03 06 07 09 +02 06 34 07 0a 15 07 06 09 0d 00 06 63 04 04 2a 22 23 05 00 22 0c 02 04 00 +63 63 00 00 00 32 00 54 72 75 6d 70 65 74 2e 2e 35 63 63 63 32 32 32 00 00 +00 20 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Trumpet..5 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0c 0a 06 08 0d 00 02 4d 04 0a 15 1c 06 08 0c 00 00 46 04 13 0f 03 06 07 09 +02 00 34 07 0a 15 07 06 09 0d 00 01 63 04 04 2a 22 23 05 00 22 0c 02 04 00 +63 63 00 00 00 32 00 54 72 75 6d 70 65 74 2e 2e 35 63 63 63 32 32 32 00 00 +00 20 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Trumpet81Z +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank B, voice 1 +0f 1f 04 08 0f 00 3a 51 04 0b 0e 1f 00 08 0f 00 22 4b 04 03 0f 1a 0b 08 0d +00 3b 36 09 03 12 1f 00 08 0f 00 22 5d 04 0b 3a 1e 19 05 00 52 18 04 04 00 +63 32 00 00 00 32 00 54 72 75 6d 70 65 74 38 31 5a 63 63 63 32 32 32 00 00 +00 50 00 51 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: TrumptSolo +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank C, voice 18 +13 00 00 04 0f 00 00 3a 0b 06 0f 1f 03 0a 0f 05 01 5d 05 00 11 0e 06 0a 09 +08 00 36 03 06 13 1f 01 08 0f 00 02 63 04 03 3b 1d 03 0f 01 42 11 07 04 00 +63 32 00 00 00 32 00 54 72 75 6d 70 74 53 6f 6c 6f 63 63 63 32 32 32 00 61 +00 11 00 06 00 08 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Trumpet V +** Controls: KV, MW (LFO pitch), BC (voice pitch) +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +0f 1f 04 08 0f 00 3a 52 04 0b 0e 1f 00 08 0f 00 22 4b 04 03 10 1f 0b 08 0f +00 3b 2f 0b 03 12 1f 00 09 0f 00 22 63 04 0b 3a 1e 13 04 00 42 18 02 04 00 +63 63 00 00 00 00 00 54 72 75 6d 70 65 74 20 56 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Tuba + + +** Name: << Tuba >> +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0f 05 06 0d 45 03 4c 00 03 14 0d 02 07 09 59 04 48 00 03 0f 10 03 07 09 +46 05 48 00 03 0e 0f 03 08 0f 14 06 63 04 03 2b 23 00 00 00 32 0c 02 04 00 +63 32 00 00 01 32 00 3c 3c 20 54 75 62 61 20 3e 3e 63 63 63 32 32 32 00 00 +00 00 00 20 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: << Tuba >> +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0f 05 06 0d 45 01 4c 00 03 14 0d 02 07 09 59 00 48 00 03 0f 10 03 07 09 +46 00 48 00 03 0e 0f 03 08 0f 14 01 63 04 03 2b 23 00 00 00 32 0c 02 04 00 +63 32 00 00 01 32 00 3c 3c 20 54 75 62 61 20 3e 3e 63 63 63 32 32 32 00 00 +00 00 00 20 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tuba +** Controls: KV +** Source: Yamaha DX11 factory preset, bank C, voice 15 +0f 0f 00 09 09 15 01 52 00 03 10 0a 00 06 0a 00 01 47 00 03 10 0c 00 09 0b +00 01 45 00 03 10 0a 00 0b 0a 0e 02 63 00 03 3a 1f 00 00 00 52 0c 02 04 00 +63 32 00 00 00 32 00 54 75 62 61 20 20 20 20 20 20 63 63 63 32 32 32 00 00 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tuba +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 0f 00 09 09 15 01 52 00 03 10 0d 00 06 0a 00 01 47 00 03 10 0c 00 09 0b +00 01 45 00 03 10 0d 00 0b 0d 0e 02 63 00 03 3a 1f 00 00 00 52 0c 02 04 00 +63 32 00 00 00 32 00 54 75 62 61 20 20 20 20 20 20 63 63 63 32 32 32 00 00 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Whistle + + +** Name: Whistle * +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 0f 0f 00 00 00 08 03 0b 10 00 09 0e 00 00 63 08 02 0a 0f 1c 09 00 +00 00 63 08 00 0c 0f 00 09 0e 00 00 63 08 06 05 20 16 15 43 52 18 0c 04 00 +28 63 00 00 00 32 00 57 68 69 73 74 6c 65 20 20 2a 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Whistle..1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +13 1c 15 03 0e 00 03 00 08 03 13 06 03 0a 0d 00 44 00 08 03 13 06 03 0a 0d +00 45 00 08 03 13 06 03 0a 0d 00 06 63 08 03 3e 25 0b 26 63 36 18 04 04 00 +28 32 00 00 00 32 00 57 68 69 73 74 6c 65 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Whistle..1 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +13 1c 15 03 0e 00 00 00 08 03 13 06 03 0a 0d 00 40 00 08 03 13 06 03 0a 0d +00 40 00 08 03 13 06 03 0a 0d 00 00 63 08 03 3e 25 0b 26 63 36 18 04 04 00 +28 32 00 00 00 32 00 57 68 69 73 74 6c 65 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Whistle..2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +08 1f 07 05 0f 47 05 62 0d 05 08 1f 02 05 0f 00 03 3e 0d 02 07 1f 02 05 0f +4e 04 3c 0d 0b 07 1f 02 05 0f 00 04 63 0d 1b 57 22 00 14 00 32 0c 04 04 00 +28 32 00 00 00 32 00 57 68 69 73 74 6c 65 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Whistle..2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +08 1f 07 05 0f 47 01 62 0d 05 08 1f 02 05 0f 00 01 3e 0d 02 07 1f 02 05 0f +4e 01 3c 0d 0b 07 1f 02 05 0f 00 00 63 0d 1b 57 22 00 14 00 32 0c 04 04 00 +28 32 00 00 00 32 00 57 68 69 73 74 6c 65 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Whistle..3 +** Controls: KV, MW (LFO pitch), BC (voice pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0f 00 08 00 00 03 42 08 03 19 10 00 09 08 00 04 42 04 03 0f 09 00 08 0f +00 06 5d 08 03 0d 08 00 09 0e 1a 06 62 08 03 3c 23 09 0b 00 42 18 02 04 00 +63 32 00 00 00 33 00 57 68 69 73 74 6c 65 2e 2e 33 63 63 63 32 32 32 00 00 +00 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Whistle..3 +** Controls: KV, MW (LFO pitch), BC (voice pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0f 00 08 00 00 01 42 08 03 19 10 00 09 08 00 00 42 04 03 0f 09 00 08 0f +00 01 5d 08 03 0d 08 00 09 0e 1a 01 62 08 03 3c 23 09 0b 00 42 18 02 04 00 +63 32 00 00 00 33 00 57 68 69 73 74 6c 65 2e 2e 33 63 63 63 32 32 32 00 00 +00 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Whistling +** Controls: KV, MW (LFO pitch), BC (voice pitch) +** Source: Yamaha TX81Z factory preset, bank D, voice 20 +1f 0f 00 08 00 00 04 4e 07 03 19 10 00 09 08 00 00 38 01 03 0f 09 00 08 0f +00 02 4e 08 03 0d 08 00 09 0e 1a 02 5e 08 03 3c 23 03 0f 00 62 18 02 04 00 +63 32 00 00 00 33 00 57 68 69 73 74 6c 69 6e 67 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +--Bank 5 + +* CATEGORY STRINGS + +* SUBCATEGORY Strings + +** Name: AnlgStr..1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0d 0a 00 07 0e 28 04 51 04 08 0e 05 12 08 0c 00 00 4f 04 04 0c 0a 00 07 0e +07 05 63 04 00 0d 04 12 08 0c 14 04 5f 04 03 2c 26 21 20 47 12 0c 06 04 00 +63 32 00 32 00 32 00 41 6e 6c 67 53 74 72 2e 2e 31 63 63 63 32 32 32 00 40 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgStr..1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0d 0a 00 07 0e 28 01 51 04 08 0e 05 12 08 0c 00 00 4f 04 04 0c 0a 00 07 0e +07 00 63 04 00 0d 04 12 08 0c 14 00 5f 04 03 2c 26 21 20 47 12 0c 06 04 00 +63 32 00 32 00 32 00 41 6e 6c 67 53 74 72 2e 2e 31 63 63 63 32 32 32 00 40 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgStr..2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0e 0a 00 07 0e 1e 02 49 04 08 0d 0c 01 07 0e 00 01 4d 04 04 0d 09 00 07 0f +05 04 5b 04 00 0b 09 00 07 0e 14 03 5f 04 02 74 26 21 11 47 32 0c 06 04 00 +63 32 00 32 00 32 00 41 6e 6c 67 53 74 72 2e 2e 32 63 63 63 32 32 32 00 50 +00 30 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgStr..2 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0e 0a 00 07 0e 1e 00 49 04 08 0d 0c 01 07 0e 00 00 4d 04 04 0d 09 00 07 0f +05 00 5b 04 00 0b 09 00 07 0e 14 00 5f 04 02 74 26 21 11 47 32 0c 06 04 00 +63 32 00 32 00 32 00 41 6e 6c 67 53 74 72 2e 2e 32 63 63 63 32 32 32 00 50 +00 30 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgStr..3 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0d 09 03 06 0e 28 02 39 0d 0b 0e 0a 01 04 0e 00 02 4b 08 04 0d 0a 02 05 0f +0a 04 59 08 03 0b 0a 01 05 0d 14 04 5d 08 0b 2c 26 21 16 3b 22 0c 06 04 00 +63 32 00 32 00 32 00 41 6e 6c 67 53 74 72 2e 2e 33 63 63 63 32 32 32 00 20 +00 00 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgStr..3 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0d 09 03 06 0e 28 00 39 0d 0b 0e 0a 01 04 0e 00 00 4b 08 04 0d 0a 02 05 0f +0a 00 59 08 03 0b 0a 01 05 0d 14 00 5d 08 0b 2c 26 21 16 3b 22 0c 06 04 00 +63 32 00 32 00 32 00 41 6e 6c 67 53 74 72 2e 2e 33 63 63 63 32 32 32 00 20 +00 00 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgStr..4 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 13 00 05 0e 00 42 44 0d 02 0d 07 0e 06 06 0e 44 57 08 04 0c 1f 00 06 0f +52 05 53 0d 04 0b 1f 06 08 0f 0a 03 63 01 04 2d 22 0a 0a 08 26 0c 07 04 00 +63 63 00 00 00 32 00 41 6e 6c 67 53 74 72 2e 2e 34 63 63 63 32 32 32 00 30 +00 20 00 00 00 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgStr..4 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 13 00 05 0e 00 40 44 0d 02 0d 07 0e 06 06 0e 40 57 08 04 0c 1f 00 06 0f +52 00 53 0d 04 0b 1f 06 08 0f 0a 00 63 01 04 2d 22 0a 0a 08 36 0c 07 04 00 +63 63 00 00 00 32 00 41 6e 6c 67 53 74 72 2e 2e 34 63 63 63 32 32 32 00 30 +00 20 00 00 00 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgStr..5 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0c 03 1e 05 04 56 04 48 04 06 0c 03 1e 05 04 23 01 49 0a 0d 09 1f 01 08 0f +15 03 57 08 08 09 1f 00 05 0f 25 03 5b 04 02 54 20 0f 0a 00 52 0c 0c 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 53 74 72 2e 2e 35 63 63 63 32 32 32 00 00 +00 40 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgStr..5 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0c 03 1e 05 04 56 00 48 04 06 0c 03 1e 05 04 23 00 49 0a 0d 09 1f 01 08 0f +15 00 57 08 08 09 1f 00 05 0f 25 00 5b 04 02 54 20 0f 0a 00 52 0c 0c 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 53 74 72 2e 2e 35 63 63 63 32 32 32 00 00 +00 40 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgStr..6 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0d 03 1e 05 04 56 04 41 1f 06 0d 03 1e 05 04 23 02 48 0d 0d 0a 1f 01 08 0f +15 03 5b 08 08 0a 1f 00 05 0f 25 04 5d 08 01 54 20 0f 0a 00 52 0c 0c 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 53 74 72 2e 2e 36 63 63 63 32 32 32 00 50 +00 20 00 30 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgStr..6 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0d 03 1e 05 04 56 00 41 1f 06 0d 03 1e 05 04 23 00 48 0d 0d 0a 1f 01 08 0f +15 00 5b 08 08 0a 1f 00 05 0f 25 00 5d 08 01 54 20 0f 0a 00 52 0c 0c 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 53 74 72 2e 2e 36 63 63 63 32 32 32 00 50 +00 20 00 30 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgStr..7 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 0f 04 05 0d 56 04 3a 1f 06 0e 0b 01 05 0e 23 02 4b 08 05 0d 15 03 08 0f +15 04 57 08 00 0b 04 00 05 0f 25 04 5b 08 01 6c 20 0f 0a 00 52 0c 0c 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 53 74 72 2e 2e 37 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgStr..7 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 0f 04 05 0d 56 00 3a 1f 06 0e 0b 01 05 0e 23 00 4b 08 05 0d 15 03 08 0f +15 00 57 08 00 0b 04 00 05 0f 25 00 5b 08 01 6c 20 0f 0a 00 52 0c 0c 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 53 74 72 2e 2e 37 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgStr..8 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +13 0b 05 05 0d 0a 42 44 08 11 0d 04 02 06 0d 0e 43 5c 08 02 0c 07 06 06 0f +52 05 56 19 03 0a 03 06 08 0f 0a 04 63 08 00 2d 22 0e 0c 08 56 0c 07 04 00 +63 63 00 00 00 32 00 41 6e 6c 67 53 74 72 2e 2e 38 63 63 63 32 32 32 00 60 +00 30 00 10 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgStr..8 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +13 0b 05 05 0d 0a 40 44 08 11 0d 04 02 06 0d 0e 40 5c 08 02 0c 07 06 06 0f +52 00 56 19 03 0a 03 06 08 0f 0a 00 63 08 00 2d 22 0e 0c 08 56 0c 07 04 00 +63 63 00 00 00 32 00 41 6e 6c 67 53 74 72 2e 2e 38 63 63 63 32 32 32 00 60 +00 30 00 10 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgStr..9 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0e 0b 05 05 0e 00 42 42 04 03 0d 0c 00 05 0e 0e 41 3c 08 0e 0a 09 06 06 0f +52 04 5e 08 02 0a 03 00 06 0f 0a 04 5d 08 04 24 1e 0e 0c 08 56 00 07 04 00 +63 63 00 00 00 32 00 41 6e 6c 67 53 74 72 2e 2e 39 63 63 63 32 32 32 00 30 +00 50 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgStr..9 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0e 0b 05 05 0e 00 40 42 0d 03 0d 0c 00 05 0e 0e 40 3c 13 0e 0a 09 06 06 0f +52 00 5e 04 02 0c 03 00 06 0f 0a 00 5d 08 04 24 22 0e 0c 08 56 00 07 04 00 +63 63 00 00 00 32 00 41 6e 6c 67 53 74 72 2e 2e 39 63 63 63 32 32 32 00 30 +00 10 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgStr.10 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0c 03 1e 05 04 56 03 4c 04 00 0c 03 1e 05 04 23 02 48 04 0e 09 1f 01 08 0f +15 04 5f 04 0e 09 1f 00 05 0f 25 03 60 04 06 54 17 13 29 00 32 0c 0c 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 53 74 72 2e 31 30 63 63 63 32 32 32 00 00 +00 30 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgStr.10 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0c 03 1e 05 04 56 00 4c 00 00 0c 03 1e 05 04 23 00 48 08 0e 09 1f 01 08 0f +15 00 5f 00 0e 09 1f 00 05 0f 25 00 60 00 06 54 17 13 29 00 32 0c 0c 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 53 74 72 2e 31 30 63 63 63 32 32 32 00 00 +00 30 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgStr.11 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0b 0b 02 05 0c 23 03 49 04 08 10 03 1e 05 04 58 03 48 0d 00 0c 0b 01 07 0e +26 05 5c 08 06 0c 1f 00 05 0f 25 03 60 04 03 24 21 19 0e 00 22 24 0c 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 53 74 72 2e 31 31 63 63 63 32 32 32 00 00 +00 30 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgStr.11 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0b 0b 02 05 0c 23 00 49 04 08 10 03 1e 05 04 58 00 48 0d 00 0c 0b 01 07 0e +26 00 5c 08 06 0c 1f 00 05 0f 25 00 60 04 03 24 21 19 0e 00 22 24 0c 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 53 74 72 2e 31 31 63 63 63 32 32 32 00 00 +00 30 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BC1 String +** Controls: KV, MW (LFO pitch), BC (LFO pitch), BC (EG amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0c 03 1e 05 04 56 04 53 0d 06 0c 03 1e 05 04 23 3c 52 08 0d 09 1f 01 08 0f +15 05 57 08 08 09 1f 00 05 0f 25 06 5b 04 01 64 20 0f 0a 00 52 0c 0c 04 00 +63 32 00 05 09 32 63 42 43 31 20 53 74 72 69 6e 67 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: DualStr..1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 03 02 04 08 2d 02 4a 08 08 17 0c 07 01 0f 3f 02 3d 0d 04 0c 0b 04 07 0f +12 04 61 08 05 0c 08 00 06 0b 25 04 5b 08 06 2c 21 1e 0f 00 22 18 0c 04 00 +63 32 00 00 00 32 00 44 75 61 6c 53 74 72 2e 2e 31 63 63 63 32 32 32 00 00 +00 40 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: DualStr..1 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +18 03 02 04 08 2d 00 4a 08 08 1f 0c 07 01 0f 3f 00 3d 1c 04 09 10 04 07 0f +12 00 61 08 05 0d 08 00 06 0b 25 00 5b 04 06 2c 21 1e 0f 00 22 18 0c 04 00 +63 32 00 00 00 32 00 44 75 61 6c 53 74 72 2e 2e 31 63 63 63 32 32 32 00 00 +00 40 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: DualStr..2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 03 02 04 08 2d 03 46 08 0b 16 0c 07 01 0f 3f 02 49 04 01 09 10 04 07 0f +12 04 59 08 05 0a 08 00 06 0b 25 04 60 08 05 74 21 1e 0f 00 32 18 0c 04 00 +63 32 00 00 00 32 00 44 75 61 6c 53 74 72 2e 2e 32 63 63 63 32 32 32 00 00 +00 30 00 10 00 30 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: DualStr..2 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +18 03 02 04 08 2d 00 46 13 0b 16 0c 07 01 0f 3f 00 49 08 01 09 10 04 07 0f +12 00 59 04 05 0a 08 00 06 0b 25 00 60 08 05 74 21 1e 0f 00 32 18 0c 04 00 +63 32 00 00 00 32 00 44 75 61 6c 53 74 72 2e 2e 32 63 63 63 32 32 32 00 00 +00 30 00 10 00 30 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: DualStr..3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 05 01 05 08 2d 03 50 08 03 15 0a 01 05 0f 3f 03 38 13 00 0a 10 01 05 0f +12 03 59 08 03 0a 07 01 05 0b 25 04 5b 08 06 2c 21 1e 0f 00 22 18 0c 04 00 +63 32 00 00 00 32 00 44 75 61 6c 53 74 72 2e 2e 33 63 63 63 32 32 32 00 10 +00 10 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: DualStr..3 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +15 05 01 05 08 2d 00 50 08 03 15 0a 01 05 0f 3f 00 38 13 00 0a 10 01 05 0f +12 00 59 08 03 0a 07 01 05 0b 25 00 5b 08 06 2c 21 1e 0f 00 22 18 0c 04 00 +63 32 00 00 00 32 00 44 75 61 6c 53 74 72 2e 2e 33 63 63 63 32 32 32 00 10 +00 10 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ELKA Strg1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 16 03 04 0e 00 04 58 0d 02 18 03 03 05 08 00 04 5b 08 00 0f 04 03 07 0f +00 04 63 0d 06 09 10 03 05 0f 00 07 5f 08 05 24 21 23 0f 00 12 00 05 04 00 +63 63 63 00 00 32 00 45 4c 4b 41 20 53 74 72 67 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ELKA Strg1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +16 16 03 04 0e 00 01 58 0d 02 18 03 03 05 08 00 01 5b 08 00 0f 04 03 07 0f +00 00 63 0d 06 09 10 03 05 0f 00 01 5f 08 05 24 21 23 0f 00 12 00 05 04 00 +63 63 63 00 00 32 00 45 4c 4b 41 20 53 74 72 67 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ELKA Strg2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 16 03 04 0e 00 03 4b 08 0a 14 03 03 05 08 00 04 51 04 00 0b 04 03 07 0f +00 05 63 08 06 0b 10 03 05 0f 00 06 63 04 0d 7c 23 19 14 00 42 18 05 04 00 +63 63 63 00 00 32 00 45 4c 4b 41 20 53 74 72 67 32 63 63 63 32 32 32 00 00 +00 30 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ELKA Strg2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +15 16 03 04 0e 00 01 4b 08 0a 14 03 03 05 08 00 01 51 04 00 0b 04 03 07 0f +00 00 63 08 06 0b 10 03 05 0f 00 00 63 04 0d 7c 23 19 14 00 42 18 05 04 00 +63 63 63 00 00 32 00 45 4c 4b 41 20 53 74 72 67 32 63 63 63 32 32 32 00 00 +00 30 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: HiString 1 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank B, voice 21 +0b 04 00 04 0f 14 02 49 09 06 0a 07 00 04 0f 14 02 51 0a 00 08 1f 00 05 0f +00 01 63 09 06 0a 1f 00 05 0f 00 01 63 0a 00 3c 1f 06 09 00 52 05 04 04 00 +63 32 00 00 00 32 00 48 69 53 74 72 69 6e 67 20 31 63 63 63 32 32 32 00 02 +00 30 00 32 00 10 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: HiString 2 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank B, voice 30 +17 04 00 04 0f 14 02 49 09 06 19 07 00 04 0f 14 02 51 0a 00 15 1f 00 05 0f +00 01 63 09 06 14 1f 00 05 0f 00 01 63 0a 00 3c 1f 06 09 00 52 05 04 04 00 +63 32 00 00 00 32 00 48 69 53 74 72 69 6e 67 20 32 63 63 63 32 32 32 30 02 +20 30 00 32 00 10 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Kalimba * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1d 00 1f 01 00 00 00 3f 04 0e 1a 0d 1f 0f 00 00 00 32 08 1b 1a 0c 1f 05 00 +00 01 63 08 08 1e 12 1f 09 00 00 01 63 34 13 04 1c 00 00 00 42 18 02 04 00 +28 32 00 00 00 32 00 4b 61 6c 69 6d 62 61 20 20 2a 63 63 63 32 32 32 00 30 +00 00 00 00 09 1f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: LowString +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank B, voice 22 +0b 04 00 04 0f 14 02 49 05 06 0a 07 00 04 0f 14 02 55 04 00 09 1f 00 05 0f +00 01 63 09 06 08 1f 00 05 0f 00 01 63 04 00 3c 1d 06 0a 00 52 05 04 04 00 +63 32 00 00 00 32 00 4c 6f 77 53 74 72 69 6e 67 20 63 63 63 32 32 32 00 01 +00 38 00 32 00 18 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntPluck1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 19 16 01 0d 00 02 52 19 03 1f 09 0a 07 0c 00 02 4e 00 03 1b 15 06 0c 0d +00 05 36 16 03 1f 0a 04 06 0c 00 05 63 04 0b 7a 15 00 00 00 22 18 04 04 00 +28 32 00 00 00 32 00 4f 72 6e 74 50 6c 75 63 6b 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntPluck1 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 19 16 01 0d 00 00 52 19 03 1f 09 0a 07 0c 00 00 4e 00 03 1b 15 06 0c 0d +00 00 36 16 03 1f 0a 04 06 0c 00 00 63 04 0b 7a 15 00 00 00 22 18 04 04 00 +28 32 00 00 00 32 00 4f 72 6e 74 50 6c 75 63 6b 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntPluck1 +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +1f 19 16 00 0d 00 00 52 19 03 1f 09 0a 07 0c 00 00 4e 00 03 1b 15 06 0c 0d +00 00 36 16 03 1f 0a 04 06 0c 00 00 63 04 0b 7a 15 00 00 00 22 18 04 04 00 +28 32 00 00 00 32 00 4f 72 6e 74 50 6c 75 63 6b 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntPluck2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 07 19 07 0f 00 02 63 04 03 18 0c 0f 07 0c 00 03 41 2d 13 18 0c 0f 07 0c +00 06 63 04 0b 16 0f 16 06 0c 00 04 63 04 0b 7c 15 00 00 00 22 18 04 04 00 +28 32 00 00 00 32 00 4f 72 6e 74 50 6c 75 63 6b 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntPluck2 +** Source: from a library of patches collected by Duane Bowker, author unknown +18 07 19 07 0f 00 00 63 04 03 18 0c 0f 07 0c 00 00 41 2d 13 18 0c 0f 07 0c +00 00 63 04 0b 16 0f 16 06 0c 00 00 63 04 0b 7c 15 00 00 00 22 18 04 04 00 +28 32 00 00 00 32 00 4f 72 6e 74 50 6c 75 63 6b 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Pizz. 1 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank B, voice 25 +1f 1f 08 0a 0a 09 00 3c 04 03 1d 1d 11 0f 0a 00 01 63 04 03 1c 12 00 0b 00 +00 01 63 04 03 1f 11 0e 0f 09 00 01 5a 04 03 3e 23 00 0a 00 32 18 02 04 00 +63 32 00 00 00 32 00 50 69 7a 7a 2e 20 20 20 20 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Pizz. 1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 08 0a 0d 09 00 3c 04 03 1d 1d 11 0f 0a 00 01 63 04 03 1c 12 00 0b 00 +00 01 63 04 03 1f 11 0e 0f 09 00 01 5a 04 03 3e 23 00 0a 00 32 18 02 04 00 +63 32 00 00 00 32 00 50 69 7a 7a 2e 20 20 20 20 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Pizz. 2 +** Controls: KV +** Source: Yamaha DX11 factory preset, bank B, voice 26 +1d 10 0a 09 0f 00 01 41 04 03 1f 1f 16 0a 0a 00 00 4a 04 03 1f 1f 1f 0f 00 +00 01 51 00 03 1f 13 11 0f 00 00 01 63 04 03 39 23 00 00 00 32 18 02 04 00 +63 32 00 00 00 32 00 50 69 7a 7a 2e 20 20 20 20 32 63 63 63 32 32 32 00 00 +00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Pizz. 2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 10 0a 09 0f 00 01 41 04 03 1f 1f 16 0a 0d 00 00 4a 04 03 1f 1f 1f 0f 00 +00 01 51 00 03 1f 13 11 0f 00 00 01 63 04 03 39 23 00 00 00 32 18 02 04 00 +63 32 00 00 00 32 00 50 69 7a 7a 2e 20 20 20 20 32 63 63 63 32 32 32 00 00 +00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Pizzicato* +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1e 13 15 0f 00 2b 04 58 04 03 1f 1f 07 0a 0c 00 01 54 04 06 1f 0d 00 0a 00 +00 01 5b 04 00 1e 17 10 07 0b 00 02 63 04 03 01 23 00 00 00 32 18 02 04 00 +63 32 00 00 00 32 00 50 69 7a 7a 69 63 61 74 6f 2a 63 63 63 32 32 32 00 00 +00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Pizzicato +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank B, voice 23 +1b 18 15 0f 0a 00 01 61 04 03 1f 1f 00 07 0c 00 01 54 04 06 1f 0d 00 08 00 +00 01 5b 04 03 1f 10 00 06 00 00 01 63 04 03 39 23 00 00 00 62 18 04 04 00 +63 32 00 00 00 32 00 50 69 7a 7a 69 63 61 74 6f 20 63 63 63 32 32 32 00 00 +00 00 00 30 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ReverbStrg +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank B, voice 25 +0b 04 00 04 0f 00 01 49 05 06 0a 07 00 04 0f 00 01 49 04 00 09 1f 00 05 0f +00 01 63 09 06 09 1f 00 05 0f 00 01 63 0a 00 3c 1d 08 0a 00 52 05 04 04 00 +63 32 00 00 00 32 00 52 65 76 65 72 62 53 74 72 67 63 63 63 32 32 32 00 31 +00 28 00 32 00 30 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: StrgPad A +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0b 04 00 04 0f 14 02 48 03 01 0a 07 00 04 0f 14 02 50 04 04 09 1f 00 05 0f +00 01 63 03 01 09 1f 00 05 0f 00 01 63 04 04 3c 21 06 0c 00 52 05 04 04 00 +63 32 00 0c 00 32 00 53 74 72 67 50 61 64 20 41 20 63 63 63 32 32 32 00 16 +00 38 00 36 00 18 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: StrgPad B +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0b 04 00 04 0f 14 02 47 05 02 0a 07 00 04 0f 14 02 4e 03 00 09 1f 00 05 0f +00 01 63 04 06 08 1f 00 05 0f 00 01 63 03 00 3c 1f 06 13 00 52 05 04 04 00 +63 32 00 11 00 32 00 53 74 72 67 50 61 64 20 42 20 63 63 63 32 32 32 00 11 +00 36 00 38 00 16 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Stringed * +** Controls: KV, MW (LFO pitch), BC (EG amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 00 00 04 0e 0a 50 45 09 06 1f 00 00 04 0e 0a 40 4c 0a 00 09 07 00 06 0e +00 02 63 09 10 09 07 00 06 0e 20 02 63 0a 16 3c 1c 00 0b 00 4a 05 02 04 00 +28 63 00 00 00 32 10 53 74 72 69 6e 67 65 64 20 2a 63 63 63 32 32 32 00 02 +00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: StringEns1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 03 02 04 08 41 12 42 04 0b 0a 0c 07 03 0f 63 24 39 16 00 0b 10 04 07 0f +12 1b 61 08 03 0b 07 05 05 0d 25 1b 5c 04 02 24 21 23 0c 00 22 18 0c 04 00 +63 32 00 00 00 32 00 53 74 72 69 6e 67 45 6e 73 31 63 63 63 32 32 32 00 30 +00 20 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: StringEns1 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +18 03 02 04 08 41 00 42 04 0b 16 0c 07 03 0f 63 00 3f 19 00 0b 10 04 07 0f +12 00 61 04 03 0b 07 05 05 0d 25 00 5c 08 02 24 21 23 0c 00 22 18 0c 04 00 +63 32 00 00 00 32 00 53 74 72 69 6e 67 45 6e 73 31 63 63 63 32 32 32 00 20 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: StringEns2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 01 02 05 08 41 02 4f 08 0b 16 0c 07 06 0f 63 02 3b 08 00 09 10 04 06 0f +12 03 60 0d 03 0b 08 05 06 0d 25 03 5e 08 02 2c 21 23 0c 00 22 0c 0c 04 00 +63 32 00 00 00 32 00 53 74 72 69 6e 67 45 6e 73 32 63 63 63 32 32 32 00 20 +00 60 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: StringEns2 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +18 01 02 05 08 41 00 4f 04 0b 16 0c 07 06 0f 63 00 3b 13 00 09 10 04 06 0f +12 00 60 0d 03 0b 08 05 06 0d 25 00 5e 08 02 2c 21 23 0c 00 22 0c 0c 04 00 +63 32 00 00 00 32 00 53 74 72 69 6e 67 45 6e 73 32 63 63 63 32 32 32 00 00 +00 60 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: StringEns3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 15 0a 07 0e 0a 02 4d 04 0e 0a 06 1a 08 05 28 02 34 08 0e 0f 09 07 06 0f +1e 03 63 04 04 0a 06 1a 08 05 28 03 5f 08 0e 2c 21 2e 1e 09 21 18 0c 04 00 +63 32 32 00 00 32 00 53 74 72 69 6e 67 45 6e 73 33 63 63 63 32 32 32 00 40 +00 10 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: StringEns3 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 15 0a 07 0e 0a 00 4d 04 0e 0a 06 1a 08 05 28 00 34 13 0e 0f 09 07 06 0f +1e 00 63 04 04 0a 06 1a 08 05 28 00 5f 08 0e 2c 21 2e 1e 09 12 18 0c 04 00 +63 32 32 00 00 32 00 53 74 72 69 6e 67 45 6e 73 33 63 63 63 32 32 32 00 40 +00 10 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: StringEns4 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 10 06 04 0e 39 01 50 08 00 13 09 00 04 0e 14 02 44 08 05 0b 10 00 05 0e +14 04 63 08 03 0b 10 00 07 0e 14 04 5f 0d 05 2c 1c 00 0f 00 32 18 0c 04 00 +63 32 32 00 00 32 00 53 74 72 69 6e 67 45 6e 73 34 63 63 63 32 32 32 00 20 +00 30 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: StringEns4 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +10 10 06 04 0e 39 00 50 04 00 13 09 00 04 0e 14 00 44 08 05 0f 10 00 05 0e +14 00 63 08 03 0f 10 00 07 0e 14 00 5f 08 05 2c 21 00 0f 00 32 18 0c 04 00 +63 32 32 00 00 32 00 53 74 72 69 6e 67 45 6e 73 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: StringEns5 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0c 0a 00 05 0d 39 03 44 04 06 0b 09 00 05 0e 0a 02 39 04 0b 0b 09 06 06 0c +0c 04 5e 08 04 0b 0b 00 05 0e 0a 03 60 04 02 24 21 0a 0e 00 32 18 0c 04 00 +63 32 32 00 00 32 00 53 74 72 69 6e 67 45 6e 73 35 63 63 63 32 32 32 00 40 +00 10 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: StringEns5 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +13 0f 00 05 0d 39 00 44 08 06 0b 09 00 05 0e 0a 00 39 04 0b 0f 09 06 06 0c +0c 00 5e 08 04 0c 0b 00 05 0e 0a 00 60 08 02 24 21 0a 0e 00 32 18 0c 04 00 +63 32 32 00 00 32 00 53 74 72 69 6e 67 45 6e 73 35 63 63 63 32 32 32 00 40 +00 10 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: StringEns6 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 0f 00 06 0d 39 01 50 08 06 15 0f 00 06 0d 0a 03 48 13 0b 0b 09 06 06 0c +0c 02 62 08 04 0b 17 00 06 0e 0a 03 62 0d 02 2c 21 0a 09 00 22 0c 0c 04 00 +63 32 32 00 00 32 00 53 74 72 69 6e 67 45 6e 73 36 63 63 63 32 32 32 00 40 +00 10 00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: StringEns6 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +15 0f 00 06 0d 39 00 50 08 06 15 0f 00 06 0d 0a 00 48 13 0b 10 09 06 06 0c +0c 00 62 08 04 10 17 00 06 0e 0a 00 62 0d 02 2c 21 0a 09 00 22 0c 0c 04 00 +63 32 32 00 00 32 00 53 74 72 69 6e 67 45 6e 73 36 63 63 63 32 32 32 00 40 +00 10 00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: StringEns7 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0d 0f 00 05 0d 28 01 53 00 00 15 0f 00 05 0d 0a 03 47 00 04 0c 09 06 06 0c +06 03 61 00 00 0b 17 00 05 0e 05 04 62 00 05 24 21 0a 09 00 22 18 0c 04 00 +63 32 32 00 00 32 00 53 74 72 69 6e 67 45 6e 73 37 63 63 63 32 32 32 00 00 +00 00 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: StringEns7 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +15 0f 00 05 0d 28 00 53 00 00 15 0f 00 05 0d 0a 00 47 00 04 0d 09 06 06 0c +06 00 61 00 00 0d 17 00 05 0e 05 00 62 00 05 24 21 0a 09 00 22 18 0c 04 00 +63 32 32 00 00 32 00 53 74 72 69 6e 67 45 6e 73 37 63 63 63 32 32 32 00 00 +00 00 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: StringEns8 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 04 09 09 0d 28 01 3e 08 08 0d 0f 00 05 0d 0a 03 44 08 04 0b 09 06 06 0c +06 05 63 08 00 0b 17 00 05 0e 05 03 62 08 05 24 21 0a 09 00 22 00 0c 04 00 +63 32 32 00 00 32 00 53 74 72 69 6e 67 45 6e 73 38 63 63 63 32 32 32 00 20 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: StringEns8 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 04 09 09 0d 28 00 3e 13 08 0f 0f 00 05 0d 0a 00 44 19 04 0d 09 06 06 0c +06 00 63 08 00 0e 17 00 05 0e 05 00 62 08 05 24 21 0a 09 00 22 00 0c 04 00 +63 32 32 00 00 32 00 53 74 72 69 6e 67 45 6e 73 38 63 63 63 32 32 32 00 20 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: StringLead +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 0d 00 05 0e 0a 03 58 08 03 0a 02 00 07 09 00 05 5a 19 08 0f 15 06 05 0f +00 05 62 08 08 0c 15 06 08 0e 00 05 5f 04 08 34 26 20 20 00 12 0c 02 04 00 +28 02 00 00 00 32 00 53 74 72 69 6e 67 4c 65 61 64 63 63 63 32 32 32 00 00 +00 30 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: StringLead +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 0d 00 05 0e 0a 01 58 08 03 0a 02 00 07 09 00 02 5a 19 08 0f 15 06 05 0f +00 00 62 08 08 0c 15 06 08 0e 00 00 5f 04 08 34 26 20 20 00 12 0c 02 04 00 +28 02 00 00 00 32 00 53 74 72 69 6e 67 4c 65 61 64 63 63 63 32 32 32 00 00 +00 30 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Strings +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: DX100 GLIB patch (Michael Kesti and others) +11 0b 05 05 0a 17 00 43 04 0c 0c 1f 08 04 0f 22 00 35 13 09 07 1f 04 05 0f +14 00 46 04 0b 0a 1f 05 06 0f 00 00 57 04 0b 3a 21 0e 2a 00 42 0c 02 04 00 +63 32 00 32 00 32 00 53 74 72 69 6e 67 73 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Strings +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: DX100 GLIB patch (Michael Kesti and others) +0a 00 05 05 0f 17 00 43 08 0c 0c 00 00 04 0f 22 00 34 13 09 0e 00 00 05 0f +14 00 46 0a 0b 0c 00 06 06 0f 00 00 4c 0a 0b 3a 21 0e 2a 00 42 0c 02 04 00 +63 32 00 32 00 32 00 53 74 72 69 6e 67 73 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Strings 1 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank C, voice 1 +1f 04 00 04 0f 1e 02 46 09 06 1f 04 00 04 0f 1e 02 46 0a 00 0c 1f 00 05 0f +1e 01 63 09 06 0c 1f 00 05 0f 1e 01 63 0a 00 3c 1f 06 0a 00 52 05 02 04 00 +63 32 00 00 00 32 00 53 74 72 69 6e 67 73 20 20 31 63 63 63 32 32 32 00 02 +00 00 00 32 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Strings 2 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank C, voice 2 +14 05 00 04 09 14 02 3d 1c 06 0a 04 02 04 09 01 01 47 13 00 0c 05 02 05 0c +00 01 63 09 06 0a 04 01 05 0c 00 01 63 0a 00 3c 1f 00 1a 00 52 05 02 04 00 +63 32 00 00 00 32 00 53 74 72 69 6e 67 73 20 20 32 63 63 63 32 32 32 00 10 +00 20 00 32 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Strings 2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +14 05 00 04 09 14 02 3d 1c 06 0d 04 02 04 09 01 01 47 13 00 0c 05 02 05 0c +00 01 63 09 06 0d 04 01 05 0c 00 01 63 0a 00 3c 1f 00 1a 00 52 05 02 04 00 +63 32 00 00 00 32 00 53 74 72 69 6e 67 73 20 20 32 63 63 63 32 32 32 00 10 +00 20 00 32 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Strings 3 +** Description: A string sound with a little horn mixed in +** Controls: KV, MW (LFO pitch) +** Source: Art Hitzeman +1f 04 00 04 0f 1e 02 46 09 06 1f 04 00 04 0f 1e 02 46 0a 00 0c 1f 00 05 0f +1e 01 63 09 06 12 1f 00 05 0f 1e 01 63 0a 00 3c 1f 06 0a 00 52 05 02 04 00 +63 32 00 00 00 32 00 53 74 72 69 6e 67 73 20 20 33 63 63 63 32 32 32 00 02 +00 00 00 32 00 70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Syn.Str 1 +** Controls: MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank A, voice 1 +1f 1f 00 03 0f 00 00 46 0a 00 1f 1f 00 03 0f 00 00 44 09 06 0b 1f 00 05 0f +1e 00 56 0a 00 0b 1f 00 05 0f 1e 00 56 0a 06 3c 23 00 2e 00 42 05 02 04 00 +63 32 00 00 00 32 00 53 79 6e 2e 53 74 72 20 20 31 63 63 63 32 32 32 00 30 +00 62 00 10 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Syn.Str 2 +** Controls: MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank A, voice 2 +1f 1f 00 03 0f 00 00 31 13 00 1f 1f 00 03 0f 00 00 3b 09 06 0c 1f 00 05 0f +1e 00 5b 0a 00 0c 1f 00 05 0f 1e 00 53 0a 06 3c 20 00 4b 00 42 05 02 04 00 +63 32 00 00 00 32 00 53 79 6e 2e 53 74 72 20 20 32 63 63 63 32 32 32 00 70 +00 62 00 30 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynString +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank B, voice 26 +1f 04 00 02 0f 0f 00 44 04 03 1f 09 03 02 0f 15 01 3a 08 00 1f 00 00 0b 0f +0c 02 44 08 06 1a 0a 00 05 0f 05 01 5c 08 13 3a 1d 06 0f 00 52 0c 04 04 00 +63 32 00 00 00 32 00 53 79 6e 53 74 72 69 6e 67 20 63 63 63 32 32 32 20 00 +30 30 10 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: T Pluck..1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 0d 0a 03 0d 00 3a 4f 0a 0a 1b 13 00 0c 07 00 1e 51 16 0b 1f 0a 0a 06 0c +00 1c 63 04 08 1b 09 0a 07 0c 00 3d 63 04 0b 6c 15 00 00 00 02 0c 02 04 00 +63 32 00 00 00 32 00 54 20 50 6c 75 63 6b 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: T Pluck..1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +16 0d 0a 03 0d 00 3a 4f 0a 0a 1b 13 00 0c 07 00 19 51 16 0b 1f 0a 0a 06 0c +00 18 63 04 08 1b 09 0a 07 0c 00 38 63 04 0b 6c 15 00 00 00 02 0c 02 04 00 +63 32 00 00 00 32 00 54 20 50 6c 75 63 6b 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: T Pluck..2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 0d 0a 03 0d 00 3b 53 08 0a 1b 13 00 0c 07 00 1d 3b 00 0b 1f 0a 0a 06 0c +00 1e 4f 16 08 1e 0a 09 06 0c 00 3d 63 04 13 72 15 00 00 00 02 18 02 04 00 +63 32 00 00 00 32 00 54 20 50 6c 75 63 6b 2e 2e 32 63 63 63 32 32 32 00 00 +00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: T Pluck..2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +16 0d 0a 03 0d 00 39 53 08 0a 1b 13 00 0c 07 00 1a 3b 00 0b 1f 0a 0a 06 0c +00 19 4f 16 08 1e 0a 09 06 0c 00 38 63 04 13 72 15 00 00 00 02 18 02 04 00 +63 32 00 00 00 32 00 54 20 50 6c 75 63 6b 2e 2e 32 63 63 63 32 32 32 00 00 +00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: T Pluck..3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1d 0f 09 04 0c 15 3b 53 0a 0e 15 0d 1f 03 0a 12 1d 4d 1f 19 1c 09 0f 05 0a +19 1e 63 04 0a 13 07 09 05 0e 00 3d 63 00 13 6c 22 21 00 00 12 18 02 04 00 +63 32 00 00 00 32 00 54 20 50 6c 75 63 6b 2e 2e 33 63 63 63 32 32 32 00 00 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: T Pluck..3 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 0f 09 04 0c 15 39 53 0a 0e 15 0d 1f 03 0a 12 19 4d 1f 19 1c 09 0f 05 0a +19 18 63 04 0a 13 07 09 05 0e 00 38 63 00 13 6c 22 21 00 00 12 18 02 04 00 +63 32 00 00 00 32 00 54 20 50 6c 75 63 6b 2e 2e 33 63 63 63 32 32 32 00 00 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: WarmString +** Controls: KV, MW (LFO pitch) +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +0d 05 00 04 0f 14 00 40 05 06 0c 08 00 04 0f 14 00 49 04 00 0b 1f 00 05 0f +00 03 63 09 06 0a 1f 00 05 0f 00 03 63 04 00 3c 1d 06 10 00 52 11 04 04 00 +63 32 00 00 00 32 00 57 61 72 6d 53 74 72 69 6e 67 63 63 63 32 32 32 00 01 +00 38 00 32 00 18 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: WindString +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 00 03 03 0f 56 03 63 0d 03 0d 04 02 04 0f 29 04 60 08 0b 06 00 00 04 0f +4c 06 3d 08 13 0a 04 02 06 0f 5c 05 63 08 0b 7c 29 00 00 00 22 00 02 04 00 +28 02 00 00 00 32 00 57 69 6e 64 53 74 72 69 6e 67 63 63 63 32 32 32 00 00 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: WindString +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 00 03 03 0f 56 00 63 0d 03 0d 04 02 04 0f 29 02 60 08 0b 06 00 00 04 0f +4c 00 3d 08 13 0a 04 02 06 0f 5c 00 63 08 0b 7c 29 00 00 00 22 00 02 04 00 +28 02 00 00 00 32 00 57 69 6e 64 53 74 72 69 6e 67 63 63 63 32 32 32 00 00 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: phantstrng +** Description: a string voice +** Controls: KV +** Source: GLIB (Michael Kesti and others) +08 03 06 01 0b 00 03 58 0a 02 1f 02 04 03 0e 43 03 5b 04 10 1f 0c 02 04 0a +00 03 4e 08 00 0b 09 04 06 0b 00 03 63 04 03 28 14 00 00 00 62 18 01 04 00 +63 32 00 32 00 32 00 70 68 61 6e 74 73 74 72 6e 67 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Banjo + + +** Name: Banjo * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1e 0c 00 04 0c 00 01 51 04 15 1f 12 00 01 0f 00 00 58 04 16 1f 0a 09 01 0a +00 02 4e 19 18 1c 0b 0a 06 09 00 41 63 0a 13 7b 3a 00 00 00 09 18 02 04 00 +63 00 42 00 00 32 00 42 61 6e 6a 6f 20 20 20 20 2a 63 63 63 32 32 32 00 00 +00 20 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Banjo +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank B, voice 10 +1f 0b 08 01 0f 00 00 48 1c 15 1f 1f 00 01 0f 00 00 53 04 16 1f 07 11 01 0f +00 00 40 08 16 1f 0e 0a 06 0a 00 0b 63 0a 10 3b 1d 00 10 00 32 18 02 04 00 +63 32 00 00 00 32 00 42 61 6e 6a 6f 20 20 20 20 20 63 63 63 32 32 32 00 70 +00 30 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Banjo....1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1e 17 00 04 0c 00 02 5a 04 0d 1f 02 03 01 0f 00 05 5a 04 0e 1f 1b 08 01 0c +00 06 42 08 0e 1f 0d 0b 06 09 00 06 63 04 10 2a 06 00 01 00 32 18 07 04 00 +63 32 00 00 00 32 00 42 61 6e 6a 6f 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Banjo....1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 17 00 04 0c 00 02 5a 04 0d 1f 02 03 01 0f 00 01 5a 04 0e 1f 1b 08 01 0c +00 01 42 08 0e 1f 0d 0b 06 09 00 01 63 04 10 2a 06 00 01 00 32 18 07 04 00 +63 32 00 00 00 32 00 42 61 6e 6a 6f 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Banjo....2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1e 17 00 04 0c 00 02 5b 04 0d 16 09 03 05 00 00 06 4d 13 16 1f 1b 08 05 0c +00 04 3e 08 0e 1f 0d 0b 06 09 00 05 63 04 10 2c 06 00 01 00 32 18 07 04 00 +63 32 00 00 00 32 00 42 61 6e 6a 6f 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 10 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Banjo....2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 17 00 04 0c 00 02 5b 04 0d 16 09 03 05 00 00 02 4d 13 16 1f 1b 08 05 0c +00 00 3e 08 0e 1f 0d 0b 06 09 00 00 63 04 10 2c 06 00 01 00 32 18 07 04 00 +63 32 00 00 00 32 00 42 61 6e 6a 6f 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 10 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Old Banjo +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank C, voice 7 +1e 17 00 04 0c 00 01 5f 04 15 1f 0b 03 01 0f 00 00 5c 04 1e 1f 1b 08 01 0c +00 02 45 19 1e 1f 0d 0b 06 09 00 03 63 0a 10 2a 23 00 00 00 62 18 07 04 00 +63 32 00 00 00 32 00 4f 6c 64 20 42 61 6e 6a 6f 20 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + + +--Bank 6 + +* SUBCATEGORY BassGuitar + + +** Name: AnalogBass +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank C, voice 13 +1f 0d 00 08 0c 1e 03 51 04 08 1f 09 00 09 0a 00 01 53 00 00 1f 0c 00 0a 0b +00 01 4a 00 06 1f 1f 00 0c 0f 00 02 63 00 03 3a 23 00 00 00 62 0c 04 04 00 +63 32 00 32 00 32 00 41 6e 61 6c 6f 67 42 61 73 73 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBass.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0c 08 03 0a 0f 01 61 00 13 1f 0f 0b 03 0d 0c 01 4c 04 0b 15 15 08 05 0b +2e 06 36 10 0b 1f 07 0a 09 0d 00 05 63 04 13 5a 22 35 0a 00 72 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 61 73 73 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBass.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0c 08 03 0a 0f 01 61 00 13 1f 0f 0b 03 0d 0c 01 4c 04 0b 15 15 08 05 0b +2e 01 36 10 0b 1f 07 0a 09 0d 00 00 63 04 13 5a 22 35 0a 00 72 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 61 73 73 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBass.2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 1b 0c 03 0c 0f 01 5f 00 03 1c 1b 11 03 0c 0c 02 4a 04 0b 18 09 0f 04 0d +2e 05 32 04 0b 1f 0f 04 09 0f 00 05 63 04 13 1a 23 00 00 00 02 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 61 73 73 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBass.2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 1b 0c 03 0c 0f 01 5f 00 03 1c 1b 11 03 0c 0c 01 4a 04 0b 18 09 0f 04 0d +2e 00 32 04 0b 1f 0f 04 09 0f 00 00 63 04 13 1a 23 00 00 00 02 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 61 73 73 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBass.3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0c 0c 0c 0c 0f 01 51 04 03 1f 15 12 05 0d 0c 42 57 04 0b 1f 0a 0a 03 04 +2e 45 46 08 0a 1f 07 05 0a 0f 00 06 5f 04 13 0a 26 1c 02 50 36 00 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 61 73 73 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBass.3 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0c 0c 0c 0c 0f 00 51 04 03 1f 15 12 05 0d 0c 40 57 04 0b 1f 0a 0a 03 04 +2e 40 46 08 0a 1f 07 05 0a 0f 00 00 5f 04 13 0a 26 1c 02 50 36 00 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 61 73 73 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBass.4 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0c 0c 0c 0c 00 01 5a 00 03 1f 15 12 05 0d 00 41 63 04 13 1f 0a 0a 03 04 +00 45 46 08 12 1f 07 09 0a 0f 00 04 63 04 0b 1a 26 1c 02 50 36 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 61 73 73 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBass.5 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0c 0c 0c 0c 00 01 5b 00 03 1f 15 12 05 0d 00 40 63 04 13 1f 0a 0a 03 04 +00 43 46 08 12 1f 07 09 0a 0f 00 06 63 04 0b 1a 26 1c 02 50 36 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 61 73 73 2e 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBass.5 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0c 0c 0c 0c 00 01 5a 00 03 1f 15 12 05 0d 00 41 63 04 13 1f 0a 0a 03 04 +00 41 46 08 12 1f 07 09 0a 0f 00 00 63 04 0b 1a 26 1c 02 50 36 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 61 73 73 2e 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBass.5 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0c 0c 0c 0c 00 01 5b 00 03 1f 15 12 05 0d 00 40 63 04 13 1f 0a 0a 03 04 +00 41 46 08 12 1f 07 09 0a 0f 00 00 63 04 0b 1a 26 1c 02 50 36 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 61 73 73 2e 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBass.6 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1e 1f 08 08 0f 0f 02 60 04 03 1c 1c 0a 04 09 0c 02 63 00 03 1b 0c 08 08 04 +2e 06 46 1c 03 1f 12 06 09 0f 00 05 63 00 03 1a 23 00 00 00 02 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 61 73 73 2e 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBass.6 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 1f 08 08 0f 0f 02 60 04 03 1c 1c 0a 04 09 0c 00 63 00 03 1b 0c 08 08 04 +2e 01 46 1c 03 1f 12 06 09 0f 00 00 63 00 03 1a 23 00 00 00 02 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 61 73 73 2e 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBass.7 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1e 1f 08 08 0c 0f 01 5a 04 03 1c 1f 0a 04 0f 0c 03 4c 00 03 1b 1f 08 08 0e +2e 05 63 04 03 1f 1f 06 09 0f 00 05 63 00 03 3c 23 00 00 00 02 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 61 73 73 2e 37 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBass.7 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 1f 08 08 0c 0f 01 5a 04 03 1c 1f 0a 04 0f 0c 01 4c 00 03 1b 1f 08 08 0e +2e 00 63 04 03 1f 1f 06 09 0f 00 00 63 00 03 3c 23 00 00 00 02 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 61 73 73 2e 37 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBass.8 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1e 1f 08 06 0c 0f 01 63 00 06 1c 1f 09 0a 0c 0c 02 63 00 02 1b 1f 07 09 0f +2e 05 63 04 06 1f 1f 09 0a 0c 00 05 63 04 02 2c 23 00 00 00 02 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 61 73 73 2e 38 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBass.8 +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 1f 08 06 0c 0f 00 63 00 06 1c 1f 09 0a 0c 0c 00 63 00 02 1b 1f 07 09 0f +2e 00 63 04 06 1f 1f 09 0a 0c 00 00 63 04 02 2c 23 00 00 00 02 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 61 73 73 2e 38 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBass.9 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 07 07 09 0f 00 01 52 00 06 1c 0c 08 0a 0f 00 01 61 00 02 1c 07 07 09 0f +00 06 63 08 06 1c 07 07 09 0f 00 06 63 04 02 3c 23 00 00 00 02 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 61 73 73 2e 39 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBass.9 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 07 07 09 0f 00 01 52 00 06 1c 0c 08 0a 0f 00 01 61 00 02 1c 07 07 09 0f +00 00 63 08 06 1c 07 07 09 0f 00 00 63 04 02 3c 23 00 00 00 02 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 61 73 73 2e 39 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBass10 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 12 1f 07 02 00 03 32 04 06 1c 0f 1f 07 02 00 03 5e 00 02 1c 1f 06 07 0f +00 05 63 00 06 1c 1f 09 07 0f 00 05 63 00 02 3c 23 00 00 00 02 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 61 73 73 31 30 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgBass10 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 12 1f 07 02 00 02 32 04 06 1c 0f 1f 07 02 00 01 5e 00 02 1c 1f 06 07 0f +00 00 63 00 06 1c 1f 09 07 0f 00 00 63 00 02 3c 23 00 00 00 02 0c 02 04 00 +63 32 00 00 00 32 00 41 6e 6c 67 42 61 73 73 31 30 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgCut.BS +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1d 12 07 08 04 00 02 61 19 1b 19 1b 09 04 0c 00 03 63 00 03 1d 0c 02 08 0d +00 04 42 19 03 1d 12 06 09 0e 00 05 63 00 03 34 23 00 00 00 32 0c 02 04 00 +63 11 06 00 00 32 00 41 6e 6c 67 43 75 74 2e 42 53 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgCut.BS +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 12 07 08 04 00 01 61 19 1b 19 1b 09 04 0c 00 01 63 00 03 1d 0c 02 08 0d +00 02 42 19 03 1d 12 06 09 0e 00 00 63 00 03 34 23 00 00 00 32 0c 02 04 00 +63 11 06 00 00 32 00 41 6e 6c 67 43 75 74 2e 42 53 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgFunkBS +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 08 02 05 06 14 03 5e 04 03 1f 1c 0f 07 04 19 03 5f 04 14 1f 1b 1f 07 0f +00 07 5d 04 0b 1f 06 12 07 0c 00 06 5c 04 0b 75 08 00 0b 00 22 00 02 04 00 +63 11 06 00 00 32 00 41 6e 6c 67 46 75 6e 6b 42 53 63 63 63 32 32 32 00 00 +00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgFunkBS +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 08 02 05 06 14 01 5e 04 03 1f 1c 0f 07 04 19 01 5f 04 14 1f 1b 1f 07 0f +00 02 5d 04 0b 1f 06 12 07 0c 00 00 5c 04 0b 75 08 00 0b 00 22 00 02 04 00 +63 11 06 00 00 32 00 41 6e 6c 67 46 75 6e 6b 42 53 63 63 63 32 32 32 00 00 +00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSplat +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 0c 01 09 0b 14 02 63 04 06 18 1f 1f 09 0f 19 04 61 04 06 0d 1f 08 09 0f +00 05 62 08 0d 1c 0f 07 09 0c 00 06 63 04 01 65 08 00 0b 00 22 00 02 04 00 +63 11 06 00 00 32 00 41 6e 6c 67 53 70 6c 61 74 20 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSplat +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +15 0c 01 09 0b 14 01 63 04 06 18 1f 1f 09 0f 19 02 61 04 06 0d 1f 08 09 0f +00 01 62 08 0d 1c 0f 07 09 0c 00 00 63 04 01 65 08 00 0b 00 22 00 02 04 00 +63 11 06 00 00 32 00 41 6e 6c 67 53 70 6c 61 74 20 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bass 4 +** Description: Was called "Brass 4" but sounds more like a bass guitar +** Controls: KV, MW (LFO pitch) +** Source: DX100 GLIB patch (Michael Kesti and others) +1f 19 00 05 00 00 7b 63 19 03 15 0b 00 0a 09 00 47 57 0a 06 10 08 02 0a 05 +00 46 2a 03 03 1f 0b 06 0a 0e 00 47 63 04 03 39 1c 1a 03 13 66 0c 04 04 00 +63 32 00 00 00 32 00 42 61 73 73 20 20 20 20 20 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bass 4 +** Description: Was called "Brass 4" but sounds more like a bass guitar +** Controls: KV, MW (LFO pitch) +** Source: DX100 GLIB patch (Michael Kesti and others) +1f 19 00 05 00 00 7b 4e 19 03 15 0b 00 0a 09 00 47 59 00 06 1f 08 02 0a 05 +00 42 4e 00 03 1f 0b 06 0a 0e 00 47 63 04 03 3b 1c 1a 03 13 66 0c 04 04 00 +63 32 00 00 00 32 00 42 61 73 73 20 20 20 20 20 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bass 4 +** Description: Was called "Brass 4" but sounds more like a bass guitar +** Controls: KV, MW (LFO pitch) +** Source: DX100 GLIB patch (Michael Kesti and others) +1f 19 00 05 00 00 7b 5c 00 03 15 0b 00 0a 09 00 47 57 0a 06 1f 08 02 0a 05 +00 42 4e 00 03 1f 0b 06 0a 0e 00 47 63 04 03 3b 1c 1a 03 13 66 0c 04 04 00 +63 32 00 00 00 32 00 42 61 73 73 20 20 20 20 20 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bass 4 +** Description: Was called "Brass 4" but sounds more like a bass guitar +** Controls: KV, MW (LFO pitch) +** Source: DX100 GLIB patch (Michael Kesti and others) +1f 19 00 05 00 00 7b 5c 00 03 15 0b 00 0a 09 00 47 57 0a 06 04 08 02 0a 05 +00 42 58 19 03 1f 0b 06 0a 0e 00 47 63 04 03 01 1c 1a 03 13 66 0c 04 04 00 +63 32 00 00 00 32 00 42 61 73 73 20 20 20 20 20 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bass 4 +** Description: Was called "Brass 4" but sounds more like a bass guitar +** Controls: KV +** Source: DX100 GLIB patch (Michael Kesti and others) +1f 0f 07 09 0a 0f 07 4e 16 03 1f 1f 00 04 0f 00 03 47 00 03 1f 07 05 06 0a +00 02 63 00 13 1f 07 05 06 0a 00 02 63 00 13 04 23 00 00 00 62 18 04 04 00 +63 32 00 00 00 32 00 42 61 73 73 20 20 20 20 20 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bass Pluck +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 16 06 08 0d 00 00 59 00 1b 1f 1f 1f 0f 0f 00 00 51 04 1b 1f 0d 0c 08 0a +63 04 63 04 13 1f 1f 1f 0f 0f 00 05 63 04 1b 64 26 00 00 00 32 0c 02 04 00 +63 32 00 32 00 32 00 42 61 73 73 20 50 6c 75 63 6b 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bass Pluck +** Source: from a library of patches collected by Duane Bowker, author unknown +15 16 06 08 0d 00 00 59 00 1b 1f 1f 1f 0f 0f 00 00 51 04 1b 1f 0d 0c 08 0a +63 00 63 04 13 1f 1f 1f 0f 0f 00 00 63 04 1b 64 26 00 00 00 32 0c 02 04 00 +63 32 00 32 00 32 00 42 61 73 73 20 50 6c 75 63 6b 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: <> +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 1a 07 04 04 00 01 51 1c 1b 19 1c 09 04 09 00 00 63 00 13 1b 0c 02 04 04 +63 03 4f 10 13 1c 12 06 04 0e 0e 06 63 00 1b 33 23 00 00 00 32 0c 02 04 00 +63 32 00 32 00 32 00 3c 3c 42 61 73 73 2e 30 3e 3e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: <> +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 1a 07 04 04 00 02 51 1c 1b 19 1c 09 04 09 00 00 63 00 13 1b 0c 02 04 04 +63 01 4f 10 13 1c 12 06 04 0e 0e 00 63 00 1b 33 23 00 00 00 32 0c 02 04 00 +63 32 00 32 00 32 00 3c 3c 42 61 73 73 2e 30 3e 3e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: <> +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 09 06 05 00 00 01 4c 04 13 18 1f 0c 06 0f 00 01 4a 04 0b 15 18 06 08 0e +63 03 63 04 0b 19 07 06 07 00 0e 43 62 00 13 7c 23 20 00 29 26 0c 02 04 00 +63 32 00 32 00 32 00 3c 3c 42 61 73 73 2e 31 3e 3e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: <> +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +16 09 06 05 00 00 01 4c 04 13 18 1f 0c 06 0f 00 01 4a 04 0b 15 18 06 08 0e +63 00 63 04 0b 19 07 06 07 00 0e 40 62 00 13 7c 23 20 00 29 26 0c 02 04 00 +63 32 00 32 00 32 00 3c 3c 42 61 73 73 2e 31 3e 3e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: <> +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +19 06 02 05 0e 63 01 4a 0d 13 1e 09 04 08 00 63 01 4f 04 13 1a 09 0a 08 08 +63 03 4d 0d 13 19 12 06 06 0f 63 05 63 04 13 11 21 13 00 00 02 00 02 04 00 +63 32 00 32 00 32 00 3c 3c 42 61 73 73 2e 32 3e 3e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: <> +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +19 06 02 05 0e 63 01 4a 0d 13 1e 09 04 08 00 63 01 4f 04 13 1a 09 0a 08 08 +63 01 4d 0d 13 19 12 06 06 0f 63 00 63 04 13 11 21 13 00 00 02 00 02 04 00 +63 32 00 32 00 32 00 3c 3c 42 61 73 73 2e 32 3e 3e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: <> +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +19 06 01 05 0e 63 01 5a 04 16 19 0e 07 06 0f 63 01 46 04 10 18 06 08 08 0a +63 05 41 0a 10 19 0e 07 06 0f 63 05 63 04 13 22 21 13 00 00 02 0c 02 04 00 +63 32 00 32 00 32 00 3c 3c 42 61 73 73 2e 33 3e 3e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: <> +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +19 06 01 05 0e 63 01 5a 04 16 19 0e 07 06 0f 63 01 46 04 10 18 06 08 08 0a +63 00 41 0a 10 19 0e 07 06 0f 63 00 63 04 13 22 21 13 00 00 02 0c 02 04 00 +63 32 00 32 00 32 00 3c 3c 42 61 73 73 2e 33 3e 3e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: <> +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1a 07 07 04 00 41 3f 19 13 1f 1c 09 07 09 00 41 55 0d 13 1f 0c 02 07 04 +63 44 4e 00 13 1f 12 06 07 0e 0e 45 63 04 1b 2a 63 00 00 0f 06 0c 02 04 00 +63 32 00 32 00 32 00 3c 3c 42 61 73 73 2e 34 3e 3e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: <> +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1a 07 07 04 00 41 3f 19 13 1f 1c 09 07 09 00 41 55 0d 13 1f 0c 02 07 04 +63 40 4e 00 13 1f 12 06 07 0e 0e 40 63 04 1b 2a 63 00 00 0f 06 0c 02 04 00 +63 32 00 32 00 32 00 3c 3c 42 61 73 73 2e 34 3e 3e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: <> +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 16 06 08 0d 00 01 5f 04 1b 19 12 04 0a 0c 23 01 56 08 13 19 0f 06 09 0d +63 03 63 08 13 19 0c 04 0a 0e 0e 05 63 04 13 64 26 00 00 00 32 0c 02 04 00 +63 32 00 32 00 32 00 3c 3c 42 61 73 73 2e 35 3e 3e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: <> +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +15 16 06 08 0d 00 01 5f 04 1b 19 12 04 0a 0c 23 01 56 08 13 19 0f 06 09 0d +63 00 63 08 13 19 0c 04 0a 0e 0e 00 63 04 13 64 26 00 00 00 32 0c 02 04 00 +63 32 00 32 00 32 00 3c 3c 42 61 73 73 2e 35 3e 3e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: <> +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +19 06 01 05 0e 63 01 45 0a 16 1b 0d 02 05 0e 63 01 5b 04 10 1e 0a 0c 06 08 +63 02 49 0a 10 1a 0f 06 05 0e 63 05 63 04 13 23 21 13 00 00 02 00 02 04 00 +63 32 00 32 00 32 00 3c 3c 42 61 73 73 2e 36 3e 3e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: <> +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +19 06 01 05 0e 63 01 45 0a 16 1b 0d 02 05 0e 63 01 5b 04 10 1e 0a 0c 06 08 +63 00 49 0a 10 1a 0f 06 05 0e 63 00 63 04 13 23 21 13 00 00 02 00 02 04 00 +63 32 00 32 00 32 00 3c 3c 42 61 73 73 2e 36 3e 3e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: <> +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1e 1c 05 09 0c 0f 01 53 16 1d 1e 1b 01 09 0d 0c 01 41 04 01 1d 01 01 0c 00 +2e 04 55 04 14 1e 1c 05 09 0c 00 04 63 08 13 2a 23 00 00 00 02 00 02 04 00 +63 32 00 00 00 32 00 3c 3c 42 61 73 73 2e 37 3e 3e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: <> +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 1c 05 09 0c 0f 01 53 16 1d 1e 1b 01 09 0d 0c 01 41 04 01 1d 01 01 0c 00 +2e 00 55 04 14 1e 1c 05 09 0c 00 00 63 08 13 2a 23 00 00 00 02 00 02 04 00 +63 32 00 00 00 32 00 3c 3c 42 61 73 73 2e 37 3e 3e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: <> +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1e 1c 0a 09 0c 0f 02 63 04 05 12 0c 07 07 0a 0c 01 61 04 01 1d 01 01 0c 00 +2e 03 63 04 04 1e 1c 05 09 0c 00 05 63 08 03 1c 23 00 00 00 02 0c 02 04 00 +63 32 00 00 00 32 00 3c 3c 42 61 73 73 2e 38 3e 3e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: <> +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 1c 0a 09 0c 0f 02 63 04 05 12 0c 07 07 0a 0c 01 61 04 01 1d 01 01 0c 00 +2e 00 63 04 04 1e 1c 05 09 0c 00 00 63 08 03 1c 23 00 00 00 02 0c 02 04 00 +63 32 00 00 00 32 00 3c 3c 42 61 73 73 2e 38 3e 3e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: <> +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1e 1c 06 09 0c 0f 01 3e 13 15 18 17 03 09 0d 0c 01 54 04 01 1d 01 03 0c 0a +2e 03 4d 04 14 1e 1c 06 09 0c 00 05 63 04 13 1b 23 00 00 00 02 00 02 04 00 +63 32 00 00 00 32 00 3c 3c 42 61 73 73 2e 39 3e 3e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: <> +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 1c 06 09 0c 0f 01 3e 13 15 18 17 03 09 0d 0c 01 54 04 01 1d 01 03 0c 0a +2e 00 4d 04 14 1e 1c 06 09 0c 00 00 63 04 13 1b 23 00 00 00 02 00 02 04 00 +63 32 00 00 00 32 00 3c 3c 42 61 73 73 2e 39 3e 3e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bass....FM +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 18 04 09 0f 00 02 4e 00 19 1f 12 12 08 0f 00 03 4b 1f 04 1f 0c 02 08 0f +00 05 54 00 0d 1f 0c 0b 0a 0f 00 05 63 04 0a 68 23 00 19 00 32 0c 02 04 00 +63 32 00 00 00 32 00 42 61 73 73 2e 2e 2e 2e 46 4d 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bass....FM +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 18 04 09 0f 00 02 4e 00 19 1f 12 12 08 0f 00 02 4b 1f 04 1f 0c 02 08 0f +00 02 54 00 0d 1f 0c 0b 0a 0f 00 00 63 04 0a 68 23 00 19 00 32 0c 02 04 00 +63 32 00 00 00 32 00 42 61 73 73 2e 2e 2e 2e 46 4d 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BombBass +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 04 07 09 0e 00 07 53 0a 08 1f 05 01 0a 0e 3f 03 51 00 08 1f 06 02 09 0d +32 03 63 00 0e 1f 1f 02 08 0f 00 07 63 04 03 3a 63 00 00 00 73 0c 04 04 00 +63 63 00 00 00 32 00 42 6f 6d 62 42 61 73 73 20 20 63 63 63 32 32 32 00 40 +00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: CutupBass +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 12 07 08 04 00 01 56 19 0b 18 1c 09 04 09 63 01 57 1c 1c 1b 0c 09 07 0d +00 04 3b 13 13 1f 12 06 07 0f 00 05 5f 00 03 1a 21 13 07 00 62 0c 02 04 00 +63 32 00 32 00 32 00 43 75 74 75 70 42 61 73 73 20 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: CutupBass +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 12 07 08 04 00 01 56 19 0b 18 1c 09 04 09 63 01 57 1c 1c 1b 0c 09 07 0d +00 01 3b 13 13 1f 12 06 07 0f 00 00 5f 00 03 1a 21 13 07 00 62 0c 02 04 00 +63 32 00 32 00 32 00 43 75 74 75 70 42 61 73 73 20 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E.Bass 1 +** Controls: KV +** Source: Yamaha DX11 factory preset, bank B, voice 27 +1f 01 00 08 04 00 03 4c 00 1b 1f 08 03 08 04 00 02 55 00 13 13 0a 05 08 04 +2b 06 3c 16 1b 1f 09 03 09 04 00 01 63 00 0b 3b 1c 00 00 00 52 0c 02 05 00 +63 4b 00 00 00 32 00 45 2e 42 61 73 73 20 20 20 31 63 63 63 32 32 32 00 00 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E.Bass 2 +** Controls: KV +** Source: Yamaha DX11 factory preset, bank B, voice 28 +1f 0f 10 07 0f 00 03 43 2d 03 1e 08 09 07 0f 23 02 52 00 03 1f 0b 0a 07 0f +00 03 41 10 03 1d 0c 0a 09 0f 28 01 63 04 03 38 1e 00 00 00 52 0c 02 04 00 +28 32 00 00 00 32 00 45 2e 42 61 73 73 20 20 20 32 63 63 63 32 32 32 00 00 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E.Bass 3 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank B, voice 29 +06 06 07 01 0a 06 42 56 00 1e 1f 05 06 01 0e 04 41 53 00 16 1f 05 06 01 0e +04 40 33 08 1e 19 05 08 07 00 00 42 63 00 16 20 1a 10 14 15 46 0c 02 04 00 +28 32 00 00 00 32 00 45 2e 42 61 73 73 20 20 20 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E.Bass 3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +06 06 07 01 0d 06 42 56 00 1e 1f 05 06 01 0e 04 41 53 00 16 1f 05 06 01 0e +04 40 33 08 1e 19 05 08 07 00 00 42 63 00 16 20 1a 10 14 15 46 0c 02 04 00 +28 32 00 00 00 32 00 45 2e 42 61 73 73 20 20 20 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ElecBass 1 +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank C, voice 9 +1f 01 00 08 04 00 03 3d 0a 1e 1f 01 00 08 00 00 00 43 00 10 1f 09 06 08 0c +1b 07 46 1c 1e 1f 09 00 09 09 00 01 63 04 03 3a 1c 00 00 00 52 0c 04 05 00 +63 4b 00 00 00 32 00 45 6c 65 63 42 61 73 73 20 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ElecBass 2 +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank C, voice 12 +1f 0e 00 0f 02 31 03 4b 28 16 1f 06 00 07 02 3b 00 4d 00 06 1f 0a 00 0f 02 +3b 03 52 04 16 1f 06 00 08 02 00 02 63 00 00 3a 22 00 00 00 62 0c 04 04 00 +63 32 00 00 00 32 00 45 6c 65 63 42 61 73 73 20 32 63 63 63 32 32 32 00 10 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Fat Lead.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0d 0a 07 09 0e 4d 05 54 00 03 12 1f 00 0a 0f 00 05 3e 08 03 12 1f 00 0a 0f +4b 05 5f 08 03 12 1f 00 0a 0f 01 06 5f 04 03 3b 1e 05 0a 00 62 0c 02 04 00 +63 32 00 00 00 32 00 46 61 74 20 4c 65 61 64 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Fat Lead.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0d 0a 07 09 0e 4d 03 54 00 03 12 1f 00 0a 0f 00 02 3e 08 03 12 1f 00 0a 0f +4b 01 5f 08 03 12 1f 00 0a 0f 01 00 5f 04 03 3b 1e 05 0a 00 62 0c 02 04 00 +63 32 00 00 00 32 00 46 61 74 20 4c 65 61 64 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Fat Lead.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0b 03 01 07 0d 27 04 53 13 0d 11 1f 06 05 0f 00 04 51 00 0d 16 04 00 0a 0d +11 06 49 08 0b 16 1f 00 0a 0f 27 05 5a 00 03 62 24 00 04 00 42 0c 02 04 00 +63 63 00 00 00 32 00 46 61 74 20 4c 65 61 64 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Fat Lead.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0b 03 01 07 0d 27 01 53 13 0d 11 1f 06 05 0f 00 01 51 00 0d 16 04 00 0a 0d +11 00 49 08 0b 16 1f 00 0a 0f 27 00 5a 00 03 62 24 00 04 00 42 0c 02 04 00 +63 63 00 00 00 32 00 46 61 74 20 4c 65 61 64 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Fat Lead.3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0b 03 01 07 0d 27 04 3f 10 0d 11 1f 06 05 0f 00 04 56 04 0d 16 04 00 0a 0d +11 05 4e 08 0b 16 1f 00 0a 0f 27 07 5a 04 03 61 24 00 04 00 42 0c 02 04 00 +63 63 00 00 00 32 00 46 61 74 20 4c 65 61 64 2e 33 63 63 63 32 32 32 00 00 +00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Fat Lead.3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0b 03 01 07 0d 27 01 3f 10 0d 11 1f 06 05 0f 00 01 56 04 0d 16 04 00 0a 0d +11 00 4e 08 0b 16 1f 00 0a 0f 27 00 5a 04 03 61 24 00 04 00 42 0c 02 04 00 +63 63 00 00 00 32 00 46 61 74 20 4c 65 61 64 2e 33 63 63 63 32 32 32 00 00 +00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Fat Lead.4 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0b 03 01 07 0d 27 05 55 04 0d 11 1f 06 05 0f 00 04 63 00 0d 16 04 00 0a 0d +11 07 4d 00 0b 16 1f 00 0a 0f 27 05 5a 00 03 63 24 26 34 00 42 0c 02 04 00 +63 63 00 00 00 32 00 46 61 74 20 4c 65 61 64 2e 34 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Fat Lead.4 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0b 03 01 07 0d 27 01 55 04 0d 11 1f 06 05 0f 00 02 63 00 0d 16 04 00 0a 0d +11 01 4d 00 0b 16 1f 00 0a 0f 27 00 5a 00 03 63 24 26 34 00 42 0c 02 04 00 +63 63 00 00 00 32 00 46 61 74 20 4c 65 61 64 2e 34 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: filtrsweep +** Description: a bass guitar with interesting decay +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: GLIB (Michael Kesti and others) +1f 02 03 06 00 0e 03 54 08 1b 1f 0b 00 09 0c 00 00 4e 04 04 1f 06 00 09 01 +00 00 5f 04 03 1f 1c 04 09 0a 00 03 63 08 03 38 1e 09 04 00 62 0c 02 05 00 +63 32 00 32 00 32 00 66 69 6c 74 72 73 77 65 65 70 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: FlangeBass +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 06 00 01 0e 00 01 52 04 04 1f 12 06 09 0e 00 02 52 04 1c 1f 0c 02 08 0e +00 06 45 13 12 1f 12 06 09 0e 00 05 63 04 1a 12 21 13 00 00 02 00 02 04 00 +63 32 00 32 00 32 00 46 6c 61 6e 67 65 42 61 73 73 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: FlangeBass +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 06 00 01 0e 00 01 52 04 04 1f 12 06 09 0e 00 01 52 04 1c 1f 0c 02 08 0e +00 01 45 13 12 1f 12 06 09 0e 00 00 63 04 1a 12 21 13 00 00 02 00 02 04 00 +63 32 00 32 00 32 00 46 6c 61 6e 67 65 42 61 73 73 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Fretless * +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0a 08 02 07 0f 15 03 53 00 08 11 08 03 07 0f 00 00 63 00 0b 11 06 03 07 0f +00 00 63 05 0e 11 06 03 07 0f 00 01 63 03 08 2d 17 21 09 00 52 05 02 04 00 +28 31 00 00 00 32 00 46 72 65 74 6c 65 73 73 20 2a 63 63 63 32 32 32 00 04 +00 04 00 01 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Fretless.1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +08 0c 0c 07 00 63 02 42 00 0b 1b 0d 02 08 0e 63 01 42 0a 16 1e 0d 0c 08 08 +63 04 4a 00 13 19 12 05 06 0f 63 05 60 00 13 3a 21 13 07 00 62 00 02 04 00 +63 32 00 32 00 32 00 46 72 65 74 6c 65 73 73 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Fretless.1 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +08 0c 0c 07 00 63 00 42 00 0b 1b 0d 02 08 0e 63 00 42 0a 16 1e 0d 0c 08 08 +63 00 4a 00 13 19 12 05 06 0f 63 00 60 00 13 3a 21 13 07 00 62 00 02 04 00 +63 32 00 32 00 32 00 46 72 65 74 6c 65 73 73 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Fretless.2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 06 00 01 00 00 02 40 08 1b 1b 0d 02 05 0e 63 03 46 04 16 1e 0d 0c 06 08 +63 05 3e 10 13 19 12 05 06 0f 63 07 60 0a 13 2a 21 13 07 00 62 00 02 04 00 +63 32 00 32 00 32 00 46 72 65 74 6c 65 73 73 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Fretless.2 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 06 00 01 00 00 00 40 08 1b 1b 0d 02 05 0e 63 00 46 04 16 1e 0d 0c 06 08 +63 00 3e 10 13 19 12 05 06 0f 63 00 60 0a 13 2a 21 13 07 00 62 00 02 04 00 +63 32 00 32 00 32 00 46 72 65 74 6c 65 73 73 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Fretless.2 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +1f 06 00 00 00 00 00 40 08 1b 1b 0d 02 05 0e 63 00 46 04 16 1e 0d 0c 06 08 +63 00 3e 10 13 19 12 05 06 0f 63 00 60 0a 13 2a 21 13 07 00 62 00 02 04 00 +63 32 00 32 00 32 00 46 72 65 74 6c 65 73 73 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + +--Bank 7 + +** Name: FunkyBass1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1e 1c 0a 09 0c 0f 01 4b 04 04 12 1f 02 07 0f 00 02 46 04 11 18 00 00 07 00 +00 05 47 0a 06 1f 13 09 0a 0c 00 05 63 04 04 2a 15 00 0b 00 00 00 02 04 00 +63 32 00 00 00 32 00 46 75 6e 6b 79 42 61 73 73 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: FunkyBass1 +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 1c 0a 09 0c 0f 00 4b 04 04 12 1f 02 07 0f 00 00 46 04 11 18 00 00 07 00 +00 00 47 0a 06 1f 13 09 0a 0c 00 00 63 04 04 2a 15 00 0b 00 00 00 02 04 00 +63 32 00 00 00 32 00 46 75 6e 6b 79 42 61 73 73 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: FunkyBass2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1e 1c 0a 09 0c 0f 00 50 08 05 12 1f 1f 07 0f 00 02 4b 04 11 12 1f 0c 07 0f +00 05 40 0d 12 1f 13 09 0a 0c 00 04 63 04 04 32 23 00 00 00 02 00 02 04 00 +63 32 00 00 00 32 00 46 75 6e 6b 79 42 61 73 73 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: FunkyBass2 +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 1c 0a 09 0c 0f 00 50 08 05 12 1f 1f 07 0f 00 00 4b 04 11 12 1f 0c 07 0f +00 00 40 0d 12 1f 13 09 0a 0c 00 00 63 04 04 32 23 00 00 00 02 00 02 04 00 +63 32 00 00 00 32 00 46 75 6e 6b 79 42 61 73 73 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Jaco Bass +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank C, voice 14 +07 02 00 08 0f 00 00 43 04 03 10 0b 00 08 0c 00 00 50 00 0e 15 0b 0f 08 0b +00 01 51 00 08 11 08 00 08 0b 00 01 63 00 03 38 19 08 06 00 62 0c 04 05 14 +63 32 00 32 00 32 00 4a 61 63 6f 20 42 61 73 73 20 63 63 63 32 32 32 00 60 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Jaco Bass2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch), BC (voice pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 06 05 08 02 00 01 46 08 03 0f 0a 00 08 0c 00 00 50 00 0e 12 0b 0f 08 0b +00 01 51 00 08 0f 08 00 08 0b 00 01 63 00 03 09 19 08 06 00 62 0c 02 05 00 +63 32 00 32 00 00 00 4a 61 63 6f 20 42 61 73 73 32 63 63 63 32 32 32 00 00 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: JazzWalker +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 0a 00 08 04 00 03 46 08 1e 1f 01 00 08 00 00 00 4a 00 10 1f 11 06 08 0d +1b 07 41 04 1e 1f 09 00 09 09 00 01 63 04 03 3b 1c 00 00 00 56 0c 04 05 00 +63 4b 00 00 00 32 00 4a 61 7a 7a 57 61 6c 6b 65 72 63 63 63 32 32 32 20 30 +30 30 30 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Kai Bass * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 13 0f 0f 00 05 63 13 13 1f 1f 00 0b 0f 00 00 44 00 10 1c 1f 0d 0f 0f +34 07 46 1c 13 1f 14 0a 0a 0d 0d 01 63 04 0e 43 1b 00 00 00 52 0c 02 04 00 +28 63 00 00 00 32 00 4b 61 69 20 42 61 73 73 20 2a 63 63 63 32 32 32 00 00 +00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: LatelyBass +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank C, voice 15 +1f 10 07 08 03 00 03 4f 04 03 1f 09 00 08 00 00 01 4a 00 0b 1f 11 00 08 00 +00 01 47 04 08 1f 09 00 08 00 00 00 63 00 0b 39 19 00 07 00 52 0c 02 04 00 +63 32 00 32 00 32 00 4c 61 74 65 6c 79 42 61 73 73 63 63 63 32 32 32 02 00 +00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MonophBass +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank C, voice 16 +1f 01 00 08 0a 00 03 43 0a 1e 1f 01 00 08 07 00 00 46 00 10 1f 09 06 08 0f +1b 07 4a 04 1e 1f 09 00 09 0f 00 01 63 04 03 3a 1c 00 00 00 52 0c 04 0d 00 +63 4b 00 00 00 32 00 4d 6f 6e 6f 70 68 42 61 73 73 63 63 63 32 32 32 00 00 +00 00 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MoogerBass +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 0a 07 08 03 00 06 4f 00 03 1f 09 00 08 0d 00 02 56 00 0b 1f 10 00 08 0a +00 00 60 00 08 1f 09 00 08 0f 00 00 63 00 0e 3c 1d 00 07 00 52 0c 02 0c 00 +63 32 00 32 00 32 00 4d 6f 6f 67 65 72 42 61 73 73 63 63 63 32 32 32 02 70 +00 50 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntBass.1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 03 0a 09 0d 2e 01 55 04 03 1c 10 0a 09 00 00 02 48 10 01 1c 10 0a 09 0a +00 06 4f 04 03 1c 16 04 09 0e 00 03 62 04 04 42 23 00 00 00 32 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 42 61 73 73 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntBass.1 +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 03 0a 09 0d 2e 00 55 04 03 1c 10 0a 09 00 00 00 48 10 01 1c 10 0a 09 0a +00 00 4f 04 03 1c 16 04 09 0e 00 00 62 04 04 42 23 00 00 00 32 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 42 61 73 73 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntBass.2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 0f 0a 07 06 2e 02 4d 16 03 1c 0f 0a 07 00 00 03 41 10 01 1c 15 0a 07 0a +00 05 63 04 03 1c 13 0a 07 0e 00 05 62 04 04 44 2e 00 11 00 11 00 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 42 61 73 73 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntBass.2 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 0f 0a 07 06 2e 00 4d 16 03 1c 0f 0a 07 00 00 00 41 10 01 1c 15 0a 07 0a +00 00 63 04 03 1c 13 0a 07 0e 00 00 62 04 04 44 2e 00 11 00 11 00 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 42 61 73 73 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Precision* +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +17 0c 09 08 04 18 05 58 10 13 1f 1c 04 01 0d 00 00 53 00 18 18 15 0a 04 09 +00 03 4f 00 13 0f 1d 04 08 0e 14 00 63 00 1e 03 1d 00 00 00 52 0c 02 04 00 +28 53 00 00 00 32 00 50 72 65 63 69 73 69 6f 6e 2a 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ResoMonoBs +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0e 07 08 03 00 03 4c 04 03 1f 09 00 08 0d 00 01 52 00 0b 1f 11 00 08 0b +00 01 55 04 08 1f 09 00 08 0f 00 00 5e 00 0b 39 19 00 07 00 52 0c 02 0c 00 +63 32 00 32 00 32 00 52 65 73 6f 4d 6f 6e 6f 42 73 63 63 63 32 32 32 12 10 +00 10 00 30 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Roto Bass +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 12 07 04 04 00 01 5b 00 1b 1f 12 06 09 0e 00 01 49 00 1b 1f 0c 02 08 03 +63 04 58 13 13 1f 12 06 09 0e 0e 05 63 00 1b 22 23 00 00 00 32 0c 02 04 00 +63 32 00 32 00 32 00 52 6f 74 6f 20 42 61 73 73 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Roto Bass +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 12 07 04 04 00 01 5b 00 1b 1f 12 06 09 0e 00 01 49 00 1b 1f 0c 02 08 03 +63 01 58 13 13 1f 12 06 09 0e 0e 00 63 00 1b 22 23 00 00 00 32 0c 02 04 00 +63 32 00 32 00 32 00 52 6f 74 6f 20 42 61 73 73 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SUPER BASS +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0e 05 07 05 00 00 41 04 03 1f 05 05 07 0c 00 00 49 00 03 19 09 00 07 00 +00 40 47 08 00 1f 05 05 07 0c 00 00 63 00 03 39 19 00 09 00 52 0c 02 04 00 +28 32 00 00 00 32 00 53 55 50 45 52 20 42 41 53 53 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Science.BS +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 08 08 0a 0a 00 03 53 04 02 13 09 06 06 0c 00 03 57 04 03 14 02 0f 09 0d +00 05 63 04 04 19 03 0f 0a 0e 00 05 63 08 03 3c 23 00 00 00 02 0c 02 04 00 +63 32 00 00 00 32 00 53 63 69 65 6e 63 65 2e 42 53 63 63 63 32 32 32 00 00 +00 00 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Science.BS +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +12 08 08 0a 0a 00 01 53 04 02 13 09 06 06 0c 00 01 57 04 03 14 02 0f 09 0d +00 01 63 04 04 19 03 0f 0a 0e 00 00 63 08 03 3c 23 00 00 00 02 0c 02 04 00 +63 32 00 00 00 32 00 53 63 69 65 6e 63 65 2e 42 53 63 63 63 32 32 32 00 00 +00 00 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SlapBass +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0f 0a 08 06 00 07 5a 18 1e 1f 01 00 08 00 00 00 48 00 10 1f 09 06 08 0c +1b 06 4b 1c 1e 1f 09 00 09 09 00 01 63 04 03 00 1c 00 00 00 52 0c 04 05 00 +63 50 00 3c 00 32 00 53 6c 61 70 42 61 73 73 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SlapBass.1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 08 00 0a 08 00 01 46 04 03 18 0c 1f 09 00 00 01 49 1f 13 1e 10 07 09 0c +00 04 4c 0a 08 1e 10 07 09 0c 00 06 63 04 0b 3b 19 00 09 00 52 0c 02 04 00 +63 32 00 32 00 32 00 53 6c 61 70 42 61 73 73 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SlapBass.1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 08 00 0a 08 00 01 46 04 03 18 0c 1f 09 00 00 01 49 1f 13 1e 10 07 09 0c +00 01 4c 0a 08 1e 10 07 09 0c 00 00 63 04 0b 3b 19 00 09 00 52 0c 02 04 00 +63 32 00 32 00 32 00 53 6c 61 70 42 61 73 73 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SlapBass.2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 1c 09 09 0c 00 01 44 10 0b 16 00 00 0a 09 00 01 4b 04 13 14 0a 05 09 0f +00 03 52 04 10 1e 10 07 09 0c 00 06 63 04 0b 2a 19 00 09 00 52 00 02 04 00 +63 32 00 32 00 32 00 53 6c 61 70 42 61 73 73 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SlapBass.2 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +18 1c 09 09 0c 00 00 44 10 0b 16 00 00 0a 09 00 00 4b 04 13 14 0a 05 09 0f +00 00 52 04 10 1e 10 07 09 0c 00 00 63 04 0b 2a 19 00 09 00 52 00 02 04 00 +63 32 00 32 00 32 00 53 6c 61 70 42 61 73 73 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SqncrBass +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank C, voice 10 +1f 0f 0f 0e 08 00 03 4b 25 06 1f 0f 05 0b 0e 4e 03 5d 00 0b 1f 13 06 08 0b +1c 03 60 00 10 1f 13 06 08 0e 00 04 63 04 0e 3b 1f 00 00 00 42 0c 02 04 00 +63 32 00 32 00 32 00 53 71 6e 63 72 42 61 73 73 20 63 63 63 32 32 32 03 60 +00 70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SqncrBass2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0f 0f 0e 08 00 03 42 25 06 1f 0f 05 0b 0f 39 03 61 00 0b 1f 13 06 08 0b +1c 03 52 00 10 1f 13 06 08 0f 00 04 63 04 0e 3b 1f 00 00 00 42 18 02 04 00 +63 32 00 32 00 32 00 53 71 6e 63 72 42 61 73 73 32 63 63 63 32 32 32 03 30 +10 30 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Bass 1 +** Controls: KV +** Source: Yamaha DX11 factory preset, bank A, voice 16 +1f 03 10 06 00 34 01 49 04 15 1f 00 12 06 0f 5e 04 63 0a 0b 14 1f 17 06 0b +3d 01 57 16 18 1f 1e 00 07 0f 00 01 5d 04 13 3a 23 00 00 00 62 00 02 04 00 +63 32 00 00 00 32 00 53 79 2e 42 61 73 73 20 20 31 63 63 63 32 32 32 00 00 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Bass 1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 03 10 06 00 34 01 49 04 15 1f 00 12 06 0f 5e 04 63 0d 0b 14 1f 17 06 0b +3d 01 57 16 18 1f 1e 00 07 0f 00 01 5d 04 13 3a 23 00 00 00 62 00 02 04 00 +63 32 00 00 00 32 00 53 79 2e 42 61 73 73 20 20 31 63 63 63 32 32 32 00 00 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Bass 2 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank A, voice 17 +1d 0e 00 06 09 00 02 51 04 0e 1f 0a 00 0a 00 00 00 61 00 01 1f 0a 00 0a 00 +00 00 61 00 06 1f 0a 00 0a 00 00 00 61 00 10 3d 1b 42 19 00 52 0c 02 04 00 +63 32 00 00 00 32 00 53 79 2e 42 61 73 73 20 20 32 63 63 63 32 32 32 00 10 +00 50 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Bass 3 +** Controls: KV +** Source: Yamaha DX11 factory preset, bank A, voice 18 +1f 12 0c 02 07 00 02 59 10 13 1e 04 02 07 09 00 02 55 00 13 1f 0c 03 07 05 +00 02 46 00 16 1e 09 03 07 00 00 00 57 00 13 00 1f 00 00 00 62 0c 02 04 00 +28 32 00 00 00 32 00 53 79 2e 42 61 73 73 20 20 33 63 63 63 32 32 32 00 10 +00 10 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Bass 4 +** Controls: KV +** Source: Yamaha DX11 factory preset, bank A, voice 19 +1a 0b 00 08 04 00 03 4e 00 13 1a 09 03 08 04 00 02 50 00 13 15 0b 05 08 04 +0a 05 58 00 1b 18 09 03 09 04 00 01 63 00 0b 3a 1c 00 00 00 52 0c 02 05 00 +63 4b 00 00 00 32 00 53 79 2e 42 61 73 73 20 20 34 63 63 63 32 32 32 00 00 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Bass 4 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1a 0b 00 08 04 00 03 4e 00 13 1a 09 03 08 04 00 02 50 00 13 15 0b 05 08 04 +0d 05 58 00 1b 18 09 03 09 04 00 01 63 00 0b 3a 1c 00 00 00 52 0c 02 05 00 +63 4b 00 00 00 32 00 53 79 2e 42 61 73 73 20 20 34 63 63 63 32 32 32 00 00 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Bass 5 +** Controls: KV +** Source: Yamaha DX11 factory preset, bank A, voice 20 +1f 12 08 02 0b 00 02 59 10 13 1e 06 02 07 09 00 04 56 00 13 1f 0c 03 07 05 +00 05 46 00 16 1e 05 03 07 09 00 02 5d 00 13 02 20 00 00 00 62 0c 02 04 00 +28 32 00 00 00 32 00 53 79 2e 42 61 73 73 20 20 35 63 63 63 32 32 32 00 10 +00 10 00 50 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Bass 6 +** Description: A clavier with bite, derived from DX11 factory preset +** 'Sy.Bass 5' +** Controls: KV +** Source: Art Hitzeman +1f 12 08 02 0b 00 02 59 10 13 1e 06 02 04 09 00 04 56 00 13 1f 0c 03 05 05 +00 05 46 00 16 1e 05 03 05 09 00 02 5d 00 13 02 20 00 00 00 62 18 02 04 00 +28 32 00 00 00 32 00 53 79 2e 42 61 73 73 20 20 36 63 63 63 32 32 32 00 10 +00 10 00 50 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Bass 7 +** Description: a milder version of Sy. Bass 6 +** Controls: KV +** Source: Art Hitzeman +1f 12 08 02 0b 00 02 46 1f 13 1e 06 02 04 09 00 04 56 00 13 1f 0c 03 05 05 +00 05 46 00 16 1e 05 03 05 09 00 02 5d 00 13 02 20 00 00 00 62 18 02 04 00 +28 32 00 00 00 32 00 53 79 2e 42 61 73 73 20 20 37 63 63 63 32 32 32 00 10 +00 10 00 50 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynFunkBas +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank C, voice 11 +1f 0f 0f 0e 09 00 03 46 1d 16 1f 0f 05 0e 0e 0d 03 63 00 0b 1f 13 06 05 0d +1c 03 63 00 00 1f 13 06 08 0f 00 04 63 04 06 3b 1f 00 00 00 42 0c 04 04 00 +63 32 00 32 00 32 00 53 79 6e 46 75 6e 6b 42 61 73 63 63 63 32 32 32 0d 6c +00 00 00 70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynFunkBs2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0d 19 08 06 00 03 3c 1d 16 1f 0f 05 07 0e 1a 03 63 00 0b 1f 13 06 05 0d +2a 03 54 00 08 1f 13 06 08 0f 00 04 63 04 06 3b 1f 00 00 00 42 18 02 04 00 +63 32 00 32 00 32 00 53 79 6e 46 75 6e 6b 42 73 32 63 63 63 32 32 32 0c 1c +00 10 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: TeknoBass* +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +19 1e 13 05 0e 2d 03 53 2f 00 15 0b 09 05 0e 0a 02 55 00 06 19 1e 09 08 0e +17 00 4a 08 00 15 02 07 06 0e 10 01 63 00 0b 02 23 00 00 00 52 18 02 04 00 +28 32 00 00 00 32 00 54 65 6b 6e 6f 42 61 73 73 2a 63 63 63 32 32 32 00 04 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Wood Bass +** Controls: KV +** Source: Yamaha DX11 factory preset, bank B, voice 30 +17 15 0c 09 0b 2c 02 63 04 0b 1f 11 0b 04 0f 27 01 47 04 0b 1c 11 0b 02 0f +31 01 4b 0a 0b 1a 15 0a 08 0f 00 01 63 04 0b 10 1f 00 00 00 52 00 02 04 00 +28 32 00 00 00 32 00 57 6f 6f 64 20 42 61 73 73 20 63 63 63 32 32 32 02 30 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: WoodBass2 +** Description: A modified version of the DX11 factory preset 'Wood Bass' +** Controls: KV +** Source: Art Hitzeman +17 15 0c 09 0b 2c 02 63 04 0b 1f 11 0b 04 0f 27 01 47 04 0b 1c 11 0b 02 0f +31 01 4b 0a 0b 1a 15 0a 05 0f 00 01 63 04 0b 10 1f 00 00 00 52 0c 02 04 00 +28 32 00 00 00 32 00 57 6f 6f 64 42 61 73 73 32 20 63 63 63 32 32 32 02 30 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Cello + + +** Name: BowCello +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank B, voice 18 +1c 09 00 06 0e 35 00 50 04 00 0d 0a 00 06 0e 09 01 52 04 09 12 0b 00 08 09 +2c 02 49 10 0e 0c 0a 00 06 0f 00 01 63 04 0b 2a 1a 07 13 00 52 0c 04 04 00 +63 32 00 00 00 32 00 42 6f 77 43 65 6c 6c 6f 20 20 63 63 63 32 32 32 00 00 +00 10 00 10 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BoxCello +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank B, voice 19 +1c 04 00 06 0e 0f 00 48 04 06 15 09 03 04 0d 15 01 3a 08 00 11 10 00 0b 09 +0c 02 51 16 06 0b 0a 00 05 0f 05 01 63 08 13 32 1d 06 0f 00 52 0c 04 04 00 +63 32 00 00 00 32 00 42 6f 78 43 65 6c 6c 6f 20 20 63 63 63 32 32 32 00 10 +00 40 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BoxCello2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 04 00 06 0e 0f 00 48 04 06 0f 12 01 04 0d 15 01 3a 08 00 11 10 00 0b 09 +0c 02 51 16 06 0b 0a 00 05 0f 05 01 63 08 13 32 1d 06 0f 00 52 0c 04 04 00 +63 32 00 00 00 32 00 42 6f 78 43 65 6c 6c 6f 32 20 63 63 63 32 32 32 00 10 +00 40 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Cello * +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 00 00 05 0f 4d 00 48 08 0b 10 19 00 03 0e 2b 00 61 08 0b 0c 09 00 05 0d +00 01 63 08 15 0c 05 00 06 0e 4d 01 5c 13 12 3c 1f 19 15 00 32 00 02 04 00 +28 63 00 00 00 32 00 43 65 6c 6c 6f 20 20 20 20 2a 63 63 63 32 32 32 00 10 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Cello 1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: Yamaha DX11 factory preset, bank C, voice 7 +16 07 00 06 0f 00 41 4c 00 0b 15 0b 00 03 0e 00 02 35 00 0b 19 08 00 08 0c +10 05 5f 08 14 0e 0b 00 07 0e 00 02 63 00 0c 3a 1f 12 10 00 52 18 02 05 00 +63 28 50 32 00 32 00 43 65 6c 6c 6f 20 20 20 20 31 63 56 63 30 32 32 00 30 +00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Cello 2 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank C, voice 8 +1d 08 00 05 0a 12 01 4e 04 06 17 0c 00 05 0f 00 00 42 04 00 1e 0e 00 05 0f +25 01 3e 10 00 0a 06 00 07 0f 00 02 63 04 06 32 1d 16 2c 00 32 0c 02 04 00 +63 32 00 00 00 32 00 43 65 6c 6c 6f 20 20 20 20 32 63 63 63 32 32 32 00 20 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Cello 2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 08 00 05 0d 12 01 4e 04 06 17 0c 00 05 0f 00 00 42 04 00 1e 0e 00 05 0f +25 01 3e 10 00 0d 06 00 07 0f 00 02 63 04 06 32 1d 16 2c 00 32 0c 02 04 00 +63 32 00 00 00 32 00 43 65 6c 6c 6f 20 20 20 20 32 63 63 63 32 32 32 00 20 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Cello....1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 15 0a 08 0d 19 02 4c 19 0c 15 10 07 07 0c 19 01 5d 04 03 11 15 06 08 0f +3c 04 50 0a 0b 0c 09 04 06 0c 00 04 63 04 0a 5b 1b 1b 20 00 32 00 04 04 00 +63 01 63 00 00 32 00 43 65 6c 6c 6f 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Cello....1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +10 15 0a 08 0d 19 02 4c 2a 0c 1f 17 0a 07 0d 19 01 5d 04 03 10 15 0a 08 0d +3c 01 58 0a 0b 0f 09 07 06 0d 00 00 63 04 0a 5b 22 00 14 00 32 00 04 04 00 +63 01 63 00 00 32 00 43 65 6c 6c 6f 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Cello....2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +13 09 04 03 0e 02 01 53 00 12 1e 04 10 05 08 52 01 49 00 0a 14 1f 0b 05 03 +52 05 63 00 0c 0b 03 1f 06 02 10 05 60 00 0c 32 1c 2e 1e 00 42 18 0c 04 00 +63 32 32 00 00 32 00 43 65 6c 6c 6f 2e 2e 2e 2e 32 63 63 63 32 32 32 00 10 +00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Cello....2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +13 09 04 03 0e 02 01 53 00 12 1e 04 10 05 08 52 01 49 00 0a 14 1f 0b 05 03 +52 01 63 00 0c 0c 03 1f 06 02 10 00 60 00 0c 32 1c 2e 1e 00 42 18 0c 04 00 +63 32 32 00 00 32 00 43 65 6c 6c 6f 2e 2e 2e 2e 32 63 63 63 32 32 32 00 10 +00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY DoubleBass + + +** Name: ArcoBass * +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 15 00 06 0d 13 01 56 04 08 1e 05 00 06 0e 33 02 63 04 0e 0f 09 00 06 0f +00 01 63 04 06 0d 08 00 05 0e 00 05 63 04 08 3c 1e 17 0f 00 42 0c 02 04 00 +28 63 00 00 00 32 00 41 72 63 6f 42 61 73 73 20 2a 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BassBeast +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +09 09 03 05 0a 22 02 63 00 04 0b 05 04 03 0f 00 02 4a 08 02 03 08 03 05 08 +38 42 5a 0d 0e 10 05 03 06 0d 00 00 61 00 01 62 1c 06 04 06 4e 18 02 04 00 +63 32 00 00 00 32 00 42 61 73 73 42 65 61 73 74 20 63 63 63 32 32 32 07 00 +11 50 00 30 01 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BassPluck2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 16 06 08 0d 00 01 40 08 1b 15 16 06 08 0d 00 01 51 00 1b 1f 0d 0c 08 0a +63 06 63 00 13 1f 0d 0c 08 0a 63 05 63 00 13 54 26 00 00 00 32 0c 02 04 00 +63 32 00 32 00 32 00 42 61 73 73 50 6c 75 63 6b 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BassPluck2 +** Source: from a library of patches collected by Duane Bowker, author unknown +15 16 06 08 0d 00 00 40 08 1b 15 16 06 08 0d 00 00 51 00 1b 1f 0d 0c 08 0a +63 00 63 00 13 1f 0d 0c 08 0a 63 00 63 00 13 54 26 00 00 00 32 0c 02 04 00 +63 32 00 32 00 32 00 42 61 73 73 50 6c 75 63 6b 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: DoubleBass +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank B, voice 17 +1c 02 00 04 0e 63 00 4e 04 03 0d 05 00 06 0e 63 01 56 0a 08 12 07 00 06 09 +63 02 47 1b 0e 0a 0a 00 05 0f 00 01 63 04 0b 32 1a 08 0d 00 52 0c 04 04 00 +63 32 00 00 00 32 00 44 6f 75 62 6c 65 42 61 73 73 63 63 63 32 32 32 00 10 +00 00 00 03 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +--Bank 8 + +* SUBCATEGORY Guitar + + +** Name: 12 String1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 0f 09 03 0c 39 02 4f 22 1c 0d 0f 09 02 0c 00 43 3c 0d 0a 16 1f 07 06 0f +0a 45 58 08 08 1c 07 06 06 0c 00 46 5f 08 0e 0c 22 21 00 00 36 0c 00 04 00 +63 63 00 00 00 32 00 31 32 20 53 74 72 69 6e 67 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: 12 String1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 0f 09 03 0c 39 01 4f 22 1c 0d 0f 09 02 0c 00 41 3c 0d 0a 16 1f 07 06 0f +0a 40 58 08 08 1c 07 06 06 0c 00 40 5f 08 0e 0c 22 21 00 00 36 0c 00 04 00 +63 63 00 00 00 32 00 31 32 20 53 74 72 69 6e 67 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: 12 String2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 09 04 03 0c 2b 42 51 24 1c 1a 04 01 0d 0b 00 42 53 04 1a 1b 09 06 0e 0c +0a 45 4e 04 10 1c 07 03 07 0e 00 44 63 04 16 14 23 46 00 01 3a 18 00 04 00 +63 63 00 00 00 32 00 31 32 20 53 74 72 69 6e 67 32 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: 12 String2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 09 04 03 0c 2b 41 51 24 1c 1a 04 01 0d 0b 00 41 53 04 1a 1b 09 06 0e 0c +0a 40 4e 04 10 1c 07 03 07 0e 00 40 63 04 16 14 23 46 00 01 3a 18 00 04 00 +63 63 00 00 00 32 00 31 32 20 53 74 72 69 6e 67 32 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: 5th Lead.1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +19 06 07 09 06 0f 03 58 08 0a 19 09 07 09 06 0c 05 61 0a 0d 19 0c 07 09 06 +2e 05 63 08 03 1f 15 07 09 0d 00 06 63 0a 02 2c 1e 17 00 00 22 0c 02 04 00 +63 32 00 00 00 32 00 35 74 68 20 4c 65 61 64 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: 5th Lead.1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +19 06 07 09 06 0f 01 58 08 0a 19 09 07 09 06 0c 01 61 0a 0d 19 0c 07 09 06 +2e 00 63 08 03 1f 15 07 09 0d 00 00 63 0a 02 2c 1e 17 00 00 22 0c 02 04 00 +63 32 00 00 00 32 00 35 74 68 20 4c 65 61 64 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: 5th Lead.2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 13 00 09 0c 20 03 4c 08 0a 1f 09 09 09 0c 00 05 51 0a 05 1f 1f 00 09 0f +40 05 63 08 03 1f 09 09 09 0c 00 05 63 0a 02 2c 1e 17 00 00 22 18 02 04 00 +63 32 00 00 00 32 00 35 74 68 20 4c 65 61 64 2e 32 63 63 63 32 32 32 00 00 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: 5th Lead.2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 13 00 09 0c 20 01 4c 08 0a 1f 09 09 09 0c 00 01 51 0a 05 1f 1f 00 09 0f +40 00 63 08 03 1f 09 09 09 0c 00 00 63 0a 02 2c 1e 17 00 00 22 18 02 04 00 +63 32 00 00 00 32 00 35 74 68 20 4c 65 61 64 2e 32 63 63 63 32 32 32 00 00 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Guitar1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +17 05 04 03 0e 23 03 45 08 13 1f 0c 08 05 0f 43 05 42 04 03 1f 08 11 06 0f +00 05 40 0a 03 1b 15 06 06 0e 23 04 63 08 13 31 23 00 00 00 52 0c 04 04 00 +63 32 00 00 00 32 00 41 43 20 47 75 69 74 61 72 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Guitar1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +17 05 04 03 0e 23 01 45 08 13 1f 0c 08 05 0f 43 01 42 04 03 1f 08 11 06 0f +00 01 40 0a 03 1b 15 06 06 0e 23 00 63 08 13 31 23 00 00 00 52 0c 04 04 00 +63 32 00 00 00 32 00 41 43 20 47 75 69 74 61 72 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Guitar2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0e 04 03 0e 23 02 4b 0a 13 1f 1f 08 05 0f 43 03 42 04 03 1f 15 11 06 0f +00 04 35 0a 03 1f 1f 06 0a 0e 00 03 63 04 0b 38 23 00 00 00 62 0c 04 04 00 +63 32 00 00 00 32 00 41 43 20 47 75 69 74 61 72 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Guitar2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0e 04 03 0e 23 01 4b 0a 13 1f 1f 08 05 0f 43 01 42 04 03 1f 15 11 06 0f +00 00 35 0a 03 1f 1f 06 0a 0e 00 00 63 04 0b 38 23 00 00 00 62 0c 04 04 00 +63 32 00 00 00 32 00 41 43 20 47 75 69 74 61 72 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Guitar3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0e 00 0f 0f 23 03 4c 04 1b 1f 1f 00 0b 0f 43 03 51 0a 13 1f 1a 06 0d 0d +00 04 63 04 03 1f 1f 08 0e 0f 00 04 57 08 0b 24 23 00 00 00 62 0c 04 04 00 +63 32 00 00 00 32 00 41 43 20 47 75 69 74 61 72 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Guitar3 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0e 00 0f 0f 23 02 4c 04 1b 1f 1f 00 0b 0f 43 01 51 0a 13 1f 1a 06 0d 0d +00 01 63 04 03 1f 1f 08 0e 0f 00 00 57 08 0b 24 23 00 00 00 62 0c 04 04 00 +63 32 00 00 00 32 00 41 43 20 47 75 69 74 61 72 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Guitar4 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 0f 0c 04 0f 23 41 53 04 13 1a 15 06 0b 0f 2b 41 4f 04 13 1d 0a 09 06 0f +00 45 63 04 13 1c 04 04 0e 0f 00 45 63 04 0b 34 22 33 00 01 36 0c 04 04 00 +63 32 00 00 00 32 00 41 43 20 47 75 69 74 61 72 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Guitar4 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 0f 0c 04 0f 23 41 53 04 13 1a 15 06 0b 0f 2b 41 4f 04 13 1d 0a 09 06 0f +00 40 63 04 13 1c 04 04 0e 0f 00 40 63 04 0b 34 22 33 00 01 36 0c 04 04 00 +63 32 00 00 00 32 00 41 43 20 47 75 69 74 61 72 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AllThatJaz +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank C, voice 5 +1f 09 00 06 0c 27 04 48 1c 0b 1c 06 00 04 07 37 01 43 0a 00 1f 0a 00 02 06 +3d 00 45 0a 0e 1f 12 08 08 0f 00 05 63 04 0b 38 1f 00 03 00 52 0c 03 04 00 +63 32 01 32 00 32 00 41 6c 6c 54 68 61 74 4a 61 7a 63 63 63 32 32 32 00 30 +00 10 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: A.Guitar +** Controls: KV +** Source: Yamaha DX11 factory preset, bank B, voice 8 +1f 1f 06 06 0a 28 03 4b 04 0a 1c 0a 07 07 0a 28 02 3d 0a 0a 1f 0b 07 07 0b +28 02 45 1f 0b 1b 0c 08 09 0a 00 02 62 04 0c 3a 1e 00 00 00 52 18 02 04 00 +28 32 00 00 00 32 00 41 2e 47 75 69 74 61 72 20 20 63 63 63 32 32 32 00 00 +00 20 00 40 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: A.Guitar +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 06 06 0d 28 03 4b 04 0a 1c 0a 07 07 0d 28 02 3d 0d 0a 1f 0b 07 07 0b +28 02 45 1f 0b 1b 0c 08 09 0d 00 02 62 04 0c 3a 1e 00 00 00 52 18 02 04 00 +28 32 00 00 00 32 00 41 2e 47 75 69 74 61 72 20 20 63 63 63 32 32 32 00 00 +00 20 00 40 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E.Guitar +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank B, voice 11 +1f 1f 04 03 0f 0c 01 46 0a 16 1f 1f 03 03 0f 08 00 56 04 0a 1f 1f 04 03 0f +08 01 53 00 04 18 1f 05 0b 0f 00 02 55 04 00 3a 23 1c 08 00 42 18 02 04 00 +28 63 00 00 00 32 00 45 2e 47 75 69 74 61 72 20 20 63 63 63 32 32 32 00 00 +00 20 00 60 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E.Guitar +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 04 03 0f 0c 01 46 0d 16 1f 1f 03 03 0f 08 00 56 04 0a 1f 1f 04 03 0f +08 01 53 00 04 18 1f 05 0b 0f 00 02 55 04 00 3a 23 1c 08 00 42 18 02 04 00 +28 63 00 00 00 32 00 45 2e 47 75 69 74 61 72 20 20 63 63 63 32 32 32 00 00 +00 20 00 60 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Echo Lead +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0f 09 03 0d 00 06 57 08 0e 1f 16 00 05 0e 00 05 63 04 03 1f 16 00 08 0e +00 05 63 04 0b 1f 16 00 05 0e 00 05 63 04 03 75 25 00 00 00 32 18 04 04 00 +63 01 63 00 00 32 00 45 63 68 6f 20 4c 65 61 64 20 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Echo Lead +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0f 09 03 0d 00 02 57 08 0e 1f 16 00 05 0e 00 00 63 04 03 1f 16 00 08 0e +00 00 63 04 0b 1f 16 00 05 0e 00 00 63 04 03 75 25 00 00 00 32 18 04 04 00 +63 01 63 00 00 32 00 45 63 68 6f 20 4c 65 61 64 20 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: F.Guitar +** Controls: KV +** Source: Yamaha DX11 factory preset, bank B, voice 9 +1f 1f 05 06 0f 28 03 4f 04 0a 1a 09 07 07 0a 28 02 49 0a 0a 1f 0b 04 07 0b +28 02 45 1f 0b 1a 0c 06 08 0a 00 02 62 04 0c 3a 1e 00 00 00 52 18 02 04 00 +28 32 00 00 00 32 00 46 2e 47 75 69 74 61 72 20 20 63 63 63 32 32 32 00 00 +00 10 00 70 00 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: F.Guitar +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 05 06 0f 28 03 4f 04 0a 1a 09 07 07 0d 28 02 49 0d 0a 1f 0b 04 07 0b +28 02 45 1f 0b 1a 0c 06 08 0d 00 02 62 04 0c 3a 1e 00 00 00 52 18 02 04 00 +28 32 00 00 00 32 00 46 2e 47 75 69 74 61 72 20 20 63 63 63 32 32 32 00 00 +00 10 00 70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Flamenco +** Controls: KV +** Source: Yamaha DX11 factory preset, bank B, voice 7 +18 0b 0a 07 0a 28 02 52 0a 0b 1f 12 00 05 0f 07 02 40 04 0b 17 0f 0e 06 09 +11 06 52 0a 0b 17 13 09 08 0e 00 01 63 04 0b 31 1e 00 00 00 52 18 02 04 00 +28 32 00 00 00 32 00 46 6c 61 6d 65 6e 63 6f 20 20 63 63 63 32 32 32 00 30 +00 00 00 10 00 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Flamenco +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +18 0b 0a 07 0d 28 02 52 0a 0b 1f 12 00 05 0f 07 02 40 04 0b 17 0f 0e 06 09 +11 06 52 0a 0b 17 13 09 08 0e 00 01 63 04 0b 31 1e 00 00 00 52 18 02 04 00 +28 32 00 00 00 32 00 46 6c 61 6d 65 6e 63 6f 20 20 63 63 63 32 32 32 00 30 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Funkfifth* +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 08 00 06 0c 00 00 4a 04 00 1f 0a 00 02 0b 00 00 58 04 06 1b 1f 00 09 0f +00 00 63 04 06 1b 1e 00 09 0f 11 00 54 04 00 3c 23 00 00 00 42 0c 02 04 00 +28 63 00 00 00 32 00 46 75 6e 6b 66 69 66 74 68 2a 63 63 63 32 32 32 00 00 +00 78 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Funky Pick +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank C, voice 4 +1f 19 08 0a 03 00 03 63 10 18 1f 0c 05 0b 05 00 03 52 00 0b 1f 19 06 0b 05 +00 03 63 0a 16 1f 0f 11 09 07 00 04 63 04 03 3a 14 00 00 00 42 18 02 04 00 +63 32 00 32 00 32 00 46 75 6e 6b 79 20 50 69 63 6b 63 63 63 32 32 32 00 30 +00 00 00 00 00 00 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: FuzzyLead +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 05 06 07 0d 00 43 63 00 08 1c 0a 04 03 0c 00 44 58 04 10 1f 0c 02 07 0d +00 45 62 00 16 1d 0a 06 07 0d 15 46 63 04 16 2c 23 00 00 01 06 0c 02 04 00 +28 02 00 00 00 32 00 46 75 7a 7a 79 4c 65 61 64 20 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: FuzzyLead +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 05 06 07 0d 00 42 63 00 08 1c 0a 04 03 0c 00 41 58 04 10 1f 0c 02 07 0d +00 40 62 00 16 1d 0a 06 07 0d 15 40 63 04 16 2c 23 00 00 01 06 0c 02 04 00 +28 02 00 00 00 32 00 46 75 7a 7a 79 4c 65 61 64 20 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Guitar +** Controls: KV +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +1f 1f 0b 06 0a 63 03 37 08 0a 1a 0b 04 05 07 3c 01 43 0a 0a 1a 0b 04 05 07 +00 01 32 1d 08 1f 0b 0b 06 0b 1e 02 63 04 0c 32 19 00 00 00 32 0c 02 04 00 +28 63 00 00 00 32 00 47 75 69 74 61 72 20 20 20 20 63 63 63 32 32 32 00 00 +00 30 00 26 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Guitar #1 +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank C, voice 2 +1f 0e 0e 0f 0f 00 03 48 2d 06 1f 0f 04 0f 0f 25 03 5b 00 00 1f 12 06 0c 0e +1c 03 55 00 10 1f 13 07 08 0e 06 04 62 04 0e 3b 14 00 00 00 42 18 02 04 00 +63 32 00 32 00 32 00 47 75 69 74 61 72 20 23 31 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: HardHabits +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 04 0c 08 00 2f 3c 4b 04 0b 1c 15 06 08 0c 00 1f 52 24 13 1c 04 00 08 0c +1e 1c 63 04 0b 1c 07 07 08 0b 00 3f 63 04 0b 04 22 21 00 00 02 0c 02 04 00 +63 32 00 00 00 32 00 48 61 72 64 48 61 62 69 74 73 63 63 63 32 32 32 00 00 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: HardHabits +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 04 0c 08 00 2f 39 4b 04 0b 1c 15 06 08 0c 00 1a 52 24 13 1c 04 00 08 0c +1e 18 63 04 0b 1c 07 07 08 0b 00 38 63 04 0b 04 22 21 00 00 02 0c 02 04 00 +63 32 00 00 00 32 00 48 61 72 64 48 61 62 69 74 73 63 63 63 32 32 32 00 00 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: HawaiiGitr +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 09 00 06 00 27 02 38 22 0b 13 06 00 08 00 37 02 3b 0a 03 13 0a 00 09 00 +3d 02 45 0a 0e 13 12 08 08 0f 00 03 61 04 0b 32 1f 00 03 00 52 0c 03 04 00 +63 32 01 32 00 32 00 48 61 77 61 69 69 47 69 74 72 63 63 63 32 32 32 00 10 +00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: HeavyLead +** Controls: MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank C, voice 25 +11 06 08 0f 0a 2f 00 4d 04 03 1f 1f 00 0f 0f 00 00 50 00 03 1f 0c 00 0f 0d +00 00 4e 00 03 1f 1f 00 0f 0f 00 00 5a 00 03 30 20 27 06 00 62 18 07 04 00 +63 32 00 00 00 32 00 48 65 61 76 79 4c 65 61 64 20 63 63 63 32 32 32 00 00 +00 10 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: HeavyMetal +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank C, voice 6 +1f 08 00 03 0f 20 01 58 00 06 1f 03 00 02 0f 1b 01 4c 0d 02 15 05 04 03 0f +1b 00 5b 0a 05 1f 0f 00 08 0f 00 00 5c 04 03 3a 1f 16 05 00 62 18 07 04 00 +63 32 00 00 00 32 00 48 65 61 76 79 4d 65 74 61 6c 63 63 63 32 32 32 00 00 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: HollowLead +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 1f 00 07 0f 00 04 47 08 06 12 0c 06 09 0f 00 04 5a 04 0e 14 1f 00 09 0f +00 05 62 04 06 18 1f 00 0d 0f 00 05 56 04 03 74 29 00 00 00 22 18 05 04 00 +63 63 63 00 00 32 00 48 6f 6c 6c 6f 77 4c 65 61 64 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: HollowLead +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 1f 00 07 0f 00 01 47 08 06 12 0c 06 09 0f 00 01 5a 04 0e 14 1f 00 09 0f +00 00 62 04 06 18 1f 00 0d 0f 00 00 56 04 03 74 29 00 00 00 22 18 05 04 00 +63 63 63 00 00 32 00 48 6f 6c 6c 6f 77 4c 65 61 64 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Jazz Guit1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +19 09 07 07 0b 55 43 5f 0a 13 1b 09 07 07 0b 63 45 5b 0a 0b 18 09 07 07 0d +63 45 63 04 1b 16 09 07 07 09 0a 46 5f 04 03 04 19 00 01 03 16 18 00 04 00 +63 63 00 00 00 32 00 4a 61 7a 7a 20 47 75 69 74 31 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Jazz Guit1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +19 09 07 07 0b 55 41 5f 0a 13 1b 09 07 07 0b 63 42 5b 0a 0b 18 09 07 07 0d +63 40 63 04 1b 16 09 07 07 09 0a 40 5f 04 03 04 19 00 01 03 16 18 00 04 00 +63 63 00 00 00 32 00 4a 61 7a 7a 20 47 75 69 74 31 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Jazz Guit2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 11 1f 0f 00 2e 03 60 31 03 1c 07 0c 09 0e 00 03 4a 08 0b 17 1a 07 07 0d +4f 05 51 04 00 16 1a 09 09 0e 00 04 63 04 0b 04 23 00 05 00 22 0c 03 04 00 +63 63 00 00 00 32 00 4a 61 7a 7a 20 47 75 69 74 32 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Jazz Guit2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 11 1f 0f 00 2e 02 60 31 03 1c 07 0c 09 0e 00 01 4a 08 0b 17 1a 07 07 0d +4f 00 51 04 00 16 1a 09 09 0e 00 00 63 04 0b 04 23 00 05 00 22 0c 03 04 00 +63 63 00 00 00 32 00 4a 61 7a 7a 20 47 75 69 74 32 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Jazz Guit3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +19 19 08 0f 0d 2e 04 5e 2a 1b 1b 11 0c 09 0c 00 03 48 08 0b 18 19 07 07 0d +4f 04 51 04 00 16 19 09 09 0e 00 06 63 04 0b 04 23 00 05 00 22 0c 03 04 00 +63 63 00 00 00 32 00 4a 61 7a 7a 20 47 75 69 74 33 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Jazz Guit3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +19 19 08 0f 0d 2e 01 5e 2a 1b 1b 11 0c 09 0c 00 01 48 08 0b 18 19 07 07 0d +4f 00 51 04 00 16 19 09 09 0e 00 00 63 04 0b 04 23 00 05 00 22 0c 03 04 00 +63 63 00 00 00 32 00 4a 61 7a 7a 20 47 75 69 74 33 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Jazz Guit4 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 12 1f 0f 00 63 44 5b 2a 03 1b 09 07 07 0b 49 45 5c 0a 0b 18 09 07 07 0d +2d 44 63 0a 1b 16 09 07 07 09 0a 46 5f 04 03 3c 23 00 01 04 3a 18 00 04 00 +63 63 00 00 00 32 00 4a 61 7a 7a 20 47 75 69 74 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Jazz Guit4 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 12 1f 0f 00 63 42 5b 2a 03 1b 09 07 07 0b 49 42 5c 0a 0b 18 09 07 07 0d +2d 40 63 0a 1b 16 09 07 07 09 0a 40 5f 04 03 3c 23 00 01 04 3a 18 00 04 00 +63 63 00 00 00 32 00 4a 61 7a 7a 20 47 75 69 74 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: JonesLead +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 0a 04 07 0f 00 03 53 04 13 1b 0a 04 07 0c 00 04 4b 10 13 1b 18 06 07 0f +00 06 62 04 12 1b 18 06 07 0f 00 05 63 04 13 7c 2d 00 00 00 22 0c 02 04 00 +63 63 00 00 00 32 00 4a 6f 6e 65 73 4c 65 61 64 20 63 63 63 32 32 32 00 00 +00 40 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: JonesLead +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 0a 04 07 0f 00 01 53 04 13 1b 0a 04 07 0c 00 01 4b 10 13 1b 18 06 07 0f +00 00 62 04 12 1b 18 06 07 0f 00 00 63 04 13 7c 2d 00 00 00 22 0c 02 04 00 +63 63 00 00 00 32 00 4a 6f 6e 65 73 4c 65 61 64 20 63 63 63 32 32 32 00 00 +00 40 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: KickLead +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 0f 07 07 0e 19 04 52 04 10 0d 01 06 08 0c 19 06 58 04 10 1f 15 07 07 0e +00 05 63 04 08 0e 03 02 06 0e 00 46 63 04 0e 3c 0f 1d 23 3d 26 0c 04 05 00 +28 32 00 00 00 32 00 4b 69 63 6b 4c 65 61 64 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: KickLead +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +15 0f 07 07 0e 19 01 52 04 10 0d 01 06 08 0c 19 01 58 04 10 1f 15 07 07 0e +00 00 63 04 08 0e 03 02 06 0e 00 40 63 04 0e 3c 0f 1d 23 3d 26 0c 04 05 00 +28 32 00 00 00 32 00 4b 69 63 6b 4c 65 61 64 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Mute Gtr +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank B, voice 12 +1f 14 1f 03 0e 0a 02 4e 13 0b 1f 16 0a 08 0e 1e 00 52 04 1b 1f 10 09 09 0e +00 01 63 04 1b 1f 11 09 08 0e 00 01 63 04 1b 7c 1c 00 16 00 32 0c 02 04 00 +28 32 00 00 00 32 00 4d 75 74 65 20 47 74 72 20 20 63 63 63 32 32 32 00 50 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Mute Gtr +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 14 1f 03 0e 0d 02 4e 13 0b 1f 16 0d 08 0e 1e 00 52 04 1b 1f 10 09 09 0e +00 01 63 04 1b 1f 11 09 08 0e 00 01 63 04 1b 7c 1c 00 16 00 32 0c 02 04 00 +28 32 00 00 00 32 00 4d 75 74 65 20 47 74 72 20 20 63 63 63 32 32 32 00 50 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: NastyLead1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 0d 09 08 0f 00 04 61 04 08 0f 04 11 08 0c 00 04 5f 04 09 1f 15 08 08 0f +00 05 63 04 08 0f 15 06 08 0c 00 05 63 04 0e 6c 23 00 00 00 02 18 05 04 00 +63 63 63 00 00 32 00 4e 61 73 74 79 4c 65 61 64 31 63 63 63 32 32 32 00 00 +00 40 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: NastyLead1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +15 0d 09 08 0f 00 02 61 04 08 0f 04 11 08 0c 00 01 5f 04 09 1f 15 08 08 0f +00 00 63 04 08 0f 15 06 08 0c 00 00 63 04 0e 6c 23 00 00 00 02 18 05 04 00 +63 63 63 00 00 32 00 4e 61 73 74 79 4c 65 61 64 31 63 63 63 32 32 32 00 00 +00 40 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: NastyLead2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 0d 09 08 0f 00 04 62 08 00 0f 0e 05 08 07 00 05 62 04 01 1f 15 08 08 0f +00 05 63 08 00 0f 16 06 08 0e 00 05 63 10 06 6c 26 00 03 00 42 18 05 04 00 +63 63 63 00 00 32 00 4e 61 73 74 79 4c 65 61 64 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: NastyLead2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +15 0d 09 08 0f 00 02 62 08 00 0f 0e 05 08 07 00 02 62 04 01 1f 15 08 08 0f +00 00 63 08 00 0f 16 06 08 0e 00 00 63 10 06 6c 26 00 03 00 42 18 05 04 00 +63 63 63 00 00 32 00 4e 61 73 74 79 4c 65 61 64 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Nuln Guit3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 0a 04 0c 09 63 01 48 1f 0b 19 1e 09 09 09 00 03 51 0d 1c 1d 0a 04 0c 03 +00 05 5d 0d 1b 15 03 06 09 0f 0a 05 5c 04 0b 3c 23 00 1b 00 22 00 04 04 00 +63 32 00 00 00 32 00 4e 75 6c 6e 20 47 75 69 74 33 63 63 63 32 32 32 00 00 +00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Nuln Guit3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 0a 04 0c 09 63 01 48 1f 0b 19 1e 09 09 09 00 01 51 0d 1c 1d 0a 04 0c 03 +00 00 5d 0d 1b 15 03 06 09 0f 0a 00 5c 04 0b 3c 23 00 1b 00 22 00 04 04 00 +63 32 00 00 00 32 00 4e 75 6c 6e 20 47 75 69 74 33 63 63 63 32 32 32 00 00 +00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Nyln Guit1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 0f 0c 06 0b 23 02 4a 1c 13 14 15 03 07 0f 27 02 4a 04 13 15 0a 09 06 0f +00 04 43 16 03 18 04 04 06 0e 00 04 63 04 0b 3c 23 00 1b 00 22 0c 04 04 00 +63 32 00 00 00 32 00 4e 79 6c 6e 20 47 75 69 74 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Nyln Guit1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 0f 0c 06 0b 23 02 4a 1c 13 14 15 03 07 0f 27 01 4a 04 13 15 0a 09 06 0f +00 00 43 16 03 18 04 04 06 0e 00 00 63 04 0b 3c 23 00 1b 00 22 0c 04 04 00 +63 32 00 00 00 32 00 4e 79 6c 6e 20 47 75 69 74 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Nyln Guit2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 0f 0c 06 05 23 02 4f 10 13 1c 1e 03 07 04 00 05 42 3f 14 1f 19 03 07 04 +00 05 60 04 1b 18 04 03 07 04 00 04 5f 04 0b 21 23 00 1b 00 22 0c 04 04 00 +63 32 00 00 00 32 00 4e 79 6c 6e 20 47 75 69 74 32 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Nyln Guit2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 0f 0c 06 05 23 02 4f 10 13 1c 1e 03 07 04 00 01 42 3f 14 1f 19 03 07 04 +00 01 60 04 1b 18 04 03 07 04 00 00 5f 04 0b 21 23 00 1b 00 22 0c 04 04 00 +63 32 00 00 00 32 00 4e 79 6c 6e 20 47 75 69 74 32 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Nylon * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0d 08 04 0b 2f 03 4d 0d 13 1c 1f 03 05 0f 2c 02 36 03 09 1b 05 07 04 0a +29 04 4c 0d 16 15 13 08 05 0e 11 03 63 04 0a 3b 1f 00 00 00 32 11 02 04 00 +28 63 00 00 00 32 00 4e 79 6c 6f 6e 20 20 20 20 2a 63 63 63 32 32 32 00 08 +00 06 00 08 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: NylonGuit +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank C, voice 1 +1f 09 00 06 00 27 02 51 19 0b 1c 06 00 08 00 37 02 47 0a 03 1f 0a 00 09 00 +3d 02 4d 0a 0e 1f 12 08 08 0f 00 03 61 04 0b 28 1f 00 03 00 52 0c 03 04 00 +63 32 01 32 00 32 00 4e 79 6c 6f 6e 47 75 69 74 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntGuitar +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 0c 07 0a 0d 63 02 50 19 1b 1b 0c 07 0a 0d 63 02 4f 00 1b 1b 12 07 0a 0d +00 05 5b 1f 13 1b 12 07 0a 0d 00 05 62 08 15 04 23 00 00 00 62 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 47 75 69 74 61 72 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntGuitar +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 0c 07 0a 0d 63 00 50 19 1b 1b 0c 07 0a 0d 63 00 4f 00 1b 1b 12 07 0a 0d +00 00 5b 1f 13 1b 12 07 0a 0d 00 00 62 08 15 04 23 00 00 00 62 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 47 75 69 74 61 72 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ped Stl..1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +13 0f 09 06 0e 39 02 51 04 06 1c 09 0a 08 0e 00 03 59 0a 01 1f 09 09 08 0f +00 01 63 08 05 18 0c 09 07 0f 00 04 63 04 02 76 22 00 00 00 22 18 03 04 00 +63 63 00 00 00 32 00 50 65 64 20 53 74 6c 2e 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ped Stl..1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +13 0f 09 06 0e 39 02 51 04 06 1c 09 0a 08 0e 00 00 59 0a 01 1f 09 09 08 0f +00 00 63 08 05 18 0c 09 07 0f 00 00 63 04 02 76 22 00 00 00 22 18 03 04 00 +63 63 00 00 00 32 00 50 65 64 20 53 74 6c 2e 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ped Stl..2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +13 0f 09 06 0e 39 03 45 13 06 1c 09 0a 08 0e 00 02 63 08 01 1f 09 09 08 0f +00 05 63 04 05 0e 0c 07 08 0f 00 04 63 04 0a 76 22 00 00 00 22 18 03 04 00 +63 63 00 00 00 32 00 50 65 64 20 53 74 6c 2e 2e 32 63 63 63 32 32 32 00 00 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ped Stl..2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +13 0f 09 06 0e 39 02 45 13 06 1c 09 0a 08 0e 00 00 63 08 01 1f 09 09 08 0f +00 00 63 04 05 0e 0c 07 08 0f 00 00 63 04 0a 76 22 00 00 00 22 18 03 04 00 +63 63 00 00 00 32 00 50 65 64 20 53 74 6c 2e 2e 32 63 63 63 32 32 32 00 00 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ped Stl..3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +13 0f 09 06 0e 39 02 3c 08 06 1c 09 0a 08 0e 00 03 63 08 01 1f 09 09 08 0f +00 03 63 04 05 0e 0c 07 08 0f 00 06 63 04 0a 7d 22 00 00 00 22 18 03 04 00 +63 63 00 00 00 32 00 50 65 64 20 53 74 6c 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ped Stl..3 +** Source: from a library of patches collected by Duane Bowker, author unknown +13 0f 09 06 0e 39 00 3c 08 06 1c 09 0a 08 0e 00 00 63 08 01 1f 09 09 08 0f +00 00 63 04 05 0e 0c 07 08 0f 00 00 63 04 0a 7d 22 00 00 00 22 18 03 04 00 +63 63 00 00 00 32 00 50 65 64 20 53 74 6c 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PedalSteel +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 10 00 0c 00 27 02 3c 24 0b 1f 10 02 0a 0e 37 02 5d 04 0c 1b 06 05 0b 0d +3d 02 5a 0a 0b 1b 09 06 0b 0d 00 06 63 04 0b 03 1d 16 09 00 52 18 02 04 00 +63 19 00 0a 00 32 00 50 65 64 61 6c 53 74 65 65 6c 63 63 63 32 32 32 00 40 +00 30 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PercLead.1 +** Controls: KV, MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1a 0d 00 0a 0b 06 44 55 08 1b 1f 08 00 0d 0c 05 06 40 00 0b 1f 1f 00 0d 0f +0d 06 53 04 1b 1f 1f 00 0d 0f 00 45 5e 04 03 11 23 35 00 10 46 18 0c 04 00 +63 32 32 00 00 32 00 50 65 72 63 4c 65 61 64 2e 31 63 63 63 32 32 32 00 00 +00 00 00 10 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PercLead.1 +** Controls: KV, MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +1a 0d 00 0a 0b 06 41 55 08 1b 1f 08 00 0d 0c 05 01 40 00 0b 1f 1f 00 0d 0f +0d 01 53 04 1b 1f 1f 00 0d 0f 00 40 5e 04 03 11 23 35 00 10 46 18 0c 04 00 +63 32 32 00 00 32 00 50 65 72 63 4c 65 61 64 2e 31 63 63 63 32 32 32 00 00 +00 00 00 10 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PercLead.2 +** Controls: KV, MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1a 0d 00 0a 0b 06 46 63 04 1b 1f 08 00 0d 0c 05 04 5e 0a 0b 1f 1f 00 0d 0f +0d 06 52 04 1b 1f 1f 00 0d 0f 00 44 57 04 03 25 23 35 00 10 46 18 0c 04 00 +63 32 32 00 00 32 00 50 65 72 63 4c 65 61 64 2e 32 63 63 63 32 32 32 00 00 +00 20 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PercLead.2 +** Controls: KV, MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +1a 0d 00 0a 0b 06 42 63 04 1b 1f 08 00 0d 0c 05 00 5e 0a 0b 1f 1f 00 0d 0f +0d 00 52 04 1b 1f 1f 00 0d 0f 00 40 57 04 03 25 23 35 00 10 46 18 0c 04 00 +63 32 32 00 00 32 00 50 65 72 63 4c 65 61 64 2e 32 63 63 63 32 32 32 00 00 +00 20 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PhasedGuit +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1a 0e 0e 0f 0f 00 03 42 2d 06 16 0f 04 0f 0f 20 03 60 00 00 1c 12 06 0c 0e +14 03 5a 00 08 1f 13 07 08 0e 06 04 62 04 0e 3b 1d 00 00 00 42 18 02 04 00 +63 32 00 32 00 32 00 50 68 61 73 65 64 47 75 69 74 63 63 63 32 32 32 10 30 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Piknylon * +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1a 1e 1f 07 00 00 03 5a 28 03 1d 08 1f 05 0a 21 02 43 0a 08 1d 0d 08 02 0c +18 02 53 0a 15 1d 0a 0c 05 0a 00 03 63 04 04 02 1e 0a 09 00 32 18 02 04 00 +28 63 00 00 00 32 00 50 69 6b 6e 79 6c 6f 6e 20 2a 63 63 63 32 32 32 0a 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Power Lead +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 07 00 01 00 2e 03 5c 08 13 1f 0c 06 09 0f 4b 06 4d 00 13 1f 0d 03 09 04 +46 05 51 1c 0b 1f 12 06 09 0e 0e 05 63 04 0b 2a 23 00 00 00 02 0c 02 04 00 +28 02 00 00 00 32 00 50 6f 77 65 72 20 4c 65 61 64 63 63 63 32 32 32 00 00 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Power Lead +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 07 00 01 00 2e 01 5c 08 13 1f 0c 06 09 0f 4b 01 4d 00 13 1f 0d 03 09 04 +46 01 51 1c 0b 1f 12 06 09 0e 0e 00 63 04 0b 2a 23 00 00 00 02 0c 02 04 00 +28 02 00 00 00 32 00 50 6f 77 65 72 20 4c 65 61 64 63 63 63 32 32 32 00 00 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PowerChord +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1a 08 00 03 07 20 01 52 00 06 1c 03 00 02 0a 1b 01 4c 00 02 15 05 04 03 0a +1b 00 46 0a 05 17 0f 00 08 0f 00 40 50 04 03 3a 1e 16 02 32 46 18 07 04 00 +63 32 00 00 00 32 00 50 6f 77 65 72 43 68 6f 72 64 63 63 63 32 32 32 00 00 +00 50 00 50 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: RecLead +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +13 1f 00 06 0f 5c 01 48 0d 03 16 02 06 03 0d 00 01 5c 0d 06 15 09 09 0c 0d +00 05 63 0d 0b 12 09 09 08 0d 00 05 5f 0d 0b 0c 00 02 00 00 22 00 02 04 00 +28 02 00 00 00 32 00 52 65 63 4c 65 61 64 20 20 20 63 63 63 32 32 32 00 00 +00 20 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: RecLead +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +13 1f 00 06 0f 5c 01 48 0d 03 16 02 06 03 0d 00 01 5c 0d 06 15 09 09 0c 0d +00 00 63 0d 0b 12 09 09 08 0d 00 00 5f 0d 0b 0c 00 02 00 00 22 00 02 04 00 +28 02 00 00 00 32 00 52 65 63 4c 65 61 64 20 20 20 63 63 63 32 32 32 00 00 +00 20 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rock Guit1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 09 03 0d 0e 63 02 54 04 0e 1c 0a 02 0c 0b 00 03 41 1c 1c 1c 07 01 07 0e +00 05 5d 04 1b 1c 05 02 0a 0b 0a 05 5c 04 0d 03 23 20 00 00 32 00 04 04 00 +63 32 00 00 00 32 00 52 6f 63 6b 20 47 75 69 74 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rock Guit1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 09 03 0d 0e 63 01 54 04 0e 1c 0a 02 0c 0b 00 01 41 1c 1c 1c 07 01 07 0e +00 01 5d 04 1b 1c 05 02 0a 0b 0a 00 5c 04 0d 03 23 20 00 00 32 00 04 04 00 +63 32 00 00 00 32 00 52 6f 63 6b 20 47 75 69 74 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rock Guit2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 03 00 0a 0e 13 02 41 04 03 12 1f 00 0a 0f 00 03 46 08 02 12 1f 00 0a 0f +45 05 60 08 03 12 1f 00 0a 0f 01 05 60 08 03 1b 23 01 0a 00 62 0c 02 04 00 +63 32 00 00 00 32 00 52 6f 63 6b 20 47 75 69 74 32 63 63 63 32 32 32 00 10 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rock Guit2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 03 00 0a 0e 13 02 41 04 03 12 1f 00 0a 0f 00 01 46 08 02 12 1f 00 0a 0f +45 01 60 08 03 12 1f 00 0a 0f 01 00 60 08 03 1b 23 01 0a 00 62 0c 02 04 00 +63 32 00 00 00 32 00 52 6f 63 6b 20 47 75 69 74 32 63 63 63 32 32 32 00 10 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rock Guit3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 0f 01 0c 0e 07 03 4e 00 1e 1c 1f 06 0f 0f 00 04 54 04 0c 1c 09 03 0f 0f +00 06 4e 04 03 1c 07 07 09 0b 0a 05 56 04 0d 29 23 20 00 00 32 18 04 04 00 +63 32 00 00 00 32 00 52 6f 63 6b 20 47 75 69 74 33 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rock Guit3 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 0f 01 0c 0e 07 01 4e 00 1e 1c 1f 06 0f 0f 00 01 54 04 0c 1c 09 03 0f 0f +00 01 4e 04 03 1c 07 07 09 0b 0a 00 56 04 0d 29 23 20 00 00 32 18 04 04 00 +63 32 00 00 00 32 00 52 6f 63 6b 20 47 75 69 74 33 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rock Guit4 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 0f 0a 0c 0e 00 03 41 1c 16 1c 1f 06 0f 0f 00 04 5b 00 0c 1c 09 03 0f 0f +00 05 4e 04 03 1c 07 07 09 0b 0a 05 60 04 0d 2c 23 20 00 00 32 18 04 04 00 +63 32 00 00 00 32 00 52 6f 63 6b 20 47 75 69 74 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rock Guit4 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 0f 0a 0c 0e 00 01 41 1c 16 1c 1f 06 0f 0f 00 01 5b 00 0c 1c 09 03 0f 0f +00 00 4e 04 03 1c 07 07 09 0b 0a 00 60 04 0d 2c 23 20 00 00 32 18 04 04 00 +63 32 00 00 00 32 00 52 6f 63 6b 20 47 75 69 74 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rock Guit5 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 0f 06 07 0c 00 03 57 04 13 1c 1f 06 0f 0f 00 03 55 08 0c 1c 09 07 07 0c +00 05 5f 0a 0a 1c 07 07 09 0b 0a 05 5f 04 0d 2c 23 20 00 00 32 18 04 04 00 +63 32 00 00 00 32 00 52 6f 63 6b 20 47 75 69 74 35 63 63 63 32 32 32 00 20 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rock Guit5 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +15 0f 06 07 0c 00 01 57 04 13 1c 1f 06 0f 0f 00 01 55 08 0c 1c 09 07 07 0c +00 00 5f 0a 0a 1c 07 07 09 0b 0a 00 5f 04 0d 2c 23 20 00 00 32 18 04 04 00 +63 32 00 00 00 32 00 52 6f 63 6b 20 47 75 69 74 35 63 63 63 32 32 32 00 20 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rock Guit6 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 1f 04 07 0f 00 02 50 04 13 10 15 04 0f 0d 00 03 56 00 0c 10 1f 04 07 0f +00 05 63 0a 0a 18 04 03 09 0b 0a 05 63 04 15 24 23 20 00 00 32 18 04 04 00 +63 32 00 00 00 32 00 52 6f 63 6b 20 47 75 69 74 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rock Guit6 +** Source: from a library of patches collected by Duane Bowker, author unknown +10 1f 04 07 0f 00 00 50 04 13 10 15 04 0f 0d 00 00 56 00 0c 10 1f 04 07 0f +00 00 63 0a 0a 18 04 03 09 0b 0a 00 63 04 15 24 23 20 00 00 32 18 04 04 00 +63 32 00 00 00 32 00 52 6f 63 6b 20 47 75 69 74 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: StadiumSol +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank C, voice 17 +1f 08 00 03 0f 20 01 4e 00 06 1f 03 00 02 0f 1b 01 48 0d 02 1f 05 04 03 0f +1b 00 3c 2a 05 1e 0f 00 09 0f 00 00 5c 04 03 3a 1f 16 05 00 62 18 07 0c 00 +63 32 00 00 00 32 00 53 74 61 64 69 75 6d 53 6f 6c 63 63 63 32 32 32 00 00 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Solo 1 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank A, voice 23 +17 0f 00 0a 0c 00 00 35 0a 06 18 0e 00 0a 0c 00 00 3f 04 06 16 00 00 0a 0f +05 00 53 04 06 18 05 01 0a 0a 00 04 5c 04 00 3b 20 14 0a 00 42 0c 02 04 00 +28 46 00 00 00 32 00 53 79 2e 53 6f 6c 6f 20 20 31 63 63 63 32 32 32 00 60 +00 30 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Solo 1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +17 0f 00 0a 0c 00 00 35 0d 06 18 0e 00 0a 0c 00 00 3f 04 06 16 00 00 0a 0f +05 00 53 04 06 18 05 01 0a 0d 00 04 5c 04 00 3b 20 14 0a 00 42 0c 02 04 00 +28 46 00 00 00 32 00 53 79 2e 53 6f 6c 6f 20 20 31 63 63 63 32 32 32 00 60 +00 30 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Solo 2 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank A, voice 24 +1f 19 00 08 0b 00 00 49 04 06 1b 0a 00 0c 0c 00 02 63 08 00 1b 04 00 0c 0a +00 02 63 04 06 1f 04 00 0c 0e 00 02 63 04 06 3d 26 28 14 00 42 18 02 04 00 +28 4b 00 00 00 32 00 53 79 2e 53 6f 6c 6f 20 20 32 63 63 63 32 32 32 00 20 +00 50 00 40 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Solo 2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 19 00 08 0b 00 00 49 04 06 1b 0a 00 0c 0c 00 02 63 08 00 1b 04 00 0c 0d +00 02 63 04 06 1f 04 00 0c 0e 00 02 63 04 06 3d 26 28 14 00 42 18 02 04 00 +28 4b 00 00 00 32 00 53 79 2e 53 6f 6c 6f 20 20 32 63 63 63 32 32 32 00 20 +00 50 00 40 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Solo 3 +** Controls: KV +** Source: Yamaha DX11 factory preset, bank A, voice 25 +1f 0a 00 04 0a 07 01 4f 04 0b 1f 0a 00 07 0b 00 00 2d 04 0b 1f 0b 00 05 0b +00 00 4d 04 0b 16 1f 00 0a 0f 00 01 61 04 0b 3a 20 00 00 00 62 18 02 04 00 +28 32 00 00 00 32 00 53 79 2e 53 6f 6c 6f 20 20 33 63 63 63 32 32 32 00 30 +00 30 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Solo 3 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0a 00 04 0d 07 01 4f 04 0b 1f 0d 00 07 0b 00 00 2d 04 0b 1f 0b 00 05 0b +00 00 4d 04 0b 16 1f 00 0a 0f 00 01 61 04 0b 3a 20 00 00 00 62 18 02 04 00 +28 32 00 00 00 32 00 53 79 2e 53 6f 6c 6f 20 20 33 63 63 63 32 32 32 00 30 +00 30 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Solo 4 +** Controls: KV +** Source: Yamaha DX11 factory preset, bank A, voice 26 +1f 0a 00 04 0a 07 01 4d 08 0b 1f 0a 00 07 0b 00 00 35 08 0b 1f 0b 00 05 0b +00 00 45 04 0b 17 1f 00 0a 0f 00 01 61 04 0b 3a 20 00 00 00 62 18 02 04 00 +28 32 00 00 00 32 00 53 79 2e 53 6f 6c 6f 20 20 34 63 63 63 32 32 32 00 30 +00 30 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Solo 4 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0a 00 04 0d 07 01 4d 08 0b 1f 0d 00 07 0b 00 00 35 08 0b 1f 0b 00 05 0b +00 00 45 04 0b 17 1f 00 0a 0f 00 01 61 04 0b 3a 20 00 00 00 62 18 02 04 00 +28 32 00 00 00 32 00 53 79 2e 53 6f 6c 6f 20 20 34 63 63 63 32 32 32 00 30 +00 30 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sync Lead +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank C, voice 22 +13 12 00 09 0d 22 00 51 00 0b 1f 14 00 05 08 24 40 5c 00 03 1f 11 00 06 0c +2c 00 53 09 00 10 1f 00 0b 0f 00 00 5c 0a 0e 3a 22 11 0e 1e 5e 18 07 04 00 +63 32 00 32 00 32 00 53 79 6e 63 20 4c 65 61 64 20 63 63 63 32 32 32 00 70 +00 40 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: TwangGuitr +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1a 00 03 01 00 04 52 2f 16 1f 05 00 08 00 00 02 50 04 10 1f 0f 06 09 0a +00 02 3e 35 10 1f 09 07 09 0d 00 05 63 10 0b 32 1e 09 02 00 52 0c 04 04 00 +63 19 00 10 00 32 00 54 77 61 6e 67 47 75 69 74 72 63 63 63 32 32 32 10 54 +15 50 10 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: TwelveStrg +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank C, voice 3 +1f 0d 08 0a 08 00 03 42 24 06 1f 1f 05 0b 0b 36 03 63 07 0e 1f 0f 06 0b 0f +13 03 63 00 10 1f 13 07 09 0e 00 04 63 04 0e 3b 14 00 00 00 42 18 02 04 00 +63 32 00 32 00 32 00 54 77 65 6c 76 65 53 74 72 67 63 63 63 32 32 32 00 00 +00 37 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: slowtacky +** Description: a biting electric guitar sound +** Controls: KV +** Source: GLIB (Michael Kesti and others) +1f 0a 06 0b 02 00 05 5f 08 02 1f 02 03 0b 0e 43 05 5f 00 10 1f 12 06 08 0e +00 05 5f 00 00 16 04 08 08 0c 00 05 5f 04 03 33 14 00 00 00 62 18 01 04 00 +63 32 00 32 00 32 00 73 6c 6f 77 74 61 63 6b 79 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: slowtacky+ +** Description: 'slowtacky' (from GLIB) with added sustain +** Controls: KV +** Source: Art Hitzeman, based on a voice from GLIB (Michael Kesti and others) +1f 0a 06 07 02 00 05 5f 08 02 1f 02 03 07 0e 43 05 5f 00 10 1f 12 06 07 0e +00 05 5f 00 00 16 04 08 06 0c 00 05 5f 04 03 33 14 00 00 00 62 18 01 04 00 +63 32 00 32 00 32 00 73 6c 6f 77 74 61 63 6b 79 2b 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + +--Bank 9 + +* SUBCATEGORY Harp + + +** Name: Dbl Harp.1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 0f 09 04 0b 27 04 5f 0a 04 1c 0f 02 01 00 2d 04 5a 08 02 1c 0a 09 06 0a +1d 04 63 04 01 11 1f 04 03 0c 00 05 63 04 1d 6c 22 21 00 00 12 18 02 04 00 +63 32 00 00 01 32 00 44 62 6c 20 48 61 72 70 2e 31 63 63 63 32 32 32 00 20 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Dbl Harp.1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 0f 09 04 0b 27 01 5f 0a 04 1c 0f 02 01 00 2d 01 5a 08 02 1c 0a 09 06 0a +1d 00 63 04 01 11 1f 04 03 0c 00 01 63 04 1d 6c 22 21 00 00 12 18 02 04 00 +63 32 00 00 01 32 00 44 62 6c 20 48 61 72 70 2e 31 63 63 63 32 32 32 00 20 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Dbl Harp.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 1b 07 06 00 63 05 5d 13 0c 1f 12 0c 04 0f 5a 04 53 0d 0a 1c 0a 07 05 00 +00 04 4c 08 01 18 12 09 05 0f 00 05 5d 04 0d 38 1b 29 01 00 32 18 02 04 00 +63 32 00 00 01 32 00 44 62 6c 20 48 61 72 70 2e 32 63 63 63 32 32 32 00 10 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Dbl Harp.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 1b 07 06 00 63 01 5d 13 0c 1f 12 0c 04 0f 5a 01 53 0d 0a 1c 0a 07 05 00 +00 00 4c 08 01 13 12 09 05 0f 00 00 5d 04 0d 38 1b 29 01 00 32 18 02 04 00 +63 32 00 00 01 32 00 44 62 6c 20 48 61 72 70 2e 32 63 63 63 32 32 32 00 10 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harp * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 09 00 01 00 07 02 50 08 0e 1f 12 00 05 00 00 03 4d 0a 10 1e 08 00 04 00 +0b 03 63 04 10 1b 08 00 04 00 10 03 63 04 16 34 23 00 00 00 32 18 02 04 00 +28 62 00 00 00 32 00 48 61 72 70 20 20 20 20 20 2a 63 63 63 32 32 32 00 30 +00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harp +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank B, voice 24 +10 13 0f 04 0a 00 03 3b 14 14 1f 0e 08 07 09 00 02 42 05 0e 18 13 0d 09 0c +00 02 3c 13 08 1f 11 07 04 0f 00 42 63 04 10 3a 1b 00 00 00 52 1d 04 04 00 +63 32 00 00 00 32 00 48 61 72 70 20 20 20 20 20 20 63 63 63 32 32 32 08 00 +00 21 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harp 1 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank B, voice 13 +17 0e 0a 03 0e 00 04 56 04 08 17 0e 0a 03 0e 00 04 56 04 0e 1f 0c 07 05 0e +00 03 63 04 08 1f 0c 07 05 0e 00 03 63 04 0e 04 1b 15 0a 01 32 18 02 04 00 +63 63 00 00 00 32 00 48 61 72 70 20 20 20 20 20 31 63 63 63 32 32 32 00 30 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harp 1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +17 0e 0a 03 0e 00 04 56 04 08 17 0e 0a 03 0e 00 04 56 04 0e 1f 0c 07 05 0e +00 03 63 04 08 1f 0c 07 05 0e 00 03 63 04 0e 04 1b 15 0d 01 32 18 02 04 00 +63 63 00 00 00 32 00 48 61 72 70 20 20 20 20 20 31 63 63 63 32 32 32 00 30 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harp 2 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank B, voice 14 +17 0b 0b 01 06 0a 42 3b 04 00 1c 13 00 01 00 0a 41 49 08 06 1f 13 00 01 00 +00 42 43 16 06 19 0f 0b 05 0e 00 43 63 04 08 3a 14 00 06 08 4a 18 02 04 00 +28 55 00 00 00 32 00 48 61 72 70 20 20 20 20 20 32 63 63 63 32 32 32 00 00 +00 20 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harp.....1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +07 05 0a 07 0e 00 02 56 13 0c 1f 09 05 03 00 52 02 53 08 0b 1f 13 07 06 00 +36 05 4b 10 03 19 07 00 04 00 1d 04 5c 04 0e 3b 1b 00 02 00 32 18 02 04 00 +63 32 00 00 01 32 00 48 61 72 70 2e 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 30 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harp.....1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +07 05 0a 07 0e 00 00 56 13 0c 1f 09 05 03 00 52 00 53 08 0b 1f 13 07 06 00 +36 02 4b 10 03 19 07 00 04 00 1d 01 5c 04 0e 3b 1b 00 02 00 32 18 02 04 00 +63 32 00 00 01 32 00 48 61 72 70 2e 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 30 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harp.....2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 0f 09 03 0b 2d 03 53 0a 1c 1c 0d 0d 03 0a 2d 04 4d 04 0a 1c 0a 0a 04 0a +32 04 47 0a 09 1c 09 0d 04 0a 00 04 62 04 0d 58 22 21 00 00 12 18 02 04 00 +63 32 00 00 01 32 00 48 61 72 70 2e 2e 2e 2e 2e 32 63 63 63 32 32 32 00 40 +00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harp.....2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 0f 09 03 0b 2d 00 53 0a 1c 1c 0d 0d 03 0a 2d 01 4d 04 0a 1c 0a 0a 04 0a +32 01 47 0a 09 1c 09 0d 04 0a 00 00 62 04 0d 58 22 21 00 00 12 18 02 04 00 +63 32 00 00 01 32 00 48 61 72 70 2e 2e 2e 2e 2e 32 63 63 63 32 32 32 00 40 +00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harp....FM +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 10 06 06 00 63 01 5a 08 0b 1a 18 06 06 0f 5a 04 5b 04 00 1c 1f 1f 06 0f +00 04 4c 04 0d 13 06 00 06 0f 00 04 63 04 02 25 1b 23 0b 00 42 18 02 04 00 +63 32 00 00 01 32 00 48 61 72 70 2e 2e 2e 2e 46 4d 63 63 63 32 32 32 00 10 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harp....FM +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 10 06 06 00 63 01 5a 08 0b 1a 18 06 06 0f 5a 01 5b 04 00 1c 1f 1f 06 0f +00 00 4c 04 0d 13 06 00 06 0f 00 00 63 04 02 25 1b 23 0b 00 42 18 02 04 00 +63 32 00 00 01 32 00 48 61 72 70 2e 2e 2e 2e 46 4d 63 63 63 32 32 32 00 10 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Koto + + +** Name: Fuzzy Koto +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank D, voice 8 +16 02 00 04 06 09 01 4f 08 00 19 0e 01 04 00 20 01 43 19 00 1f 12 10 06 07 +00 00 54 3d 03 16 0d 06 06 02 1e 03 61 08 0e 3a 20 01 14 00 42 0c 02 04 02 +63 63 63 00 00 32 00 46 75 7a 7a 79 20 4b 6f 74 6f 63 63 63 32 32 32 00 00 +00 00 0b 50 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Koto * +** Controls: KV, MW (LFO pitch), BC (voice pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1d 15 00 05 00 0f 02 56 0d 13 1c 04 03 03 0b 0d 01 4f 04 1e 1c 07 09 05 0d +23 01 53 0d 18 1a 14 08 04 0d 00 03 63 04 10 02 1a 08 1d 00 32 18 02 04 00 +28 63 00 00 00 36 00 4b 6f 74 6f 20 20 20 20 20 2a 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Koto +** Controls: KV +** Source: Yamaha DX11 factory preset, bank B, voice 17 +1f 12 0c 06 0b 1c 03 57 16 0b 1f 1f 08 01 0f 0b 01 47 04 0b 1f 1f 06 04 0f +25 01 4b 0a 0b 19 1f 0a 06 0f 00 02 5a 08 0b 00 1e 00 00 00 62 18 02 04 00 +28 32 00 00 00 32 00 4b 6f 74 6f 20 20 20 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Koto +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 12 0c 06 0b 1c 03 57 16 0b 1f 1f 08 01 0f 0b 01 47 04 0b 1f 1f 06 04 0f +25 01 4b 0a 0b 19 1f 0a 06 0f 00 02 5a 08 0b 00 1e 00 00 00 62 18 02 04 00 +28 32 00 00 00 32 00 4b 6f 74 6f 20 20 20 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Koto.....1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0a 09 07 0c 11 02 52 0d 16 1b 1f 1d 05 0d 00 02 63 04 10 1c 0d 05 05 0c +19 05 63 04 16 1f 11 08 05 0f 00 46 5a 00 10 1c 1f 00 00 00 62 18 02 04 00 +63 32 00 32 00 32 00 4b 6f 74 6f 2e 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Koto.....1 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0a 09 07 0c 11 00 52 0d 16 1b 1f 1d 05 0d 00 00 63 04 10 1c 0d 05 05 0c +19 00 63 04 16 1f 11 08 05 0f 00 40 5a 00 10 1c 1f 00 00 00 62 18 02 04 00 +63 32 00 32 00 32 00 4b 6f 74 6f 2e 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Koto.....2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0a 09 07 0c 11 41 47 0d 13 1b 1f 1d 05 0d 00 43 63 0a 13 1c 0d 05 05 0c +19 45 63 04 13 1f 11 08 05 0f 00 45 5a 04 13 5c 1e 00 11 14 26 18 02 04 00 +63 32 00 32 00 32 00 4b 6f 74 6f 2e 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Koto.....2 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0a 09 07 0c 11 40 47 0d 13 1b 1f 1d 05 0d 00 40 63 0a 13 1c 0d 05 05 0c +19 40 63 04 13 1f 11 08 05 0f 00 40 5a 04 13 5c 1e 00 11 14 26 18 02 04 00 +63 32 00 32 00 32 00 4b 6f 74 6f 2e 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Koto.....3 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0a 09 07 0c 11 42 47 0d 13 1f 0a 09 07 0c 11 43 4a 0d 13 1c 0d 05 05 0c +19 45 63 04 13 1c 0d 05 05 0c 19 47 5a 04 13 5c 1e 00 11 14 26 18 02 04 00 +63 32 00 32 00 32 00 4b 6f 74 6f 2e 2e 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Koto.....3 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0a 09 07 0c 11 40 47 0d 13 1f 0a 09 07 0c 11 40 4a 0d 13 1c 0d 05 05 0c +19 40 63 04 13 1c 0d 05 05 0c 19 40 5a 04 13 5c 1e 00 11 14 26 18 02 04 00 +63 32 00 32 00 32 00 4b 6f 74 6f 2e 2e 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Lute + + +** Name: OrntLute.1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 07 04 05 08 00 04 52 08 0b 0c 07 1f 04 07 00 42 3e 00 0c 19 07 1f 04 07 +00 04 63 04 0c 18 07 09 05 0e 00 45 63 04 0b 74 34 00 00 0a 06 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 4c 75 74 65 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntLute.1 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 07 04 05 08 00 00 52 08 0b 0c 07 1f 04 07 00 40 3e 00 0c 19 07 1f 04 07 +00 00 63 04 0c 18 07 09 05 0e 00 40 63 04 0b 74 34 00 00 0a 06 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 4c 75 74 65 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntLute.2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 03 00 05 0f 00 42 59 00 0b 1f 0c 1f 05 08 00 43 46 00 0a 0c 0c 1f 04 07 +00 44 63 00 0c 15 0c 09 05 0c 00 46 61 04 0b 6c 34 00 00 0a 06 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 4c 75 74 65 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntLute.2 +** Source: from a library of patches collected by Duane Bowker, author unknown +18 03 00 05 0f 00 40 59 00 0b 1f 0c 1f 05 08 00 40 46 00 0a 0c 0c 1f 04 07 +00 40 63 00 0c 15 0c 09 05 0c 00 40 61 04 0b 6c 34 00 00 0a 06 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 4c 75 74 65 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Mandolin + + +** Name: Mandolin.1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 19 0d 05 0c 02 04 62 2d 1b 1f 09 06 02 0b 00 04 45 0a 0b 17 0c 09 07 00 +00 06 63 04 0a 16 0c 09 07 0b 00 05 63 04 1c 74 2c 63 04 00 22 18 02 04 00 +63 32 00 32 00 32 00 4d 61 6e 64 6f 6c 69 6e 2e 31 63 63 63 32 32 32 00 00 +00 30 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Mandolin.1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 19 0d 05 0c 02 02 62 2d 1b 1f 09 06 02 0b 00 02 45 0a 0b 17 0c 09 07 00 +00 00 63 04 0a 16 0c 09 07 0b 00 00 63 04 1c 74 2c 63 04 00 22 18 02 04 00 +63 32 00 32 00 32 00 4d 61 6e 64 6f 6c 69 6e 2e 31 63 63 63 32 32 32 00 00 +00 30 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Mandolin.2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 18 0d 05 0c 02 02 3f 2d 1b 1f 0c 06 04 0b 00 05 37 0a 0b 1f 0d 07 05 0f +00 05 5f 04 0a 16 0c 09 05 0b 00 05 5e 04 1c 3c 46 10 01 00 20 18 02 04 00 +63 32 00 32 00 32 00 4d 61 6e 64 6f 6c 69 6e 2e 32 63 63 63 32 32 32 00 40 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Mandolin.2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 18 0d 05 0c 02 01 3f 2d 1b 1f 0c 06 04 0b 00 01 37 0a 0b 1f 0d 07 05 0f +00 00 5f 04 0a 16 0c 09 05 0b 00 00 5e 04 1c 3c 46 10 01 00 20 18 02 04 00 +63 32 00 32 00 32 00 4d 61 6e 64 6f 6c 69 6e 2e 32 63 63 63 32 32 32 00 40 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Sitar + + +** Name: Sitar * +** Controls: KV, BC (voice pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 0f 0f 00 00 00 04 03 1e 0c 0b 01 0f 00 02 55 16 09 11 15 00 02 0f +00 03 5b 04 08 1f 18 06 04 0f 00 01 63 04 0b 03 1d 00 00 00 62 18 01 04 00 +28 0d 00 00 00 33 00 53 69 74 61 72 20 20 20 20 2a 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sitar +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank C, voice 29 +17 0e 09 01 0e 02 00 47 04 1b 1f 06 03 01 05 00 00 4b 08 16 1f 06 04 01 07 +00 00 5e 04 16 1f 05 08 01 07 00 01 5f 08 18 3b 21 00 05 00 42 18 02 04 00 +63 32 00 32 00 32 00 53 69 74 61 72 20 20 20 20 20 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sitar....1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 07 06 01 0d 52 03 51 16 0a 1f 0c 09 01 0e 27 02 58 04 0b 1f 06 06 04 0e +11 06 5b 04 13 1f 18 09 04 0e 00 05 49 37 0b 04 1c 00 00 00 22 18 01 04 00 +63 00 63 00 00 32 00 53 69 74 61 72 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sitar....1 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 07 06 01 0d 52 00 51 16 0a 1f 0c 09 01 0e 27 00 58 04 0b 1f 06 06 04 0e +11 00 5b 04 13 1f 18 09 04 0e 00 00 49 37 0b 04 1c 00 00 00 22 18 01 04 00 +63 00 63 00 00 32 00 53 69 74 61 72 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sitar....2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +17 0e 09 04 0e 02 01 43 13 13 1f 06 03 03 05 00 02 3b 1c 16 1f 06 04 02 07 +00 05 52 04 16 1f 05 08 01 07 00 05 60 00 18 13 21 00 05 00 42 18 02 04 00 +63 32 00 32 00 32 00 53 69 74 61 72 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sitar....2 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +17 0e 09 04 0e 02 00 43 13 13 1f 06 03 03 05 00 00 3b 1c 16 1f 06 04 02 07 +00 00 52 04 16 1f 05 08 01 07 00 00 60 00 18 13 21 00 05 00 42 18 02 04 00 +63 32 00 32 00 32 00 53 69 74 61 72 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sitar....3 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1d 12 07 02 05 02 02 43 19 0c 1b 1c 0a 04 08 00 02 5b 1c 02 0f 0c 0a 02 0e +00 05 52 13 1c 1f 12 06 05 0f 00 05 60 00 0b 5a 2c 63 04 00 22 18 02 04 00 +63 32 00 32 00 32 00 53 69 74 61 72 2e 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sitar....3 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 12 07 02 05 02 00 43 19 0c 1b 1c 0a 04 08 00 00 5b 1c 02 0f 0c 0a 02 0e +00 00 52 13 1c 1f 12 06 05 0f 00 00 60 00 0b 5a 2c 63 04 00 22 18 02 04 00 +63 32 00 32 00 32 00 53 69 74 61 72 2e 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sitar.Vib +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1d 12 07 04 04 02 03 43 13 0b 1b 1d 09 03 09 00 02 3b 1c 06 0f 0c 09 05 0c +00 05 52 04 1e 1f 12 05 05 0f 00 07 60 00 00 13 21 00 05 00 42 18 02 04 00 +63 32 00 32 00 32 00 53 69 74 61 72 2e 56 69 62 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sitar.Vib +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 12 07 04 04 02 00 43 13 0b 1b 1d 09 03 09 00 00 3b 1c 06 0f 0c 09 05 0c +00 00 52 04 1e 1f 12 05 05 0f 00 00 60 00 00 13 21 00 05 00 42 18 02 04 00 +63 32 00 32 00 32 00 53 69 74 61 72 2e 56 69 62 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Sitar +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank A, voice 31 +1e 12 1f 03 09 00 00 41 3c 03 1d 0f 02 01 0f 00 00 5b 00 03 1e 0f 1f 02 0f +3b 01 57 02 03 1e 1f 0c 04 0f 00 02 5d 10 03 3a 17 00 03 00 5a 18 02 04 00 +63 32 00 00 00 32 00 53 79 2e 53 69 74 61 72 20 20 63 63 63 32 32 32 00 10 +00 00 00 76 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Viola + + +** Name: Viola 5th +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +19 06 00 06 0f 0a 01 4c 0a 15 0f 07 00 06 0e 32 04 4e 08 0b 0b 07 06 07 0f +0a 06 57 13 0c 0d 06 06 08 0d 00 03 5f 08 03 74 22 23 0b 00 12 18 04 04 00 +63 32 63 00 00 32 00 56 69 6f 6c 61 20 35 74 68 20 63 63 63 32 32 32 00 40 +00 20 00 20 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Viola 5th +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 06 00 06 0f 0a 01 54 0a 15 10 07 00 06 0e 32 01 4e 0d 0b 0a 07 06 07 0f +0a 00 60 0a 0c 0d 06 06 08 0d 00 00 5f 04 03 74 22 23 0b 00 12 18 04 04 00 +63 32 63 00 00 32 00 56 69 6f 6c 61 20 35 74 68 20 63 63 63 32 32 32 00 00 +00 10 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Viola....1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 06 03 08 0e 00 41 4c 08 0d 1b 0d 07 07 0d 0a 44 43 19 04 0d 06 01 07 0f +00 45 60 08 03 0f 06 09 09 0d 00 45 60 08 04 7c 20 38 32 00 26 0c 04 04 00 +63 32 63 00 00 32 00 56 69 6f 6c 61 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 40 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Viola....1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0d 06 03 08 0e 00 41 4c 08 0d 1f 0d 07 07 0d 0a 41 43 19 04 0d 06 01 07 0f +00 40 60 08 03 0d 06 09 09 0d 00 41 60 13 04 7c 20 38 0e 00 26 0c 04 04 00 +63 32 63 00 00 32 00 56 69 6f 6c 61 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Viola....2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 04 06 07 0d 00 42 4e 04 03 0e 09 0d 07 03 0a 45 4f 08 14 0c 07 05 06 04 +00 46 5c 04 03 0d 06 06 05 0d 00 43 63 04 04 35 1e 2e 26 00 36 0c 04 04 00 +63 32 63 00 00 32 00 56 69 6f 6c 61 2e 2e 2e 2e 32 63 63 63 32 32 32 00 10 +00 10 00 40 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Viola....2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 04 06 07 0d 00 42 53 04 03 0e 09 0d 07 03 0a 41 4f 0d 14 0f 15 07 06 0d +00 40 63 04 03 0f 06 06 05 0d 00 41 63 04 04 34 1c 2e 1e 00 36 0c 04 04 00 +63 32 63 00 00 32 00 56 69 6f 6c 61 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 10 00 10 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ViolaSynth +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 06 02 07 0f 00 03 4a 04 0b 0f 07 09 07 07 00 03 63 00 03 0e 09 10 0d 07 +00 06 5c 04 03 0f 07 09 07 07 00 05 63 04 03 7d 23 0f 0b 00 42 18 02 04 00 +63 63 00 00 00 32 00 56 69 6f 6c 61 53 79 6e 74 68 63 63 63 32 32 32 00 00 +00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ViolaSynth +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 06 02 07 0f 00 01 4a 04 0b 0f 07 09 07 07 00 00 63 00 03 0e 09 10 0d 07 +00 00 5c 04 03 0f 07 09 07 07 00 00 63 04 03 7d 23 0f 0b 00 42 18 02 04 00 +63 63 00 00 00 32 00 56 69 6f 6c 61 53 79 6e 74 68 63 63 63 32 32 32 00 00 +00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +--Bank 10 + +* SUBCATEGORY Violin + + +** Name: SoloViolin +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank B, voice 20 +1b 05 00 07 0e 0c 01 4e 08 04 19 0b 06 06 0f 49 02 3b 0d 03 1c 11 10 0d 07 +00 03 4b 35 03 0b 0a 00 06 0f 02 02 63 08 13 3a 1e 06 06 00 52 0c 04 04 00 +63 32 00 00 00 32 00 53 6f 6c 6f 56 69 6f 6c 69 6e 63 63 63 32 32 32 00 00 +00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sradiv. * +** Controls: KV, MW (LFO pitch), BC (voice pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0d 0f 09 0f 2a 05 31 20 05 12 09 02 06 0f 10 00 51 08 0b 1f 0e 07 03 0a +14 02 4d 19 08 0e 05 05 09 0e 00 06 63 08 0a 00 20 00 0e 00 42 0c 02 04 00 +28 63 00 00 00 31 00 53 72 61 64 69 76 2e 20 20 2a 63 63 63 32 32 32 0c 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin 1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: Yamaha DX11 factory preset, bank C, voice 5 +16 07 00 06 0e 00 41 4e 04 0b 15 08 00 03 0b 00 02 3a 04 0b 19 08 00 08 0c +10 05 5f 0a 14 0e 0e 00 08 0a 00 02 60 08 0b 3a 20 0a 08 00 62 18 02 05 00 +63 0a 50 32 00 32 00 56 69 6f 6c 69 6e 20 20 20 31 63 62 63 30 32 32 00 00 +00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin 1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +16 07 00 06 0e 00 41 4e 04 0b 15 08 00 03 0b 00 02 3a 04 0b 19 08 00 08 0c +10 05 5f 0a 14 0e 0e 00 08 0d 00 02 60 08 0b 3a 20 0a 08 00 62 18 02 05 00 +63 0a 50 32 00 32 00 56 69 6f 6c 69 6e 20 20 20 31 63 62 63 30 32 32 00 00 +00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin 2 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank C, voice 6 +1f 02 00 04 0e 0f 00 45 04 0b 0f 0a 00 04 0a 00 02 62 04 0b 0a 04 00 07 0f +09 02 5c 08 0b 0c 09 00 08 0a 08 02 58 0a 0b 3c 1f 13 3d 00 42 18 02 04 00 +63 32 00 00 00 32 00 56 69 6f 6c 69 6e 20 20 20 32 63 54 63 2e 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin 2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 02 00 04 0e 0f 00 45 04 0b 0f 0a 00 04 0d 00 02 62 04 0b 0d 04 00 07 0f +09 02 5c 08 0b 0c 09 00 08 0d 08 02 58 0d 0b 3c 1f 13 3d 00 42 18 02 04 00 +63 32 00 00 00 32 00 56 69 6f 6c 69 6e 20 20 20 32 63 54 63 2e 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin...1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0b 06 03 02 0f 0a 42 4e 04 10 0c 00 00 07 0e 00 7c 4b 04 04 0b 03 06 05 0e +0a 45 61 04 0d 0c 00 00 07 0e 00 7f 63 04 06 6c 1e 14 18 00 36 18 04 04 00 +63 32 63 00 00 32 00 56 69 6f 6c 69 6e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 30 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin...1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +12 06 03 02 0f 0a 40 4c 04 16 15 00 00 06 0f 0a 43 55 04 05 0e 05 06 05 0e +0a 40 63 04 0b 0f 00 00 06 0e 00 40 63 08 03 6c 1c 00 18 00 36 18 04 04 00 +63 32 63 00 00 32 00 56 69 6f 6c 69 6e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin...2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 03 00 03 0e 00 28 50 04 05 0b 0d 00 03 0e 00 3d 49 0a 14 0a 08 03 07 0f +13 34 63 04 0b 0a 0c 03 06 0f 13 3f 63 04 09 24 1c 15 0e 00 42 18 02 04 00 +63 15 27 00 00 32 00 56 69 6f 6c 69 6e 2e 2e 2e 32 63 63 63 32 32 32 00 20 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin...2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 05 00 03 0e 00 00 50 08 06 0f 02 00 03 0e 00 01 3b 19 14 0c 04 03 07 0f +13 01 63 08 08 0a 01 03 06 0f 13 01 63 00 0b 2c 25 2c 0e 00 22 0c 02 04 00 +63 15 27 00 00 32 00 56 69 6f 6c 69 6e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 20 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin...3 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0e 06 07 01 0a 14 01 4e 04 15 0d 08 05 02 08 14 07 44 04 1c 0b 08 08 04 06 +0a 03 60 08 0a 0c 03 03 04 0f 0a 05 63 04 0b 6c 1f 1c 13 12 42 18 06 04 00 +63 32 00 32 00 32 00 56 69 6f 6c 69 6e 2e 2e 2e 33 63 63 63 32 32 32 00 20 +00 20 00 10 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin...3 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 04 02 01 0e 14 02 5c 08 05 1f 0f 08 02 0d 14 01 42 19 04 0d 06 03 02 0d +0a 00 60 08 0a 10 05 03 08 0e 0a 02 63 08 0b 64 23 00 07 00 32 0c 06 04 00 +63 32 00 32 00 32 00 56 69 6f 6c 69 6e 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 50 00 00 00 20 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin...4 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 04 05 06 07 2a 02 58 04 08 0a 04 10 05 0d 14 06 37 08 0d 08 04 09 05 06 +00 07 63 04 13 0a 06 06 07 0e 0a 05 63 04 0a 6c 1f 19 2e 00 32 18 04 04 00 +63 32 00 00 00 32 00 56 69 6f 6c 69 6e 2e 2e 2e 34 63 63 63 32 32 32 00 20 +02 10 00 00 06 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin...4 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +11 00 00 04 0e 2a 01 53 08 08 10 04 10 05 0d 14 01 37 19 0d 0c 07 06 04 0f +00 00 63 08 13 0d 06 06 07 0e 0a 00 63 04 0a 6c 23 00 0b 00 12 0c 06 04 00 +63 32 00 32 00 32 00 56 69 6f 6c 69 6e 2e 2e 2e 34 63 63 63 32 32 32 00 00 +02 10 00 00 06 10 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin...5 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 05 04 06 0f 14 05 50 08 00 11 0c 07 06 0a 14 04 50 08 14 0a 04 04 07 0f +00 04 63 08 14 0c 07 04 07 0f 00 03 63 08 13 6c 22 27 34 32 12 0c 04 04 00 +63 32 00 00 00 32 00 56 69 6f 6c 69 6e 2e 2e 2e 35 63 63 63 32 32 32 00 00 +00 10 00 10 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin...5 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 05 04 06 0f 14 02 53 08 00 1f 0d 07 06 0f 14 02 50 08 14 0c 04 04 07 0f +00 01 63 13 14 0c 04 04 07 0f 00 00 63 13 13 74 24 27 00 00 12 0c 06 04 00 +63 32 63 32 00 32 00 56 69 6f 6c 69 6e 2e 2e 2e 35 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin...6 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 05 04 06 0f 14 04 53 08 00 11 0d 05 06 0f 14 03 53 08 14 0a 0b 04 07 0b +00 04 63 08 12 0a 0a 03 07 0f 00 04 63 08 16 6c 1a 27 19 19 42 0c 06 04 00 +63 32 63 32 00 32 00 56 69 6f 6c 69 6e 2e 2e 2e 36 63 63 63 32 32 32 00 30 +00 20 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin...6 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 05 04 06 0f 14 02 53 08 00 1f 0d 07 06 0f 14 01 53 13 14 0c 04 04 07 0f +00 00 63 13 14 0c 04 04 07 0f 00 00 63 0d 13 74 24 27 00 00 12 0c 06 04 00 +63 32 63 32 00 32 00 56 69 6f 6c 69 6e 2e 2e 2e 36 63 63 63 32 32 32 00 00 +00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin...7 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 00 00 05 0e 2a 01 50 08 0b 0e 04 04 05 08 14 03 55 08 0a 0c 07 06 07 0f +00 04 62 08 0c 0a 08 09 08 0a 0a 04 63 08 04 6c 24 27 00 00 22 0c 06 04 00 +63 32 00 32 00 32 00 56 69 6f 6c 69 6e 2e 2e 2e 37 63 63 63 32 32 32 00 30 +00 30 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin...7 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 00 00 05 0e 2a 01 57 08 0e 1f 0c 05 05 0d 14 01 4b 19 0c 0c 07 06 07 0f +00 00 62 0d 0c 0f 06 06 08 06 0a 00 63 08 03 6c 24 27 00 00 12 0c 06 04 00 +63 32 00 32 00 32 00 56 69 6f 6c 69 6e 2e 2e 2e 37 63 63 63 32 32 32 00 30 +00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin...8 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +14 05 04 06 07 2a 01 52 08 0e 15 07 07 05 05 14 01 51 08 03 0c 06 08 07 0a +0a 00 63 08 0d 0a 05 0a 08 07 0a 01 63 08 02 24 23 27 00 00 12 0c 06 04 00 +63 32 00 32 00 32 00 56 69 6f 6c 69 6e 2e 2e 2e 38 63 63 63 32 32 32 00 20 +00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin...8 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 05 04 06 0f 2a 01 5b 08 0e 1f 0d 10 06 0e 14 01 51 19 03 0c 06 06 08 0e +0a 00 63 0d 0b 0f 05 06 08 0c 0a 01 63 08 02 24 23 27 00 00 12 0c 06 04 00 +63 32 00 32 00 32 00 56 69 6f 6c 69 6e 2e 2e 2e 38 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin...9 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 05 00 06 0f 32 02 57 08 0e 1f 0c 0c 0a 0e 14 03 49 0d 05 0c 06 06 08 0e +0a 00 60 08 04 0c 06 06 08 0e 0a 06 63 08 04 6c 1d 17 40 00 22 0c 06 04 00 +63 32 00 32 00 32 00 56 69 6f 6c 69 6e 2e 2e 2e 39 63 63 63 32 32 32 00 30 +00 20 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin...9 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 05 00 06 0f 32 02 5e 08 0e 1f 0c 0c 0a 0e 14 01 4a 13 05 0c 06 06 08 0e +0a 00 60 08 04 0c 06 06 08 0e 0a 01 5b 19 04 6c 24 27 00 00 22 0c 06 04 00 +63 32 00 32 00 32 00 56 69 6f 6c 69 6e 2e 2e 2e 39 63 63 63 32 32 32 00 30 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin..10 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 03 00 04 0c 2a 01 50 08 0c 11 02 19 05 08 14 01 57 08 0d 0b 09 06 06 0f +00 06 51 08 0b 0b 05 06 08 06 0a 05 61 08 0b 7c 1b 08 1f 00 32 0c 06 04 00 +63 32 00 32 00 32 00 56 69 6f 6c 69 6e 2e 2e 31 30 63 63 63 32 32 32 00 00 +00 30 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin..10 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0a 03 00 04 0c 2a 01 50 08 0c 10 02 19 05 08 14 01 57 08 0d 0a 09 06 06 0f +00 00 5f 08 0b 0e 05 06 08 06 0a 00 61 08 0b 7c 20 08 0c 00 32 0c 06 04 00 +63 32 00 32 00 32 00 56 69 6f 6c 69 6e 2e 2e 31 30 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin..11 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 05 00 03 0e 32 01 4f 08 0d 0e 06 00 05 01 14 06 32 0d 05 0a 06 06 07 0e +00 00 61 08 0a 0b 05 00 08 0d 0a 06 60 08 04 3c 20 2c 05 00 32 0c 06 04 00 +63 32 00 32 00 32 00 56 69 6f 6c 69 6e 2e 2e 31 31 63 63 63 32 32 32 00 00 +00 40 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin..11 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +18 05 00 03 0e 32 01 4f 08 0d 12 06 00 05 01 14 01 3e 0a 05 0a 06 06 07 0e +00 00 61 08 0a 10 07 00 08 0d 0a 00 60 08 04 3c 20 2c 05 00 32 0c 06 04 00 +63 32 00 32 00 32 00 56 69 6f 6c 69 6e 2e 2e 31 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin..12 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +11 05 04 05 0e 32 02 4a 08 0b 16 0a 06 08 0e 0a 02 41 08 03 0a 06 05 09 0e +00 04 63 08 0c 0f 08 02 08 0e 0a 04 63 08 05 6c 21 27 38 02 12 0c 06 04 00 +63 32 00 32 00 32 00 56 69 6f 6c 69 6e 2e 2e 31 32 63 63 63 32 32 32 00 20 +00 50 00 10 00 40 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin..12 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 05 04 05 0e 32 02 52 08 0b 18 0a 06 08 0e 0a 02 4d 08 03 0f 06 05 09 0e +00 00 63 13 0c 10 08 02 08 0e 0a 00 63 08 05 6c 24 27 00 00 12 0c 06 04 00 +63 32 00 32 00 32 00 56 69 6f 6c 69 6e 2e 2e 31 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 20 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin..13 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 06 02 06 0e 0c 02 42 08 0d 16 07 08 06 0f 49 03 4c 08 0d 11 11 0e 06 07 +00 03 3c 19 0b 0b 0d 00 06 0f 02 03 5a 08 11 3a 21 27 07 00 52 0c 02 04 00 +63 63 00 00 00 32 00 56 69 6f 6c 69 6e 2e 2e 31 33 63 63 63 32 32 32 00 00 +00 50 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin..13 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 06 02 06 0e 0c 01 53 08 0c 16 07 08 06 0f 49 01 4c 0d 0b 1a 11 0e 06 07 +00 00 5b 1f 0b 0c 0d 00 06 0f 02 00 5a 08 13 22 21 27 07 00 52 0c 02 04 00 +63 63 00 00 00 32 00 56 69 6f 6c 69 6e 2e 2e 31 33 63 63 63 32 32 32 00 00 +00 50 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin..14 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 06 04 06 0e 01 01 58 08 05 13 0d 10 07 0e 14 01 4d 08 04 0d 06 03 07 0e +0a 04 53 08 0a 0b 05 06 08 0c 0a 05 63 08 03 5c 23 27 05 00 32 0c 06 04 00 +63 32 00 32 00 32 00 56 69 6f 6c 69 6e 2e 2e 31 34 63 63 63 32 32 32 00 60 +00 20 00 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin..14 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 06 04 06 0e 01 01 59 08 05 1f 0d 10 07 0e 14 01 4a 08 04 0e 06 03 07 0e +0a 00 63 08 0a 0f 05 06 08 0c 0a 00 63 08 03 6c 23 27 05 00 32 0c 06 04 00 +63 32 00 32 00 32 00 56 69 6f 6c 69 6e 2e 2e 31 34 63 63 63 32 32 32 00 40 +00 00 00 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin..15 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1a 06 04 06 0e 01 01 4e 08 06 12 11 10 06 0e 14 04 4e 19 04 0d 06 03 07 0e +0a 04 60 08 0a 0b 04 05 07 0d 0a 04 5f 0d 03 6c 21 12 0f 00 42 0c 06 04 00 +63 32 00 32 00 32 00 56 69 6f 6c 69 6e 2e 2e 31 35 63 63 63 32 32 32 00 20 +00 20 00 00 00 30 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin..15 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 06 04 06 0e 01 01 4e 08 06 1d 11 10 06 0e 14 01 4e 19 04 0e 06 03 07 0e +0a 00 60 08 0a 10 04 05 07 0d 0a 01 5f 0d 03 6c 23 00 09 00 42 0c 06 04 00 +63 32 00 32 00 32 00 56 69 6f 6c 69 6e 2e 2e 31 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 30 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin..16 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 06 02 06 0e 0c 01 54 08 04 16 07 08 06 0f 49 02 2e 1f 06 1a 11 0e 06 07 +00 05 46 08 03 0b 0a 03 05 0e 00 05 56 08 0c 2a 21 27 07 00 52 0c 02 04 00 +63 63 00 00 00 32 00 56 69 6f 6c 69 6e 2e 2e 31 36 63 63 63 32 32 32 00 00 +0a 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin..16 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 06 02 06 0e 0c 01 54 08 04 16 07 08 06 0f 49 02 2e 1f 06 1a 11 0e 06 07 +00 00 46 08 03 0b 0a 03 05 0e 00 00 56 08 0c 2a 21 27 07 00 52 0c 02 04 00 +63 63 00 00 00 32 00 56 69 6f 6c 69 6e 2e 2e 31 36 63 63 63 32 32 32 00 00 +0a 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin..17 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 06 00 03 0e 00 01 48 08 0e 0d 05 00 03 0e 00 01 44 08 0e 0a 08 03 07 0f +13 05 5b 08 0b 0c 04 03 07 0f 13 06 63 08 0b 64 2c 0a 08 00 32 0c 02 04 00 +63 15 27 00 00 32 00 56 69 6f 6c 69 6e 2e 2e 31 37 63 63 63 32 32 32 00 10 +00 30 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin..17 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +18 06 00 03 0e 00 01 48 08 0e 0d 05 00 03 0e 00 01 44 0a 0e 0a 04 03 07 0f +13 00 5b 0d 0b 0c 04 03 07 0f 13 00 63 08 0b 64 2c 0a 08 00 32 0c 02 04 00 +63 15 27 00 00 32 00 56 69 6f 6c 69 6e 2e 2e 31 37 63 63 63 32 32 32 00 10 +00 30 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin..18 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1d 00 00 06 0e 2a 04 4f 08 0c 19 0f 10 06 0d 0a 01 4e 08 0b 0d 07 06 07 0f +00 04 5e 08 0b 0e 06 06 08 0e 0a 05 60 08 04 74 20 1a 1b 00 21 0c 06 04 00 +63 32 00 32 00 32 00 56 69 6f 6c 69 6e 2e 2e 31 38 63 63 63 32 32 32 00 10 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin..18 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 00 00 06 0e 2a 01 4f 0d 0c 1f 0f 10 06 0d 0a 01 4e 08 0b 0d 07 06 07 0f +00 00 5e 0d 0b 10 06 06 08 0e 0a 01 60 08 04 74 23 00 0b 00 22 0c 06 04 00 +63 32 00 32 00 32 00 56 69 6f 6c 69 6e 2e 2e 31 38 63 63 63 32 32 32 00 10 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin..19 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 06 05 06 0e 1e 02 51 08 14 18 03 07 06 08 14 03 51 08 04 0f 06 06 09 0f +0a 04 47 13 0b 0c 05 06 08 0c 0a 0c 5f 08 03 52 21 27 21 00 21 0c 06 04 00 +63 32 00 32 00 32 00 56 69 6f 6c 69 6e 2e 2e 31 39 63 63 63 32 32 32 00 30 +00 20 00 20 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violin..19 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 06 05 06 0e 1e 02 51 08 14 1f 0d 10 06 0e 14 01 51 08 04 0f 06 06 09 0f +0a 00 47 13 0b 0f 05 06 08 0c 0a 01 5f 08 03 52 24 27 01 00 22 0c 06 04 00 +63 32 00 32 00 32 00 56 69 6f 6c 69 6e 2e 2e 31 39 63 63 63 32 32 32 00 00 +00 30 00 10 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: VIOLINS +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 00 00 04 0e 42 02 44 08 00 16 08 05 07 0d 19 03 49 08 0b 0f 08 10 07 0b +01 04 4d 08 0e 0b 03 02 08 0f 13 05 5a 08 0a 68 20 19 2e 00 32 0c 0c 04 00 +63 32 32 00 00 32 00 20 56 49 4f 4c 49 4e 53 20 20 63 63 63 32 32 32 00 40 +00 20 00 30 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: VIOLINS +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 00 00 04 0e 42 00 47 08 00 1e 08 05 07 0d 19 00 53 08 0b 1f 0f 10 07 0e +01 04 49 19 0e 0f 03 02 08 0f 13 00 51 08 0a 68 23 00 0b 00 32 0c 0c 04 00 +63 32 32 00 00 32 00 20 56 49 4f 4c 49 4e 53 20 20 63 63 63 32 32 32 00 00 +00 20 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violins..1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +13 00 00 04 06 3c 01 4c 08 01 12 0f 06 06 06 09 02 40 0d 04 0b 07 06 06 06 +14 04 63 08 02 0b 09 00 05 06 28 04 62 08 03 2c 1e 18 3b 00 32 0c 0c 04 00 +63 32 32 00 00 32 00 56 69 6f 6c 69 6e 73 2e 2e 31 63 63 63 32 32 32 00 10 +00 40 00 10 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violins..1 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +10 00 00 04 06 3c 00 4c 08 01 0f 0f 06 06 06 09 00 40 19 04 0c 07 06 06 06 +14 00 63 08 02 12 09 00 05 06 28 00 62 08 03 2c 21 0a 0f 00 32 00 0c 04 00 +63 32 32 00 00 32 00 56 69 6f 6c 69 6e 73 2e 2e 31 63 63 63 32 32 32 00 10 +00 40 00 10 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violins..2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 06 00 07 0d 21 02 4e 08 05 13 0c 0c 05 0d 32 02 45 0d 04 0b 06 06 07 0e +14 03 5d 08 04 0b 07 00 07 0d 1e 05 61 08 04 2c 20 2c 14 00 42 0c 0c 04 00 +63 32 32 00 00 32 00 56 69 6f 6c 69 6e 73 2e 2e 32 63 63 63 32 32 32 00 10 +00 40 00 10 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violins..2 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +10 06 00 07 0d 21 00 4e 08 05 13 0c 0c 05 0d 32 00 45 19 04 0f 06 06 07 0e +14 00 5d 08 04 0e 07 00 07 0d 1e 00 61 08 04 2c 20 2c 14 00 42 0c 0c 04 00 +63 32 32 00 00 32 00 56 69 6f 6c 69 6e 73 2e 2e 32 63 63 63 32 32 32 00 20 +00 20 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violins..3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 06 00 07 0d 21 01 46 08 05 12 0c 0c 05 0d 32 02 43 0d 04 0b 06 06 06 0e +28 05 59 08 03 0b 07 00 07 0d 1e 04 61 08 04 6c 1e 27 34 00 32 0c 0c 04 00 +63 32 32 00 00 32 00 56 69 6f 6c 69 6e 73 2e 2e 33 63 63 63 32 32 32 00 00 +00 40 00 20 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violins..3 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +18 06 00 07 0d 21 00 46 08 05 1f 0c 0c 05 0d 32 00 43 13 04 0c 06 06 06 0e +28 00 59 08 03 10 07 00 07 0d 1e 00 61 08 04 6c 23 27 0c 00 32 0c 0c 04 00 +63 32 32 00 00 32 00 56 69 6f 6c 69 6e 73 2e 2e 33 63 63 63 32 32 32 00 00 +00 40 00 20 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violins..4 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 07 05 05 0e 41 01 50 08 05 0f 0c 0c 04 0c 33 02 57 19 05 0a 06 00 06 0e +14 04 5b 08 01 0b 05 01 07 0e 11 04 52 08 00 6c 1f 1c 25 00 32 0c 03 04 01 +63 32 32 00 00 32 00 56 69 6f 6c 69 6e 73 2e 2e 34 63 63 63 32 32 32 00 40 +00 30 00 00 00 20 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Violins..4 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 04 00 03 0e 41 01 57 08 05 0f 0c 0c 04 0c 33 02 57 19 05 0a 06 00 06 0e +14 00 5b 08 01 0d 05 01 07 0e 11 00 52 08 00 6c 25 14 0f 00 32 0c 03 04 01 +63 32 32 00 00 32 00 56 69 6f 6c 69 6e 73 2e 2e 34 63 63 63 32 32 32 00 30 +00 30 00 00 00 20 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Other + + +** Name: 8 Stringer +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 06 00 01 0e 00 01 3f 04 03 1f 0c 06 09 0e 00 02 56 0a 1b 1f 0c 02 08 0e +00 05 41 1c 0b 1f 05 06 09 0e 00 04 63 04 13 22 21 13 00 00 02 00 02 04 00 +63 32 00 32 00 32 00 38 20 53 74 72 69 6e 67 65 72 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: 8 Stringer +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 06 00 01 0e 00 01 3f 04 03 1f 0c 06 09 0e 00 01 56 0a 1b 1f 0c 02 08 0e +00 01 41 1c 0b 1f 05 06 09 0e 00 00 63 04 13 22 21 13 00 00 02 00 02 04 00 +63 32 00 32 00 32 00 38 20 53 74 72 69 6e 67 65 72 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntInst.1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 0f 09 03 0c 2e 03 63 24 1a 1c 0f 09 06 0c 00 03 4c 13 0c 1c 0a 06 04 0c +00 04 59 08 0a 0d 1c 06 06 0c 00 05 5d 0d 14 4d 23 00 00 00 32 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 49 6e 73 74 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntInst.1 +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 0f 09 03 0c 2e 00 63 24 1a 1c 0f 09 06 0c 00 00 4c 13 0c 1c 0a 06 04 0c +00 00 59 08 0a 0d 1c 06 06 0c 00 00 5d 0d 14 4d 23 00 00 00 32 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 49 6e 73 74 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntInst.2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 18 15 05 0d 2e 03 57 13 1b 1c 09 09 04 0d 00 03 55 04 09 1c 09 09 05 0d +00 05 53 0d 0e 1c 0d 0f 05 0d 00 06 62 04 0c 75 23 00 00 00 32 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 49 6e 73 74 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntInst.2 +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 18 15 05 0d 2e 00 57 13 1b 1c 09 09 04 0d 00 00 55 04 09 1c 09 09 05 0d +00 00 53 0d 0e 1c 0d 0f 05 0d 00 00 62 04 0c 75 23 00 00 00 32 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 49 6e 73 74 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntInst.3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 09 03 04 0c 00 04 3a 19 1b 1c 1c 09 04 0f 00 04 52 04 0b 1c 09 03 06 0c +00 05 53 04 16 1c 1f 09 05 0f 00 06 62 04 14 65 23 00 00 00 32 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 49 6e 73 74 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntInst.3 +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 09 03 04 0c 00 00 3a 19 1b 1c 1c 09 04 0f 00 00 52 04 0b 1c 09 03 06 0c +00 00 53 04 16 1c 1f 09 05 0f 00 00 62 04 14 65 23 00 00 00 32 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 49 6e 73 74 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntInst.4 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1b 16 08 0d 00 03 63 0f 13 1f 0a 0a 07 0e 00 03 3e 04 0b 1b 13 06 0c 07 +00 06 47 16 0b 1f 0a 06 06 0d 00 05 5d 04 0b 4a 1f 00 00 00 12 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 49 6e 73 74 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntInst.4 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1b 16 08 0d 00 00 63 0f 13 1f 0a 0a 07 0e 00 00 3e 04 0b 1b 13 06 0c 07 +00 00 47 16 0b 1f 0a 06 06 0d 00 00 5d 04 0b 4a 1f 00 00 00 12 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 49 6e 73 74 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntInst.5 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 0c 09 05 0c 00 04 3d 1f 08 10 0c 03 09 0c 00 03 3e 08 0a 1f 15 06 05 0d +00 46 63 13 08 1f 15 06 05 0d 00 06 63 04 0e 1c 15 21 11 27 26 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 49 6e 73 74 2e 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntInst.5 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +10 0c 09 05 0c 00 00 3d 1f 08 10 0c 03 09 0c 00 00 3e 08 0a 1f 15 06 05 0d +00 40 63 13 08 1f 15 06 05 0d 00 00 63 04 0e 1c 15 21 11 27 26 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 49 6e 73 74 2e 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntInst.6 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 10 0d 03 0a 00 04 3b 0d 08 0f 0f 0d 03 0a 00 44 3c 0d 0a 1c 05 03 07 0d +00 05 47 08 08 1c 05 03 07 0d 00 07 5d 08 0e 5c 23 3c 40 60 16 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 49 6e 73 74 2e 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntInst.6 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 10 0d 03 0a 00 00 3b 0d 08 0f 0f 0d 03 0a 00 40 3c 0d 0a 1c 05 03 07 0d +00 00 47 08 08 1c 05 03 07 0d 00 00 5d 08 0e 5c 23 3c 40 60 16 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 49 6e 73 74 2e 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntInst.7 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 09 04 02 0d 00 43 4c 04 00 13 0c 12 09 0f 00 43 3c 04 02 15 12 1f 09 0f +00 45 63 04 00 10 05 06 09 0e 00 45 5d 04 06 25 23 5a 01 02 46 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 49 6e 73 74 2e 37 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntInst.7 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 09 04 02 0d 00 40 4c 04 00 13 0c 12 09 0f 00 40 3c 04 02 15 12 1f 09 0f +00 40 63 04 00 10 05 06 09 0e 00 40 5d 04 06 25 23 5a 01 02 46 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 49 6e 73 74 2e 37 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntInst.8 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 09 06 08 00 03 63 04 03 1c 1e 00 07 08 00 04 54 04 0b 1b 15 09 04 08 +00 05 5d 08 0b 1c 19 09 05 08 00 06 63 08 0b 7a 1f 00 00 00 12 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 49 6e 73 74 2e 38 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntInst.8 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 09 06 08 00 00 63 04 03 1c 1e 00 07 08 00 00 54 04 0b 1b 15 09 04 08 +00 00 5d 08 0b 1c 19 09 05 08 00 00 63 08 0b 7a 1f 00 00 00 12 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 49 6e 73 74 2e 38 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntInst.9 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 16 09 0f 0b 00 43 63 04 15 1c 09 06 03 0b 00 44 54 04 11 1f 09 04 0f 0e +00 45 5a 08 13 1c 13 09 06 0b 00 47 63 08 0b 6c 19 2e 42 0f 36 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 49 6e 73 74 2e 39 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntInst.9 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 16 09 0f 0b 00 40 63 04 15 1c 09 06 03 0b 00 40 54 04 11 1f 09 04 0f 0e +00 40 5a 08 13 1c 13 09 06 0b 00 40 63 08 0b 6c 19 2e 42 0f 36 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 49 6e 73 74 2e 39 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntInst10 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 16 18 0c 0b 00 41 47 0d 03 0f 0f 0d 06 0b 00 44 3c 0d 03 0d 0c 07 04 0d +00 44 48 00 03 1c 12 07 07 0e 00 46 63 04 03 5a 19 2e 42 0f 36 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 49 6e 73 74 31 30 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntInst10 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +18 16 18 0c 0b 00 40 47 0d 03 0f 0f 0d 06 0b 00 40 3c 0d 03 0d 0c 07 04 0d +00 40 48 00 03 1c 12 07 07 0e 00 40 63 04 03 5a 19 2e 42 0f 36 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 49 6e 73 74 31 30 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntInst11 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 18 0f 08 06 00 02 63 1c 03 1c 0c 1f 09 0a 00 42 4f 08 13 1f 06 0f 08 0f +00 44 5c 04 08 1c 0a 09 09 0a 00 05 63 04 0e 2c 28 00 00 3f 26 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 49 6e 73 74 31 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntInst11 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 18 0f 08 06 00 00 63 1c 03 1c 0c 1f 09 0a 00 40 4f 08 13 1f 06 0f 08 0f +00 40 5c 04 08 1c 0a 09 09 0a 00 00 63 04 0e 2c 28 00 00 3f 26 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 49 6e 73 74 31 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Syamisen +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: Yamaha DX11 factory preset, bank B, voice 18 +1a 0e 0f 06 06 0a 04 54 0a 13 17 12 12 07 0c 0a 04 59 10 13 18 06 00 04 0e +00 02 40 04 13 17 0f 09 06 0a 00 03 63 08 13 5b 18 02 20 00 42 18 02 04 00 +63 32 00 32 00 32 00 53 79 61 6d 69 73 65 6e 20 20 63 61 63 31 32 32 00 20 +00 30 00 70 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Syamisen +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1a 0e 0f 06 06 0a 04 54 0a 13 17 12 12 07 0c 0a 04 59 10 13 18 06 00 04 0e +00 02 40 04 13 17 0f 09 06 0d 00 03 63 08 13 5b 18 02 20 00 42 18 02 04 00 +63 32 00 32 00 32 00 53 79 61 6d 69 73 65 6e 20 20 63 61 63 31 32 32 00 20 +00 30 00 70 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Zither +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank C, voice 8 +1f 0b 06 0a 0d 1e 01 57 10 0b 1f 1f 00 03 0f 22 01 51 04 03 1f 0c 03 0a 0a +14 01 36 08 03 1f 18 06 08 0f 00 02 63 04 03 30 23 00 00 00 62 0c 04 04 00 +63 32 00 00 00 32 00 5a 69 74 68 65 72 20 20 20 20 63 63 63 32 32 32 00 30 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +--Bank 11 + +* CATEGORY KEYBOARDS + + +* SUBCATEGORY Clavichord + + +** Name: Clav Lead +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1e 1c 00 09 0c 0f 03 4b 24 15 1e 1b 00 09 0d 0c 05 56 00 01 1d 01 00 0c 00 +2e 04 53 00 14 1e 1c 00 09 0c 00 04 63 00 15 3a 23 00 08 00 22 18 02 04 00 +63 32 00 00 00 32 00 43 6c 61 76 20 4c 65 61 64 20 63 63 63 32 32 32 00 00 +00 40 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clav Lead +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 1c 00 09 0c 0f 01 4b 24 15 1e 1b 00 09 0d 0c 01 56 00 01 1d 01 00 0c 00 +2e 01 53 00 14 1e 1c 00 09 0c 00 00 63 00 15 3a 23 00 08 00 22 18 02 04 00 +63 32 00 00 00 32 00 43 6c 61 76 20 4c 65 61 64 20 63 63 63 32 32 32 00 00 +00 40 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clav Perc +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1a 0f 04 09 0c 0f 03 5b 00 0a 1a 0f 04 09 0d 0c 04 63 00 13 1f 0a 04 0c 00 +2e 06 58 00 0e 19 0f 05 09 0c 00 05 63 04 10 3a 23 00 00 00 02 18 02 04 00 +63 32 00 00 00 32 00 43 6c 61 76 20 50 65 72 63 20 63 63 63 32 32 32 00 00 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clav Perc +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1a 0f 04 09 0c 0f 01 5b 00 0a 1a 0f 04 09 0d 0c 01 63 00 13 1f 0a 04 0c 00 +2e 01 58 00 0e 19 0f 05 09 0c 00 00 63 04 10 3a 23 00 00 00 02 18 02 04 00 +63 32 00 00 00 32 00 43 6c 61 76 20 50 65 72 63 20 63 63 63 32 32 32 00 00 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clav Synth +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1e 1c 04 09 0c 0f 03 5e 0d 16 1e 04 04 09 0d 0c 04 5f 00 03 1e 03 04 0c 00 +2e 04 55 00 13 1e 15 05 09 0c 00 06 63 0d 13 3a 23 1a 0f 00 32 18 02 04 00 +63 32 00 00 00 32 00 43 6c 61 76 20 53 79 6e 74 68 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clav Synth +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 1c 04 09 0c 0f 01 5e 0d 16 1e 04 04 09 0d 0c 01 5f 00 03 1e 03 04 0c 00 +2e 01 55 00 13 1e 15 05 09 0c 00 00 63 0d 13 3a 23 1a 0f 00 32 18 02 04 00 +63 32 00 00 00 32 00 43 6c 61 76 20 53 79 6e 74 68 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clav.....1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0b 08 0f 09 10 01 42 13 0b 1f 0c 08 05 0f 00 04 5c 00 03 1f 10 05 06 0f +5e 04 52 00 13 1c 14 08 0c 0e 00 03 63 04 0b 28 23 00 00 00 62 18 02 04 00 +63 32 00 32 00 32 00 43 6c 61 76 2e 2e 2e 2e 2e 31 63 63 63 32 32 32 00 10 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clav.....1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0b 08 0f 09 10 01 42 13 0b 1f 0c 08 05 0f 00 02 5c 00 03 1f 10 05 06 0f +5e 02 52 00 13 1c 14 08 0c 0e 00 00 63 04 0b 28 23 00 00 00 62 18 02 04 00 +63 32 00 32 00 32 00 43 6c 61 76 2e 2e 2e 2e 2e 31 63 63 63 32 32 32 00 10 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clav.....2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1e 1c 05 09 0c 0f 01 43 0d 15 1e 1b 01 09 0d 0c 03 5f 00 01 1d 01 01 0c 00 +2e 04 51 16 14 1e 1c 05 09 0c 00 03 63 00 13 1b 23 00 00 00 02 18 02 04 00 +63 32 00 00 00 32 00 43 6c 61 76 2e 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clav.....2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 1c 05 09 0c 0f 01 43 0d 15 1e 1b 01 09 0d 0c 01 5f 00 01 1d 01 01 0c 00 +2e 01 51 16 14 1e 1c 05 09 0c 00 00 63 00 13 1b 23 00 00 00 02 18 02 04 00 +63 32 00 00 00 32 00 43 6c 61 76 2e 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clav.....3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1e 1c 05 01 0c 20 01 54 04 15 17 1a 01 01 0d 09 03 54 04 04 1d 01 01 01 00 +32 03 44 1f 0c 18 1b 05 07 0c 02 03 63 08 13 3a 23 00 00 00 02 18 05 04 00 +63 32 32 00 00 32 00 43 6c 61 76 2e 2e 2e 2e 2e 33 63 63 63 32 32 32 00 10 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clav.....3 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 1c 05 01 0c 20 01 54 04 15 17 1a 01 01 0d 09 01 54 04 04 1d 01 01 01 00 +32 01 44 1f 0c 18 1b 05 07 0c 02 00 63 08 13 3a 23 00 00 00 02 18 05 04 00 +63 32 32 00 00 32 00 43 6c 61 76 2e 2e 2e 2e 2e 33 63 63 63 32 32 32 00 10 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clav.....4 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1e 15 0a 01 00 20 01 61 00 15 17 09 0f 01 00 09 04 53 00 02 1d 01 0b 01 00 +32 03 3e 1f 16 19 1b 06 09 0e 02 04 62 08 09 3a 23 00 00 00 02 18 02 04 00 +63 32 32 00 00 32 00 43 6c 61 76 2e 2e 2e 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clav.....4 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 15 0a 01 00 20 01 61 00 15 17 09 0f 01 00 09 02 53 00 02 1d 01 0b 01 00 +32 01 3e 1f 16 19 1b 06 09 0e 02 00 62 08 09 3a 23 00 00 00 02 18 02 04 00 +63 32 32 00 00 32 00 43 6c 61 76 2e 2e 2e 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clav.....5 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 10 07 08 0c 00 01 51 16 1d 19 19 06 09 0e 00 03 57 00 0a 1c 10 07 08 0c +00 03 63 00 1b 19 19 06 09 0e 00 03 62 08 09 3c 1e 00 00 00 22 18 02 04 00 +63 32 32 00 00 32 00 43 6c 61 76 2e 2e 2e 2e 2e 35 63 63 63 32 32 32 00 00 +00 00 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clav.....5 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 10 07 08 0c 00 01 51 16 1d 19 19 06 09 0e 00 01 57 00 0a 1c 10 07 08 0c +00 01 63 00 1b 19 19 06 09 0e 00 00 62 08 09 3c 1e 00 00 00 22 18 02 04 00 +63 32 32 00 00 32 00 43 6c 61 76 2e 2e 2e 2e 2e 35 63 63 63 32 32 32 00 00 +00 00 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clav.....6 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 10 07 05 0c 00 01 4e 39 1d 19 19 06 09 0e 00 03 5a 00 0a 1c 05 07 05 0c +00 03 5d 0d 1b 19 19 06 09 0e 00 06 62 08 09 3c 1e 00 00 00 22 18 02 04 00 +63 32 32 00 00 32 00 43 6c 61 76 2e 2e 2e 2e 2e 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clav.....6 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 10 07 05 0c 00 01 4e 39 1d 19 19 06 09 0e 00 01 5a 00 0a 1c 05 07 05 0c +00 01 5d 0d 1b 19 19 06 09 0e 00 00 62 08 09 3c 1e 00 00 00 22 18 02 04 00 +63 32 32 00 00 32 00 43 6c 61 76 2e 2e 2e 2e 2e 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clav.....7 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 01 02 04 07 35 00 35 24 0d 17 09 0f 01 00 09 04 53 00 02 1d 01 0b 01 00 +32 04 39 08 16 19 1b 06 09 0e 02 06 63 00 09 02 23 00 00 00 02 18 02 04 00 +63 32 32 00 00 32 00 43 6c 61 76 2e 2e 2e 2e 2e 37 63 63 63 32 32 32 00 00 +00 40 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clav.....7 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 01 02 04 07 35 00 35 24 0d 17 09 0f 01 00 09 01 53 00 02 1d 01 0b 01 00 +32 00 39 08 16 19 1b 06 09 0e 02 01 63 00 09 02 23 00 00 00 02 18 02 04 00 +63 32 32 00 00 32 00 43 6c 61 76 2e 2e 2e 2e 2e 37 63 63 63 32 32 32 00 00 +00 40 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clav.....8 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1e 1c 05 09 0c 0f 01 4c 16 15 1e 1b 01 09 0d 0c 05 53 00 01 1d 01 01 0c 00 +2e 05 59 00 14 1e 1c 05 09 0c 00 05 63 08 13 1a 23 00 00 00 02 18 02 04 00 +63 32 00 00 00 32 00 43 6c 61 76 2e 2e 2e 2e 2e 38 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clav.....8 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 1c 05 09 0c 0f 01 4c 16 15 1e 1b 01 09 0d 0c 01 53 00 01 1d 01 01 0c 00 +2e 01 59 00 14 1e 1c 05 09 0c 00 00 63 08 13 1a 23 00 00 00 02 18 02 04 00 +63 32 00 00 00 32 00 43 6c 61 76 2e 2e 2e 2e 2e 38 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clav.....9 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1e 1c 05 09 0c 0f 03 52 0d 15 1e 1b 01 09 0d 0c 05 63 04 01 1d 01 01 0c 00 +2e 04 62 04 14 1e 1c 05 09 0c 00 05 63 04 13 1c 23 00 00 00 02 18 02 04 00 +63 32 00 00 00 32 00 43 6c 61 76 2e 2e 2e 2e 2e 39 63 63 63 32 32 32 00 00 +00 40 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clav.....9 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 1c 05 09 0c 0f 00 52 0d 15 1e 1b 01 09 0d 0c 01 63 04 01 1d 01 01 0c 00 +2e 01 62 04 14 1e 1c 05 09 0c 00 01 63 04 13 1c 23 00 00 00 02 18 02 04 00 +63 32 00 00 00 32 00 43 6c 61 76 2e 2e 2e 2e 2e 39 63 63 63 32 32 32 00 00 +00 40 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clavi +** Controls: KV +** Source: Yamaha DX11 factory preset, bank B, voice 16 +1f 01 00 0f 00 00 04 4d 13 10 1f 0c 01 01 0a 00 02 54 00 09 1f 06 01 01 0e +23 03 4f 10 0e 1f 00 0a 0f 0f 00 03 58 08 0a 3a 1c 00 00 00 52 18 02 04 00 +63 32 00 32 00 32 00 43 6c 61 76 69 20 20 20 20 20 63 63 63 32 32 32 00 20 +00 20 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Clavi +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 01 00 0f 00 00 04 4d 13 10 1f 0c 01 01 0d 00 02 54 00 09 1f 06 01 01 0e +23 03 4f 10 0e 1f 00 0a 0f 0f 00 03 58 08 0d 3a 1c 00 00 00 52 18 02 04 00 +63 32 00 32 00 32 00 43 6c 61 76 69 20 20 20 20 20 63 63 63 32 32 32 00 20 +00 20 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: EZ Clav +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank A, voice 26 +1f 0b 08 0f 09 10 04 42 2d 13 1f 09 08 05 0f 00 02 49 00 03 1f 12 05 06 0f +10 03 46 10 03 1f 14 08 0c 0e 00 02 63 04 0b 30 1b 00 00 00 52 18 04 04 00 +63 32 00 00 00 32 00 45 5a 20 43 6c 61 76 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Fuzz Clavi +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank A, voice 27 +1e 1c 05 09 0c 0f 01 56 24 15 1e 1b 01 09 0d 0c 04 61 00 01 1d 01 01 0c 00 +2e 02 4d 0d 14 1e 1c 05 09 0c 00 01 63 0a 13 33 23 00 00 00 02 18 02 04 00 +63 32 00 00 00 32 00 46 75 7a 7a 20 43 6c 61 76 69 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Klavinet * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1d 06 06 06 0e 00 00 52 04 0e 1d 07 09 07 0e 00 04 4d 04 00 1d 09 06 06 0e +10 02 50 1f 16 1b 0a 07 0a 0e 00 02 63 08 0b 02 23 00 00 00 32 0c 02 04 00 +28 63 00 00 00 32 00 4b 6c 61 76 69 6e 65 74 20 2a 63 63 63 32 32 32 00 30 +00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ornt Clav +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1e 1c 05 01 0c 20 02 4e 2a 15 17 1a 01 01 0d 09 02 4b 04 04 1d 01 01 01 00 +32 04 39 04 0c 18 1b 05 07 0c 02 05 63 08 13 3a 23 00 00 00 02 18 05 04 00 +63 32 32 00 00 32 00 4f 72 6e 74 20 43 6c 61 76 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ornt Clav +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 1c 05 01 0c 20 00 4e 2a 15 17 1a 01 01 0d 09 00 4b 04 04 1d 01 01 01 00 +32 00 39 04 0c 18 1b 05 07 0c 02 00 63 08 13 3a 23 00 00 00 02 18 05 04 00 +63 32 32 00 00 32 00 4f 72 6e 74 20 43 6c 61 76 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ornt Clav +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +1e 1c 05 00 0c 20 00 4e 2a 15 17 1a 01 00 0d 09 00 4b 04 04 1d 01 01 00 00 +32 00 39 04 0c 18 1b 05 07 0c 02 00 63 08 13 3a 23 00 00 00 02 18 05 04 00 +63 32 32 00 00 32 00 4f 72 6e 74 20 43 6c 61 76 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rimbaclav +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 10 00 05 00 00 00 4c 28 03 1f 12 00 04 00 00 00 43 16 03 1f 0d 00 05 00 +00 00 45 16 03 1f 07 00 06 08 00 00 63 04 03 03 23 00 00 00 62 0c 07 04 00 +63 63 00 00 00 32 00 52 69 6d 62 61 63 6c 61 76 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SplashClav +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank D, voice 21 +13 18 14 0a 0c 00 00 61 04 03 10 02 01 0a 0c 00 00 5c 1c 03 1c 0b 04 0a 0c +00 00 41 28 03 1b 0e 10 0a 0c 00 03 63 04 03 3a 55 00 39 00 42 0c 04 04 00 +28 32 00 00 00 32 00 53 70 6c 61 73 68 43 6c 61 76 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Synclav. * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1a 09 07 05 0f 00 02 51 0d 0b 1f 0c 06 02 00 00 00 57 10 0e 17 06 05 05 0d +00 00 63 04 08 1f 09 0f 06 00 00 03 5a 19 0e 2c 23 00 00 00 32 0c 02 04 00 +28 63 00 00 00 32 00 53 79 6e 63 6c 61 76 2e 20 2a 63 63 63 32 32 32 00 40 +00 00 00 30 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Thin Clav +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank A, voice 25 +1f 0b 07 0f 09 00 04 49 13 13 1f 08 07 05 0e 00 02 58 00 0c 1f 06 04 06 0f +23 03 46 10 0a 1f 07 08 0c 0d 00 02 63 08 0b 02 1c 00 00 00 52 18 04 04 00 +63 32 00 32 00 32 00 54 68 69 6e 20 43 6c 61 76 20 63 63 63 32 32 32 00 70 +00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Harpsichord + + +** Name: Harpschrd2 +** Description: DX11 factory preset 'Harpsichrd' with slower decay +** Source: Art Hitzeman +1a 13 00 01 0d 0a 00 5b 0a 11 0f 10 00 01 0d 00 00 5d 00 1d 17 08 06 04 0c +00 00 4c 04 16 17 08 06 05 0c 00 00 58 0d 14 1c 1f 00 00 00 52 18 02 04 00 +63 32 32 00 00 32 00 48 61 72 70 73 63 68 72 64 32 63 63 63 32 32 32 00 40 +00 00 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harpschrd3 +** Description: 'Harpschrd2' with minor changes +** Source: Art Hitzeman +1a 13 00 01 0d 0a 00 5b 05 11 0f 10 00 01 0d 00 00 5d 00 1d 17 08 06 04 0c +00 00 4c 00 16 17 08 06 05 0c 00 00 58 0d 14 1c 1f 00 00 00 52 18 02 04 00 +63 32 32 00 00 32 00 48 61 72 70 73 63 68 72 64 33 63 63 63 32 32 32 00 41 +00 00 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harpsichrd +** Source: Yamaha DX11 factory preset, bank B, voice 15 +1a 13 00 01 0a 0a 00 5b 0a 11 0f 10 00 01 0a 00 00 5d 00 1d 17 08 06 07 0c +00 00 4c 04 16 17 08 06 07 0c 00 00 58 0a 14 1c 1f 00 00 00 52 18 02 04 00 +63 32 32 00 00 32 00 48 61 72 70 73 69 63 68 72 64 63 63 63 32 32 32 00 40 +00 00 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harpsichrd +** Source: from a library of patches collected by Duane Bowker, author unknown +1a 13 00 01 0d 0a 00 5b 0a 11 0f 10 00 01 0d 00 00 5d 00 1d 17 08 06 07 0c +00 00 4c 04 16 17 08 06 07 0c 00 00 58 0d 14 1c 1f 00 00 00 52 18 02 04 00 +63 32 32 00 00 32 00 48 61 72 70 73 69 63 68 72 64 63 63 63 32 32 32 00 40 +00 00 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hrpsicord1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1d 01 06 0c 29 00 57 04 1b 1f 19 03 04 0d 00 03 5b 04 03 1f 1f 05 09 0d +00 06 3f 0d 13 1f 1a 01 07 0d 00 05 63 0d 1b 32 23 00 00 00 62 18 00 04 00 +63 32 00 00 00 32 00 48 72 70 73 69 63 6f 72 64 31 63 63 63 32 32 32 00 20 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hrpsicord1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1d 01 06 0c 29 01 57 04 1b 1f 19 03 04 0d 00 00 5b 04 03 1f 1f 05 09 0d +00 00 3f 0d 13 1f 1a 01 07 0d 00 02 63 0d 1b 32 23 00 00 00 62 18 00 04 00 +63 32 00 00 00 32 00 48 72 70 73 69 63 6f 72 64 31 63 63 63 32 32 32 00 20 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hrpsicord2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1d 11 00 01 0d 00 00 5b 04 1c 1c 18 00 01 0d 00 00 5b 00 0c 17 08 05 06 0c +00 05 60 00 11 1c 18 05 06 0d 00 04 60 0d 12 0c 23 00 00 00 02 24 00 04 00 +63 32 00 00 00 32 00 48 72 70 73 69 63 6f 72 64 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hrpsicord2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 11 00 01 0d 00 00 5b 04 1c 1c 18 00 01 0d 00 00 5b 00 0c 17 08 05 06 0c +00 01 60 00 11 1c 18 05 06 0d 00 01 60 0d 12 0c 23 00 00 00 02 24 00 04 00 +63 32 00 00 00 32 00 48 72 70 73 69 63 6f 72 64 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hrpsicord3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1d 01 01 0d 0f 02 5a 00 1b 1f 17 03 01 0d 00 02 57 04 03 1f 1c 05 09 0d +00 05 42 13 0b 1f 1c 01 05 0d 00 06 63 0d 1b 2a 23 00 00 00 62 18 00 04 00 +63 32 00 00 00 32 00 48 72 70 73 69 63 6f 72 64 33 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hrpsicord3 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1d 01 01 0d 0f 02 5a 00 1b 1f 17 03 01 0d 00 00 57 04 03 1f 1c 05 09 0d +00 00 42 13 0b 1f 1c 01 05 0d 00 01 63 0d 1b 2a 23 00 00 00 62 18 00 04 00 +63 32 00 00 00 32 00 48 72 70 73 69 63 6f 72 64 33 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: LiteHarpsi +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank A, voice 28 +1f 1d 00 01 0c 00 00 54 04 1b 1f 13 01 01 0f 00 01 4c 04 03 1f 1f 01 09 0f +21 01 4d 19 13 1f 1e 06 07 0d 00 00 5d 0d 13 32 1c 00 00 00 62 18 02 04 00 +63 32 00 00 00 32 00 4c 69 74 65 48 61 72 70 73 69 63 63 63 32 32 32 00 00 +30 00 30 10 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: RichHarpsi +** Source: Yamaha TX81Z factory preset, bank A, voice 29 +1a 13 00 01 0d 00 00 5b 0a 11 0f 10 00 01 0d 00 00 5d 00 1d 17 08 06 05 0c +00 00 5e 04 16 17 08 06 05 0c 00 00 56 0d 14 1c 23 00 00 00 02 18 04 04 00 +63 32 32 00 00 32 00 52 69 63 68 48 61 72 70 73 69 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +--Bank 12 + +* SUBCATEGORY Organ1 + + +** Name: 16 8 4 2 F +** Source: Yamaha TX81Z factory preset, bank A, voice 18 +1f 1f 00 0f 0f 00 00 5a 19 06 1f 1f 00 0f 0f 00 00 5a 08 03 1f 1f 00 0f 0f +00 00 5a 0d 04 1f 1f 00 0f 0f 00 00 5a 04 00 07 23 00 00 00 62 0c 04 04 00 +63 32 00 00 00 32 00 31 36 20 38 20 34 20 32 20 46 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: <6 Tease> +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank A, voice 20 +1f 00 00 0a 0f 1b 00 3f 0d 03 1f 00 00 0a 0f 00 00 63 08 03 1f 00 00 0a 0f +00 00 5e 0d 03 1f 00 00 0a 0f 00 00 63 04 03 3e 23 00 27 00 42 0c 07 04 00 +63 63 00 63 00 32 00 3c 36 20 54 65 61 73 65 3e 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnalogOrgn +** Controls: MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank A, voice 24 +1f 1b 00 0f 0d 09 00 57 05 06 1f 1c 00 0f 0d 09 00 57 04 01 1e 01 00 0f 0d +0a 00 5f 05 06 1e 01 00 0f 0d 0a 00 5f 04 01 04 1c 15 07 00 52 05 04 04 00 +63 32 00 00 00 32 00 41 6e 61 6c 6f 67 4f 72 67 6e 63 63 63 32 32 32 00 01 +00 08 00 01 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: B3 Organ.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0f 06 0d 0f 00 03 55 2a 04 1f 13 06 0d 0f 00 05 63 08 04 1f 18 06 0d 0f +00 04 62 0d 04 1f 06 06 0d 0f 00 05 63 00 04 07 28 00 0a 2c 12 0c 07 04 00 +63 63 00 00 00 32 00 42 33 20 4f 72 67 61 6e 2e 31 63 63 63 32 32 32 00 00 +00 20 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: B3 Organ.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0f 06 0d 0f 00 00 55 2a 04 1f 13 06 0d 0f 00 01 63 08 04 1f 18 06 0d 0f +00 01 62 0d 04 1f 06 06 0d 0f 00 01 63 00 04 07 28 00 0a 2c 12 0c 07 04 00 +63 63 00 00 00 32 00 42 33 20 4f 72 67 61 6e 2e 31 63 63 63 32 32 32 00 00 +00 20 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: B3 Organ.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 16 05 0d 0f 00 02 3e 08 04 1f 1f 1f 0d 0f 00 04 63 0d 04 1f 1f 02 0d 0f +00 05 63 04 04 1f 1f 07 0d 0f 00 03 63 08 04 04 28 00 0a 2c 22 18 07 04 00 +63 63 00 00 00 32 00 42 33 20 4f 72 67 61 6e 2e 32 63 63 63 32 32 32 00 00 +00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: B3 Organ.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 16 05 0d 0f 00 00 3e 08 04 1f 1f 1f 0d 0f 00 00 63 0d 04 1f 1f 02 0d 0f +00 01 63 04 04 1f 1f 07 0d 0f 00 00 63 08 04 04 28 00 0a 2c 22 18 07 04 00 +63 63 00 00 00 32 00 42 33 20 4f 72 67 61 6e 2e 32 63 63 63 32 32 32 00 00 +00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: B3 Organ.3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 10 04 0d 0f 00 02 52 08 04 1f 1f 04 0d 0f 00 04 63 08 04 1f 1f 03 0d 0f +0a 03 63 08 14 1f 1f 03 0d 0f 00 04 63 04 04 06 21 00 00 00 22 0c 07 04 00 +63 63 00 00 00 32 00 42 33 20 4f 72 67 61 6e 2e 33 63 63 63 32 32 32 00 00 +00 30 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: B3 Organ.3 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 10 04 0d 0f 00 00 52 08 04 1f 1f 04 0d 0f 00 01 63 08 04 1f 1f 03 0d 0f +0a 01 63 08 14 1f 1f 03 0d 0f 00 01 63 04 04 06 21 00 00 00 22 0c 07 04 00 +63 63 00 00 00 32 00 42 33 20 4f 72 67 61 6e 2e 33 63 63 63 32 32 32 00 00 +00 30 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Big Church +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank A, voice 23 +16 00 00 0a 0f 00 01 47 1f 03 18 00 00 05 0f 5b 02 61 00 10 0f 00 00 08 0f +00 00 63 08 10 0c 00 00 05 0f 00 00 63 00 16 3c 1d 00 00 00 42 0c 04 04 00 +63 32 00 00 00 32 00 42 69 67 20 43 68 75 72 63 68 63 63 63 32 32 32 00 00 +00 70 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ChurchOrg* +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 1f 00 0a 0f 00 42 47 1f 0e 10 1f 00 08 0f 00 40 60 0d 0e 10 1f 00 07 0f +00 40 63 08 08 0b 1f 00 05 0f 14 40 63 04 10 3e 0c 0f 00 00 3a 0c 02 04 00 +28 00 1b 00 00 32 00 43 68 75 72 63 68 4f 72 67 2a 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ClosedFlut +** Description: A Closed Flute organ stop +** Source: Art Hitzeman +12 1f 00 07 0f 19 00 59 04 03 10 1f 00 06 0f 19 00 43 10 03 17 1f 00 07 0f +19 00 5a 0a 03 0e 1f 00 06 0f 19 00 20 16 03 07 23 01 00 00 62 18 02 04 00 +28 32 00 00 00 32 00 43 6c 6f 73 65 64 46 6c 75 74 63 63 63 32 32 32 00 10 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Cornopean +** Description: An organ stop +** Controls: MW (LFO pitch) +** Source: Art Hitzeman +12 1f 00 07 0f 19 00 58 00 03 10 1f 00 06 0f 19 00 5a 04 03 17 1f 00 07 0f +19 00 5a 04 03 0e 1f 00 06 0f 19 00 5a 04 03 47 23 01 06 00 41 18 02 04 00 +28 32 00 00 00 32 00 43 6f 72 6e 6f 70 65 61 6e 20 63 63 63 32 32 32 00 00 +00 40 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: DistortOrg +** Controls: KV, MW (LFO pitch), BC (LFO pitch), BC (EG amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0a 00 08 0f 00 27 42 03 1a 10 1b 00 08 06 0f 00 51 08 10 15 0a 00 08 0f +1b 1b 52 04 1e 12 1b 00 0b 0e 00 02 63 05 00 3b 23 00 01 00 52 11 02 05 00 +63 32 00 05 00 32 3c 44 69 73 74 6f 72 74 4f 72 67 63 63 63 32 32 32 20 26 +10 04 10 78 00 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Drawbar1 * +** Source: from a library of patches collected by Rod Lemcke, author unknown +17 1f 00 09 0f 32 40 5a 19 03 17 1f 00 09 0f 1e 40 63 0a 03 17 1f 00 09 0f +28 40 51 0d 03 17 1f 00 09 0f 14 40 5d 00 03 07 23 00 00 00 1a 18 02 04 00 +28 63 30 00 00 32 00 44 72 61 77 62 61 72 31 20 2a 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Drawbar2 * +** Source: from a library of patches collected by Rod Lemcke, author unknown +17 1f 00 09 0f 2f 40 4b 13 03 17 1f 00 09 0f 19 40 53 08 03 17 1f 00 09 0f +2c 40 51 10 03 17 1f 00 09 0f 0a 40 63 04 03 07 23 00 00 00 1a 18 02 04 00 +28 63 30 00 00 32 00 44 72 61 77 62 61 72 32 20 2a 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Dyno * +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0e 0f 0e 09 00 05 49 2b 08 1f 0f 05 07 0f 18 42 5a 00 06 1f 12 06 08 0d +00 02 63 00 06 1f 12 06 08 0f 00 02 63 04 00 34 14 00 01 02 4e 18 02 04 00 +63 32 00 32 00 32 00 44 79 6e 6f 20 20 20 20 20 2a 63 63 63 32 32 32 00 70 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: DynoWurlie +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank A, voice 14 +1f 1c 04 07 0a 00 03 4e 25 1e 16 07 03 07 0b 00 03 52 0d 10 1f 13 08 06 08 +00 02 5c 3c 0e 1f 04 03 07 0e 00 02 63 04 13 7c 18 03 10 0c 32 0c 02 04 00 +63 32 00 00 00 32 00 44 79 6e 6f 57 75 72 6c 69 65 63 63 63 32 32 32 1b 70 +00 00 09 0f 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Organ..1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 1f 03 0f 0f 26 05 49 04 03 1f 1f 03 0f 0f 14 05 5a 08 03 1f 1f 03 0f 0f +50 05 59 0a 03 1f 1f 03 0f 0f 19 04 5b 00 03 76 23 0e 16 00 22 18 00 04 00 +63 00 00 00 00 32 00 45 20 4f 72 67 61 6e 2e 2e 31 63 63 63 32 32 32 00 20 +00 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Organ..1 +** Source: from a library of patches collected by Duane Bowker, author unknown +15 1f 03 0f 0f 26 00 49 04 03 1f 1f 03 0f 0f 14 00 5a 08 03 1f 1f 03 0f 0f +50 00 59 0a 03 1f 1f 03 0f 0f 19 00 5b 00 03 76 23 0e 16 00 22 18 00 04 00 +63 00 00 00 00 32 00 45 20 4f 72 67 61 6e 2e 2e 31 63 63 63 32 32 32 00 20 +00 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Organ..2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 1f 03 0f 0f 26 05 2a 19 02 1f 1f 03 0f 0f 14 05 5a 0d 04 1f 1f 03 0f 0f +50 05 59 0d 01 1f 1f 03 0f 0f 19 05 63 0d 02 75 1c 00 19 00 22 00 00 04 00 +63 00 00 00 00 32 00 45 20 4f 72 67 61 6e 2e 2e 32 63 63 63 32 32 32 00 00 +00 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Organ..2 +** Source: from a library of patches collected by Duane Bowker, author unknown +15 1f 03 0f 0f 26 00 2a 19 02 1f 1f 03 0f 0f 14 00 5a 0d 04 1f 1f 03 0f 0f +50 00 59 0d 01 1f 1f 03 0f 0f 19 00 63 0d 02 75 1c 00 19 00 22 00 00 04 00 +63 00 00 00 00 32 00 45 20 4f 72 67 61 6e 2e 2e 32 63 63 63 32 32 32 00 00 +00 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Organ..3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 16 03 08 0f 00 06 4c 0d 02 1f 1f 03 0c 0f 14 05 5c 0d 04 1f 1f 1f 0c 0f +00 05 63 04 01 1f 1f 02 0c 0f 19 05 63 04 02 06 23 00 0e 00 32 18 00 04 00 +63 00 00 00 00 32 00 45 20 4f 72 67 61 6e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 30 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Organ..3 +** Source: from a library of patches collected by Duane Bowker, author unknown +18 16 03 08 0f 00 00 4c 0d 02 1f 1f 03 0c 0f 14 00 5c 0d 04 1f 1f 1f 0c 0f +00 00 63 04 01 1f 1f 02 0c 0f 19 00 63 04 02 06 23 00 0e 00 32 18 00 04 00 +63 00 00 00 00 32 00 45 20 4f 72 67 61 6e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 30 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Organ..4 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 16 00 08 0f 00 44 55 08 03 1f 1f 00 0c 0f 14 03 5c 0a 00 1f 1f 00 0c 0f +00 06 50 08 06 1f 1f 00 0c 0f 19 05 63 00 06 46 0e 00 47 4e 16 18 00 04 00 +63 00 00 00 00 32 00 45 20 4f 72 67 61 6e 2e 2e 34 63 63 63 32 32 32 00 00 +00 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Organ..4 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 16 00 08 0f 00 40 55 08 03 1f 1f 00 0c 0f 14 00 5c 0a 00 1f 1f 00 0c 0f +00 00 50 08 06 1f 1f 00 0c 0f 19 00 63 00 06 46 0e 00 47 4e 16 18 00 04 00 +63 00 00 00 00 32 00 45 20 4f 72 67 61 6e 2e 2e 34 63 63 63 32 32 32 00 00 +00 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Organ..5 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1e 16 00 08 0f 00 05 5a 04 0e 1b 1f 00 0c 0f 14 02 56 08 00 1f 1f 00 0c 0f +00 06 57 08 03 17 1f 00 0c 0f 19 05 63 00 06 47 0e 00 47 00 22 18 00 04 00 +63 00 00 00 00 32 00 45 20 4f 72 67 61 6e 2e 2e 35 63 63 63 32 32 32 00 00 +00 30 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Organ..5 +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 16 00 08 0f 00 00 5a 04 0e 1b 1f 00 0c 0f 14 00 56 08 00 1f 1f 00 0c 0f +00 00 57 08 03 17 1f 00 0c 0f 19 00 63 00 06 47 0e 00 47 00 22 18 00 04 00 +63 00 00 00 00 32 00 45 20 4f 72 67 61 6e 2e 2e 35 63 63 63 32 32 32 00 00 +00 30 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Organ..6 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 0c 0f 00 04 41 08 0b 1f 1f 07 0c 0f 14 05 5c 08 03 1b 12 1f 0c 0f +00 05 50 0d 03 1c 1f 00 0c 0f 19 05 63 00 03 05 00 00 00 00 02 18 00 04 00 +63 00 00 00 00 32 00 45 20 4f 72 67 61 6e 2e 2e 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Organ..6 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 0c 0f 00 00 41 08 0b 1f 1f 07 0c 0f 14 00 5c 08 03 1b 12 1f 0c 0f +00 00 50 0d 03 1c 1f 00 0c 0f 19 00 63 00 03 05 00 00 00 00 02 18 00 04 00 +63 00 00 00 00 32 00 45 20 4f 72 67 61 6e 2e 2e 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Organ..7 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 03 0d 0f 00 03 51 00 08 1f 18 15 0a 0f 14 03 63 04 05 1b 12 06 0c 0f +00 06 63 08 06 1c 1f 06 0c 0f 19 05 63 04 06 07 21 00 0d 00 32 18 00 04 00 +63 00 00 00 00 32 00 45 20 4f 72 67 61 6e 2e 2e 37 63 63 63 32 32 32 00 00 +00 20 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Organ..7 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 03 0d 0f 00 00 51 00 08 1f 18 15 0a 0f 14 00 63 04 05 1b 12 06 0c 0f +00 00 63 08 06 1c 1f 06 0c 0f 19 00 63 04 06 07 21 00 0d 00 32 18 00 04 00 +63 00 00 00 00 32 00 45 20 4f 72 67 61 6e 2e 2e 37 63 63 63 32 32 32 00 00 +00 20 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Organ..8 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 03 0d 0f 63 05 63 13 0b 1f 18 15 0a 0f 14 05 63 04 03 1b 12 06 0c 0f +00 04 63 04 03 1c 1f 06 0c 0f 19 05 63 00 03 07 27 00 0d 00 42 18 00 04 00 +63 00 00 00 00 32 00 45 20 4f 72 67 61 6e 2e 2e 38 63 63 63 32 32 32 00 00 +00 00 00 20 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Organ..8 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 03 0d 0f 63 00 63 13 0b 1f 18 15 0a 0f 14 00 63 04 03 1b 12 06 0c 0f +00 00 63 04 03 1c 1f 06 0c 0f 19 00 63 00 03 07 27 00 0d 00 42 18 00 04 00 +63 00 00 00 00 32 00 45 20 4f 72 67 61 6e 2e 2e 38 63 63 63 32 32 32 00 00 +00 00 00 20 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Organ..9 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0c 00 09 0f 00 03 41 16 03 1f 1f 00 0a 0f 00 05 47 04 03 1f 1f 00 09 0f +00 05 14 0a 03 1f 1f 00 09 0f 00 05 5a 04 03 40 23 00 06 00 52 18 04 04 00 +28 32 00 00 00 32 00 45 20 4f 72 67 61 6e 2e 2e 39 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Organ..9 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0c 00 09 0f 00 00 41 16 03 1f 1f 00 0a 0f 00 00 47 04 03 1f 1f 00 09 0f +00 00 14 0a 03 1f 1f 00 09 0f 00 00 5a 04 03 40 23 00 06 00 52 18 04 04 00 +28 32 00 00 00 32 00 45 20 4f 72 67 61 6e 2e 2e 39 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Organ.10 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 04 0d 0f 63 03 46 0a 03 1f 1f 04 0c 0f 00 05 63 08 03 1f 1f 03 0d 0f +63 05 63 04 03 1f 1f 01 0d 0f 00 05 63 04 03 2d 2e 00 22 00 12 0c 00 04 00 +63 00 00 00 00 32 00 45 20 4f 72 67 61 6e 2e 31 30 63 63 63 32 32 32 00 00 +00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Organ.10 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 04 0d 0f 63 00 46 0a 03 1f 1f 04 0c 0f 00 00 63 08 03 1f 1f 03 0d 0f +63 00 63 04 03 1f 1f 01 0d 0f 00 00 63 04 03 2d 2e 00 22 00 12 0c 00 04 00 +63 00 00 00 00 32 00 45 20 4f 72 67 61 6e 2e 31 30 63 63 63 32 32 32 00 00 +00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Organ.11 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0c 00 09 0f 63 03 4d 04 03 1f 1f 00 0a 0f 10 06 41 04 02 1f 1f 00 09 0f +00 05 35 04 03 1f 1f 00 09 0f 01 05 5a 04 04 43 23 00 06 00 52 18 04 04 00 +28 32 00 00 00 32 00 45 20 4f 72 67 61 6e 2e 31 31 63 63 63 32 32 32 00 20 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Organ.11 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0c 00 09 0f 63 00 4d 04 03 1f 1f 00 0a 0f 10 00 41 04 02 1f 1f 00 09 0f +00 00 35 04 03 1f 1f 00 09 0f 01 00 5a 04 04 43 23 00 06 00 52 18 04 04 00 +28 32 00 00 00 32 00 45 20 4f 72 67 61 6e 2e 31 31 63 63 63 32 32 32 00 20 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Organ.12 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 03 0d 0f 63 04 44 0a 0b 04 15 03 07 0f 14 05 63 00 03 1b 12 06 0c 0f +00 05 63 04 03 19 15 0a 09 0f 19 05 5d 04 04 44 1d 00 0d 00 32 18 00 04 00 +63 00 00 00 00 32 00 45 20 4f 72 67 61 6e 2e 31 32 63 63 63 32 32 32 00 00 +00 10 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Organ.12 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 03 0d 0f 63 00 44 0a 0b 04 15 03 07 0f 14 00 63 00 03 1b 12 06 0c 0f +00 00 63 04 03 19 15 0a 09 0f 19 00 5d 04 04 44 1d 00 0d 00 32 18 00 04 00 +63 00 00 00 00 32 00 45 20 4f 72 67 61 6e 2e 31 32 63 63 63 32 32 32 00 00 +00 10 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Organ.13 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0c 00 09 0f 00 04 2d 08 03 1f 1f 00 0a 0f 00 05 47 00 03 1a 1f 02 09 0f +00 05 2a 0a 03 1a 1f 02 09 0f 00 05 5f 04 03 42 23 00 06 00 42 18 04 04 00 +28 32 00 00 00 32 00 45 20 4f 72 67 61 6e 2e 31 33 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Organ.13 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0c 00 09 0f 00 00 2d 08 03 1f 1f 00 0a 0f 00 00 47 00 03 1a 1f 02 09 0f +00 00 2a 0a 03 1a 1f 02 09 0f 00 00 5f 04 03 42 23 00 06 00 42 18 04 04 00 +28 32 00 00 00 32 00 45 20 4f 72 67 61 6e 2e 31 33 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E.Organ 1 +** Controls: MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank C, voice 26 +1f 0b 01 0f 08 18 40 5f 0a 0e 1f 1f 00 0e 0f 00 40 5f 04 06 1f 1f 00 0e 0f +00 40 63 05 00 1f 1f 00 0e 0f 00 40 5f 00 08 1f 20 00 03 00 5a 18 02 04 00 +63 32 32 00 00 32 00 45 2e 4f 72 67 61 6e 20 20 31 63 63 63 32 32 32 00 00 +00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E.Organ 2 +** Controls: MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank C, voice 27 +1f 0a 00 0b 0a 20 40 43 04 03 1f 1f 00 0c 0f 1a 00 5f 08 06 1f 09 00 0c 0f +08 00 5d 04 03 1f 1f 00 0c 0f 00 00 5f 0a 00 26 23 00 01 2a 42 0c 02 04 00 +28 32 00 00 00 32 00 45 2e 4f 72 67 61 6e 20 20 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E.Organ 2 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0d 00 0b 0d 20 40 43 04 03 1f 1f 00 0c 0f 1a 00 5f 08 06 1f 09 00 0c 0f +08 00 5d 04 03 1f 1f 00 0c 0f 00 00 5f 0a 00 26 23 00 01 2a 42 0c 02 04 00 +28 32 00 00 00 32 00 45 2e 4f 72 67 61 6e 20 20 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E.Organ 3 +** Source: Yamaha DX11 factory preset, bank C, voice 28 +1f 14 00 0f 0a 00 40 5e 0a 01 1f 1f 00 0f 0a 00 40 5c 04 00 1f 1f 00 0f 0a +00 40 63 08 05 1f 1f 00 0f 0a 00 40 63 04 06 2f 21 00 00 15 4a 18 02 04 00 +28 32 00 00 00 32 00 45 2e 4f 72 67 61 6e 20 20 33 63 63 63 32 32 32 00 00 +00 00 00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E.Organ 3 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 14 00 0f 0d 00 40 5e 0a 01 1f 1f 00 0f 0d 00 40 5c 04 00 1f 1f 00 0f 0d +00 40 63 08 05 1f 1f 00 0f 0d 00 40 63 04 06 2f 21 00 00 15 4a 18 02 04 00 +28 32 00 00 00 32 00 45 2e 4f 72 67 61 6e 20 20 33 63 63 63 32 32 32 00 00 +00 00 00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E.Organ 4 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: Yamaha DX11 factory preset, bank C, voice 29 +14 00 00 06 0f 1b 00 55 08 00 15 00 00 06 0f 00 00 56 08 06 18 01 00 07 0f +00 00 5c 08 00 17 01 00 06 0f 00 00 63 04 06 3f 23 00 19 00 52 0c 02 04 00 +63 32 00 63 00 32 00 45 2e 4f 72 67 61 6e 20 20 34 63 63 63 32 32 32 00 00 +00 40 00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Farcheeza +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank A, voice 21 +1f 00 00 0b 0f 1b 00 5a 13 03 1f 00 00 0b 0f 00 00 63 08 03 1f 00 00 0b 0f +00 00 63 0d 03 1f 00 00 0b 0f 00 00 63 04 03 3f 23 00 12 00 42 0c 07 04 00 +63 32 00 63 00 32 00 46 61 72 63 68 65 65 7a 61 20 63 63 63 32 32 32 00 40 +00 50 00 50 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hammond * +** Controls: MW (LFO pitch), MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0f 00 0c 00 1c 40 61 0e 03 1c 19 00 0b 0f 14 40 63 04 06 1c 10 00 0c 0f +15 40 63 08 00 1c 06 00 0c 0f 14 40 63 00 03 2f 25 00 03 0b 3a 11 02 04 00 +28 0b 40 00 00 32 00 48 61 6d 6d 6f 6e 64 20 20 2a 63 63 63 32 32 32 00 03 +00 08 00 04 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + +--Bank 13 + +** Name: Hammond..1 +** Controls: KV, MW (LFO pitch), MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +02 04 10 0a 05 00 22 52 04 13 1f 08 00 0d 0c 12 26 3d 0d 03 04 1f 00 0d 0f +0d 5d 46 04 1b 16 1f 00 0d 0f 00 7c 5f 04 03 41 23 0e 10 10 46 18 05 04 00 +63 63 63 00 00 32 00 48 61 6d 6d 6f 6e 64 2e 2e 31 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hammond..1 +** Controls: KV, MW (LFO pitch), MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +02 04 10 0a 05 00 22 52 04 13 1f 08 00 0d 0c 12 21 3d 0d 03 04 1f 00 0d 0f +0d 59 46 04 1b 16 1f 00 0d 0f 00 78 5f 04 03 41 23 0e 10 10 46 18 05 04 00 +63 63 63 00 00 32 00 48 61 6d 6d 6f 6e 64 2e 2e 31 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hammond..2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 1f 00 0a 0b 19 03 4a 04 03 1f 1a 00 0d 0c 52 03 46 04 1a 1f 1f 00 0d 0f +19 06 46 04 12 1b 1e 00 09 0f 63 05 5b 08 03 03 25 00 07 00 31 0c 02 04 00 +63 32 00 00 01 32 00 48 61 6d 6d 6f 6e 64 2e 2e 32 63 63 63 32 32 32 00 20 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hammond..2 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 1f 00 0a 0b 19 00 4a 04 03 1f 1a 00 0d 0c 52 00 46 04 1a 1f 1f 00 0d 0f +19 00 46 04 12 1b 1e 00 09 0f 63 00 5b 08 03 03 25 00 07 00 31 0c 02 04 00 +63 32 00 00 01 32 00 48 61 6d 6d 6f 6e 64 2e 2e 32 63 63 63 32 32 32 00 20 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hammond..3 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0e 05 08 06 00 03 47 04 03 1f 1f 04 07 0e 00 04 5b 08 01 19 1f 00 07 0f +00 05 4e 0a 05 1f 1f 00 07 0e 00 45 63 04 04 0d 0e 00 14 18 3a 0c 02 04 00 +63 32 00 32 00 32 00 48 61 6d 6d 6f 6e 64 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hammond..3 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0e 05 08 06 00 00 47 04 03 1f 1f 04 07 0e 00 00 5b 08 01 19 1f 00 07 0f +00 00 4e 0a 05 1f 1f 00 07 0e 00 40 63 04 04 0d 0e 00 14 18 3a 0c 02 04 00 +63 32 00 32 00 32 00 48 61 6d 6d 6f 6e 64 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hammond..4 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 05 01 03 0d 2d 03 53 0a 13 1f 05 00 05 0b 2d 04 47 04 13 1f 08 00 03 0c +43 06 5c 19 1b 1c 06 04 04 07 00 05 63 04 13 3f 23 00 23 00 32 0c 06 04 00 +63 32 00 32 00 32 00 48 61 6d 6d 6f 6e 64 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 40 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hammond..4 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 05 01 03 0d 2d 00 53 0a 13 1f 05 00 05 0b 2d 01 47 04 13 1f 08 00 03 0c +43 01 5c 19 1b 1c 06 04 04 07 00 00 63 04 13 3f 23 00 23 00 32 0c 06 04 00 +63 32 00 32 00 32 00 48 61 6d 6d 6f 6e 64 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 40 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hammond..5 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0a 00 10 04 00 00 45 32 04 03 1d 0c 00 0f 0f 01 45 40 04 03 1a 17 00 0f 0f +51 05 56 08 0b 1e 12 00 0f 0f 10 04 63 08 0b 0c 1d 00 47 55 36 0c 0c 04 00 +63 32 00 00 00 32 00 48 61 6d 6d 6f 6e 64 2e 2e 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hammond..5 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0a 00 10 04 00 00 40 32 04 03 1d 0c 00 0f 0f 01 40 40 04 03 1a 17 00 0f 0f +51 00 56 08 0b 1e 12 00 0f 0f 10 00 63 08 0b 0c 1d 00 47 55 36 0c 0c 04 00 +63 32 00 00 00 32 00 48 61 6d 6d 6f 6e 64 2e 2e 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hammond..6 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 1f 00 0a 0b 19 03 54 04 13 1f 1a 00 0d 0c 52 05 50 04 0a 1f 1f 00 0d 0f +19 05 43 0a 1a 1b 1e 00 09 0f 63 05 63 04 03 0b 1f 00 0f 00 32 0c 02 04 00 +63 32 00 00 01 32 00 48 61 6d 6d 6f 6e 64 2e 2e 36 63 63 63 32 32 32 00 30 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hammond..6 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 1f 00 0a 0b 19 00 54 04 13 1f 1a 00 0d 0c 52 00 50 04 0a 1f 1f 00 0d 0f +19 00 43 0a 1a 1b 1e 00 09 0f 63 00 63 04 03 0b 1f 00 0f 00 32 0c 02 04 00 +63 32 00 00 01 32 00 48 61 6d 6d 6f 6e 64 2e 2e 36 63 63 63 32 32 32 00 30 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hammond..7 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +17 0d 10 04 00 00 45 46 0a 03 1d 0c 00 0f 0f 01 45 40 08 03 1a 17 00 0f 0f +51 04 55 0d 0b 1e 12 00 0f 0f 10 05 63 04 0b 04 21 00 15 23 26 0c 0c 04 00 +63 32 00 00 00 32 00 48 61 6d 6d 6f 6e 64 2e 2e 37 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hammond..7 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +17 0d 10 04 00 00 40 46 0a 03 1d 0c 00 0f 0f 01 40 40 08 03 1a 17 00 0f 0f +51 00 55 0d 0b 1e 12 00 0f 0f 10 00 63 04 0b 04 21 00 15 23 26 0c 0c 04 00 +63 32 00 00 00 32 00 48 61 6d 6d 6f 6e 64 2e 2e 37 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: HamondLead +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 16 04 0a 0f 00 04 58 00 00 12 15 04 0a 0f 00 05 63 00 08 12 15 04 0a 0f +00 06 63 00 0e 12 15 04 0a 0f 00 04 63 00 0b 06 24 0f 35 00 32 18 02 04 00 +63 63 00 00 00 32 00 48 61 6d 6f 6e 64 4c 65 61 64 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: HamondLead +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 16 04 0a 0f 00 01 58 00 00 12 15 04 0a 0f 00 00 63 00 08 12 15 04 0a 0f +00 00 63 00 0e 12 15 04 0a 0f 00 00 63 00 0b 06 24 0f 35 00 32 18 02 04 00 +63 63 00 00 00 32 00 48 61 6d 6f 6e 64 4c 65 61 64 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hmnd LS f1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 09 07 0f 0f 00 03 63 0a 05 1b 18 10 0f 0f 00 44 63 08 01 1c 18 07 0f 0f +0a 03 63 08 05 1c 18 07 0f 0f 00 05 63 04 02 2f 30 00 34 63 16 0c 07 04 00 +63 63 00 00 00 32 00 48 6d 6e 64 20 4c 53 20 66 31 63 63 63 32 32 32 00 00 +00 40 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hmnd LS f1 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 09 07 0f 0f 00 00 63 0a 05 1b 18 10 0f 0f 00 40 63 08 01 1c 18 07 0f 0f +0a 00 63 08 05 1c 18 07 0f 0f 00 00 63 04 02 2f 30 00 34 63 16 0c 07 04 00 +63 63 00 00 00 32 00 48 6d 6e 64 20 4c 53 20 66 31 63 63 63 32 32 32 00 00 +00 40 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hmnd LS f2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 18 07 0d 0f 00 03 63 04 05 1b 07 07 0d 0f 00 04 60 04 01 1c 18 07 0d 0f +0a 04 5f 04 05 1c 18 07 0d 0f 00 05 60 00 02 07 1b 00 0f 63 36 18 07 04 00 +63 63 00 00 00 32 00 48 6d 6e 64 20 4c 53 20 66 32 63 63 63 32 32 32 00 00 +00 30 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hmnd LS f2 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 18 07 0d 0f 00 00 63 04 05 1b 07 07 0d 0f 00 00 60 04 01 1c 18 07 0d 0f +0a 00 5f 04 05 1c 18 07 0d 0f 00 00 60 00 02 07 1b 00 0f 63 36 18 07 04 00 +63 63 00 00 00 32 00 48 6d 6e 64 20 4c 53 20 66 32 63 63 63 32 32 32 00 00 +00 30 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hmnd LS s1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 07 01 0d 0f 00 05 5c 04 05 1b 07 07 0d 0f 00 05 5f 08 01 1c 18 07 0d 0f +0a 05 5f 08 05 1c 18 07 0d 0f 00 05 5f 04 02 27 30 00 0e 00 22 18 07 04 00 +63 63 00 00 00 32 00 48 6d 6e 64 20 4c 53 20 73 31 63 63 63 32 32 32 00 20 +00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hmnd LS s1 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 07 01 0d 0f 00 00 5c 04 05 1b 07 07 0d 0f 00 00 5f 08 01 1c 18 07 0d 0f +0a 00 5f 08 05 1c 18 07 0d 0f 00 00 5f 04 02 27 30 00 0e 00 22 18 07 04 00 +63 63 00 00 00 32 00 48 6d 6e 64 20 4c 53 20 73 31 63 63 63 32 32 32 00 20 +00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hornopean +** Description: A loud, obnoxious organ stop +** Controls: MW (LFO pitch) +** Source: Art Hitzeman +12 1f 00 07 0f 19 00 58 00 03 10 1f 00 06 0f 19 00 5a 04 03 17 1f 00 07 0f +19 00 5a 04 03 0e 1f 00 06 0f 19 00 5a 04 03 45 00 01 04 00 62 18 02 04 00 +28 32 00 00 00 32 00 48 6f 72 6e 6f 70 65 61 6e 20 63 63 63 32 32 32 00 00 +00 70 00 60 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Jazz Organ +** Description: An organ with jazz potential +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: GLIB (Michael Kesti and others) +1f 0a 00 0b 0f 00 00 52 0a 06 1f 1f 00 0a 0f 00 00 5b 04 00 1f 12 0e 0a 0f +00 00 58 13 06 1f 1f 00 0a 0f 00 40 4f 04 06 1f 23 00 02 00 4e 0c 07 04 00 +63 32 32 32 00 32 00 4a 61 7a 7a 20 4f 72 67 61 6e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Leslie * +** Controls: MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 1f 07 0c 0f 42 40 59 33 03 1b 1f 00 0b 0f 00 40 63 0a 00 1b 1f 00 0b 0f +00 40 56 1c 06 1b 1f 00 0b 0f 00 40 5c 04 06 1f 22 00 05 17 66 05 02 04 00 +28 00 37 00 00 32 00 4c 65 73 6c 69 65 20 20 20 2a 63 63 63 32 32 32 00 07 +00 10 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Organ 1 +** Description: An electric organ +** Controls: KV, MW (LFO pitch), MW (LFO amplitude) +** Source: GLIB (Michael Kesti and others) +1f 0a 01 0b 00 00 7d 5f 0a 06 1f 1f 01 0a 0f 00 7f 63 08 00 1f 1f 01 0a 0f +00 7f 63 0a 06 1f 1f 01 0a 0f 00 7e 63 04 06 1f 27 00 14 1c 36 0c 04 04 00 +63 32 32 00 00 32 00 4f 72 67 61 6e 20 20 20 20 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Organ 2 +** Description: An electric organ +** Source: GLIB (Michael Kesti and others) +1f 0f 00 06 0f 00 00 40 00 03 1f 0f 00 09 0f 00 00 46 04 03 1f 0f 00 06 0f +00 00 5a 00 03 1f 0f 00 09 0f 00 00 5a 04 03 04 00 00 00 00 02 18 00 04 00 +63 32 32 32 00 32 00 4f 72 67 61 6e 20 32 20 20 20 63 63 63 32 32 32 00 00 +00 10 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Organ 3 +** Description: An electric organ +** Source: GLIB (Michael Kesti and others) +1f 0f 00 06 0f 4e 00 50 00 03 1f 0f 00 09 0f 36 00 46 04 03 1f 0f 00 06 0f +00 00 5a 00 03 1f 0f 00 09 0f 00 00 5a 04 03 04 00 00 00 00 02 18 00 04 00 +63 32 32 32 00 32 00 4f 72 67 61 6e 20 33 20 20 20 63 63 63 32 32 32 00 00 +00 10 00 10 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ornt Organ +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 18 06 07 00 00 03 4f 3d 0b 1d 07 07 08 0b 00 02 63 04 0b 1d 07 07 08 0b +00 05 63 04 0e 1d 07 07 08 0b 00 04 5a 04 0b 2e 63 21 00 00 40 18 04 04 00 +28 32 00 00 00 32 00 4f 72 6e 74 20 4f 72 67 61 6e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ornt Organ +** Source: from a library of patches collected by Duane Bowker, author unknown +18 18 06 07 00 00 00 4f 3d 0b 1d 07 07 08 0b 00 00 63 04 0b 1d 07 07 08 0b +00 00 63 04 0e 1d 07 07 08 0b 00 00 5a 04 0b 2e 63 21 00 00 40 18 04 04 00 +28 32 00 00 00 32 00 4f 72 6e 74 20 4f 72 67 61 6e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + +* SUBCATEGORY Organ2 + + +** Name: P Organ..1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1a 1f 00 06 0f 00 0d 63 13 03 1a 1f 00 06 0f 00 0d 63 08 03 1a 1f 00 06 0f +00 0d 63 0a 03 1a 1f 00 06 0f 00 0d 63 04 03 2f 21 19 1d 00 52 0c 07 04 00 +63 63 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ..1 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1a 1f 00 06 0f 00 08 63 13 03 1a 1f 00 06 0f 00 08 63 08 03 1a 1f 00 06 0f +00 08 63 0a 03 1a 1f 00 06 0f 00 08 63 04 03 2f 21 19 1d 00 52 0c 07 04 00 +63 63 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ..2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1a 1f 00 06 0f 00 04 45 19 03 1a 1f 00 06 0f 00 06 50 04 03 1a 1f 00 06 0f +00 05 63 04 03 1a 1f 00 06 0f 00 05 63 00 03 34 21 19 1d 00 52 0c 07 04 00 +63 63 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 2e 32 63 63 63 32 32 32 00 00 +00 20 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ..2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1a 1f 00 06 0f 00 01 45 19 03 1a 1f 00 06 0f 00 01 50 04 03 1a 1f 00 06 0f +00 00 63 04 03 1a 1f 00 06 0f 00 00 63 00 03 34 21 19 1d 00 52 0c 07 04 00 +63 63 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 2e 32 63 63 63 32 32 32 00 00 +00 20 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ..3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +14 1f 13 08 0e 00 03 43 19 03 1a 1f 00 06 0f 00 03 44 04 03 10 07 07 09 0f +00 05 63 08 03 1a 1f 00 06 0f 00 05 63 08 03 34 21 19 1d 00 52 0c 07 04 00 +63 63 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 2e 33 63 63 63 32 32 32 00 30 +00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ..3 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +14 1f 13 08 0e 00 00 43 19 03 1a 1f 00 06 0f 00 00 44 04 03 10 07 07 09 0f +00 00 63 08 03 1a 1f 00 06 0f 00 00 63 08 03 34 21 19 1d 00 52 0c 07 04 00 +63 63 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 2e 33 63 63 63 32 32 32 00 30 +00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ..4 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 1f 00 08 0f 00 05 50 00 03 16 1f 00 07 0f 00 06 4f 04 03 0d 1f 00 06 0f +00 06 63 0d 03 15 1f 00 07 0f 00 05 63 04 03 04 23 41 00 00 12 18 07 04 00 +63 63 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 2e 34 63 63 63 32 32 32 00 60 +00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ..4 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +15 1f 00 08 0f 00 01 50 00 03 16 1f 00 07 0f 00 01 4f 04 03 0d 1f 00 06 0f +00 01 63 0d 03 15 1f 00 07 0f 00 00 63 04 03 04 23 41 00 00 12 18 07 04 00 +63 63 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 2e 34 63 63 63 32 32 32 00 60 +00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ..5 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 05 06 0f 00 02 4c 0d 03 1d 1f 05 08 0f 00 04 5a 04 02 13 1f 07 07 0f +00 05 63 08 03 18 07 06 0a 0f 00 05 63 08 04 04 23 41 00 00 12 0c 07 04 00 +63 63 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 2e 35 63 63 63 32 32 32 00 40 +00 10 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ..5 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 05 06 0f 00 01 4c 0d 03 1d 1f 05 08 0f 00 01 5a 04 02 13 1f 07 07 0f +00 00 63 08 03 18 07 06 0a 0f 00 00 63 08 04 04 23 41 00 00 12 0c 07 04 00 +63 63 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 2e 35 63 63 63 32 32 32 00 40 +00 10 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ..6 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 06 03 06 0f 00 05 4c 1f 03 12 03 03 08 0f 00 05 63 08 02 12 07 04 07 0f +00 05 63 08 03 16 03 04 0a 0f 00 05 63 04 04 2e 23 41 00 00 12 0c 07 04 00 +63 63 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 2e 36 63 63 63 32 32 32 00 10 +00 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ..6 +** Source: from a library of patches collected by Duane Bowker, author unknown +16 06 03 06 0f 00 00 4c 1f 03 12 03 03 08 0f 00 00 63 08 02 12 07 04 07 0f +00 00 63 08 03 16 03 04 0a 0f 00 00 63 04 04 2e 23 41 00 00 12 0c 07 04 00 +63 63 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 2e 36 63 63 63 32 32 32 00 10 +00 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ..7 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 07 03 07 0f 00 05 4a 1f 03 1f 05 03 09 0f 00 06 54 00 02 12 05 04 08 0f +00 06 63 08 03 0d 05 04 0a 0f 00 05 63 00 04 04 23 41 00 00 12 0c 07 04 00 +63 63 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 2e 37 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ..7 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +16 07 03 07 0f 00 01 4a 1f 03 1f 05 03 09 0f 00 01 54 00 02 12 05 04 08 0f +00 00 63 08 03 0d 05 04 0a 0f 00 00 63 00 04 04 23 41 00 00 12 0c 07 04 00 +63 63 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 2e 37 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ..8 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1a 1f 00 09 0f 00 06 4c 2a 0b 1a 1f 00 06 0f 00 06 5b 00 04 13 1f 00 0a 0f +00 05 63 08 03 10 1f 00 06 0f 00 45 63 00 04 24 21 19 16 23 46 0c 07 04 00 +63 63 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 2e 38 63 63 63 32 32 32 00 10 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ..8 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1a 1f 00 09 0f 00 01 4c 2a 0b 1a 1f 00 06 0f 00 01 5b 00 04 13 1f 00 0a 0f +00 00 63 08 03 10 1f 00 06 0f 00 40 63 00 04 24 21 19 16 23 46 0c 07 04 00 +63 63 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 2e 38 63 63 63 32 32 32 00 10 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ..9 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 06 03 07 0f 00 06 44 13 03 12 03 03 08 0f 00 06 57 08 02 12 07 04 09 0f +00 05 63 0d 03 10 03 04 0a 0f 00 05 63 04 04 2c 23 41 00 00 12 0c 07 04 00 +63 63 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 2e 39 63 63 63 32 32 32 00 00 +00 20 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ..9 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +16 06 03 07 0f 00 01 44 13 03 12 03 03 08 0f 00 01 57 08 02 12 07 04 09 0f +00 00 63 0d 03 10 03 04 0a 0f 00 00 63 04 04 2c 23 41 00 00 12 0c 07 04 00 +63 63 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 2e 39 63 63 63 32 32 32 00 00 +00 20 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ.10 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +19 00 00 0a 0f 3e 46 4e 0d 06 10 00 00 0a 0f 63 05 63 08 06 18 00 00 0a 0f +00 06 63 08 06 15 00 00 0a 0f 00 05 63 04 01 06 23 00 00 38 16 18 00 04 00 +63 00 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 31 30 63 63 63 32 32 32 00 00 +00 00 00 60 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ.10 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +19 00 00 0a 0f 3e 41 4e 0d 06 10 00 00 0a 0f 63 00 63 08 06 18 00 00 0a 0f +00 01 63 08 06 15 00 00 0a 0f 00 00 63 04 01 06 23 00 00 38 16 18 00 04 00 +63 00 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 31 30 63 63 63 32 32 32 00 00 +00 00 00 60 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ.11 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 00 00 0a 0f 00 03 47 08 02 18 00 00 05 0f 5b 04 63 00 00 0f 00 00 08 0f +00 05 63 08 10 0e 00 00 05 0f 00 05 63 00 16 3c 23 00 00 00 02 0c 00 04 00 +63 00 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 31 31 63 63 63 32 32 32 00 00 +00 70 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ.11 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +16 00 00 0a 0f 00 01 47 08 02 18 00 00 05 0f 5b 01 63 00 00 0f 00 00 08 0f +00 00 63 08 10 0e 00 00 05 0f 00 00 63 00 16 3c 23 00 00 00 02 0c 00 04 00 +63 00 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 31 31 63 63 63 32 32 32 00 00 +00 70 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ.12 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 07 01 0a 0f 00 03 56 13 05 1b 07 01 07 0f 5b 05 4f 04 02 12 07 01 09 0f +00 03 61 08 12 0d 07 07 05 0f 00 05 63 00 14 2c 23 00 00 00 02 0c 00 04 00 +63 00 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 31 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ.12 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +16 07 01 0a 0f 00 01 56 13 05 1b 07 01 07 0f 5b 00 4f 04 02 12 07 01 09 0f +00 00 61 08 12 0d 07 07 05 0f 00 00 63 00 14 2c 23 00 00 00 02 0c 00 04 00 +63 00 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 31 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ.13 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 07 00 0a 0f 43 03 4f 13 05 1f 07 00 07 03 5b 04 52 04 02 12 07 01 09 0f +2e 05 5f 08 02 0d 07 00 05 0f 00 05 63 00 04 2c 23 00 00 00 02 0c 00 04 00 +63 00 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 31 33 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ.13 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +15 07 00 0a 0f 43 01 4f 13 05 1f 07 00 07 03 5b 01 52 04 02 12 07 01 09 0f +2e 00 5f 08 02 0d 07 00 05 0f 00 00 63 00 04 2c 23 00 00 00 02 0c 00 04 00 +63 00 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 31 33 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ.14 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 07 00 07 0f 43 04 59 0d 05 15 04 00 08 0f 15 06 57 00 02 12 07 01 08 0f +2e 04 62 04 02 11 03 00 06 0f 00 05 63 00 04 2c 23 00 16 00 22 18 00 04 00 +63 00 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 31 34 63 63 63 32 32 32 00 00 +00 50 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ.14 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +15 07 00 07 0f 43 00 59 0d 05 15 04 00 08 0f 15 01 57 00 02 12 07 01 08 0f +2e 00 62 04 02 11 03 00 06 0f 00 00 63 00 04 2c 23 00 16 00 22 18 00 04 00 +63 00 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 31 34 63 63 63 32 32 32 00 00 +00 50 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ.15 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +13 04 00 07 0f 43 03 58 19 0c 12 04 00 08 0f 5b 04 5c 04 0a 0f 04 00 08 0f +2e 05 63 08 02 0f 04 00 06 0f 00 05 63 00 03 2c 23 00 00 00 02 18 00 04 00 +63 00 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 31 35 63 63 63 32 32 32 00 30 +00 30 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ.15 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +13 04 00 07 0f 43 01 58 19 0c 12 04 00 08 0f 5b 01 5c 04 0a 0f 04 00 08 0f +2e 00 63 08 02 0f 04 00 06 0f 00 00 63 00 03 2c 23 00 00 00 02 18 00 04 00 +63 00 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 31 35 63 63 63 32 32 32 00 30 +00 30 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ.16 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +13 04 00 07 0f 43 04 47 19 0c 12 04 00 08 0f 5b 03 4d 04 0a 0f 04 00 08 0f +2e 06 63 0d 02 0f 04 00 06 0f 00 05 63 00 03 2e 23 00 00 00 02 18 00 04 00 +63 00 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 31 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ.16 +** Source: from a library of patches collected by Duane Bowker, author unknown +13 04 00 07 0f 43 00 47 19 0c 12 04 00 08 0f 5b 00 4d 04 0a 0f 04 00 08 0f +2e 00 63 0d 02 0f 04 00 06 0f 00 00 63 00 03 2e 23 00 00 00 02 18 00 04 00 +63 00 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 31 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ.17 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1a 1f 00 06 0f 00 06 51 13 03 1a 1f 00 06 0f 00 06 45 08 03 1a 1f 00 06 0f +00 07 50 0a 03 1a 1f 00 06 0f 00 05 63 04 03 29 21 19 1d 00 52 0c 07 04 00 +63 63 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 31 37 63 63 63 32 32 32 00 00 +00 10 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P Organ.17 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1a 1f 00 06 0f 00 01 51 13 03 1a 1f 00 06 0f 00 01 45 08 03 1a 1f 00 06 0f +00 02 50 0a 03 1a 1f 00 06 0f 00 00 63 04 03 29 21 19 1d 00 52 0c 07 04 00 +63 63 00 00 00 32 00 50 20 4f 72 67 61 6e 2e 31 37 63 63 63 32 32 32 00 00 +00 10 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P.Organ 1 +** Source: Yamaha DX11 factory preset, bank C, voice 30 +1e 1f 00 06 0f 0a 00 4c 00 0b 0a 1f 00 0a 0f 19 00 4c 10 0e 14 1f 00 0a 0f +00 00 5a 04 0b 13 1f 00 0a 0f 19 00 4c 0a 08 16 46 00 00 00 22 18 02 04 00 +28 32 00 00 00 32 00 50 2e 4f 72 67 61 6e 20 20 31 63 63 63 32 32 32 00 20 +00 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P.Organ 1 +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 1f 00 06 0f 0a 00 4c 00 0b 0d 1f 00 0a 0f 19 00 4c 10 0e 14 1f 00 0a 0f +00 00 5a 04 0b 13 1f 00 0a 0f 19 00 4c 0a 08 16 46 00 00 00 22 18 02 04 00 +28 32 00 00 00 32 00 50 2e 4f 72 67 61 6e 20 20 31 63 63 63 32 32 32 00 20 +00 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P.Organ 2 +** Source: Yamaha DX11 factory preset, bank C, voice 31 +12 1f 00 09 0f 00 00 5e 04 03 10 1f 00 08 0f 00 00 60 08 05 17 1f 00 09 0f +00 00 5f 0a 06 0e 1f 00 08 0f 00 00 5e 00 00 37 23 01 00 00 62 18 02 04 00 +28 32 00 00 00 32 00 50 2e 4f 72 67 61 6e 20 20 32 63 63 63 32 32 32 00 20 +00 30 00 20 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P.Organ 2 +** Source: from a library of patches collected by Duane Bowker, author unknown +12 1f 00 09 0f 00 00 5e 04 03 10 1f 00 08 0f 00 00 60 08 05 17 1f 00 09 0f +00 00 5f 0d 06 0e 1f 00 08 0f 00 00 5e 00 00 37 23 01 00 00 62 18 02 04 00 +28 32 00 00 00 32 00 50 2e 4f 72 67 61 6e 20 20 32 63 63 63 32 32 32 00 20 +00 30 00 20 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P.Organ 1' +** Description: DX11 factory preset 'P.Organ 1' with slower decay +** Source: Art Hitzeman +1e 1f 00 05 0f 0a 00 4c 00 0b 0a 1f 00 06 0f 19 00 4c 10 0e 14 1f 00 06 0f +00 00 5a 04 0b 13 1f 00 05 0f 19 00 4c 0a 08 16 46 00 00 00 22 18 02 04 00 +28 32 00 00 00 32 00 50 2e 4f 72 67 61 6e 20 31 27 63 63 63 32 32 32 00 20 +00 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P.Organ 2' +** Description: DX11 factory preset 'P.Organ 2' with slower decay +** Source: Art Hitzeman +12 1f 00 07 0f 00 00 5e 04 03 10 1f 00 06 0f 00 00 60 08 05 17 1f 00 07 0f +00 00 5f 0d 06 0e 1f 00 06 0f 00 00 5e 00 00 37 23 01 00 00 62 18 02 04 00 +28 32 00 00 00 32 00 50 2e 4f 72 67 61 6e 20 32 27 63 63 63 32 32 32 00 20 +00 30 00 20 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P.Organ 3 +** Description: A pipe organ +** Source: Art Hitzeman +12 1f 00 06 0f 00 00 5e 04 03 10 1f 00 05 0f 09 00 60 08 15 17 1f 00 07 0f +40 00 5f 0a 0e 0e 1f 00 05 0f 00 00 5e 00 10 37 23 01 00 00 62 18 02 04 00 +28 32 00 00 00 32 00 50 2e 4f 72 67 61 6e 20 33 20 63 63 63 32 32 32 00 30 +00 40 00 00 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P.Organ 4 +** Description: Another pipe organ +** Source: Art Hitzeman +12 1f 00 07 0f 00 00 54 04 03 10 1f 00 06 0f 63 00 63 04 03 17 1f 00 07 0f +00 00 55 08 06 0e 1f 00 06 0f 00 00 55 00 00 2f 23 01 00 00 62 18 02 04 00 +28 32 00 00 00 32 00 50 2e 4f 72 67 61 6e 20 34 20 63 63 63 32 32 32 00 10 +00 10 00 20 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P.Organ 5 +** Description: Yet another pipe organ +** Source: Art Hitzeman +12 1f 00 07 0f 00 00 5e 00 03 10 1f 00 06 0f 00 00 60 04 05 17 1f 00 07 0f +00 00 5f 08 06 0e 1f 00 06 0f 00 00 5e 00 00 37 23 01 00 00 62 18 02 04 00 +28 32 00 00 00 32 00 50 2e 4f 72 67 61 6e 20 35 20 63 63 63 32 32 32 00 00 +00 40 00 40 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PercOrgan +** Controls: MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank A, voice 17 +1f 0b 01 0b 08 18 40 5f 0a 0e 1f 1f 00 0a 0f 00 40 5f 04 00 1f 1f 00 0a 0f +00 40 63 05 06 1f 1f 00 0a 0f 00 40 5f 00 08 1f 20 00 03 00 5a 18 04 04 00 +63 32 32 00 00 32 00 50 65 72 63 4f 72 67 61 6e 20 63 63 63 32 32 32 00 00 +00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Pipe Organ +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +16 00 00 0a 0f 00 00 63 19 03 11 00 00 0a 0f 00 00 63 0d 03 17 00 00 0a 0f +00 00 63 04 03 17 00 00 0a 0f 00 00 63 00 03 07 1e 00 00 00 42 18 04 04 00 +28 32 00 00 00 32 00 50 69 70 65 20 4f 72 67 61 6e 63 63 63 32 32 32 00 70 +00 70 00 40 00 50 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PumpOrgan +** Controls: MW (LFO amplitude) +** Source: Yamaha TX81Z factory preset, bank A, voice 19 +1f 1f 00 06 0f 1e 00 4d 17 03 1f 1f 00 05 0f 00 00 50 05 04 1f 1f 00 05 0f +00 00 23 04 06 0d 1f 00 09 0f 00 40 5a 04 03 38 14 00 00 0e 3e 11 04 04 00 +63 32 0a 00 00 32 00 50 75 6d 70 4f 72 67 61 6e 20 63 63 63 32 32 32 00 25 +00 31 00 18 00 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: RevrbOrgan +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0d 03 00 05 0e 23 03 4e 05 05 0e 03 00 05 0e 23 03 4e 04 03 0b 1f 00 05 0f +00 01 63 05 06 0c 1f 00 05 0f 00 01 63 04 02 04 19 06 04 00 52 05 02 04 00 +63 0f 00 0c 00 32 00 52 65 76 72 62 4f 72 67 61 6e 63 63 63 32 32 32 00 01 +00 08 00 01 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Small Pipe +** Source: Yamaha TX81Z factory preset, bank A, voice 22 +16 00 00 0a 0f 3e 00 4b 19 06 11 00 00 0a 0f 63 00 57 0d 06 17 00 00 0a 0f +00 00 58 04 06 17 00 00 0a 0f 00 00 63 00 01 07 1e 00 00 00 42 18 04 04 00 +63 63 00 00 00 32 00 53 6d 61 6c 6c 20 50 69 70 65 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Organ 1 +** Controls: KV, MW (LFO pitch), MW (LFO amplitude) +** Source: Yamaha DX11 factory preset, bank A, voice 21 +1f 12 00 07 0a 14 02 50 0a 0b 1f 14 00 09 0e 00 42 55 08 13 1f 14 00 09 06 +00 03 63 0a 03 1f 1f 00 08 0f 00 02 63 04 0b 06 1e 0a 11 1a 5e 18 02 04 00 +63 32 23 00 00 32 00 53 79 2e 4f 72 67 61 6e 20 31 63 63 63 32 32 32 00 00 +00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Organ 1 +** Controls: KV, MW (LFO pitch), MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 12 00 07 0d 14 02 50 0d 0b 1f 14 00 09 0e 00 42 55 08 13 1f 14 00 09 06 +00 03 63 0d 03 1f 1f 00 08 0f 00 02 63 04 0b 06 1e 0d 11 1a 5e 18 02 04 00 +63 32 23 00 00 32 00 53 79 2e 4f 72 67 61 6e 20 31 63 63 63 32 32 32 00 00 +00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Organ 2 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: Yamaha DX11 factory preset, bank A, voice 22 +1b 00 00 0f 0f 1b 00 24 0a 03 1e 1c 00 04 01 00 00 44 08 02 1f 00 00 0a 0b +00 00 49 0a 04 1f 06 00 09 0f 00 00 53 04 04 3a 23 00 27 00 42 18 02 04 00 +63 63 00 63 00 32 00 53 79 2e 4f 72 67 61 6e 20 32 63 63 63 32 32 32 00 00 +00 20 00 40 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Organ 2 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 00 00 0f 0f 1b 00 24 0d 03 1e 1c 00 04 01 00 00 44 08 02 1f 00 00 0a 0b +00 00 49 0d 04 1f 06 00 09 0f 00 00 53 04 04 3a 23 00 27 00 42 18 02 04 00 +63 63 00 63 00 32 00 53 79 2e 4f 72 67 61 6e 20 32 63 63 63 32 32 32 00 00 +00 20 00 40 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tocc Organ +** Description: A pipe organ intended for Bach's Toccata & Fugue in D Minor +** (the piece the villian always plays in those horror movies) +** Source: Art Hitzeman +12 1f 00 06 0f 3c 00 5e 04 03 10 1f 00 06 0f 32 00 60 08 05 17 1f 00 07 0f +32 00 5f 0d 06 0e 1f 00 06 0f 3c 00 5e 00 00 37 23 01 00 00 62 0c 02 04 00 +28 32 00 00 00 32 00 54 6f 63 63 20 4f 72 67 61 6e 63 63 63 32 32 32 00 20 +00 30 00 20 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: VelocOrgan +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 07 00 0f 0d 32 07 2b 11 00 1c 08 00 0f 0d 41 07 49 12 04 19 08 00 0f 0d +41 07 5d 05 06 1c 1f 00 0a 0e 00 03 63 04 09 03 1d 15 05 00 52 05 02 04 00 +63 23 00 00 00 32 00 56 65 6c 6f 63 4f 72 67 61 6e 63 63 63 32 32 32 00 08 +00 04 00 11 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Wirlitzer* +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 07 06 07 0e 12 06 4a 08 08 1d 07 06 07 0e 00 06 54 00 0b 1d 06 06 07 0e +00 00 63 00 0e 1d 06 06 07 0e 00 02 63 04 08 34 23 00 00 00 32 18 02 04 00 +28 63 00 00 00 32 00 57 69 72 6c 69 74 7a 65 72 2a 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +--Bank 14 + +* SUBCATEGORY Piano1 + + +** Name: AC Piano.1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 03 02 04 04 63 06 58 0a 13 16 09 06 06 0d 00 04 4d 04 0b 1b 06 01 04 04 +63 06 63 04 0b 16 09 06 06 0d 00 07 62 04 0b 2c 23 00 00 00 02 0c 02 04 00 +63 32 00 32 00 32 00 41 43 20 50 69 61 6e 6f 2e 31 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano.1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 03 02 04 04 63 01 58 0a 13 16 09 06 06 0d 00 01 4d 04 0b 1b 06 01 04 04 +63 00 63 04 0b 16 09 06 06 0d 00 00 62 04 0b 2c 23 00 00 00 02 0c 02 04 00 +63 32 00 32 00 32 00 41 43 20 50 69 61 6e 6f 2e 31 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano.2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 05 02 04 04 63 04 3b 19 13 14 05 04 06 0d 00 05 50 04 1b 14 02 02 06 0d +00 05 3d 10 0b 15 07 06 06 0c 00 06 63 04 0b 22 23 00 00 00 02 0c 02 04 00 +63 32 00 32 00 32 00 41 43 20 50 69 61 6e 6f 2e 32 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano.2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +12 05 02 04 04 63 01 3b 19 13 14 05 04 06 0d 00 01 50 04 1b 14 02 02 06 0d +00 01 3d 10 0b 15 07 06 06 0c 00 00 63 04 0b 22 23 00 00 00 02 0c 02 04 00 +63 32 00 32 00 32 00 41 43 20 50 69 61 6e 6f 2e 32 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano.3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 01 01 03 00 1b 05 49 04 0d 14 06 05 04 09 42 06 53 04 0d 12 06 0b 03 00 +42 05 44 10 09 18 06 05 05 09 01 46 60 04 0a 1a 23 0a 00 06 56 18 04 04 00 +63 32 00 00 00 32 00 41 43 20 50 69 61 6e 6f 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano.3 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +15 01 01 03 00 1b 02 49 04 0d 14 06 05 04 09 42 01 53 04 0d 12 06 0b 03 00 +42 01 44 10 09 18 06 05 05 09 01 40 60 04 0a 1a 23 0a 00 06 56 18 04 04 00 +63 32 00 00 00 32 00 41 43 20 50 69 61 6e 6f 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano.4 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 01 01 05 00 32 44 4c 04 0d 19 09 09 05 0f 01 04 53 04 06 18 06 05 06 09 +16 45 62 04 09 19 09 09 05 0f 01 45 63 04 00 2c 19 00 00 00 66 18 01 04 00 +63 00 63 00 00 32 00 41 43 20 50 69 61 6e 6f 2e 34 63 63 63 32 32 32 00 00 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano.4 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +15 01 01 05 00 32 41 4c 04 0d 19 09 09 05 0f 01 01 53 04 06 18 06 05 06 09 +16 40 62 04 09 19 09 09 05 0f 01 40 63 04 00 2c 19 00 00 00 66 18 01 04 00 +63 00 63 00 00 32 00 41 43 20 50 69 61 6e 6f 2e 34 63 63 63 32 32 32 00 00 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano.5 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +19 07 00 07 00 00 04 49 00 08 19 1f 00 06 0f 00 05 4b 00 06 18 09 00 07 00 +00 05 43 00 00 1a 05 06 05 0a 01 06 63 04 0e 03 00 00 00 00 62 18 02 04 00 +63 63 00 00 00 32 00 41 43 20 50 69 61 6e 6f 2e 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano.5 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +19 07 00 07 00 00 01 49 00 08 19 1f 00 06 0f 00 01 4b 00 06 18 09 00 07 00 +00 00 43 00 00 1a 05 06 05 0a 01 01 63 04 0e 03 00 00 00 00 62 18 02 04 00 +63 63 00 00 00 32 00 41 43 20 50 69 61 6e 6f 2e 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano.6 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 08 03 05 0d 2d 05 49 04 03 1f 05 01 05 0f 63 05 4c 0a 03 1f 04 02 05 0e +63 05 47 04 0b 1c 1e 06 06 0f 00 06 5d 04 13 3a 23 00 00 00 62 0c 00 04 00 +63 00 00 00 00 32 00 41 43 20 50 69 61 6e 6f 2e 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano.6 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 08 03 05 0d 2d 01 49 04 03 1f 05 01 05 0f 63 01 4c 0a 03 1f 04 02 05 0e +63 01 47 04 0b 1c 1e 06 06 0f 00 00 5d 04 13 3a 23 00 00 00 62 0c 00 04 00 +63 00 00 00 00 32 00 41 43 20 50 69 61 6e 6f 2e 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano.7 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 08 00 03 00 00 04 3a 08 0c 14 06 07 04 09 23 05 48 04 15 14 07 00 03 00 +00 06 36 0a 02 18 08 06 05 09 0f 06 5d 04 0b 7a 21 3c 0a 00 32 18 06 04 00 +63 32 00 32 00 32 00 41 43 20 50 69 61 6e 6f 2e 37 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano.7 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +16 08 00 03 00 00 00 3a 08 0c 14 06 07 04 09 23 00 48 04 15 14 07 00 03 00 +00 00 36 0a 02 18 08 06 05 09 0f 00 5d 04 0b 7a 21 3c 0a 00 32 18 06 04 00 +63 32 00 32 00 32 00 41 43 20 50 69 61 6e 6f 2e 37 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano.8 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 09 01 03 0e 32 43 4f 0a 11 16 09 01 03 0e 32 1d 5d 04 16 18 07 05 05 0d +00 45 63 04 0b 18 07 05 05 0d 00 75 60 04 0b 24 19 00 00 00 66 18 01 04 00 +63 00 63 00 00 32 00 41 43 20 50 69 61 6e 6f 2e 38 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano.8 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +16 09 01 03 0e 32 41 4f 0a 11 16 09 01 03 0e 32 01 5d 04 16 18 07 05 05 0d +00 40 63 04 0b 18 07 05 05 0d 00 40 60 04 0b 24 19 00 00 00 66 18 01 04 00 +63 00 63 00 00 32 00 41 43 20 50 69 61 6e 6f 2e 38 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano.9 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 09 07 07 0d 00 45 3a 10 0b 1c 09 07 07 0d 00 05 4a 0a 0c 1c 09 07 07 0d +00 43 4b 04 0a 1c 09 07 07 0d 00 45 63 04 0b 23 19 00 00 00 66 18 01 04 00 +63 00 63 00 00 32 00 41 43 20 50 69 61 6e 6f 2e 39 63 63 63 32 32 32 00 20 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano.9 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 09 07 07 0d 00 42 3a 10 0b 1c 09 07 07 0d 00 02 4a 0a 0c 1c 09 07 07 0d +00 40 4b 04 0a 1c 09 07 07 0d 00 41 63 04 0b 23 19 00 00 00 66 18 01 04 00 +63 00 63 00 00 32 00 41 43 20 50 69 61 6e 6f 2e 39 63 63 63 32 32 32 00 20 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano10 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 01 01 03 00 34 04 4b 04 0d 16 01 01 04 0c 42 04 52 00 0b 18 05 01 03 00 +63 06 45 16 10 14 08 01 06 0c 00 05 63 04 13 32 23 00 00 00 02 18 00 04 00 +63 32 00 00 00 32 00 41 43 20 50 69 61 6e 6f 31 30 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano10 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +18 01 01 03 00 34 01 4b 04 0d 16 01 01 04 0c 42 01 52 00 0b 18 05 01 03 00 +63 01 45 16 10 14 08 01 06 0c 00 00 63 04 13 32 23 00 00 00 02 18 00 04 00 +63 32 00 00 00 32 00 41 43 20 50 69 61 6e 6f 31 30 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano11 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 08 03 05 0d 00 04 49 04 0d 1f 04 02 05 0e 63 04 4a 0a 01 1f 05 04 05 0d +63 06 50 10 04 1c 1e 04 06 0f 00 05 5c 04 13 2a 23 00 00 00 62 0c 00 04 00 +63 00 00 00 00 32 00 41 43 20 50 69 61 6e 6f 31 31 63 63 63 32 32 32 00 00 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano11 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 08 03 05 0d 00 01 49 04 0d 1f 04 02 05 0e 63 01 4a 0a 01 1f 05 04 05 0d +63 01 50 10 04 1c 1e 04 06 0f 00 00 5c 04 13 2a 23 00 00 00 62 0c 00 04 00 +63 00 00 00 00 32 00 41 43 20 50 69 61 6e 6f 31 31 63 63 63 32 32 32 00 00 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano12 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 0c 09 09 06 52 45 46 0d 03 1b 05 06 09 07 27 04 41 04 13 1c 06 06 07 0c +11 45 4e 04 0b 1c 07 07 07 09 00 46 60 04 0b 1b 19 00 00 00 66 18 01 04 00 +63 00 63 00 00 32 00 41 43 20 50 69 61 6e 6f 31 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano12 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +18 0c 09 09 06 52 42 46 0d 03 1b 05 06 09 07 27 01 41 04 13 1c 06 06 07 0c +11 40 4e 04 0b 1c 07 07 07 09 00 40 60 04 0b 1b 19 00 00 00 66 18 01 04 00 +63 00 63 00 00 32 00 41 43 20 50 69 61 6e 6f 31 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano13 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +19 09 00 07 0d 00 04 46 0a 0b 19 09 00 06 0d 00 04 49 04 0c 18 09 00 07 0d +00 06 4c 04 0b 1a 09 09 07 0d 00 05 63 04 0b 2a 00 00 00 00 02 18 02 04 00 +63 63 00 00 00 32 00 41 43 20 50 69 61 6e 6f 31 33 63 63 63 32 32 32 00 20 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano13 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +19 09 00 07 0d 00 01 46 0a 0b 19 09 00 06 0d 00 01 49 04 0c 18 09 00 07 0d +00 01 4c 04 0b 1a 09 09 07 0d 00 00 63 04 0b 2a 00 00 00 00 02 18 02 04 00 +63 63 00 00 00 32 00 41 43 20 50 69 61 6e 6f 31 33 63 63 63 32 32 32 00 20 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano14 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 09 06 07 0d 00 02 38 0a 0b 1b 09 06 07 0d 00 04 46 10 0c 1b 09 06 07 0d +00 05 4c 04 0b 1b 09 06 07 0d 00 05 5d 04 0b 2a 00 00 00 00 02 18 02 04 00 +63 63 00 00 00 32 00 41 43 20 50 69 61 6e 6f 31 34 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano14 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 09 06 07 0d 00 01 38 0a 0b 1b 09 06 07 0d 00 02 46 10 0c 1b 09 06 07 0d +00 01 4c 04 0b 1b 09 06 07 0d 00 00 5d 04 0b 2a 00 00 00 00 02 18 02 04 00 +63 63 00 00 00 32 00 41 43 20 50 69 61 6e 6f 31 34 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano15 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 06 00 06 0e 00 05 2f 19 0e 13 04 04 06 0d 00 05 43 04 0a 13 04 04 06 0d +00 07 3e 0d 0c 15 07 06 06 0c 00 06 63 04 0b 2a 00 00 00 00 02 18 02 04 00 +63 63 00 00 00 32 00 41 43 20 50 69 61 6e 6f 31 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano15 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 06 00 06 0e 00 01 2f 19 0e 13 04 04 06 0d 00 01 43 04 0a 13 04 04 06 0d +00 01 3e 0d 0c 15 07 06 06 0c 00 01 63 04 0b 2a 00 00 00 00 02 18 02 04 00 +63 63 00 00 00 32 00 41 43 20 50 69 61 6e 6f 31 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano16 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 0d 05 07 0d 00 04 4c 0a 0c 13 04 03 06 0d 13 04 4e 04 0a 13 04 04 06 0d +2b 06 2d 1c 0b 15 07 06 06 0c 00 05 5d 04 0c 2a 00 00 00 00 02 0c 02 04 00 +63 63 00 00 00 32 00 41 43 20 50 69 61 6e 6f 31 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano16 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +18 0d 05 07 0d 00 01 4c 0a 0c 13 04 03 06 0d 13 01 4e 04 0a 13 04 04 06 0d +2b 01 2d 1c 0b 15 07 06 06 0c 00 00 5d 04 0c 2a 00 00 00 00 02 0c 02 04 00 +63 63 00 00 00 32 00 41 43 20 50 69 61 6e 6f 31 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano17 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 18 05 01 0a 01 05 47 16 0a 1f 0c 01 04 0d 13 05 4e 04 0b 1f 0c 01 04 0d +13 06 50 04 0c 17 07 06 08 0d 00 06 5e 04 0b 28 00 00 00 00 02 18 02 04 00 +63 63 00 00 00 32 00 41 43 20 50 69 61 6e 6f 31 37 63 63 63 32 32 32 00 00 +00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano17 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 18 05 01 0a 01 01 47 16 0a 1f 0c 01 04 0d 13 01 4e 04 0b 1f 0c 01 04 0d +13 01 50 04 0c 17 07 06 08 0d 00 00 5e 04 0b 28 00 00 00 00 02 18 02 04 00 +63 63 00 00 00 32 00 41 43 20 50 69 61 6e 6f 31 37 63 63 63 32 32 32 00 00 +00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano18 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 09 05 05 0c 01 02 51 0a 0d 19 06 15 09 0a 13 05 41 04 0a 19 08 05 05 09 +00 06 46 10 0c 19 07 05 05 09 00 06 5d 04 0c 02 00 00 00 00 02 0c 02 04 00 +63 63 00 00 00 32 00 41 43 20 50 69 61 6e 6f 31 38 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano18 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 09 05 05 0c 01 01 51 0a 0d 19 06 15 09 0a 13 01 41 04 0a 19 08 05 05 09 +00 01 46 10 0c 19 07 05 05 09 00 00 5d 04 0c 02 00 00 00 00 02 0c 02 04 00 +63 63 00 00 00 32 00 41 43 20 50 69 61 6e 6f 31 38 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano19 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0a 09 06 0c 01 05 43 16 05 19 06 06 09 0a 13 06 50 04 04 19 06 06 09 0a +13 05 4e 04 02 19 09 06 07 0d 00 06 5f 04 0a 22 00 00 00 00 02 0c 02 04 00 +63 63 00 00 00 32 00 41 43 20 50 69 61 6e 6f 31 39 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano19 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0a 09 06 0c 01 01 43 16 05 19 06 06 09 0a 13 02 50 04 04 19 06 06 09 0a +13 01 4e 04 02 19 09 06 07 0d 00 00 5f 04 0a 22 00 00 00 00 02 0c 02 04 00 +63 63 00 00 00 32 00 41 43 20 50 69 61 6e 6f 31 39 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano20 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +19 09 09 07 0d 01 05 3d 04 0b 19 09 09 07 0d 01 05 4b 0a 04 19 09 09 07 0d +01 05 41 10 03 19 09 06 07 0d 01 06 5f 04 0b 2a 00 00 00 00 02 18 02 04 00 +63 63 00 00 00 32 00 41 43 20 50 69 61 6e 6f 32 30 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano20 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +19 09 09 07 0d 01 01 3d 04 0b 19 09 09 07 0d 01 01 4b 0a 04 19 09 09 07 0d +01 01 41 10 03 19 09 06 07 0d 01 00 5f 04 0b 2a 00 00 00 00 02 18 02 04 00 +63 63 00 00 00 32 00 41 43 20 50 69 61 6e 6f 32 30 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano21 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 01 01 03 00 1b 05 47 04 0d 14 06 05 04 09 42 05 48 13 0d 12 06 0b 03 00 +42 05 4b 0d 09 18 06 05 05 09 0a 44 60 04 0a 1a 23 0a 00 06 56 18 04 04 00 +63 32 00 00 00 32 00 41 43 20 50 69 61 6e 6f 32 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AC Piano21 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +15 01 01 03 00 1b 01 47 04 0d 14 06 05 04 09 42 01 48 13 0d 12 06 0b 03 00 +42 01 4b 0d 09 18 06 05 05 09 0a 40 60 04 0a 1a 23 0a 00 06 56 18 04 04 00 +63 32 00 00 00 32 00 41 43 20 50 69 61 6e 6f 32 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BabyGrand* +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1e 10 06 07 0e 00 01 44 04 0c 1e 0c 06 03 0e 2b 02 4c 04 0c 1e 09 07 06 0e +11 03 4f 10 09 1c 0a 06 07 0e 00 02 63 04 08 1a 23 00 00 00 62 0c 02 04 00 +28 32 00 00 00 32 00 42 61 62 79 47 72 61 6e 64 2a 63 63 63 32 32 32 00 20 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bad Road * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +14 0f 18 07 02 11 02 38 1e 03 17 06 06 0a 0f 0c 05 57 04 0e 18 07 0d 0a 03 +0e 45 63 04 06 17 06 06 07 0f 00 43 63 04 08 04 23 00 00 00 0e 0c 02 04 00 +28 00 19 00 00 32 00 42 61 64 20 52 6f 61 64 20 2a 63 63 63 32 32 32 00 18 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bel/Piano* +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 09 1f 04 00 00 02 58 09 05 1c 09 1f 04 00 00 05 57 05 06 1c 09 1f 04 00 +00 42 63 04 0b 1c 09 1f 04 00 00 43 63 00 08 04 17 00 08 0c 3a 11 02 04 00 +28 63 00 00 00 32 00 42 65 6c 2f 50 69 61 6e 6f 2a 63 63 63 32 32 32 00 32 +00 01 00 08 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BellPiano1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1b 0a 05 0a 00 03 63 2d 13 1f 1b 0a 06 0f 00 05 51 08 03 1f 09 07 05 0f +00 05 63 08 03 1f 09 0c 04 0f 00 46 5e 04 03 3c 18 52 00 51 26 0c 04 04 00 +28 32 00 00 00 32 00 42 65 6c 6c 50 69 61 6e 6f 31 63 63 63 32 32 32 00 10 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BellPiano1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1b 0a 05 0a 00 01 63 2d 13 1f 1b 0a 06 0f 00 01 51 08 03 1f 09 07 05 0f +00 00 63 08 03 1f 09 0c 04 0f 00 40 5e 04 03 3c 18 52 00 51 26 0c 04 04 00 +28 32 00 00 00 32 00 42 65 6c 6c 50 69 61 6e 6f 31 63 63 63 32 32 32 00 10 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BellPiano2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1b 0a 05 0a 00 04 63 08 13 1f 1b 0a 06 0f 00 04 63 19 03 1f 09 07 05 0f +00 05 63 08 03 1f 09 0c 04 0f 00 47 5e 08 03 3e 18 52 00 51 26 0c 04 04 00 +28 32 00 00 00 32 00 42 65 6c 6c 50 69 61 6e 6f 32 63 63 63 32 32 32 00 00 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BellPiano2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1b 0a 05 0a 00 02 63 08 13 1f 1b 0a 06 0f 00 00 63 19 03 1f 09 07 05 0f +00 00 63 08 03 1f 09 0c 04 0f 00 40 5e 08 03 3e 18 52 00 51 26 0c 04 04 00 +28 32 00 00 00 32 00 42 65 6c 6c 50 69 61 6e 6f 32 63 63 63 32 32 32 00 00 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BritePiano +** Controls: KV +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +1d 04 0c 04 00 34 01 4d 04 0d 1f 07 03 04 0c 5e 03 4d 0d 0b 18 05 03 04 00 +3d 03 4e 16 18 1f 08 03 04 0d 00 02 63 04 13 3a 23 00 00 00 02 0c 02 04 00 +63 32 00 00 00 32 00 42 72 69 74 65 50 69 61 6e 6f 63 63 63 32 32 32 00 00 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Buz'dPiano +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 04 0c 06 00 34 01 4f 04 0d 1f 07 03 06 0c 5e 04 4d 0d 13 18 05 03 06 00 +3d 01 47 16 18 1f 08 03 06 0d 00 01 63 04 13 3a 23 00 00 00 02 0c 02 04 00 +63 32 00 00 00 32 00 42 75 7a 27 64 50 69 61 6e 6f 63 63 63 32 32 32 00 10 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ChibyPiano +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 15 0c 06 00 21 02 49 16 15 1f 07 03 06 0c 1b 04 47 0d 0b 18 05 03 06 00 +10 02 4a 16 18 1f 08 03 06 0d 00 02 63 04 13 3a 1d 00 00 00 52 0c 02 04 00 +63 32 00 00 00 32 00 43 68 69 62 79 50 69 61 6e 6f 63 63 63 32 32 32 00 70 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ChorusMeEP +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 0e 0f 0e 09 00 03 53 2a 0e 1f 00 00 07 0a 30 43 55 00 08 1f 12 06 08 0d +00 03 53 04 00 1c 04 00 07 0a 00 02 63 04 16 34 14 00 01 02 26 18 02 05 00 +63 32 00 32 00 32 00 43 68 6f 72 75 73 4d 65 45 50 63 63 63 32 32 32 00 70 +00 10 00 00 00 00 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: CrsPopPno +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 08 08 0b 63 03 4f 04 10 1f 1f 08 08 0b 63 03 4f 05 16 1f 19 05 06 0f +00 05 63 04 10 1f 19 05 06 0f 00 05 62 05 16 04 1a 12 00 00 4a 05 02 04 00 +62 32 00 25 00 32 00 43 72 73 50 6f 70 50 6e 6f 20 63 63 63 32 32 32 16 48 +14 41 00 58 00 51 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: DX7 EP +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank B, voice 1 +1f 0f 00 0a 07 00 44 49 2d 06 1e 06 00 06 00 10 43 59 04 00 1b 07 0a 09 07 +14 43 4f 04 03 1e 07 00 09 00 14 42 63 04 06 1c 16 00 04 0a 4e 18 02 04 00 +28 32 00 00 00 32 00 44 58 37 20 45 50 20 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Deep Grd +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank A, voice 3 +18 01 01 03 00 15 03 47 04 0d 16 01 01 05 0c 46 03 5b 00 13 18 05 01 03 00 +4a 04 36 10 08 14 08 01 05 0c 01 03 63 04 13 32 23 00 00 00 02 18 02 04 00 +63 32 00 00 00 32 00 44 65 65 70 20 47 72 64 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: DirtoyPno +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0c 0c 05 0c 1c 04 4e 13 13 1f 06 01 05 0e 00 46 55 30 0b 16 17 08 04 0d +00 04 63 00 0b 1f 09 09 05 0f 00 05 49 19 08 04 1d 11 05 00 4e 18 02 04 00 +63 32 33 1e 33 32 00 44 69 72 74 6f 79 50 6e 6f 20 63 63 63 32 32 32 0e 70 +04 2d 00 60 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: DynomiteEP +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank A, voice 13 +1f 0e 0f 0e 09 00 03 43 2d 0e 1f 0f 05 07 0f 16 43 5a 00 00 1f 12 06 08 0d +00 03 63 04 00 1f 12 06 08 0f 00 02 63 04 06 34 14 00 01 02 4e 18 02 04 00 +63 32 00 32 00 32 00 44 79 6e 6f 6d 69 74 65 45 50 63 63 63 32 32 32 00 70 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Piano2 + + +** Name: E. Piano 3 +** Description: An electric piano +** Controls: KV, MW (LFO pitch) +** Source: Art Hitzeman +16 1d 12 03 0c 00 42 42 16 04 1c 0e 03 03 0f 14 43 4f 04 16 1b 13 01 01 0f +4d 45 39 19 10 19 07 04 05 05 0a 42 63 04 13 19 1e 00 06 02 42 18 02 04 00 +28 32 00 00 00 32 00 45 2e 20 50 69 61 6e 6f 20 33 63 63 63 32 32 32 03 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano..1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 09 00 05 00 28 02 53 04 0b 1f 08 00 07 00 00 06 4e 0a 03 19 07 00 0f 00 +00 04 5f 04 08 19 05 15 08 00 00 06 5f 04 10 2c 19 00 03 00 62 0c 01 04 00 +63 32 00 32 00 32 00 45 20 50 69 61 6e 6f 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano..1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 09 00 05 00 28 01 53 04 0b 1f 08 00 07 00 00 01 4e 0a 03 19 07 00 0f 00 +00 00 5f 04 08 19 05 15 08 00 00 00 5f 04 10 2c 19 00 03 00 62 0c 01 04 00 +63 32 00 32 00 32 00 45 20 50 69 61 6e 6f 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano..2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0c 12 05 00 00 03 4e 16 0c 1f 07 0a 06 00 00 05 3d 1c 0a 1f 06 00 05 00 +00 06 5f 04 08 1b 06 0a 06 00 00 05 5c 04 0e 2c 14 00 05 00 62 0c 01 04 00 +63 32 00 32 00 32 00 45 20 50 69 61 6e 6f 2e 2e 32 63 63 63 32 32 32 00 10 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano..2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0c 12 05 00 00 02 4e 16 0c 1f 07 0a 06 00 00 02 3d 1c 0a 1f 06 00 05 00 +00 00 5f 04 08 1b 06 0a 06 00 00 00 5c 04 0e 2c 14 00 05 00 62 0c 01 04 00 +63 32 00 32 00 32 00 45 20 50 69 61 6e 6f 2e 2e 32 63 63 63 32 32 32 00 10 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano..3 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1d 09 03 09 0f 63 05 59 0a 03 1a 08 02 05 0c 29 04 55 08 0b 1f 0b 09 06 0f +00 04 5d 08 13 1d 08 06 08 0f 01 07 5f 04 0b 34 14 00 03 00 52 18 01 04 00 +63 32 00 32 00 32 00 45 20 50 69 61 6e 6f 2e 2e 33 63 63 63 32 32 32 00 20 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano..3 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 09 03 09 0f 63 02 59 0a 03 1a 08 02 05 0c 29 01 55 08 0b 1f 0b 09 06 0f +00 00 5d 08 13 1d 08 06 08 0f 01 00 5f 04 0b 34 14 00 03 00 52 18 01 04 00 +63 32 00 32 00 32 00 45 20 50 69 61 6e 6f 2e 2e 33 63 63 63 32 32 32 00 20 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano..4 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1d 09 03 07 0f 63 04 56 04 03 1a 08 02 03 0c 29 05 57 0a 0b 1f 0b 09 04 0f +00 06 5b 04 13 1d 08 06 06 0f 01 06 61 08 0b 2c 14 00 03 00 52 0c 01 04 00 +63 32 00 32 00 32 00 45 20 50 69 61 6e 6f 2e 2e 34 63 63 63 32 32 32 00 20 +00 20 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano..4 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 09 03 07 0f 63 01 56 04 03 1a 08 02 03 0c 29 01 57 0a 0b 1f 0b 09 04 0f +00 00 5b 04 13 1d 08 06 06 0f 01 00 61 08 0b 2c 14 00 03 00 52 0c 01 04 00 +63 32 00 32 00 32 00 45 20 50 69 61 6e 6f 2e 2e 34 63 63 63 32 32 32 00 20 +00 20 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano..5 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 09 05 05 0e 63 04 4a 19 13 19 07 04 09 00 00 04 4b 0a 06 1f 08 05 05 00 +19 06 60 00 00 1d 08 01 06 0f 19 45 5c 00 02 0c 0f 00 00 20 66 18 01 04 00 +63 32 00 32 00 32 00 45 20 50 69 61 6e 6f 2e 2e 35 63 63 63 32 32 32 00 10 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano..5 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 09 05 05 0e 63 01 4a 19 13 19 07 04 09 00 00 01 4b 0a 06 1f 08 05 05 00 +19 00 60 00 00 1d 08 01 06 0f 19 40 5c 00 02 0c 0f 00 00 20 66 18 01 04 00 +63 32 00 32 00 32 00 45 20 50 69 61 6e 6f 2e 2e 35 63 63 63 32 32 32 00 10 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano..6 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 09 06 09 0d 39 04 56 04 0e 1c 0f 06 0c 0c 23 46 5d 04 1a 1c 06 06 0f 0d +1e 45 60 04 00 1c 07 07 0b 0c 0b 46 62 04 06 2c 22 21 00 00 36 18 00 04 00 +63 63 00 00 00 32 00 45 20 50 69 61 6e 6f 2e 2e 36 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano..6 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 09 06 09 0d 39 01 56 04 0e 1c 0f 06 0c 0c 23 42 5d 04 1a 1c 06 06 0f 0d +1e 40 60 04 00 1c 07 07 0b 0c 0b 40 62 04 06 2c 22 21 00 00 36 18 00 04 00 +63 63 00 00 00 32 00 45 20 50 69 61 6e 6f 2e 2e 36 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano..7 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 0f 07 0c 0f 63 04 55 04 0d 18 0c 0d 07 0c 30 04 4d 0a 0d 1f 06 06 06 0f +00 46 63 04 09 1f 0a 06 07 0f 01 06 5f 04 0c 24 17 00 00 27 0a 0c 01 04 00 +63 32 00 32 00 32 00 45 20 50 69 61 6e 6f 2e 2e 37 63 63 63 32 32 32 00 00 +00 30 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano..7 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 0f 07 0c 0f 63 01 55 04 0d 18 0c 0d 07 0c 30 01 4d 0a 0d 1f 06 06 06 0f +00 41 63 04 09 1f 0a 06 07 0f 01 00 5f 04 0c 24 17 00 00 27 0a 0c 01 04 00 +63 32 00 32 00 32 00 45 20 50 69 61 6e 6f 2e 2e 37 63 63 63 32 32 32 00 00 +00 30 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano..8 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0a 07 06 07 18 04 5b 04 03 1f 0a 07 06 0a 0c 04 63 04 0c 1f 06 0d 06 07 +0e 46 63 04 0b 1f 04 0f 06 09 0a 06 63 04 0b 0d 1f 00 00 20 0a 0c 01 04 00 +63 32 00 32 00 32 00 45 20 50 69 61 6e 6f 2e 2e 38 63 63 63 32 32 32 00 30 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano..8 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0a 07 06 07 18 01 5b 04 03 1f 0a 07 06 0a 0c 00 63 04 0c 1f 06 0d 06 07 +0e 40 63 04 0b 1f 04 0f 06 09 0a 00 63 04 0b 0d 1f 00 00 20 0a 0c 01 04 00 +63 32 00 32 00 32 00 45 20 50 69 61 6e 6f 2e 2e 38 63 63 63 32 32 32 00 30 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano..9 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 06 06 07 0e 63 06 46 10 04 1f 0f 06 03 0f 28 04 4c 04 0e 18 09 06 06 0e +00 05 63 04 03 1c 0f 06 06 0f 0a 07 5e 04 05 2c 63 00 00 00 02 0c 01 04 00 +63 32 00 32 00 32 00 45 20 50 69 61 6e 6f 2e 2e 39 63 63 63 32 32 32 00 00 +00 20 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano..9 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 06 06 07 0e 63 01 46 10 04 1f 0f 06 03 0f 28 01 4c 04 0e 18 09 06 06 0e +00 00 63 04 03 1c 0f 06 06 0f 0a 00 5e 04 05 2c 63 00 00 00 02 0c 01 04 00 +63 32 00 32 00 32 00 45 20 50 69 61 6e 6f 2e 2e 39 63 63 63 32 32 32 00 00 +00 20 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano.10 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 13 09 05 0d 1e 04 58 04 04 18 16 0d 08 0e 28 04 3c 22 06 18 09 06 07 0e +00 06 63 04 03 1c 0f 06 06 0f 0a 06 62 04 05 2c 63 00 00 00 02 0c 01 04 00 +63 32 00 32 00 32 00 45 20 50 69 61 6e 6f 2e 31 30 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano.10 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 13 09 05 0d 1e 01 58 04 04 18 16 0d 08 0e 28 01 3c 22 06 18 09 06 07 0e +00 01 63 04 03 1c 0f 06 06 0f 0a 00 62 04 05 2c 63 00 00 00 02 0c 01 04 00 +63 32 00 32 00 32 00 45 20 50 69 61 6e 6f 2e 31 30 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano.11 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 06 03 07 0b 4b 05 4f 04 1b 1b 19 06 06 0d 63 06 51 2a 1b 16 09 06 06 0e +00 05 61 04 03 1c 0f 04 06 0f 0a 06 5d 04 03 3c 63 00 00 00 02 18 01 04 00 +63 32 00 32 00 32 00 45 20 50 69 61 6e 6f 2e 31 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano.11 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +16 06 03 07 0b 4b 01 4f 04 1b 1b 19 06 06 0d 63 01 51 2a 1b 16 09 06 06 0e +00 01 61 04 03 1c 0f 04 06 0f 0a 00 5d 04 03 3c 63 00 00 00 02 18 01 04 00 +63 32 00 32 00 32 00 45 20 50 69 61 6e 6f 2e 31 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano.12 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 01 09 09 03 4b 05 52 10 1c 1c 18 06 02 0a 63 05 63 08 13 1b 14 09 04 0e +00 05 5a 04 05 1c 0f 06 06 0f 0a 06 62 00 03 24 00 00 00 00 02 18 01 04 00 +63 32 00 32 00 32 00 45 20 50 69 61 6e 6f 2e 31 32 63 63 63 32 32 32 00 20 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano.12 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 01 09 09 03 4b 01 52 10 1c 1c 18 06 02 0a 63 01 63 08 13 1b 14 09 04 0e +00 00 5a 04 05 1c 0f 06 06 0f 0a 00 62 00 03 24 00 00 00 00 02 18 01 04 00 +63 32 00 32 00 32 00 45 20 50 69 61 6e 6f 2e 31 32 63 63 63 32 32 32 00 20 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano.13 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 07 03 07 0d 63 46 52 04 1e 1e 16 0a 05 0b 63 45 58 24 0a 1c 06 06 0f 0d +1e 44 5c 04 08 1c 07 07 0b 0c 0b 05 63 04 06 3c 22 00 00 1a 0a 18 00 04 00 +63 63 00 00 00 32 00 45 20 50 69 61 6e 6f 2e 31 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano.13 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +16 07 03 07 0d 63 42 52 04 1e 1e 16 0a 05 0b 63 41 58 24 0a 1c 06 06 0f 0d +1e 40 5c 04 08 1c 07 07 0b 0c 0b 01 63 04 06 3c 22 00 00 1a 0a 18 00 04 00 +63 63 00 00 00 32 00 45 20 50 69 61 6e 6f 2e 31 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano.14 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 09 07 07 0b 2c 44 41 1f 0b 1e 09 07 07 0b 63 46 5a 2a 13 18 09 07 07 0d +00 44 61 04 03 1b 09 07 07 09 0a 06 62 04 0b 0c 22 00 00 1a 0a 18 00 04 00 +63 63 00 00 00 32 00 45 20 50 69 61 6e 6f 2e 31 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano.14 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +18 09 07 07 0b 2c 42 41 1f 0b 1e 09 07 07 0b 63 42 5a 2a 13 18 09 07 07 0d +00 41 61 04 03 1b 09 07 07 09 0a 01 62 04 0b 0c 22 00 00 1a 0a 18 00 04 00 +63 63 00 00 00 32 00 45 20 50 69 61 6e 6f 2e 31 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano.15 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 09 07 07 0b 55 45 39 04 13 1e 09 07 07 0b 63 45 47 1f 13 1f 18 07 07 0d +63 44 4f 08 1b 1b 09 07 07 09 0a 06 62 04 03 32 22 00 00 1a 0a 18 00 04 00 +63 63 00 00 00 32 00 45 20 50 69 61 6e 6f 2e 31 35 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano.15 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +18 09 07 07 0b 55 42 39 04 13 1e 09 07 07 0b 63 41 47 1f 13 1f 18 07 07 0d +63 41 4f 08 1b 1b 09 07 07 09 0a 01 62 04 03 32 22 00 00 1a 0a 18 00 04 00 +63 63 00 00 00 32 00 45 20 50 69 61 6e 6f 2e 31 35 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano.16 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1a 11 07 07 0b 55 04 34 16 13 1e 09 07 07 0b 63 05 35 08 13 1f 09 07 07 0d +63 04 32 08 13 1b 07 07 07 0b 0a 45 5a 04 03 70 22 00 00 27 06 18 00 04 00 +63 63 00 00 00 32 00 45 20 50 69 61 6e 6f 2e 31 36 63 63 63 32 32 32 00 10 +00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano.16 +** Source: from a library of patches collected by Duane Bowker, author unknown +1a 11 07 07 0b 55 00 34 16 13 1e 09 07 07 0b 63 00 35 08 13 1f 09 07 07 0d +63 00 32 08 13 1b 07 07 07 0b 0a 40 5a 04 03 70 22 00 00 27 06 18 00 04 00 +63 63 00 00 00 32 00 45 20 50 69 61 6e 6f 2e 31 36 63 63 63 32 32 32 00 10 +00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano.17 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 06 06 08 0d 14 06 57 16 15 1c 0f 06 0c 0c 23 46 5a 04 09 1c 06 06 0f 0d +1e 46 63 04 01 1c 04 04 0b 02 0b 45 5f 04 05 2c 22 21 00 00 36 18 00 04 00 +63 63 00 00 00 32 00 45 20 50 69 61 6e 6f 2e 31 37 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano.17 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 06 06 08 0d 14 04 57 16 15 1c 0f 06 0c 0c 23 41 5a 04 09 1c 06 06 0f 0d +1e 41 63 04 01 1c 04 04 0b 02 0b 40 5f 04 05 2c 22 21 00 00 36 18 00 04 00 +63 63 00 00 00 32 00 45 20 50 69 61 6e 6f 2e 31 37 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano.18 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 06 04 01 0b 14 04 50 19 1d 16 0f 06 0c 0c 2d 44 44 04 01 18 06 06 0f 0d +1e 46 63 08 01 19 07 07 0b 0c 0b 45 60 04 05 0c 22 21 00 00 36 18 00 04 00 +63 63 00 00 00 32 00 45 20 50 69 61 6e 6f 2e 31 38 63 63 63 32 32 32 00 00 +00 10 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano.18 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +16 06 04 01 0b 14 01 50 19 1d 16 0f 06 0c 0c 2d 41 44 04 01 18 06 06 0f 0d +1e 41 63 08 01 19 07 07 0b 0c 0b 40 60 04 05 0c 22 21 00 00 36 18 00 04 00 +63 63 00 00 00 32 00 45 20 50 69 61 6e 6f 2e 31 38 63 63 63 32 32 32 00 00 +00 10 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano.19 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0c 06 07 0f 32 04 37 2a 15 18 09 06 0a 0f 24 46 58 04 15 1f 09 06 09 0f +1e 46 63 04 05 1f 0c 06 07 0f 0b 46 61 00 03 04 22 21 00 00 36 18 00 04 00 +63 63 00 00 00 32 00 45 20 50 69 61 6e 6f 2e 31 39 63 63 63 32 32 32 00 30 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano.19 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0c 06 07 0f 32 01 37 2a 15 18 09 06 0a 0f 24 41 58 04 15 1f 09 06 09 0f +1e 41 63 04 05 1f 0c 06 07 0f 0b 40 61 00 03 04 22 21 00 00 36 18 00 04 00 +63 63 00 00 00 32 00 45 20 50 69 61 6e 6f 2e 31 39 63 63 63 32 32 32 00 30 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano.20 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0c 06 07 0f 32 07 39 1f 15 18 09 06 0a 0f 24 44 51 04 15 1f 09 06 09 0f +1e 45 5f 08 05 1f 0c 06 07 0f 0b 46 5f 04 03 0e 22 21 00 00 36 18 00 04 00 +63 63 00 00 00 32 00 45 20 50 69 61 6e 6f 2e 32 30 63 63 63 32 32 32 00 00 +00 00 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano.20 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0c 06 07 0f 32 02 39 1f 15 18 09 06 0a 0f 24 40 51 04 15 1f 09 06 09 0f +1e 40 5f 08 05 1f 0c 06 07 0f 0b 40 5f 04 03 0e 22 21 00 00 36 18 00 04 00 +63 63 00 00 00 32 00 45 20 50 69 61 6e 6f 2e 32 30 63 63 63 32 32 32 00 00 +00 00 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano.21 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 08 00 07 00 0d 01 3b 2a 0b 1f 08 00 07 00 00 01 59 04 03 1f 08 00 0a 00 +00 00 60 04 00 1f 08 11 07 00 00 00 5e 04 00 64 18 00 04 00 62 0c 01 04 00 +63 32 00 32 00 32 00 45 20 50 69 61 6e 6f 2e 32 31 63 63 63 32 32 32 00 10 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano.22 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 12 00 06 00 0d 01 46 16 0b 1f 08 00 07 00 2d 01 5a 04 0b 1f 11 00 0f 00 +00 04 63 08 00 1f 08 15 08 01 00 04 63 04 08 1c 1b 00 04 00 52 18 01 04 00 +63 32 00 32 00 32 00 45 20 50 69 61 6e 6f 2e 32 32 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E Piano.22 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 12 00 06 00 0d 01 46 16 0b 1f 08 00 07 00 2d 01 5a 04 0b 1f 11 00 0f 00 +00 00 63 08 00 1f 08 15 08 01 00 00 63 04 08 1c 1b 00 04 00 52 18 01 04 00 +63 32 00 32 00 32 00 45 20 50 69 61 6e 6f 2e 32 32 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E.Piano 1 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank B, voice 3 +1f 1f 11 0f 0f 00 46 43 31 10 1d 0b 12 06 0e 00 42 2a 28 12 1d 04 01 06 0e +00 44 45 04 0c 1d 0c 04 08 0e 14 43 63 04 16 03 10 00 08 19 5a 18 02 04 00 +28 32 00 00 00 32 00 45 2e 50 69 61 6e 6f 20 20 31 63 63 63 32 32 32 00 20 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E.Piano 2 +** Controls: KV +** Source: Yamaha DX11 factory preset, bank B, voice 4 +1f 13 0a 09 04 00 06 49 0f 03 1f 1f 00 07 0f 0b 01 49 00 03 1f 0a 08 07 0c +0c 02 31 04 03 18 1f 09 09 0f 06 02 60 00 03 02 23 00 00 00 62 24 02 04 00 +28 32 00 00 00 32 00 45 2e 50 69 61 6e 6f 20 20 32 63 63 63 32 32 32 00 10 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: E.Piano 2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 13 0d 09 04 00 06 49 0f 03 1f 1f 00 07 0f 0b 01 49 00 03 1f 0d 08 07 0c +0c 02 31 04 03 18 1f 09 09 0f 06 02 60 00 03 02 23 00 00 00 62 24 02 04 00 +28 32 00 00 00 32 00 45 2e 50 69 61 6e 6f 20 20 32 63 63 63 32 32 32 00 10 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: El.Piano * +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 08 06 07 0e 14 03 50 04 0e 1f 0f 0a 0b 0b 00 03 42 2d 0b 1f 1e 06 07 0e +00 02 63 03 08 1f 07 07 0a 0b 00 02 63 04 0b 04 15 00 0a 00 32 05 02 04 00 +28 63 00 00 00 32 00 45 6c 2e 50 69 61 6e 6f 20 2a 63 63 63 32 32 32 00 18 +00 08 00 06 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Elec Grand +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank A, voice 5 +1f 08 03 05 0d 00 02 44 04 0e 1f 04 02 05 0e 63 02 52 0a 00 1f 05 04 05 0d +63 02 42 10 05 1c 1e 06 06 0f 00 03 63 04 13 3a 23 00 00 00 62 0c 02 04 00 +63 00 00 00 00 32 00 45 6c 65 63 20 47 72 61 6e 64 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ElecPiano4 +** Controls: KV, MW (LFO pitch) +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +16 0d 12 07 00 00 42 25 22 04 1c 1f 03 05 0f 14 43 51 04 16 1b 13 01 02 0f +63 45 3b 19 18 19 07 04 06 05 0d 42 63 04 13 02 1e 00 06 02 42 18 02 04 00 +28 32 00 00 00 32 00 45 6c 65 63 50 69 61 6e 6f 34 63 63 63 32 32 32 03 50 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ElecPiano5 +** Controls: KV +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +1f 0f 00 09 07 00 41 47 2d 06 0f 06 00 05 00 00 40 3e 04 00 1b 07 0a 08 07 +00 42 63 04 03 1e 07 00 08 00 00 42 63 09 06 3c 17 00 00 1d 3a 18 02 04 00 +28 32 00 00 00 32 00 45 6c 65 63 50 69 61 6e 6f 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 02 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ElecPiano6 +** Controls: KV +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +1f 0f 00 09 07 00 41 52 2d 00 1f 0f 00 09 07 00 40 37 24 06 1b 07 0a 08 07 +00 42 63 03 00 1b 07 0a 08 07 00 42 63 02 06 3c 17 00 00 1d 3a 18 02 04 00 +28 32 00 00 00 32 00 45 6c 65 63 50 69 61 6e 6f 36 63 63 63 32 32 32 00 00 +00 00 00 01 00 02 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Electracou +** Controls: KV +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +18 0b 0a 0f 0d 28 02 4a 0a 0b 1a 12 00 0a 0f 07 00 4e 04 0b 17 0f 0e 05 09 +11 01 4e 0a 0b 1b 13 09 06 0e 00 00 63 04 0b 36 1e 00 00 00 52 18 02 04 00 +28 32 00 00 00 32 00 45 6c 65 63 74 72 61 63 6f 75 63 63 63 32 32 32 00 30 +00 00 00 70 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ElectroPno +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank A, voice 11 +1f 06 04 07 0c 00 04 36 2a 10 1f 04 03 04 0d 00 03 54 04 16 1f 0d 08 07 0c +00 44 63 04 0e 18 04 03 06 0d 00 43 63 04 13 04 14 08 02 1b 6a 0c 02 04 00 +63 32 00 00 00 32 00 45 6c 65 63 74 72 6f 50 6e 6f 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: FadePiano +** Description: Grand 2 with slowly fading sustain +** Controls: KV +** Source: Art Hitzeman +1f 0e 04 03 09 29 07 4c 04 00 16 04 02 03 0d 63 02 4c 09 16 1f 10 03 03 0a +63 02 4a 1c 15 17 04 01 05 0f 00 03 63 04 16 3a 1f 08 20 02 02 18 02 04 00 +28 63 00 00 00 32 00 46 61 64 65 50 69 61 6e 6f 20 63 63 63 32 32 32 00 00 +00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: FingersGo! +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 01 04 03 00 1a 01 48 04 1d 16 07 03 04 0b 4c 04 52 0d 13 18 05 03 03 00 +41 02 47 1c 18 1a 06 03 06 0b 00 02 61 04 13 3a 23 00 00 00 02 18 02 04 00 +63 32 00 00 00 32 00 46 69 6e 67 65 72 73 47 6f 21 63 63 63 32 32 32 00 00 +00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: FlatFlange +** Description: a fuzzy, twangy electric piano +** Controls: KV +** Source: GLIB (Michael Kesti and others) +1f 0e 0f 0e 09 00 07 57 10 06 1f 11 03 0b 0a 43 02 53 08 13 1f 02 05 08 0e +00 04 63 0a 03 1f 1f 08 08 0a 00 00 5a 04 03 00 14 00 00 00 62 18 01 04 00 +63 32 00 32 00 32 00 46 6c 61 74 46 6c 61 6e 67 65 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Fuzz Piano +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank A, voice 6 +1f 11 0b 0f 00 00 04 63 15 16 1f 0b 00 0b 0f 58 07 51 04 06 1f 09 04 09 0a +5f 07 47 2a 05 1f 07 04 0a 0d 00 03 63 04 00 5a 1b 32 02 00 62 0c 04 04 00 +63 16 00 00 00 32 00 46 75 7a 7a 20 50 69 61 6e 6f 63 63 63 32 32 32 08 70 +30 50 00 40 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: FuzzPiano +** Description: an electric piano with guitarish twang +** Controls: KV +** Source: GLIB (Michael Kesti and others) +1f 0e 0f 0e 09 00 03 4b 24 06 1f 11 03 0b 0e 43 03 51 08 13 1f 09 05 08 0e +00 03 59 0a 03 1f 12 08 08 0a 00 03 62 04 03 31 14 00 00 00 62 18 01 04 00 +63 32 00 32 00 32 00 46 75 7a 7a 50 69 61 6e 6f 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: GaragePno +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 15 1f 03 0b 00 05 53 1e 03 1f 09 04 04 0c 0f 06 47 03 16 1f 04 09 04 0c +0f 06 47 05 10 1f 1f 0a 06 0f 00 05 63 00 0b 03 1d 00 03 00 52 18 02 04 00 +63 1e 00 00 00 32 00 47 61 72 61 67 65 50 6e 6f 20 63 63 63 32 32 32 08 0d +00 56 00 51 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: GlassPiano +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 05 0f 00 03 4b 04 02 1f 1f 00 0f 0f 00 05 42 24 06 0c 09 05 05 0f +00 43 63 04 03 0c 0f 08 07 07 00 06 58 2a 04 6c 26 56 00 12 17 18 04 04 00 +28 32 00 00 00 32 00 47 6c 61 73 73 50 69 61 6e 6f 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Grand 2 +** Description: DX11 factory preset 'Grand PF' with slower decay +** Controls: KV, MW (LFO pitch) +** Source: Art Hitzeman +1f 07 01 03 0e 2b 03 4c 04 08 16 03 02 04 0c 63 02 4c 09 16 1f 07 03 04 0a +63 02 4a 1c 15 17 16 06 04 0e 00 03 63 04 16 3a 1f 00 04 00 42 18 02 04 00 +28 32 00 00 00 32 00 47 72 61 6e 64 20 32 20 20 20 63 63 63 32 32 32 00 00 +00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Grand 3 +** Description: 'Grand 2' with more treble +** Controls: KV, MW (LFO pitch) +** Source: Art Hitzeman +1f 07 01 03 0e 21 03 4c 04 08 16 03 02 04 0c 46 02 4c 09 16 1f 07 03 04 0a +46 02 4a 1c 15 17 16 06 04 0e 00 03 63 04 16 3a 1f 00 04 00 42 18 02 04 00 +28 32 00 00 00 32 00 47 72 61 6e 64 20 33 20 20 20 63 63 63 32 32 32 00 00 +00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Grand Low +** Description: Grand 2 an octave lower +** Controls: KV, MW (LFO pitch) +** Source: Art Hitzeman +1f 07 01 03 0e 2b 03 4c 04 08 16 03 02 04 0c 63 02 4c 09 16 1f 07 03 04 0a +63 02 4a 1c 15 17 16 06 04 0e 00 03 63 04 16 3a 1f 00 04 00 42 0c 02 04 00 +28 32 00 00 00 32 00 47 72 61 6e 64 20 4c 6f 77 20 63 63 63 32 32 32 00 00 +00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Grand PF +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank B, voice 5 +1f 07 01 06 0e 2b 03 4c 04 08 16 03 02 06 0c 63 02 4c 09 16 1f 07 03 07 0a +63 02 4a 1c 15 17 16 06 08 0e 00 03 63 04 16 3a 1f 00 04 00 42 18 02 04 00 +28 32 00 00 00 32 00 47 72 61 6e 64 20 50 46 20 20 63 63 63 32 32 32 00 00 +00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: GrandLow2 +** Description: (similar to Grand low) +** Controls: KV, MW (LFO pitch) +** Source: Art Hitzeman +1f 07 01 03 0e 2b 03 4c 04 08 16 03 02 04 0c 63 02 4c 09 16 1f 07 03 04 0a +63 02 4a 1c 15 17 06 03 04 0e 00 03 63 04 16 3a 1f 00 04 00 42 0c 02 04 00 +28 32 00 00 00 32 00 47 72 61 6e 64 4c 6f 77 32 20 63 63 63 32 32 32 00 00 +00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: GrandLow3 +** Description: Grand Low with slower decay +** Controls: KV, MW (LFO pitch) +** Source: Art Hitzeman +1f 07 01 03 0e 2b 03 4c 04 08 16 03 02 04 0c 63 02 4c 0e 16 1f 07 03 04 0a +63 02 4a 28 15 17 16 06 04 0e 00 03 63 04 16 3a 1f 00 04 00 42 05 02 04 00 +28 32 00 00 00 32 00 47 72 61 6e 64 4c 6f 77 33 20 63 63 63 32 32 32 00 08 +00 03 00 08 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: GrandPiano +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank A, voice 1 +1d 04 0c 06 00 34 01 4d 04 0d 1f 07 03 06 0c 5e 04 4d 0d 0b 18 05 03 06 00 +3d 01 4a 16 18 1f 08 03 06 0d 00 01 63 04 13 3a 23 00 00 00 02 0c 02 04 00 +63 32 00 00 00 32 00 47 72 61 6e 64 50 69 61 6e 6f 63 63 63 32 32 32 00 00 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: HappyPiano +** Description: a cute electric piano +** Controls: KV +** Source: GLIB (Michael Kesti and others) +1f 0e 0f 0e 09 00 03 4b 24 06 1f 11 03 0b 0e 43 03 51 08 13 1f 12 05 08 0e +00 03 59 0a 03 1f 12 08 08 0a 00 03 62 04 03 34 14 00 00 00 62 18 01 04 00 +63 32 00 32 00 32 00 48 61 70 70 79 50 69 61 6e 6f 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: HarpsPiano +** Controls: KV +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +1f 03 19 06 00 13 02 43 04 13 1f 00 0c 06 0f 25 04 55 1f 0b 14 1f 1f 06 0b +21 02 3d 16 1b 1f 1e 00 07 0f 00 02 63 04 13 62 20 00 00 00 42 18 02 04 00 +63 0e 00 00 00 32 00 48 61 72 70 73 50 69 61 6e 6f 63 63 63 32 32 32 00 60 +00 50 00 10 00 30 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hi-LowBell +** Description: yet another electric piano +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: GLIB (Michael Kesti and others) +1f 1b 0f 0e 0a 00 03 4e 1f 06 1f 09 00 0b 00 43 03 4d 04 13 1f 09 05 08 0e +00 03 59 08 03 1f 12 08 08 0a 00 03 62 00 03 3c 1c 1d 10 00 62 18 01 04 00 +63 32 00 32 00 32 00 48 69 2d 4c 6f 77 42 65 6c 6c 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: High&Long$ +** Description: a synthetic electric piano sound +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: GLIB (Michael Kesti and others) +1f 0a 00 0e 09 00 03 58 24 06 1f 0e 03 0b 0e 43 03 55 04 13 1f 12 06 08 0e +00 02 4b 04 03 1f 12 05 08 0a 00 03 62 04 03 04 1c 14 06 54 66 18 01 04 00 +63 32 00 32 00 32 00 48 69 67 68 26 4c 6f 6e 67 24 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: HonkeyTonk +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank A, voice 4 +18 01 01 03 00 00 02 30 17 0e 16 03 01 04 0c 3a 02 4e 05 16 18 1b 04 03 0d +00 03 3d 1d 0d 14 08 01 05 0c 00 03 63 03 10 20 23 00 00 00 02 11 02 04 00 +63 32 00 00 00 32 00 48 6f 6e 6b 65 79 54 6f 6e 6b 63 63 63 32 32 32 00 42 +00 01 00 0b 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ivory * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 08 03 05 0d 00 02 48 04 16 1f 04 02 05 0e 42 05 47 0a 08 1f 05 04 05 0d +51 02 48 10 0d 16 1e 06 06 0f 00 03 63 04 13 02 19 00 00 00 22 0c 02 04 00 +63 00 00 00 00 32 00 49 76 6f 72 79 20 20 20 20 2a 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: JazzyPiano +** Controls: KV, MW (LFO pitch) +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +1f 07 01 06 0e 2b 03 35 04 08 16 03 02 06 0c 4b 02 59 09 16 1f 07 03 07 0a +5b 01 4d 19 15 17 16 06 08 0e 00 03 63 04 16 3a 1f 00 04 00 42 18 02 04 00 +28 32 00 00 00 32 00 4a 61 7a 7a 79 50 69 61 6e 6f 63 63 63 32 32 32 00 00 +00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MetalWhip +** Description: electric piano / electric guitar mix +** Controls: KV +** Source: GLIB (Michael Kesti and others) +1f 0e 0f 0e 09 00 03 62 10 06 1f 11 03 0b 0e 43 03 51 08 13 1f 09 05 08 0e +00 03 59 0a 03 1f 12 08 08 0a 00 03 62 04 03 31 14 00 00 00 62 18 01 04 00 +63 32 00 32 00 32 00 4d 65 74 61 6c 57 68 69 70 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: NewElectro +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank A, voice 12 +1f 0e 0f 0e 09 00 03 29 2d 06 1f 0f 05 0b 0e 4e 02 5a 04 0b 1f 12 06 08 0e +00 03 60 04 03 1f 12 06 08 0e 00 04 63 04 0b 34 14 00 00 00 62 18 01 04 00 +63 32 00 32 00 32 00 4e 65 77 45 6c 65 63 74 72 6f 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: NewElectro +** Description: still another electric piano +** Controls: KV +** Source: GLIB (Michael Kesti and others) +1f 0e 0f 0e 09 00 06 4b 24 06 1f 0e 03 0b 0e 43 02 55 04 13 1f 12 06 08 0e +00 04 4e 04 03 1f 12 08 08 0a 00 03 62 04 03 34 14 00 00 00 62 18 01 04 00 +63 32 00 32 00 32 00 4e 65 77 45 6c 65 63 74 72 6f 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: NewElectro +** Controls: KV +** Source: DX100 GLIB patch (Michael Kesti and others) +1f 0e 0f 0e 09 00 07 4b 24 06 1f 0e 03 0b 0e 43 07 55 04 13 1f 12 06 08 0e +00 07 4e 04 03 1f 12 08 08 0a 00 07 62 04 03 34 14 00 00 00 62 18 01 04 00 +63 32 00 32 00 32 00 4e 65 77 45 6c 65 63 74 72 6f 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Old Rose +** Controls: KV +** Source: Yamaha DX11 factory preset, bank B, voice 2 +19 12 05 09 0a 25 41 54 04 05 19 0a 0a 09 0c 25 04 45 08 13 1f 13 00 09 03 +00 05 56 02 03 1a 1f 05 09 0f 00 43 60 04 09 32 19 00 00 00 5e 18 02 04 00 +28 09 0f 00 00 32 00 4f 6c 64 20 52 6f 73 65 20 20 63 63 63 32 32 32 00 30 +00 50 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Old Rose +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +19 12 05 09 0d 25 41 54 04 05 19 0d 0a 09 0c 25 04 45 08 13 1f 13 00 09 03 +00 05 56 02 03 1a 1f 05 09 0f 00 43 60 04 09 32 19 00 00 00 5e 18 02 04 00 +28 09 0f 00 00 32 00 4f 6c 64 20 52 6f 73 65 20 20 63 63 63 32 32 32 00 30 +00 50 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrganPiano +** Description: Doesn't sound like either +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: GLIB (Michael Kesti and others) +1f 1b 0f 0e 0a 00 02 4e 0a 06 1f 09 00 0b 00 43 02 4d 04 13 1f 09 05 08 0e +00 02 59 08 03 1f 12 08 08 0a 00 02 62 04 03 3c 1c 1d 10 00 62 18 01 04 00 +63 32 00 32 00 32 00 4f 72 67 61 6e 50 69 61 6e 6f 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrganPiano +** Description: a meek, organ-like electric piano +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: GLIB (Michael Kesti and others) +1f 1b 0f 0e 0a 00 03 4e 0a 06 1f 09 00 0b 00 43 03 4d 04 13 1f 09 05 08 0e +00 02 59 08 03 1f 12 08 08 0a 00 02 62 04 03 3c 1c 1d 10 00 62 18 01 04 00 +63 32 00 32 00 32 00 4f 72 67 61 6e 50 69 61 6e 6f 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ornt Piano +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 09 00 04 0a 00 02 47 04 05 19 09 04 07 06 00 02 3b 0d 03 1e 16 02 06 0f +00 05 63 08 04 1e 15 08 05 0d 00 05 5a 3e 0a 2c 1e 17 00 00 22 18 04 04 00 +28 32 00 00 00 32 00 4f 72 6e 74 20 50 69 61 6e 6f 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ornt Piano +** Source: from a library of patches collected by Duane Bowker, author unknown +16 09 00 04 0a 00 00 47 04 05 19 09 04 07 06 00 00 3b 0d 03 1e 16 02 06 0f +00 00 63 08 04 1e 15 08 05 0d 00 00 5a 3e 0a 2c 1e 17 00 00 22 18 04 04 00 +28 32 00 00 00 32 00 4f 72 6e 74 20 50 69 61 6e 6f 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PetalPiano +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 08 07 06 06 57 07 43 04 05 13 06 07 06 0a 00 00 3b 00 09 1d 08 07 06 0a +00 00 57 00 00 13 05 07 06 03 00 02 63 00 0d 01 1c 08 04 00 32 24 02 04 00 +63 32 00 00 00 32 00 50 65 74 61 6c 50 69 61 6e 6f 63 63 63 32 32 32 00 00 +00 00 00 10 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PhaseGrand +** Description: another electric piano +** Controls: KV +** Source: GLIB (Michael Kesti and others) +1d 17 02 0f 0a 52 00 47 0a 16 15 03 00 07 0e 35 04 4e 04 16 16 0f 00 02 0f +4f 03 56 04 10 13 1d 01 03 0a 0c 05 63 04 1b 33 23 00 00 00 62 18 02 04 00 +63 32 00 32 00 32 00 50 68 61 73 65 47 72 61 6e 64 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PianGuitar +** Description: Cross between a piano and a guitar, sort of +** Controls: KV +** Source: Art Hitzeman +1f 12 08 02 0b 39 02 4e 04 0b 1e 06 02 04 09 22 04 56 09 13 1f 0c 03 05 05 +27 05 46 1c 16 1e 05 03 05 09 00 02 5d 04 13 02 20 00 00 00 62 18 02 04 00 +28 32 00 00 00 32 00 50 69 61 6e 47 75 69 74 61 72 63 63 63 32 32 32 00 00 +00 02 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rag Piano +** Description: A piano for those Scott Joplin pieces +** Controls: KV, MW (LFO pitch) +** Source: Art Hitzeman +1f 07 01 03 0e 2b 03 4c 04 08 16 03 02 04 0c 63 02 4c 09 16 1f 07 03 04 0a +63 02 4a 23 15 17 16 06 04 0e 19 03 63 04 16 0a 1f 00 04 00 42 13 02 04 00 +28 32 00 00 00 32 00 52 61 67 20 50 69 61 6e 6f 20 63 63 63 33 33 33 00 05 +00 0c 00 05 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: RatRhodes +** Controls: KV, MW (LFO pitch), MW (LFO amplitude), BC (LFO pitch), BC (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 09 08 08 0a 2b 47 63 00 06 1f 18 02 06 0c 00 01 59 2c 0b 1f 19 04 05 0f +04 46 63 00 13 1f 15 0a 05 0d 07 07 57 0f 10 04 14 16 07 0c 4a 18 02 04 00 +63 32 33 2f 27 32 00 52 61 74 52 68 6f 64 65 73 20 63 63 63 32 32 32 00 30 +0c 58 00 00 00 48 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Reed Piano +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank A, voice 16 +1f 0d 10 0d 0c 00 04 27 08 13 1f 1f 00 09 0f 24 43 42 04 16 1f 06 07 0a 0d +17 03 57 08 10 1f 09 02 07 0e 00 03 63 04 13 3b 17 00 00 11 5e 0c 04 04 00 +63 32 00 32 00 32 00 52 65 65 64 20 50 69 61 6e 6f 63 63 63 32 32 32 00 03 +00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Piano3 + +** Name: Rhodes...1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 0f 04 0f 00 01 2b 3f 06 1f 12 05 07 0e 4e 03 58 04 0b 1f 12 06 08 0e +52 05 4a 08 0b 1f 12 06 08 0e 00 44 63 04 0b 38 14 00 00 10 66 0c 00 04 00 +63 00 00 00 00 32 00 52 68 6f 64 65 73 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rhodes...1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 0f 04 0f 00 01 2b 3f 06 1f 12 05 07 0e 4e 02 58 04 0b 1f 12 06 08 0e +52 01 4a 08 0b 1f 12 06 08 0e 00 40 63 04 0b 38 14 00 00 10 66 0c 00 04 00 +63 00 00 00 00 32 00 52 68 6f 64 65 73 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rhodes...2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 04 00 08 0c 00 01 57 04 1b 1c 09 06 08 0c 4e 01 37 2a 0b 1c 04 00 08 0c +52 05 60 08 13 1c 07 07 08 0b 00 05 63 04 03 04 22 21 00 00 02 18 00 04 00 +63 00 00 00 00 32 00 52 68 6f 64 65 73 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rhodes...2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 04 00 08 0c 00 01 57 04 1b 1c 09 06 08 0c 4e 01 37 2a 0b 1c 04 00 08 0c +52 00 60 08 13 1c 07 07 08 0b 00 00 63 04 03 04 22 21 00 00 02 18 00 04 00 +63 00 00 00 00 32 00 52 68 6f 64 65 73 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rhodes...3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 04 00 08 0c 00 02 47 04 03 1c 15 0c 08 0c 4e 03 63 31 0b 1c 04 00 08 0c +00 05 5f 08 03 1c 1f 07 04 0b 00 05 62 04 0b 34 14 00 00 00 62 18 01 04 00 +63 32 00 32 00 32 00 52 68 6f 64 65 73 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rhodes...3 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 04 00 08 0c 00 02 47 04 03 1c 15 0c 08 0c 4e 01 63 31 0b 1c 04 00 08 0c +00 01 5f 08 03 1c 1f 07 04 0b 00 00 62 04 0b 34 14 00 00 00 62 18 01 04 00 +63 32 00 32 00 32 00 52 68 6f 64 65 73 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rhodes...4 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 04 00 08 0c 00 03 48 08 03 1c 15 0c 08 0c 4e 03 58 31 0b 1c 04 00 08 0c +00 05 5a 08 03 1c 1f 07 04 0b 00 04 62 08 0b 36 14 00 00 00 62 0c 01 04 00 +63 32 00 32 00 32 00 52 68 6f 64 65 73 2e 2e 2e 34 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rhodes...4 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 04 00 08 0c 00 03 48 08 03 1c 15 0c 08 0c 4e 01 58 31 0b 1c 04 00 08 0c +00 00 5a 08 03 1c 1f 07 04 0b 00 00 62 08 0b 36 14 00 00 00 62 0c 01 04 00 +63 32 00 32 00 32 00 52 68 6f 64 65 73 2e 2e 2e 34 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rhodes...5 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 09 06 07 05 00 43 52 04 0e 1c 09 05 0b 0a 4e 45 61 2a 0b 1c 06 06 07 0c +00 44 5f 04 08 1c 07 07 07 0b 00 45 63 04 0e 34 13 00 00 24 66 18 01 04 00 +63 32 00 32 00 32 00 52 68 6f 64 65 73 2e 2e 2e 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rhodes...5 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 09 06 07 05 00 42 52 04 0e 1c 09 05 0b 0a 4e 45 61 2a 0b 1c 06 06 07 0c +00 40 5f 04 08 1c 07 07 07 0b 00 42 63 04 0e 34 13 00 00 24 66 18 01 04 00 +63 32 00 32 00 32 00 52 68 6f 64 65 73 2e 2e 2e 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rhodes...6 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 03 03 02 0d 00 43 51 04 1b 1f 0d 0a 06 0d 4e 43 55 24 0b 1f 06 08 07 0d +00 45 5a 04 03 1f 0f 09 07 0d 00 45 61 04 0b 26 13 00 00 24 66 18 01 04 00 +63 32 00 32 00 32 00 52 68 6f 64 65 73 2e 2e 2e 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rhodes...6 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 03 03 02 0d 00 41 51 04 1b 1f 0d 0a 06 0d 4e 41 55 24 0b 1f 06 08 07 0d +00 40 5a 04 03 1f 0f 09 07 0d 00 40 61 04 0b 26 13 00 00 24 66 18 01 04 00 +63 32 00 32 00 32 00 52 68 6f 64 65 73 2e 2e 2e 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rhodes...7 +** Controls: KV, MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +19 0a 09 05 01 00 01 3d 13 16 19 0a 09 05 02 00 02 63 00 0c 19 07 09 05 07 +13 04 63 0d 0e 19 07 09 05 07 13 44 63 04 0b 7e 14 0a 00 39 06 0c 02 04 00 +63 15 27 00 00 32 00 52 68 6f 64 65 73 2e 2e 2e 37 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rhodes...7 +** Controls: KV, MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +19 0a 09 05 01 00 01 3d 13 16 19 0a 09 05 02 00 00 63 00 0c 19 07 09 05 07 +13 00 63 0d 0e 19 07 09 05 07 13 40 63 04 0b 7e 14 0a 00 39 06 0c 02 04 00 +63 15 27 00 00 32 00 52 68 6f 64 65 73 2e 2e 2e 37 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rhodes...8 +** Controls: KV, MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 09 00 07 0d 00 02 4c 04 1e 1c 0f 0a 05 0b 5c 03 5f 24 14 1c 06 06 07 0d +13 05 5b 04 06 1c 0f 09 07 0b 13 45 5f 04 03 7e 14 0a 00 39 06 0c 02 04 00 +63 15 27 00 00 32 00 52 68 6f 64 65 73 2e 2e 2e 38 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rhodes...8 +** Controls: KV, MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 09 00 07 0d 00 00 4c 04 1e 1c 0f 0a 05 0b 5c 01 5f 24 14 1c 06 06 07 0d +13 00 5b 04 06 1c 0f 09 07 0b 13 40 5f 04 03 7e 14 0a 00 39 06 0c 02 04 00 +63 15 27 00 00 32 00 52 68 6f 64 65 73 2e 2e 2e 38 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rhodes...9 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 04 00 08 0c 00 01 54 04 1b 1c 09 06 08 0c 4e 03 42 2a 0b 1c 04 00 08 0c +52 06 63 04 13 1c 07 07 08 0b 00 46 63 04 03 06 19 21 00 2c 06 18 00 04 00 +63 00 00 00 00 32 00 52 68 6f 64 65 73 2e 2e 2e 39 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rhodes...9 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 04 00 08 0c 00 01 54 04 1b 1c 09 06 08 0c 4e 00 42 2a 0b 1c 04 00 08 0c +52 00 63 04 13 1c 07 07 08 0b 00 40 63 04 03 06 19 21 00 2c 06 18 00 04 00 +63 00 00 00 00 32 00 52 68 6f 64 65 73 2e 2e 2e 39 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rhodes..10 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 04 00 08 0c 00 02 5b 04 1b 1c 09 06 08 0c 4e 03 57 24 1b 1c 04 00 08 0c +52 04 63 04 13 1c 07 07 08 0b 00 44 63 04 03 07 19 21 00 2c 06 18 00 04 00 +63 00 00 00 00 32 00 52 68 6f 64 65 73 2e 2e 31 30 63 63 63 32 32 32 00 20 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rhodes..10 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 04 00 08 0c 00 02 5b 04 1b 1c 09 06 08 0c 4e 00 57 24 1b 1c 04 00 08 0c +52 00 63 04 13 1c 07 07 08 0b 00 40 63 04 03 07 19 21 00 2c 06 18 00 04 00 +63 00 00 00 00 32 00 52 68 6f 64 65 73 2e 2e 31 30 63 63 63 32 32 32 00 20 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rhodes..11 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 0f 04 0f 00 03 34 0d 0e 1f 12 05 0b 0e 4e 05 45 19 03 1f 12 06 08 0e +52 04 45 04 03 1f 12 06 08 0e 00 06 63 04 03 3c 22 21 00 00 02 0c 00 04 00 +63 00 00 00 00 32 00 52 68 6f 64 65 73 2e 2e 31 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rhodes..11 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 0f 04 0f 00 01 34 0d 0e 1f 12 05 0b 0e 4e 01 45 19 03 1f 12 06 08 0e +52 00 45 04 03 1f 12 06 08 0e 00 00 63 04 03 3c 22 21 00 00 02 0c 00 04 00 +63 00 00 00 00 32 00 52 68 6f 64 65 73 2e 2e 31 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rhodes..12 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1a 04 00 08 0c 00 44 59 08 06 1a 15 0c 08 0c 4e 45 62 24 0b 1a 04 00 08 0c +00 44 63 04 00 1a 1f 07 04 0b 00 46 62 04 0b 37 13 00 00 24 66 18 01 04 00 +63 32 00 32 00 32 00 52 68 6f 64 65 73 2e 2e 31 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rhodes..12 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1a 04 00 08 0c 00 41 59 08 06 1a 15 0c 08 0c 4e 40 62 24 0b 1a 04 00 08 0c +00 40 63 04 00 1a 1f 07 04 0b 00 40 62 04 0b 37 13 00 00 24 66 18 01 04 00 +63 32 00 32 00 32 00 52 68 6f 64 65 73 2e 2e 31 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rhodes..13 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 03 02 02 0d 00 44 3d 22 1b 1f 0d 07 06 0d 32 46 45 1f 13 1f 06 04 07 0d +00 45 36 04 03 1f 0f 05 07 0d 00 45 5f 04 03 03 13 00 00 24 66 18 01 04 00 +63 32 00 32 00 32 00 52 68 6f 64 65 73 2e 2e 31 33 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rhodes..13 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 03 02 02 0d 00 41 3d 22 1b 1f 0d 07 06 0d 32 41 45 1f 13 1f 06 04 07 0d +00 41 36 04 03 1f 0f 05 07 0d 00 40 5f 04 03 03 13 00 00 24 66 18 01 04 00 +63 32 00 32 00 32 00 52 68 6f 64 65 73 2e 2e 31 33 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SkoolPiano +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank A, voice 7 +1d 01 04 03 00 1a 01 48 04 0d 16 01 03 04 0c 63 04 4e 0d 13 18 04 03 03 00 +56 01 44 16 18 1a 07 03 06 0d 00 01 61 04 13 3a 23 00 00 00 02 0c 02 04 00 +63 32 00 00 00 32 00 53 6b 6f 6f 6c 50 69 61 6e 6f 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SpacePiano +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 06 02 07 0d 00 05 3a 3a 13 1b 19 03 08 0b 00 45 63 2b 13 16 06 04 0c 0d +00 44 62 04 0b 15 09 04 07 00 00 45 61 04 13 2c 19 00 00 51 66 18 04 04 00 +28 32 00 00 00 32 00 53 70 61 63 65 50 69 61 6e 6f 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SquareFlat +** Description: a buzzy electric piano +** Controls: KV +** Source: GLIB (Michael Kesti and others) +1f 1f 00 0e 0f 00 03 5c 04 06 1f 0e 03 0b 0e 43 03 55 04 13 1f 12 06 08 0e +00 03 58 04 00 1f 12 08 08 0a 00 03 63 04 03 34 14 00 00 00 62 18 01 04 00 +63 32 00 32 00 32 00 53 71 75 61 72 65 46 6c 61 74 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sus Piano +** Description: Grand 2 with infinitely long sustain +** Controls: KV +** Source: Art Hitzeman +1f 0e 03 03 09 29 07 4c 04 00 16 04 01 03 0d 63 02 4c 09 16 1f 10 02 03 0a +63 02 4a 1c 15 17 04 00 05 0f 00 03 63 04 16 3a 1f 08 20 02 02 18 02 04 00 +28 63 00 00 00 32 00 53 75 73 20 50 69 61 6e 6f 20 63 63 63 32 32 32 00 00 +00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Thump Pno +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank A, voice 8 +1f 11 0b 0f 00 00 03 41 05 16 1f 0b 04 04 0f 55 02 55 04 16 1f 09 04 09 0e +3f 02 45 10 15 1f 09 07 07 0c 00 03 63 04 08 52 1d 13 00 00 52 0c 02 04 00 +63 16 00 00 00 32 00 54 68 75 6d 70 20 50 6e 6f 20 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Toy Piano +** Controls: KV +** Source: Yamaha DX11 factory preset, bank B, voice 24 +1f 0f 0a 07 0c 27 02 50 0a 00 1f 0e 0a 09 0a 1a 02 4f 15 06 1d 10 0e 07 0e +00 05 54 10 08 1d 10 0a 08 0a 00 01 60 08 0e 14 1a 00 00 00 62 24 02 04 00 +28 32 00 00 00 32 00 54 6f 79 20 50 69 61 6e 6f 20 63 63 63 32 32 32 00 07 +00 07 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Toy Piano +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0f 0d 07 0c 27 02 50 0a 00 1f 0e 0a 09 0d 1a 02 4f 15 06 1d 10 0e 07 0e +00 05 54 10 08 1d 10 0d 08 0d 00 01 60 08 0e 14 1a 00 00 00 62 24 02 04 00 +28 32 00 00 00 32 00 54 6f 79 20 50 69 61 6e 6f 20 63 63 63 32 32 32 00 07 +00 07 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Upright * +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 14 0a 0f 00 00 02 5e 0c 1b 17 0b 0a 0b 00 58 03 4e 0a 1c 1b 0a 10 01 00 +5e 01 50 00 0b 16 08 0a 06 00 1f 02 63 05 13 03 19 19 3c 00 42 05 02 04 00 +28 63 00 00 00 32 00 55 70 72 69 67 68 74 20 20 2a 63 63 63 32 32 32 08 7b +00 00 00 14 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Upright +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank B, voice 6 +16 1d 12 07 0c 00 42 42 07 04 1c 0e 03 05 0f 14 43 4f 04 16 1b 13 01 02 0f +63 45 39 19 18 19 07 04 06 05 0a 42 63 04 13 1a 1e 00 06 02 42 18 02 04 00 +28 32 00 00 00 32 00 55 70 72 69 67 68 74 20 20 20 63 63 63 32 32 32 0b 02 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Upright +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +16 1d 12 07 0c 00 42 42 07 04 1c 0e 03 05 0f 14 43 4f 04 16 1b 13 01 02 0f +63 45 39 19 18 19 07 04 06 05 0d 42 63 04 13 1a 1e 00 06 02 42 18 02 04 00 +28 32 00 00 00 32 00 55 70 72 69 67 68 74 20 20 20 63 63 63 32 32 32 0b 02 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: UprightBas +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +07 01 00 08 0d 16 02 4c 00 10 1f 08 05 07 0d 00 03 55 00 0e 1f 1c 03 07 0e +13 02 50 00 10 1f 0e 05 06 0d 00 03 63 00 0b 3a 1b 0f 0a 00 52 0c 04 05 00 +63 4b 00 12 00 32 00 55 70 72 69 67 68 74 42 61 73 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Uprt piano +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank A, voice 2 +13 02 01 04 0c 48 04 41 10 19 13 02 01 04 0c 45 03 59 04 10 13 02 01 04 0c +48 03 4a 10 1d 13 02 01 04 0c 00 05 63 04 1b 3a 23 00 00 00 12 18 04 04 00 +63 32 00 00 00 32 00 55 70 72 74 20 70 69 61 6e 6f 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: WiredPiano +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 00 04 03 09 1a 01 4a 04 1d 17 07 03 04 0b 0a 04 45 0d 13 19 05 03 03 0a +41 02 46 22 18 1a 06 03 06 0b 00 02 61 04 13 3a 23 00 00 00 02 0c 02 04 00 +63 32 00 00 00 32 00 57 69 72 65 64 50 69 61 6e 6f 63 63 63 32 32 32 10 00 +00 00 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Wood Piano +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank A, voice 15 +1f 0c 07 08 03 00 04 4d 04 03 1f 05 07 08 0f 00 04 50 04 0b 1f 09 00 08 00 +00 04 63 00 08 1f 09 00 08 00 00 03 63 00 0b 34 19 00 07 00 52 24 01 04 00 +63 32 00 32 00 32 00 57 6f 6f 64 20 50 69 61 6e 6f 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: britegrand +** Description: another electric piano +** Controls: KV +** Source: GLIB (Michael Kesti and others) +1d 17 02 0f 0a 07 00 4e 0a 16 15 03 00 07 0e 35 04 4e 04 16 16 0f 00 02 0f +4f 03 56 04 10 13 1d 01 03 0a 0c 05 63 04 1b 33 23 00 00 00 62 18 02 04 00 +63 32 00 32 00 32 00 62 72 69 74 65 67 72 61 6e 64 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: callipiano +** Description: an electric piano with tremolo sustain +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: GLIB (Michael Kesti and others) +1f 11 0f 0e 0a 00 03 52 0a 06 1f 01 00 0b 00 43 03 5a 04 13 1f 03 05 08 0f +00 03 5a 0a 03 1f 12 08 08 0a 00 03 63 04 03 14 1c 1d 07 00 62 18 01 04 00 +63 32 00 32 00 32 00 63 61 6c 6c 69 70 69 61 6e 6f 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: flatfunk +** Description: a percussive electric piano sound +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: GLIB (Michael Kesti and others) +1f 11 0f 0e 0a 00 04 52 13 06 1f 01 00 0b 00 43 04 5a 04 13 1f 05 05 08 0e +00 04 5a 00 03 1f 12 08 08 0a 00 04 63 04 03 10 1c 1d 10 00 62 18 01 04 00 +63 32 00 32 00 32 00 66 6c 61 74 66 75 6e 6b 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: fuzzbass +** Description: a very fuzzy bass electric piano +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: GLIB (Michael Kesti and others) +1f 05 00 0e 0a 00 03 59 00 06 1f 09 00 0b 00 43 03 4d 04 13 1f 09 05 08 0e +00 03 5c 04 03 1f 12 08 08 0a 00 03 62 04 03 3c 1c 1d 10 00 52 18 01 04 00 +63 32 00 32 00 32 00 66 75 7a 7a 62 61 73 73 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: metlmarimb +** Description: a metallic electric piano +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: GLIB (Michael Kesti and others) +1f 0e 01 0e 0c 00 03 5a 0a 06 1f 09 00 0b 00 43 03 4d 04 13 1f 09 05 08 0e +00 03 59 08 03 1f 12 08 08 0a 00 03 62 00 03 3c 1c 1d 06 00 62 18 01 04 00 +63 32 00 32 00 32 00 6d 65 74 6c 6d 61 72 69 6d 62 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: mildfilter +** Description: a variation on SquareFlat +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: GLIB (Michael Kesti and others) +1f 02 03 06 00 0e 03 54 08 1b 1f 0b 00 09 0c 00 00 3c 04 04 1f 06 00 09 01 +00 00 4b 04 03 1f 1c 04 09 0a 00 03 63 08 03 38 1e 09 04 00 62 0c 02 05 00 +63 32 00 32 00 32 00 6d 69 6c 64 66 69 6c 74 65 72 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: phaseharp +** Description: yet another electric piano +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: GLIB (Michael Kesti and others) +1f 07 00 0e 0a 00 07 62 0a 06 1f 09 00 0b 00 43 07 4d 04 13 1f 09 05 08 0e +00 01 59 08 03 1f 12 08 08 0a 00 00 62 04 03 3c 1c 1d 10 00 52 18 01 04 00 +63 32 00 32 00 32 00 70 68 61 73 65 68 61 72 70 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: pizzapiano +** Description: yet another electric piano +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: GLIB (Michael Kesti and others) +13 10 00 0e 0a 00 03 54 08 06 1f 09 00 0b 00 43 03 4d 04 13 1f 09 05 08 0e +00 03 59 08 03 1f 12 08 08 0a 00 03 62 04 03 3c 1c 1d 10 00 52 18 01 04 00 +63 32 00 32 00 32 00 70 69 7a 7a 61 70 69 61 6e 6f 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: stringback +** Description: an electric piano with interesting decay +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: GLIB (Michael Kesti and others) +06 05 00 0e 0a 00 03 52 08 06 19 02 00 0b 00 43 03 57 0a 13 1f 09 05 08 0e +00 03 59 08 03 1f 12 08 08 0a 00 03 62 04 03 3c 1c 1d 10 00 52 18 01 04 00 +63 32 00 32 00 32 00 73 74 72 69 6e 67 62 61 63 6b 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +--Bank 17 + +* SUBCATEGORY Synthesizer1 + + +** Name: AnlgSynt.1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +05 06 07 04 0a 23 04 52 08 0b 06 03 0c 06 0d 00 05 44 10 0c 12 01 06 06 0e +00 05 63 04 05 06 06 09 06 0b 00 05 60 04 02 74 2a 00 00 00 32 0c 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt.1 +** Source: from a library of patches collected by Duane Bowker, author unknown +05 06 07 04 0a 23 00 52 08 0b 06 03 0c 06 0d 00 00 44 10 0c 12 01 06 06 0e +00 00 63 04 05 06 06 09 06 0b 00 00 60 04 02 74 2a 00 00 00 32 0c 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt.2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 02 07 0c 04 5c 06 56 04 03 0f 03 03 08 0e 00 04 5f 04 06 1f 1f 00 0f 0f +00 06 5f 04 03 1f 12 01 09 0e 00 05 5f 04 03 7c 2a 00 00 00 32 00 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 2e 32 63 63 63 32 32 32 00 20 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt.2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 02 07 0c 04 5c 01 56 04 03 0f 03 03 08 0e 00 01 5f 04 06 1f 1f 00 0f 0f +00 00 5f 04 03 1f 12 01 09 0e 00 00 5f 04 03 7c 2a 00 00 00 32 00 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 2e 32 63 63 63 32 32 32 00 20 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt.3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 02 07 0c 04 5c 03 59 04 03 0f 03 03 08 0e 00 05 63 04 06 1f 1f 00 0f 0f +00 07 63 04 03 1f 12 01 09 0e 00 06 5f 04 03 74 2a 00 00 00 32 0c 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 2e 33 63 63 63 32 32 32 00 10 +00 10 00 20 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt.3 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 02 07 0c 04 5c 01 59 04 03 0f 03 03 08 0e 00 02 63 04 06 1f 1f 00 0f 0f +00 00 63 04 03 1f 12 01 09 0e 00 00 5f 04 03 74 2a 00 00 00 32 0c 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 2e 33 63 63 63 32 32 32 00 10 +00 10 00 20 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt.4 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 09 07 09 0a 5c 04 51 08 05 12 04 03 09 0c 00 05 51 08 00 1f 12 07 09 0e +00 05 63 04 05 1b 09 0c 09 0a 00 06 54 04 00 7c 2a 00 00 00 42 0c 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 2e 34 63 63 63 32 32 32 00 10 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt.4 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +12 09 07 09 0a 5c 01 51 08 05 12 04 03 09 0c 00 01 51 08 00 1f 12 07 09 0e +00 00 63 04 05 1b 09 0c 09 0a 00 00 54 04 00 7c 2a 00 00 00 42 0c 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 2e 34 63 63 63 32 32 32 00 10 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt.5 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 0f 0f 09 0d 00 04 52 08 02 1e 04 06 0c 09 00 06 4d 0a 03 1f 09 07 09 0e +00 05 61 04 04 1e 09 07 0a 0e 00 06 60 04 03 34 23 00 02 00 32 0c 02 04 00 +63 63 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 2e 35 63 63 63 32 32 32 00 00 +00 00 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt.5 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 0f 0f 09 0d 00 01 52 08 02 1e 04 06 0c 09 00 01 4d 0a 03 1f 09 07 09 0e +00 00 61 04 04 1e 09 07 0a 0e 00 00 60 04 03 34 23 00 02 00 32 0c 02 04 00 +63 63 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 2e 35 63 63 63 32 32 32 00 00 +00 00 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt.6 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 02 07 0c 04 5c 05 53 04 03 1f 0f 03 08 0f 00 04 54 04 05 1f 1f 00 0f 0f +00 06 63 04 03 1f 09 01 09 09 00 05 5f 04 01 6c 23 00 00 00 32 0c 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 2e 36 63 63 63 32 32 32 00 00 +00 20 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt.6 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 02 07 0c 04 5c 02 53 04 03 1f 0f 03 08 0f 00 01 54 04 05 1f 1f 00 0f 0f +00 00 63 04 03 1f 09 01 09 09 00 00 5f 04 01 6c 23 00 00 00 32 0c 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 2e 36 63 63 63 32 32 32 00 00 +00 20 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt.7 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 06 03 08 05 5c 05 5d 04 00 1f 0a 06 08 07 00 05 52 04 06 18 07 04 08 05 +00 05 63 04 00 1f 15 06 08 0e 00 46 62 04 08 2c 20 00 00 47 36 0c 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 2e 37 63 63 63 32 32 32 00 00 +00 00 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt.7 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 06 03 08 05 5c 02 5d 04 00 1f 0a 06 08 07 00 01 52 04 06 18 07 04 08 05 +00 00 63 04 00 1f 15 06 08 0e 00 40 62 04 08 2c 20 00 00 47 36 0c 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 2e 37 63 63 63 32 32 32 00 00 +00 00 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt.8 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 0c 07 09 07 00 04 58 08 06 12 0c 07 09 0a 00 06 5b 04 03 1f 16 00 09 0d +00 06 56 04 06 1f 16 00 09 0d 00 06 62 08 03 2c 20 00 00 00 32 0c 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 2e 38 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt.8 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +12 0c 07 09 07 00 01 58 08 06 12 0c 07 09 0a 00 01 5b 04 03 1f 16 00 09 0d +00 00 56 04 06 1f 16 00 09 0d 00 00 62 08 03 2c 20 00 00 00 32 0c 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 2e 38 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt.9 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 0c 09 03 0c 00 03 5a 08 06 0f 0c 09 04 0c 00 04 59 04 02 1f 15 05 03 0d +00 05 56 04 0e 1f 15 05 05 0d 00 47 62 04 0e 2c 26 21 11 00 22 0c 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 2e 39 63 63 63 32 32 32 00 40 +00 20 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt.9 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 0c 09 03 0c 00 01 5a 08 06 0f 0c 09 04 0c 00 01 59 04 02 1f 15 05 03 0d +00 00 56 04 0e 1f 15 05 05 0d 00 40 62 04 0e 2c 26 21 11 00 22 0c 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 2e 39 63 63 63 32 32 32 00 40 +00 20 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt10 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 0d 12 03 06 00 03 52 04 00 0f 04 12 09 0c 00 06 4a 10 0a 0f 15 06 03 0e +00 05 63 04 08 1f 15 06 05 0d 00 45 62 04 0e 3c 26 21 20 00 52 0c 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 31 30 63 63 63 32 32 32 00 00 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt10 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 0d 12 03 06 00 01 52 04 00 0f 04 12 09 0c 00 01 4a 10 0a 0f 15 06 03 0e +00 00 63 04 08 1f 15 06 05 0d 00 40 62 04 0e 3c 26 21 20 00 52 0c 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 31 30 63 63 63 32 32 32 00 00 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt11 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +13 03 12 07 06 00 04 50 04 00 10 0d 12 07 06 00 05 56 04 02 11 06 06 08 0e +00 06 63 04 08 10 15 06 08 0e 00 06 62 04 0e 3c 26 1c 20 00 42 0c 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 31 31 63 63 63 32 32 32 00 00 +00 40 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt11 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +13 03 12 07 06 00 02 50 04 00 10 0d 12 07 06 00 01 56 04 02 11 06 06 08 0e +00 00 63 04 08 10 15 06 08 0e 00 00 62 04 0e 3c 26 1c 20 00 42 0c 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 31 31 63 63 63 32 32 32 00 00 +00 40 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt12 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 03 12 07 06 00 04 57 08 00 07 04 04 07 0d 00 04 56 0d 02 10 05 06 08 0e +00 07 63 08 08 19 04 03 07 0f 00 06 62 04 04 2c 26 21 20 00 22 0c 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 31 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt12 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +10 03 12 07 06 00 02 57 08 00 07 04 04 07 0d 00 03 56 0d 02 10 05 06 08 0e +00 00 63 08 08 19 04 03 07 0f 00 00 62 04 04 2c 26 21 20 00 22 0c 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 31 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt13 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 09 06 0a 0f 00 03 59 00 0b 1f 0c 06 0a 0b 00 04 63 00 02 1f 0c 05 0a 0b +00 04 63 00 04 1f 16 02 0a 0f 00 06 62 00 02 2d 25 00 00 00 32 18 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 31 33 63 63 63 32 32 32 00 00 +00 00 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt13 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 09 06 0a 0f 00 01 59 00 0b 1f 0c 06 0a 0b 00 00 63 00 02 1f 0c 05 0a 0b +00 00 63 00 04 1f 16 02 0a 0f 00 00 62 00 02 2d 25 00 00 00 32 18 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 31 33 63 63 63 32 32 32 00 00 +00 00 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt14 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 06 00 06 07 1b 03 58 04 09 1f 06 00 04 09 13 04 54 0d 0d 1f 07 00 07 07 +0b 05 63 08 09 1f 06 00 04 09 00 05 62 04 0d 2c 1c 00 05 00 22 0c 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 31 34 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt14 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 06 00 06 07 1b 01 58 04 09 1f 06 00 04 09 13 02 54 0d 0d 1f 07 00 07 07 +0b 00 63 08 09 1f 06 00 04 09 00 00 62 04 0d 2c 1c 00 05 00 22 0c 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 31 34 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt15 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 09 01 08 03 1b 03 63 00 09 1f 15 06 09 0f 00 05 57 04 01 1f 15 06 09 0f +00 04 63 04 01 1f 15 06 09 0f 00 06 62 00 01 2c 1c 00 05 00 22 0c 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 31 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AnlgSynt15 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 09 01 08 03 1b 01 63 00 09 1f 15 06 09 0f 00 01 57 04 01 1f 15 06 09 0f +00 00 63 04 01 1f 15 06 09 0f 00 00 62 00 01 2c 1c 00 05 00 22 0c 02 04 00 +28 02 00 00 00 32 00 41 6e 6c 67 53 79 6e 74 31 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ariesynth1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 08 01 05 09 00 03 55 00 03 1f 03 00 05 06 2d 03 59 0d 0b 1f 08 00 04 0c +43 05 63 13 0b 1c 06 04 04 07 00 05 63 08 0b 6d 21 00 38 00 22 0c 06 04 00 +63 32 00 32 00 32 00 41 72 69 65 73 79 6e 74 68 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ariesynth1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 08 01 05 09 00 01 55 00 03 1f 03 00 05 06 2d 02 59 0d 0b 1f 08 00 04 0c +43 00 63 13 0b 1c 06 04 04 07 00 00 63 08 0b 6d 21 00 38 00 22 0c 06 04 00 +63 32 00 32 00 32 00 41 72 69 65 73 79 6e 74 68 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ariesynth2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 08 01 05 09 00 03 53 00 03 1f 03 00 05 06 2d 05 52 00 13 1f 08 00 04 0c +43 05 55 00 0b 1c 06 04 05 07 00 07 63 04 0b 7a 21 00 38 00 22 0c 06 04 00 +63 32 00 32 00 32 00 41 72 69 65 73 79 6e 74 68 32 63 63 63 32 32 32 00 00 +00 10 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ariesynth2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 08 01 05 09 00 01 53 00 03 1f 03 00 05 06 2d 01 52 00 13 1f 08 00 04 0c +43 00 55 00 0b 1c 06 04 05 07 00 00 63 04 0b 7a 21 00 38 00 22 0c 06 04 00 +63 32 00 32 00 32 00 41 72 69 65 73 79 6e 74 68 32 63 63 63 32 32 32 00 00 +00 10 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: A.R.P. * +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0d 08 06 0d 00 00 4c 04 03 1f 07 00 04 0c 00 00 42 04 03 1f 04 00 02 0d +00 00 42 04 03 1a 0c 00 08 0e 00 00 63 04 03 3a 21 00 00 00 52 0c 02 0d 1f +28 63 00 00 00 32 00 20 20 41 2e 52 2e 50 2e 20 2a 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ARP 2500 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1d 16 00 05 0e 0a 04 62 00 01 1f 0d 10 05 00 0e 05 3f 10 12 1f 0d 10 05 00 +0c 04 3a 0d 15 10 1f 00 0b 0f 00 0d 63 04 04 6d 14 00 36 00 22 18 04 04 01 +63 19 33 00 00 32 00 41 52 50 20 32 35 30 30 20 20 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ARP 2500 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 16 00 05 0e 0a 01 62 00 01 1f 0d 10 05 00 0e 01 3f 10 12 1f 0d 10 05 00 +0c 01 3a 0d 15 10 1f 00 0b 0f 00 00 63 04 04 6d 14 00 36 00 22 18 04 04 01 +63 19 33 00 00 32 00 41 52 50 20 32 35 30 30 20 20 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ARP 2600.1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 08 02 03 03 00 05 60 04 04 10 05 06 08 03 00 25 63 0a 03 10 05 05 08 03 +00 1d 63 0a 04 10 05 05 08 03 00 3d 63 08 03 2d 23 00 00 00 42 0c 05 04 01 +63 32 00 00 00 32 00 41 52 50 20 32 36 30 30 2e 31 63 63 63 32 32 32 00 00 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ARP 2600.1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +16 08 02 03 03 00 02 60 04 04 10 05 06 08 03 00 20 63 0a 03 10 05 05 08 03 +00 18 63 0a 04 10 05 05 08 03 00 38 63 08 03 2d 23 00 00 00 42 0c 05 04 01 +63 32 00 00 00 32 00 41 52 50 20 32 36 30 30 2e 31 63 63 63 32 32 32 00 00 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ARP 2600.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1d 16 00 05 0e 0a 03 63 04 01 1f 0d 10 05 00 0e 05 3c 10 12 1f 0d 10 05 00 +0c 05 35 13 15 10 1f 00 0b 0f 00 05 63 04 04 7f 14 00 36 00 22 18 04 04 00 +63 19 33 00 00 32 00 41 52 50 20 32 36 30 30 2e 32 63 63 63 32 32 32 00 50 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ARP 2600.2 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 16 00 05 0e 0a 00 63 04 01 1f 0d 10 05 00 0e 00 3c 10 12 1f 0d 10 05 00 +0c 00 35 13 15 10 1f 00 0b 0f 00 00 63 04 04 7f 14 00 36 00 22 18 04 04 00 +63 19 33 00 00 32 00 41 52 50 20 32 36 30 30 2e 32 63 63 63 32 32 32 00 50 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ARP Axxe.1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 08 00 05 0f 14 04 5c 00 11 18 08 00 05 0f 14 03 5c 04 11 18 08 00 05 0f +14 06 61 00 15 18 08 00 05 0f 14 05 63 04 15 6c 22 00 0b 00 62 0c 07 0d 01 +63 63 63 32 00 32 00 41 52 50 20 41 78 78 65 2e 31 63 63 63 32 32 32 00 10 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ARP Axxe.1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +18 08 00 05 0f 14 01 5c 00 11 18 08 00 05 0f 14 01 5c 04 11 18 08 00 05 0f +14 00 61 00 15 18 08 00 05 0f 14 00 63 04 15 6c 22 00 0b 00 62 0c 07 0d 01 +63 63 63 32 00 32 00 41 52 50 20 41 78 78 65 2e 31 63 63 63 32 32 32 00 10 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ARP Axxe.2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +19 05 02 07 09 00 05 59 08 03 15 12 03 04 0d 00 04 54 08 01 18 07 05 07 0d +00 05 63 04 06 0f 04 03 07 0d 00 06 63 04 06 64 1a 00 00 00 12 0c 06 0d 02 +28 32 00 00 00 32 00 41 52 50 20 41 78 78 65 2e 32 63 63 63 32 32 32 00 00 +00 10 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ARP Axxe.2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +19 05 02 07 09 00 02 59 08 03 15 12 03 04 0d 00 02 54 08 01 18 07 05 07 0d +00 00 63 04 06 0f 04 03 07 0d 00 00 63 04 06 64 1a 00 00 00 12 0c 06 0d 02 +28 32 00 00 00 32 00 41 52 50 20 41 78 78 65 2e 32 63 63 63 32 32 32 00 00 +00 10 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ARP Omni.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 13 00 05 0e 00 44 4e 08 02 0d 07 0e 06 06 0e 45 63 0d 04 0c 1f 00 06 0f +52 46 63 19 04 0b 1f 06 08 0f 0a 46 63 08 03 35 23 08 10 06 56 0c 07 04 00 +63 63 00 00 00 32 00 41 52 50 20 4f 6d 6e 69 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ARP Omni.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 13 00 05 0e 00 42 4e 08 02 0d 07 0e 06 06 0e 42 63 0d 04 0c 1f 00 06 0f +52 40 63 19 04 0b 1f 06 08 0f 0a 40 63 08 03 35 23 08 10 06 56 0c 07 04 00 +63 63 00 00 00 32 00 41 52 50 20 4f 6d 6e 69 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ARP Omni.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0b 03 1e 05 04 56 05 50 0d 06 0b 03 1e 05 04 23 03 4b 08 0d 0a 1f 01 08 0f +15 05 57 08 08 0a 1f 00 05 0f 25 06 5b 08 01 54 22 05 0c 00 52 0c 0c 04 00 +63 32 00 00 00 32 00 41 52 50 20 4f 6d 6e 69 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ARP Omni.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0b 03 1e 05 04 56 01 50 0d 06 0b 03 1e 05 04 23 01 4b 08 0d 0a 1f 01 08 0f +15 00 57 08 08 0a 1f 00 05 0f 25 00 5b 08 01 54 22 05 0c 00 52 0c 0c 04 00 +63 32 00 00 00 32 00 41 52 50 20 4f 6d 6e 69 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Axel F +** Controls: KV, MW (LFO pitch) +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +19 05 01 04 03 2c 00 48 04 0b 11 01 05 04 0c 3c 02 42 08 0b 19 04 05 05 0a +20 01 48 1c 0c 11 13 05 04 0f 00 02 63 04 13 3a 1f 00 04 00 42 18 02 04 00 +28 32 00 00 00 32 00 41 78 65 6c 20 46 20 20 20 20 63 63 63 32 32 32 00 00 +00 40 00 00 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Axel F...1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 0d 02 06 0e 00 04 58 04 00 15 04 14 06 0c 00 05 5f 04 0a 13 15 03 06 0e +00 05 63 04 08 15 15 06 06 0d 00 05 62 04 0e 34 26 21 20 47 12 0c 00 04 00 +63 32 00 32 00 32 00 41 78 65 6c 20 46 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Axel F...1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +15 0d 02 06 0e 00 01 58 04 00 15 04 14 06 0c 00 01 5f 04 0a 13 15 03 06 0e +00 00 63 04 08 15 15 06 06 0d 00 00 62 04 0e 34 26 21 20 47 12 0c 00 04 00 +63 32 00 32 00 32 00 41 78 65 6c 20 46 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Axel F...2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 15 02 06 0e 00 03 5a 04 08 15 04 14 06 0c 00 04 5f 04 0a 15 15 03 06 0e +00 06 63 04 08 15 15 06 06 0d 00 46 62 04 0e 2c 26 21 20 2b 16 0c 00 04 00 +63 32 00 32 00 32 00 41 78 65 6c 20 46 2e 2e 2e 32 63 63 63 32 32 32 00 10 +00 20 00 30 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Axel F...2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +18 15 02 06 0e 00 01 5a 04 08 15 04 14 06 0c 00 01 5f 04 0a 15 15 03 06 0e +00 00 63 04 08 15 15 06 06 0d 00 40 62 04 0e 2c 26 21 20 2b 16 0c 00 04 00 +63 32 00 32 00 32 00 41 78 65 6c 20 46 2e 2e 2e 32 63 63 63 32 32 32 00 10 +00 20 00 30 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BadSample* +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 15 00 01 00 00 00 43 3d 00 14 1f 00 01 0d 00 00 4a 0a 00 1f 0b 00 01 00 +00 00 46 13 06 14 1b 0b 07 0f 00 01 63 04 0b 00 63 00 17 63 7f 0c 02 04 00 +28 63 00 00 00 32 00 42 61 64 53 61 6d 70 6c 65 2a 63 63 63 32 32 32 09 40 +00 00 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Beta.....1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +05 09 00 07 0d 20 45 54 08 0a 0d 08 01 05 0d 00 46 4e 00 0a 1c 00 00 04 0f +00 46 2f 19 04 10 05 00 05 0f 00 45 54 08 0c 3a 23 00 05 30 62 00 05 04 00 +63 32 00 00 00 32 00 42 65 74 61 2e 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Beta.....2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +09 09 00 07 0d 20 43 58 08 0a 0d 03 00 05 07 00 44 56 04 02 1c 00 00 04 0f +00 46 45 0d 04 10 04 00 05 07 00 45 56 08 04 2b 23 00 05 30 62 00 05 04 00 +63 32 00 00 00 32 00 42 65 74 61 2e 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BigWash +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 00 0e 05 00 18 02 54 13 10 1f 19 08 0a 0c 00 03 5c 13 0c 1f 05 00 02 00 +5e 04 52 24 11 1f 10 08 07 0e 00 04 63 0d 0b 02 1a 16 03 00 52 00 02 04 00 +63 28 00 1e 00 32 00 42 69 67 57 61 73 68 20 20 20 63 63 63 32 32 32 00 20 +20 30 10 30 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Chroma...1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0f 1f 07 09 00 03 44 2a 03 15 16 03 04 0d 00 06 55 0d 01 18 19 07 07 0d +00 03 63 04 06 0f 04 03 07 0d 00 05 63 04 06 64 1a 00 00 00 12 0c 04 04 00 +28 32 00 00 00 32 00 43 68 72 6f 6d 61 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Chroma...2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 13 00 09 0a 00 02 5c 08 04 1f 13 1f 01 07 00 03 55 10 03 13 15 06 09 0d +00 06 59 04 03 1f 09 0b 06 0c 00 04 63 04 0b 2c 21 17 02 0d 32 18 04 04 00 +28 32 00 00 00 32 00 43 68 72 6f 6d 61 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Chroma...3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 06 03 08 0f 00 04 54 04 13 1f 0a 00 09 07 00 04 41 2a 1b 15 06 03 09 0f +00 04 5c 04 13 1f 0a 00 09 0d 00 05 63 04 0b 34 23 00 00 00 12 18 04 04 00 +28 32 00 00 00 32 00 43 68 72 6f 6d 61 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Crazy 6502 +** Controls: KV, MW (LFO pitch), MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 09 04 07 0f 00 43 48 0a 08 10 09 04 07 0f 00 44 63 0d 0e 10 09 04 07 0f +00 45 63 04 08 0f 03 01 07 0f 00 45 63 04 08 05 2c 00 63 63 37 24 04 04 00 +63 01 63 00 00 32 00 43 72 61 7a 79 20 36 35 30 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Crazy 6502 +** Controls: MW (LFO pitch), MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +10 09 04 07 0f 00 40 48 0a 08 10 09 04 07 0f 00 40 63 0d 0e 10 09 04 07 0f +00 40 63 04 08 0f 03 01 07 0f 00 40 63 04 08 05 2c 00 63 63 37 24 04 04 00 +63 01 63 00 00 32 00 43 72 61 7a 79 20 36 35 30 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: DigiAnnie +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank C, voice 32 +1f 0c 05 05 0c 17 02 53 0a 08 1f 11 02 05 0d 1e 02 45 04 00 1f 13 0e 05 0d +32 01 3f 1f 06 1f 1f 08 06 0f 00 02 61 04 16 39 1d 00 00 00 52 0c 04 04 00 +63 32 00 00 00 32 00 44 69 67 69 41 6e 6e 69 65 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: <> DS 1 <> +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0d 1f 00 02 0f 00 05 58 04 1e 17 1f 01 02 0f 0a 04 49 0d 03 19 1f 00 03 0f +08 06 63 00 16 12 1f 00 01 0f 14 06 63 00 1b 34 00 00 00 00 02 0c 07 04 00 +63 63 00 32 00 32 00 3c 3e 20 44 53 20 31 20 3c 3e 63 63 63 32 32 32 00 00 +00 30 00 00 00 20 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: <> DS 1 <> +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +0d 1f 00 02 0f 00 02 58 04 1e 17 1f 01 02 0f 0a 01 49 0d 03 19 1f 00 03 0f +08 00 63 00 16 12 1f 00 01 0f 14 00 63 00 1b 34 00 00 00 00 02 0c 07 04 00 +63 63 00 32 00 32 00 3c 3e 20 44 53 20 31 20 3c 3e 63 63 63 32 32 32 00 00 +00 30 00 00 00 20 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: < DS 11 > +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0d 1f 00 02 0f 00 04 4f 04 1e 17 1f 01 02 0f 0a 04 3b 04 03 19 1f 00 03 0f +08 04 63 00 16 12 1f 00 01 0f 14 07 63 10 1b 34 20 00 0a 00 02 0c 07 04 00 +63 63 00 32 00 32 00 3c 20 44 53 20 31 31 20 3e 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: < DS 11 > +** Source: from a library of patches collected by Duane Bowker, author unknown +0d 1f 00 02 0f 00 00 4f 04 1e 17 1f 01 02 0f 0a 00 3b 04 03 19 1f 00 03 0f +08 00 63 00 16 12 1f 00 01 0f 14 00 63 10 1b 34 20 00 0a 00 02 0c 07 04 00 +63 63 00 32 00 32 00 3c 20 44 53 20 31 31 20 3e 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: EML Synth1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 00 01 04 07 00 05 56 04 0e 0f 07 01 05 0b 00 06 52 04 08 13 07 00 06 0e +00 04 60 00 03 13 05 00 06 0e 00 06 62 04 0b 7c 19 00 0c 00 42 18 07 04 00 +63 32 63 32 00 32 00 45 4d 4c 20 53 79 6e 74 68 31 63 63 63 32 32 32 00 00 +00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: EML Synth1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +15 00 01 04 07 00 02 56 04 0e 0f 07 01 05 0b 00 02 52 04 08 13 07 00 06 0e +00 00 60 00 03 13 05 00 06 0e 00 00 62 04 0b 7c 19 00 0c 00 42 18 07 04 00 +63 32 63 32 00 32 00 45 4d 4c 20 53 79 6e 74 68 31 63 63 63 32 32 32 00 00 +00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: EML Synth2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 00 01 04 07 00 03 54 04 0e 0f 07 01 05 0b 00 02 5b 08 10 13 07 00 06 0e +00 05 60 00 03 13 05 00 06 0e 00 05 62 08 0b 7c 19 00 0c 00 42 18 07 04 00 +63 32 63 32 00 32 00 45 4d 4c 20 53 79 6e 74 68 32 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: EML Synth2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +15 00 01 04 07 00 02 54 04 0e 0f 07 01 05 0b 00 01 5b 08 10 13 07 00 06 0e +00 00 60 00 03 13 05 00 06 0e 00 00 62 08 0b 7c 19 00 0c 00 42 18 07 04 00 +63 32 63 32 00 32 00 45 4d 4c 20 53 79 6e 74 68 32 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Explorer.1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 09 07 07 0d 00 02 5a 00 09 0f 00 03 06 0d 00 03 63 04 05 15 09 07 07 0d +00 07 63 04 0a 0f 00 03 06 0d 00 06 63 08 09 7e 23 30 00 00 22 18 04 04 00 +63 01 63 00 00 32 00 45 78 70 6c 6f 72 65 72 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Explorer.1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +15 09 07 07 0d 00 02 5a 00 09 0f 00 03 06 0d 00 00 63 04 05 15 09 07 07 0d +00 00 63 04 0a 0f 00 03 06 0d 00 00 63 08 09 7e 23 30 00 00 22 18 04 04 00 +63 01 63 00 00 32 00 45 78 70 6c 6f 72 65 72 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Explorer.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 09 07 07 0d 00 05 63 19 09 0f 00 03 06 0d 00 04 52 08 00 15 09 07 07 0d +00 06 41 00 0e 13 00 03 06 0d 00 05 63 04 0b 77 17 00 0b 00 22 18 04 04 00 +63 01 63 00 00 32 00 45 78 70 6c 6f 72 65 72 2e 32 63 63 63 32 32 32 00 00 +00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Explorer.2 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +15 09 07 07 0d 00 00 63 19 09 0f 00 03 06 0d 00 00 52 08 00 15 09 07 07 0d +00 00 41 00 0e 13 00 03 06 0d 00 00 63 04 0b 77 17 00 0b 00 22 18 04 04 00 +63 01 63 00 00 32 00 45 78 70 6c 6f 72 65 72 2e 32 63 63 63 32 32 32 00 00 +00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Explorer.3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 09 07 07 0d 00 02 51 08 0c 0f 00 04 06 0d 00 04 63 08 0a 15 09 07 07 0d +00 04 63 04 0d 0f 00 04 06 0d 00 06 63 0d 08 7e 17 00 0b 00 22 18 04 04 00 +63 01 63 00 00 32 00 45 78 70 6c 6f 72 65 72 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Explorer.3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +15 09 07 07 0d 00 02 51 08 0c 0f 00 04 06 0d 00 00 63 08 0a 15 09 07 07 0d +00 00 63 04 0d 0f 00 04 06 0d 00 00 63 0d 08 7e 17 00 0b 00 22 18 04 04 00 +63 01 63 00 00 32 00 45 78 70 6c 6f 72 65 72 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: FMMelodica +** Controls: KV, MW (LFO pitch), MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 0c 00 0a 0d 20 44 50 0a 09 11 0c 00 0a 0d 20 44 50 0a 03 11 05 00 0a 0f +00 43 63 04 01 11 05 00 09 0f 00 43 63 04 0b 44 21 15 03 05 5e 11 04 04 00 +63 1e 55 00 00 32 00 46 4d 4d 65 6c 6f 64 69 63 61 63 63 63 32 32 32 00 40 +00 40 00 28 00 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Gamma....1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +09 06 00 02 0e 14 03 5c 04 06 08 1f 00 02 0f 00 44 47 08 13 06 1f 00 04 0f +4e 04 3c 0d 03 10 06 00 05 0e 00 06 5f 08 0b 72 21 1d 0e 1a 56 0c 08 04 00 +63 32 00 00 00 32 00 47 61 6d 6d 61 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Gamma....2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +09 06 00 02 0e 14 05 52 08 06 0c 1f 00 02 0f 00 45 3b 08 13 0a 1f 00 04 0f +4e 05 4c 10 03 10 06 00 05 0e 00 06 5f 04 0b 6a 21 1d 0e 1a 56 0c 08 04 01 +63 32 00 00 00 32 00 47 61 6d 6d 61 2e 2e 2e 2e 32 63 63 63 32 32 32 00 20 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + +--Bank 18 + +** Name: GleeSynth +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0d 03 09 06 0e 0a 03 52 08 14 0c 04 07 06 0c 00 04 42 19 08 15 04 02 05 0e +00 05 63 08 06 0b 15 0c 06 0f 00 45 5e 19 08 2c 26 21 08 47 26 00 02 04 00 +28 02 00 00 00 32 00 47 6c 65 65 53 79 6e 74 68 20 63 63 63 32 32 32 00 10 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: GleeSynth +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0d 03 09 06 0e 0a 01 52 08 14 0c 04 07 06 0c 00 01 42 19 08 15 04 02 05 0e +00 00 63 08 06 0b 15 0c 06 0f 00 40 5e 19 08 2c 26 21 08 47 26 00 02 04 00 +28 02 00 00 00 32 00 47 6c 65 65 53 79 6e 74 68 20 63 63 63 32 32 32 00 10 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: HardSync +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +11 00 00 05 0c 00 00 44 05 06 1b 05 00 0a 0e 00 01 4f 0a 0a 18 07 00 08 0e +3b 02 43 20 09 15 0a 00 0b 0f 00 01 63 04 0b 72 1d 08 00 00 52 05 04 04 01 +63 41 00 00 00 32 00 48 61 72 64 53 79 6e 63 20 20 63 63 63 32 32 32 00 51 +00 50 00 71 00 48 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Helix....1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +08 1f 00 03 0f 63 04 58 08 03 08 0e 00 05 01 00 04 63 04 02 07 04 0c 06 07 +3c 05 61 0d 0c 08 1f 01 05 0f 00 07 62 00 13 75 22 00 14 00 32 0c 04 04 00 +63 01 63 00 00 32 00 48 65 6c 69 78 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Helix....1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +08 1f 00 03 0f 63 02 58 08 03 08 0e 00 05 01 00 00 63 04 02 07 04 0c 06 07 +3c 00 61 0d 0c 08 1f 01 05 0f 00 00 62 00 13 75 22 00 14 00 32 0c 04 04 00 +63 01 63 00 00 32 00 48 65 6c 69 78 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Helix....2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +08 1f 00 03 0f 63 05 5f 08 03 08 07 00 05 08 00 06 53 00 02 07 04 0c 06 07 +3c 05 61 0d 0c 08 1f 01 05 0f 00 06 63 04 13 6c 22 00 14 00 32 0c 04 04 00 +63 01 63 00 00 32 00 48 65 6c 69 78 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Helix....2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +08 1f 00 03 0f 63 02 5f 08 03 08 07 00 05 08 00 01 53 00 02 07 04 0c 06 07 +3c 00 61 0d 0c 08 1f 01 05 0f 00 00 63 04 13 6c 22 00 14 00 32 0c 04 04 00 +63 01 63 00 00 32 00 48 65 6c 69 78 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: \ ISAO \ +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 17 1b 01 0e 00 42 39 04 0b 0f 00 03 05 0d 00 03 2e 08 0b 0f 00 03 05 0d +00 45 63 08 0b 10 00 03 05 0d 00 06 63 04 0b 2c 1b 00 3c 63 26 18 02 04 01 +63 32 00 32 00 32 00 20 5c 20 49 53 41 4f 20 5c 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: \ ISAO \ +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +18 17 1b 01 0e 00 40 39 04 0b 0f 00 03 05 0d 00 00 2e 08 0b 0f 00 03 05 0d +00 40 63 08 0b 10 00 03 05 0d 00 00 63 04 0b 2c 1b 00 3c 63 26 18 02 04 01 +63 32 00 32 00 32 00 20 5c 20 49 53 41 4f 20 5c 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: \ ISAO \ +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +18 17 1b 00 0e 00 40 39 04 0b 0f 00 03 05 0d 00 00 2e 08 0b 0f 00 03 05 0d +00 40 63 08 0b 10 00 03 05 0d 00 00 63 04 0b 2c 1b 00 3c 63 26 18 02 04 01 +63 32 00 32 00 32 00 20 5c 20 49 53 41 4f 20 5c 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: JP 4.....1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +17 05 01 05 08 00 04 51 0a 03 18 09 00 05 0b 2d 04 60 00 13 14 08 00 03 0c +43 05 63 04 1b 18 08 04 04 07 00 06 63 04 13 7c 21 00 38 00 22 0c 06 04 00 +63 32 00 32 00 32 00 4a 50 20 34 2e 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: JP 4.....1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +17 05 01 05 08 00 01 51 0a 03 18 09 00 05 0b 2d 01 60 00 13 14 08 00 03 0c +43 00 63 04 1b 18 08 04 04 07 00 00 63 04 13 7c 21 00 38 00 22 0c 06 04 00 +63 32 00 32 00 32 00 4a 50 20 34 2e 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: JP 4.....2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 08 03 05 0f 00 03 54 04 06 16 0a 0a 05 0d 00 05 54 0d 03 16 09 01 06 0f +00 07 63 04 00 16 15 01 06 0d 00 07 59 00 05 3c 25 49 0f 00 32 0c 0c 04 00 +63 00 00 00 00 32 00 4a 50 20 34 2e 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: JP 4.....2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +16 08 03 05 0f 00 01 54 04 06 16 0a 0a 05 0d 00 03 54 0d 03 16 09 01 06 0f +00 04 63 04 00 16 15 01 06 0d 00 00 59 00 05 3c 25 49 0f 00 32 0c 0c 04 00 +63 00 00 00 00 32 00 4a 50 20 34 2e 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Juno Juice +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +06 0a 05 03 0f 00 02 4e 03 02 1f 0e 00 03 0f 00 01 50 05 01 15 0e 00 07 0f +00 02 63 03 01 16 0e 00 07 0f 00 02 63 05 06 3c 20 00 00 00 52 05 02 04 00 +63 32 00 00 00 32 00 4a 75 6e 6f 20 4a 75 69 63 65 63 63 63 32 32 32 00 06 +00 31 00 56 00 11 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Juno Who? +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0a 00 03 0f 00 01 4a 03 02 1f 0e 00 03 0f 00 01 50 05 01 15 0e 00 07 0f +00 02 63 03 01 16 0e 00 07 0f 00 02 63 05 06 3c 20 00 00 00 52 05 02 04 00 +63 32 00 00 00 32 00 4a 75 6e 6f 20 57 68 6f 3f 20 63 63 63 32 32 32 00 26 +00 31 00 56 00 11 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Jupiter * +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 00 00 04 0f 35 00 3d 22 02 1f 00 00 04 0f 19 00 41 0d 05 1f 00 00 04 0f +3b 00 41 18 06 0c 0a 00 05 0e 00 40 63 0d 0c 01 1e 0c 0f 05 56 00 02 04 00 +28 63 00 00 00 32 00 4a 75 70 69 74 65 72 20 20 2a 63 63 63 32 32 32 00 0f +00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: \ Kitaro.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 1f 04 07 0f 00 02 4f 00 06 17 0c 06 09 0f 00 01 5a 00 16 14 1f 04 09 0f +00 06 63 04 06 18 1f 00 0d 0f 00 06 56 04 03 7c 29 00 05 00 22 18 05 04 00 +63 63 63 00 00 32 00 5c 20 4b 69 74 61 72 6f 2e 31 63 63 63 32 32 32 00 00 +00 30 00 30 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: \ Kitaro.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 1f 04 07 0f 00 02 4f 00 06 17 0c 06 09 0f 00 01 5a 00 16 14 1f 04 09 0f +00 00 63 04 06 18 1f 00 0d 0f 00 00 56 04 03 7c 29 00 05 00 22 18 05 04 00 +63 63 63 00 00 32 00 5c 20 4b 69 74 61 72 6f 2e 31 63 63 63 32 32 32 00 00 +00 30 00 30 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: \ Kitaro.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0f 09 09 0f 00 3c 52 0a 02 08 04 03 09 0f 00 1d 55 04 02 1f 0f 09 09 0f +00 1d 63 04 04 1f 0f 09 09 0f 00 3e 63 04 04 64 1f 1c 14 00 32 18 02 04 00 +63 32 00 00 00 32 00 5c 20 4b 69 74 61 72 6f 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: \ Kitaro.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0f 09 09 0f 00 3a 52 0a 02 08 04 03 09 0f 00 1a 55 04 02 1f 0f 09 09 0f +00 18 63 04 04 1f 0f 09 09 0f 00 38 63 04 04 64 1f 1c 14 00 32 18 02 04 00 +63 32 00 00 00 32 00 5c 20 4b 69 74 61 72 6f 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Korg 770.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 1f 07 02 0f 47 04 35 04 05 0a 1f 02 02 0f 00 45 43 04 02 0a 1f 02 04 0f +4e 05 55 04 0c 0a 1f 02 05 0f 00 06 60 08 1b 63 21 1d 0e 1a 56 0c 08 04 0a +63 32 00 00 00 32 00 4b 6f 72 67 20 37 37 30 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Korg 770.1 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 1f 07 02 0f 47 00 35 04 05 0a 1f 02 02 0f 00 40 43 04 02 0a 1f 02 04 0f +4e 00 55 04 0c 0a 1f 02 05 0f 00 00 60 08 1b 63 21 1d 0e 1a 56 0c 08 04 0a +63 32 00 00 00 32 00 4b 6f 72 67 20 37 37 30 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Korg 770.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 1f 07 02 0f 47 03 48 04 05 0f 1f 00 08 0f 00 46 62 04 02 0f 1f 00 08 0f +00 05 63 04 04 0f 1f 00 08 0f 00 04 60 08 03 7d 21 1d 0e 1a 56 0c 06 0d 02 +63 32 00 00 00 32 00 4b 6f 72 67 20 37 37 30 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Korg 770.2 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 1f 07 02 0f 47 00 48 04 05 0f 1f 00 08 0f 00 40 62 04 02 0f 1f 00 08 0f +00 00 63 04 04 0f 1f 00 08 0f 00 00 60 08 03 7d 21 1d 0e 1a 56 0c 06 0d 02 +63 32 00 00 00 32 00 4b 6f 72 67 20 37 37 30 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Korg 770.3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0d 0a 07 09 0e 4d 03 4f 04 03 12 1f 00 0a 0f 00 05 39 04 03 12 1f 00 0a 0f +4b 05 38 04 03 12 1f 00 0a 0f 01 07 5f 04 03 3b 1e 05 0a 00 62 0c 02 04 00 +63 32 00 00 00 32 00 4b 6f 72 67 20 37 37 30 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Korg 770.3 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0d 0a 07 09 0e 4d 00 4f 04 03 12 1f 00 0a 0f 00 00 39 04 03 12 1f 00 0a 0f +4b 00 38 04 03 12 1f 00 0a 0f 01 00 5f 04 03 3b 1e 05 0a 00 62 0c 02 04 00 +63 32 00 00 00 32 00 4b 6f 72 67 20 37 37 30 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + +* SUBCATEGORY Synthesizer2 + +** Name: Lambda...1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0b 06 04 04 0f 00 04 41 08 01 1f 0e 05 05 09 00 07 4a 13 04 09 06 00 05 0f +00 06 5f 08 06 1f 11 08 05 0f 00 06 61 04 00 44 23 2f 19 00 32 18 07 04 00 +63 32 63 32 00 32 00 4c 61 6d 62 64 61 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Lambda...1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0b 06 04 04 0f 00 01 41 08 01 1f 0e 05 05 09 00 02 4a 13 04 09 06 00 05 0f +00 00 5f 08 06 1f 11 08 05 0f 00 00 61 04 00 44 23 2f 19 00 32 18 07 04 00 +63 32 63 32 00 32 00 4c 61 6d 62 64 61 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Lambda...2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0b 0c 09 05 0d 00 03 45 10 03 1f 0b 0a 08 0c 00 04 54 04 03 0b 0c 09 05 0d +00 06 5f 04 03 1f 04 09 08 0f 00 06 5f 00 03 74 23 00 00 00 32 18 07 04 00 +63 32 63 32 00 32 00 4c 61 6d 62 64 61 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Lambda...2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +0b 0c 09 05 0d 00 01 45 10 03 1f 0b 0a 08 0c 00 01 54 04 03 0b 0c 09 05 0d +00 00 5f 04 03 1f 04 09 08 0f 00 00 5f 00 03 74 23 00 00 00 32 18 07 04 00 +63 32 63 32 00 32 00 4c 61 6d 62 64 61 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Lambda...3 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +07 10 03 09 0f 00 05 47 0d 00 1f 14 05 05 09 00 04 4d 13 16 07 10 03 09 0f +00 05 5c 0d 03 1f 14 08 05 0f 00 05 63 04 02 44 23 2f 19 00 32 18 07 04 00 +63 32 63 32 00 32 00 4c 61 6d 62 64 61 2e 2e 2e 33 63 63 63 32 32 32 00 40 +00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Lambda...3 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +07 10 03 09 0f 00 02 47 0d 00 1f 14 05 05 09 00 01 4d 13 16 07 10 03 09 0f +00 00 5c 0d 03 1f 14 08 05 0f 00 00 63 04 02 44 23 2f 19 00 32 18 07 04 00 +63 32 63 32 00 32 00 4c 61 6d 62 64 61 2e 2e 2e 33 63 63 63 32 32 32 00 40 +00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Lambda...4 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +07 10 03 0d 0f 00 03 4c 08 00 1f 14 05 04 09 00 03 4d 0d 16 07 10 03 0e 0f +00 06 5c 08 03 1f 14 08 04 0f 00 03 63 08 02 44 23 2f 19 00 32 18 07 04 00 +63 32 63 32 00 32 00 4c 61 6d 62 64 61 2e 2e 2e 34 63 63 63 32 32 32 00 00 +00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Lambda...4 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +07 10 03 0d 0f 00 01 4c 08 00 1f 14 05 04 09 00 01 4d 0d 16 07 10 03 0e 0f +00 00 5c 08 03 1f 14 08 04 0f 00 00 63 08 02 44 23 2f 19 00 32 18 07 04 00 +63 32 63 32 00 32 00 4c 61 6d 62 64 61 2e 2e 2e 34 63 63 63 32 32 32 00 00 +00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Lambda...5 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +05 03 03 05 08 00 03 55 08 00 18 06 09 05 09 00 04 51 04 06 05 10 03 05 0f +00 07 63 08 03 18 06 09 05 09 00 06 63 04 03 24 21 23 0f 00 12 18 05 04 00 +63 63 63 00 00 32 00 4c 61 6d 62 64 61 2e 2e 2e 35 63 63 63 32 32 32 00 20 +00 10 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Lambda...5 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +05 03 03 05 08 00 02 55 08 00 18 06 09 05 09 00 01 51 04 06 05 10 03 05 0f +00 00 63 08 03 18 06 09 05 09 00 00 63 04 03 24 21 23 0f 00 12 18 05 04 00 +63 63 63 00 00 32 00 4c 61 6d 62 64 61 2e 2e 2e 35 63 63 63 32 32 32 00 20 +00 10 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: LeadSynth1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 07 0f 00 03 54 08 03 07 0d 04 0a 0f 00 04 59 0a 03 1f 03 03 09 0c +00 06 62 0a 03 0f 0d 05 0f 0f 00 05 63 0a 03 34 23 15 05 63 26 0c 02 04 00 +63 63 00 00 00 32 00 4c 65 61 64 53 79 6e 74 68 31 63 63 63 32 32 32 00 00 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: LeadSynth1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 07 0f 00 01 54 08 03 07 0d 04 0a 0f 00 01 59 0a 03 1f 03 03 09 0c +00 00 62 0a 03 0f 0d 05 0f 0f 00 00 63 0a 03 34 23 15 05 63 26 0c 02 04 00 +63 63 00 00 00 32 00 4c 65 61 64 53 79 6e 74 68 31 63 63 63 32 32 32 00 00 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: LeadSynth2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 15 06 0a 0e 00 04 4b 28 0b 1b 0a 09 0f 0e 00 04 5c 04 0b 1f 03 0a 09 0c +00 06 62 08 13 18 09 06 0a 0e 00 05 63 04 03 2c 23 15 05 63 26 0c 02 04 00 +63 63 00 00 00 32 00 4c 65 61 64 53 79 6e 74 68 32 63 63 63 32 32 32 00 00 +00 50 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: LeadSynth2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +12 15 06 0a 0e 00 01 4b 28 0b 1b 0a 09 0f 0e 00 01 5c 04 0b 1f 03 0a 09 0c +00 00 62 08 13 18 09 06 0a 0e 00 00 63 04 03 2c 23 15 05 63 26 0c 02 04 00 +63 63 00 00 00 32 00 4c 65 61 64 53 79 6e 74 68 32 63 63 63 32 32 32 00 00 +00 50 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: LeadSynth3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 03 07 0f 0f 00 03 45 04 06 1f 1f 0a 0f 0f 00 04 5b 00 0c 1f 04 00 0f 0f +00 06 5f 04 03 1f 1f 00 0f 0f 00 05 63 04 05 6c 23 00 00 00 32 18 02 04 00 +63 63 00 00 00 32 00 4c 65 61 64 53 79 6e 74 68 33 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: LeadSynth3 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 03 07 0f 0f 00 01 45 04 06 1f 1f 0a 0f 0f 00 02 5b 00 0c 1f 04 00 0f 0f +00 00 5f 04 03 1f 1f 00 0f 0f 00 00 63 04 05 6c 23 00 00 00 32 18 02 04 00 +63 63 00 00 00 32 00 4c 65 61 64 53 79 6e 74 68 33 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: LeadSynth4 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 03 07 0f 0f 2e 03 5a 04 06 1c 1f 03 0f 0f 2c 04 5b 00 0c 1f 04 00 0f 0f +00 05 5f 04 03 16 1f 00 0f 0f 00 06 63 04 05 6c 23 00 00 00 32 18 02 04 00 +63 63 00 00 00 32 00 4c 65 61 64 53 79 6e 74 68 34 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: LeadSynth4 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 03 07 0f 0f 2e 01 5a 04 06 1c 1f 03 0f 0f 2c 01 5b 00 0c 1f 04 00 0f 0f +00 00 5f 04 03 16 1f 00 0f 0f 00 00 63 04 05 6c 23 00 00 00 32 18 02 04 00 +63 63 00 00 00 32 00 4c 65 61 64 53 79 6e 74 68 34 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: LeadSynth5 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 15 06 0a 0e 2a 03 4a 22 06 1b 09 09 0f 0d 3a 04 63 04 0c 18 09 04 0a 0e +00 06 63 04 03 18 09 06 0a 0e 01 06 5e 0d 12 6c 23 00 00 00 32 0c 02 04 00 +63 63 00 00 00 32 00 4c 65 61 64 53 79 6e 74 68 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: LeadSynth5 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +16 15 06 0a 0e 2a 01 4a 22 06 1b 09 09 0f 0d 3a 00 63 04 0c 18 09 04 0a 0e +00 00 63 04 03 18 09 06 0a 0e 01 00 5e 0d 12 6c 23 00 00 00 32 0c 02 04 00 +63 63 00 00 00 32 00 4c 65 61 64 53 79 6e 74 68 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: LeadSynth6 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +19 09 03 06 07 2a 05 62 04 03 18 10 06 07 0b 3a 05 63 04 0b 15 1f 1c 0f 00 +00 05 63 04 03 15 06 06 0a 0c 01 05 63 04 03 6c 23 00 00 00 42 0c 02 04 00 +63 63 00 00 00 32 00 4c 65 61 64 53 79 6e 74 68 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: LeadSynth6 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +19 09 03 06 07 2a 01 62 04 03 18 10 06 07 0b 3a 00 63 04 0b 15 1f 1c 0f 00 +00 00 63 04 03 15 06 06 0a 0c 01 00 63 04 03 6c 23 00 00 00 42 0c 02 04 00 +63 63 00 00 00 32 00 4c 65 61 64 53 79 6e 74 68 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: LeadSynth7 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 0f 07 06 09 42 03 57 0d 02 18 0b 09 07 0b 32 06 63 04 03 18 1f 00 0f 0f +00 05 63 04 05 1f 06 06 0a 0c 01 05 63 04 03 5c 23 00 00 00 42 0c 02 04 00 +63 63 00 00 00 32 00 4c 65 61 64 53 79 6e 74 68 37 63 63 63 32 32 32 00 00 +00 30 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: LeadSynth7 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +18 0f 07 06 09 42 01 57 0d 02 18 0b 09 07 0b 32 01 63 04 03 18 1f 00 0f 0f +00 01 63 04 05 1f 06 06 0a 0c 01 00 63 04 03 5c 23 00 00 00 42 0c 02 04 00 +63 63 00 00 00 32 00 4c 65 61 64 53 79 6e 74 68 37 63 63 63 32 32 32 00 00 +00 30 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: LeadSynth8 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1e 07 05 09 0f 42 03 56 08 06 1f 16 00 08 0e 00 05 63 04 03 1f 16 00 08 0e +00 04 63 04 03 1f 16 00 08 0e 00 06 63 04 03 6d 25 00 00 00 32 0c 02 04 00 +63 63 00 00 00 32 00 4c 65 61 64 53 79 6e 74 68 38 63 63 63 32 32 32 00 20 +00 20 00 00 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: LeadSynth8 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 07 05 09 0f 42 02 56 08 06 1f 16 00 08 0e 00 00 63 04 03 1f 16 00 08 0e +00 00 63 04 03 1f 16 00 08 0e 00 00 63 04 03 6d 25 00 00 00 32 0c 02 04 00 +63 63 00 00 00 32 00 4c 65 61 64 53 79 6e 74 68 38 63 63 63 32 32 32 00 20 +00 20 00 00 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Luna.....1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +05 07 00 05 0e 00 44 4c 04 00 05 07 00 05 0e 0e 45 52 04 06 0c 1f 00 06 0f +00 05 63 04 00 0c 1f 00 07 0f 0a 06 63 08 06 34 22 0e 13 08 56 18 07 04 00 +63 63 00 00 00 32 00 4c 75 6e 61 2e 2e 2e 2e 2e 31 63 63 63 32 32 32 00 10 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Luna.....2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +08 07 00 05 0e 00 04 51 00 00 0c 03 00 05 08 0e 04 40 13 06 0c 1f 00 06 0f +00 05 60 04 00 0c 1f 00 07 0f 0a 06 5e 00 06 2c 22 00 0f 00 42 18 07 04 00 +63 63 00 00 00 32 00 4c 75 6e 61 2e 2e 2e 2e 2e 32 63 63 63 32 32 32 00 10 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Luna.....3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +05 07 00 05 0e 00 44 4b 08 00 0c 07 00 05 0e 0e 45 52 0a 06 05 1f 00 06 0f +00 05 63 08 00 0c 1f 00 07 0f 0a 06 4b 0a 06 34 22 0e 13 08 56 18 07 04 00 +63 63 00 00 00 32 00 4c 75 6e 61 2e 2e 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Lyrisyn +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank C, voice 20 +10 06 00 05 0e 00 01 50 0a 04 1f 04 00 05 0f 00 01 51 04 02 1f 0b 00 0a 0f +00 01 35 08 03 10 1f 00 0a 0f 00 02 63 04 03 30 1e 00 00 00 52 18 04 04 00 +63 32 00 00 00 32 00 4c 79 72 69 73 79 6e 20 20 20 63 63 63 32 32 32 00 10 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MaxiKorg.1 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 07 0f 63 00 53 04 06 1f 1f 00 07 0f 00 00 63 00 02 1f 1f 00 07 0f +3c 00 61 08 04 1f 1f 00 07 0f 00 00 62 04 03 75 22 00 14 00 32 0c 06 0d 01 +63 01 63 00 00 32 00 4d 61 78 69 4b 6f 72 67 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MaxiKorg.2 +** Controls: KV, MW (LFO pitch), MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 08 0f 00 03 54 00 06 17 1f 00 07 0f 00 06 4b 04 02 1f 1f 00 08 0f +00 04 61 08 04 15 1f 00 08 0f 00 45 62 08 03 74 1e 00 0e 35 56 18 06 05 00 +63 01 63 00 00 32 00 4d 61 78 69 4b 6f 72 67 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MaxiKorg.2 +** Controls: MW (LFO pitch), MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 08 0f 00 00 54 00 06 17 1f 00 07 0f 00 00 4b 04 02 1f 1f 00 08 0f +00 00 61 08 04 15 1f 00 08 0f 00 40 62 08 03 74 1e 00 0e 35 56 18 06 05 00 +63 01 63 00 00 32 00 4d 61 78 69 4b 6f 72 67 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MicroMoog1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +14 03 01 07 0d 27 05 4b 0a 0d 14 05 01 05 0f 00 05 56 04 0c 15 04 00 0a 0d +11 06 50 08 09 17 05 00 0a 02 27 06 5a 08 05 61 24 00 04 00 42 0c 02 0d 11 +63 63 00 00 00 32 00 4d 69 63 72 6f 4d 6f 6f 67 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MicroMoog1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +14 03 01 07 0d 27 02 4b 0a 0d 14 05 01 05 0f 00 02 56 04 0c 15 04 00 0a 0d +11 00 50 08 09 17 05 00 0a 02 27 00 5a 08 05 61 24 00 04 00 42 0c 02 0d 11 +63 63 00 00 00 32 00 4d 69 63 72 6f 4d 6f 6f 67 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MicroMoog2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +14 01 01 05 0d 27 02 4d 00 03 14 02 01 05 0f 00 04 4e 00 03 15 01 00 05 0d +11 05 58 08 03 17 02 00 05 02 27 07 63 08 03 78 24 00 04 00 42 0c 02 0c 11 +63 63 00 00 00 32 00 4d 69 63 72 6f 4d 6f 6f 67 32 63 63 63 32 32 32 00 00 +00 10 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MicroMoog2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +14 01 01 05 0d 27 01 4d 00 03 14 02 01 05 0f 00 01 4e 00 03 15 01 00 05 0d +11 01 58 08 03 17 02 00 05 02 27 01 63 08 03 78 24 00 04 00 42 0c 02 0c 11 +63 63 00 00 00 32 00 4d 69 63 72 6f 4d 6f 6f 67 32 63 63 63 32 32 32 00 00 +00 10 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MiniMoog * +** Source: from a library of patches collected by Rod Lemcke, author unknown +0e 09 00 01 0d 00 00 4d 04 06 0f 0d 00 01 0b 00 00 45 04 00 0b 04 00 01 0d +00 00 44 04 03 0f 0c 00 07 0e 00 00 63 04 03 3a 21 00 00 00 52 11 02 04 00 +28 63 00 00 00 32 00 4d 69 6e 69 4d 6f 6f 67 20 2a 63 63 63 32 32 32 00 08 +00 08 00 08 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MiniMoog.1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 1b 06 0f 0f 00 01 5c 00 02 1f 0a 03 0f 0e 00 02 41 04 0c 1f 09 04 0f 0f +00 06 62 04 14 1c 10 04 0c 0e 00 05 63 04 0b 6c 23 00 00 00 32 0c 02 04 00 +63 63 00 00 00 32 00 4d 69 6e 69 4d 6f 6f 67 2e 31 63 63 63 32 32 32 00 00 +00 00 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MiniMoog.1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 1b 06 0f 0f 00 01 5c 00 02 1f 0a 03 0f 0e 00 01 41 04 0c 1f 09 04 0f 0f +00 00 62 04 14 1c 10 04 0c 0e 00 00 63 04 0b 6c 23 00 00 00 32 0c 02 04 00 +63 63 00 00 00 32 00 4d 69 6e 69 4d 6f 6f 67 2e 31 63 63 63 32 32 32 00 00 +00 00 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MiniMoog.2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 0a 03 0f 0e 00 06 58 08 14 1c 1b 06 0f 0f 00 04 5c 08 0e 1c 10 04 0c 0f +00 07 62 04 0b 1f 09 09 0f 0f 00 05 63 04 14 74 23 00 00 00 32 0c 02 04 00 +63 63 00 00 00 32 00 4d 69 6e 69 4d 6f 6f 67 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MiniMoog.2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 0a 03 0f 0e 00 01 58 08 14 1c 1b 06 0f 0f 00 01 5c 08 0e 1c 10 04 0c 0f +00 00 62 04 0b 1f 09 09 0f 0f 00 00 63 04 14 74 23 00 00 00 32 0c 02 04 00 +63 63 00 00 00 32 00 4d 69 6e 69 4d 6f 6f 67 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MiniMoog.3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 0a 03 0f 0e 00 03 5e 08 14 1b 0a 03 0f 07 00 05 60 00 06 1c 10 04 0c 0f +00 05 62 04 0b 1c 10 04 0c 0f 00 06 63 04 0c 6c 23 00 00 00 32 0c 02 04 04 +63 63 00 00 00 32 00 4d 69 6e 69 4d 6f 6f 67 2e 33 63 63 63 32 32 32 00 20 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MiniMoog.3 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 0a 03 0f 0e 00 03 5e 08 14 1b 0a 03 0f 07 00 01 60 00 06 1c 10 04 0c 0f +00 00 62 04 0b 1c 10 04 0c 0f 00 00 63 04 0c 6c 23 00 00 00 32 0c 02 04 04 +63 63 00 00 00 32 00 4d 69 6e 69 4d 6f 6f 67 2e 33 63 63 63 32 32 32 00 20 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Mirage * +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +13 08 00 05 0f 45 01 45 08 0b 1f 00 00 04 0f 30 00 4d 08 00 11 08 03 05 0f +26 07 5b 13 16 10 0a 08 06 0f 00 02 63 08 0b 03 1e 00 0a 00 32 00 02 04 00 +28 63 00 00 00 32 00 4d 69 72 61 67 65 20 20 20 2a 63 63 63 32 32 32 00 20 +00 70 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MoogBass * +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 09 00 06 0c 00 00 4e 05 06 1f 18 00 04 0c 0f 00 50 03 00 1f 04 00 02 0d +23 00 48 04 06 17 0c 00 08 0e 19 00 63 04 03 3a 21 00 00 00 52 0c 02 0c 00 +28 63 00 00 00 32 00 4d 6f 6f 67 42 61 73 73 20 2a 63 63 63 32 32 32 00 11 +00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MultiMoog1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1a 07 00 05 0e 00 04 56 00 00 1f 03 00 05 08 0e 04 42 13 06 1f 1f 00 06 0f +00 07 56 04 00 1f 1f 00 07 0f 0a 06 5e 00 06 33 22 00 0f 00 42 18 07 04 00 +63 63 00 00 00 32 00 4d 75 6c 74 69 4d 6f 6f 67 31 63 63 63 32 32 32 00 00 +00 20 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MultiMoog1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1a 07 00 05 0e 00 02 56 00 00 1f 03 00 05 08 0e 01 42 13 06 1f 1f 00 06 0f +00 01 56 04 00 1f 1f 00 07 0f 0a 00 5e 00 06 33 22 00 0f 00 42 18 07 04 00 +63 63 00 00 00 32 00 4d 75 6c 74 69 4d 6f 6f 67 31 63 63 63 32 32 32 00 00 +00 20 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MultiMoog2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 07 00 05 0e 00 45 53 08 00 1f 07 00 05 0e 0e 46 44 0a 06 1f 1f 00 06 0f +00 04 54 08 00 1f 1f 00 07 0f 0a 06 63 0a 06 32 22 0e 13 08 56 18 07 04 00 +63 63 00 00 00 32 00 4d 75 6c 74 69 4d 6f 6f 67 32 63 63 63 32 32 32 00 00 +00 30 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MultiMoog2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 07 00 05 0e 00 42 53 08 00 1f 07 00 05 0e 0e 42 44 0a 06 1f 1f 00 06 0f +00 01 54 08 00 1f 1f 00 07 0f 0a 00 63 0a 06 32 22 0e 13 08 56 18 07 04 00 +63 63 00 00 00 32 00 4d 75 6c 74 69 4d 6f 6f 67 32 63 63 63 32 32 32 00 00 +00 30 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: No!NotJump +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +16 0a 00 03 0f 29 00 44 03 02 0f 0e 00 03 0f 42 01 5f 05 01 1d 0e 00 07 0f +00 02 63 03 04 13 0e 00 07 0f 00 02 63 05 06 3c 20 00 00 00 52 05 02 04 00 +63 32 00 00 00 32 00 4e 6f 21 4e 6f 74 4a 75 6d 70 63 63 63 32 32 32 00 56 +00 31 00 46 00 11 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: <> OB 1 <> +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0d 1f 00 02 0f 00 04 56 00 1e 17 1f 01 02 0f 0a 04 45 04 03 19 1f 00 03 0f +08 06 58 08 16 12 1f 00 01 0f 14 05 5b 04 1b 2a 00 00 00 00 02 0c 07 0c 01 +63 63 00 32 00 32 00 3c 3e 20 4f 42 20 31 20 3c 3e 63 63 63 32 32 32 00 30 +00 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: <> OB 1 <> +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +0d 1f 00 02 0f 00 01 56 00 1e 17 1f 01 02 0f 0a 01 45 04 03 19 1f 00 03 0f +08 01 58 08 16 12 1f 00 01 0f 14 00 5b 04 1b 2a 00 00 00 00 02 0c 07 0c 01 +63 63 00 32 00 32 00 3c 3e 20 4f 42 20 31 20 3c 3e 63 63 63 32 32 32 00 30 +00 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OB-8 * +** Source: from a library of patches collected by Rod Lemcke, author unknown +13 08 00 06 0e 0c 40 49 03 06 12 08 00 03 0e 00 00 4d 04 03 11 1f 00 06 0f +0a 00 63 03 0e 0c 1f 00 07 0f 00 00 63 04 0b 3c 23 00 00 00 5a 05 02 04 00 +28 63 00 00 00 32 63 20 20 4f 42 2d 38 20 20 20 2a 63 63 63 32 32 32 00 06 +00 08 00 06 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Oberheim.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 00 00 0f 0f 00 04 5c 00 16 1d 0c 04 0f 0e 00 04 5e 00 02 1f 0c 04 0f 0e +00 05 63 00 04 1f 0c 04 0f 0e 00 05 63 04 03 2c 00 00 13 00 42 18 02 04 00 +28 02 00 00 00 32 00 4f 62 65 72 68 65 69 6d 2e 31 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Oberheim.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 00 00 0f 0f 00 01 5c 00 16 1d 0c 04 0f 0e 00 01 5e 00 02 1f 0c 04 0f 0e +00 00 63 00 04 1f 0c 04 0f 0e 00 00 63 04 03 2c 00 00 13 00 42 18 02 04 00 +28 02 00 00 00 32 00 4f 62 65 72 68 65 69 6d 2e 31 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Oberheim.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0b 02 04 04 0e 05 03 58 00 06 12 09 04 04 0f 00 04 4c 00 00 0b 0c 04 04 0e +00 05 63 00 03 11 0b 03 06 0f 00 05 63 00 03 2c 23 00 13 00 42 18 02 04 00 +28 02 00 00 00 32 00 4f 62 65 72 68 65 69 6d 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Oberheim.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0b 02 04 04 0e 05 02 58 00 06 12 09 04 04 0f 00 01 4c 00 00 0b 0c 04 04 0e +00 00 63 00 03 11 0b 03 06 0f 00 00 63 00 03 2c 23 00 13 00 42 18 02 04 00 +28 02 00 00 00 32 00 4f 62 65 72 68 65 69 6d 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Oberheim.3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0d 0c 04 05 0e 05 03 57 00 00 0c 0c 04 04 0e 05 04 52 00 06 0a 0c 04 05 0e +00 05 63 04 06 0a 1f 00 05 0f 00 05 63 00 06 3c 17 00 20 00 42 18 02 04 00 +28 02 00 00 00 32 00 4f 62 65 72 68 65 69 6d 2e 33 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Oberheim.3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0d 0c 04 05 0e 05 02 57 00 00 0c 0c 04 04 0e 05 01 52 00 06 0a 0c 04 05 0e +00 00 63 04 06 0a 1f 00 05 0f 00 00 63 00 06 3c 17 00 20 00 42 18 02 04 00 +28 02 00 00 00 32 00 4f 62 65 72 68 65 69 6d 2e 33 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + +* SUBCATEGORY Synthesizer3 + + +** Name: Odyssey..1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 1f 04 09 0f 00 04 5c 00 0d 19 03 01 09 00 00 06 53 00 04 1f 16 03 09 0d +00 04 63 00 0a 19 06 06 09 06 00 05 63 00 0b 6c 1e 00 0a 00 32 18 04 04 00 +63 01 63 00 00 32 00 4f 64 79 73 73 65 79 2e 2e 31 63 63 63 32 32 32 00 00 +00 20 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Odyssey..1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +16 1f 04 09 0f 00 01 5c 00 0d 19 03 01 09 00 00 02 53 00 04 1f 16 03 09 0d +00 00 63 00 0a 19 06 06 09 06 00 00 63 00 0b 6c 1e 00 0a 00 32 18 04 04 00 +63 01 63 00 00 32 00 4f 64 79 73 73 65 79 2e 2e 31 63 63 63 32 32 32 00 00 +00 20 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Odyssey..2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 02 01 05 0f 00 3b 5b 00 00 1b 13 01 0d 0a 00 1d 63 00 03 1f 05 06 05 0f +00 1d 63 00 00 1f 04 03 0c 0f 00 3e 63 00 0b 2c 00 00 00 00 32 18 02 04 00 +63 32 00 00 00 32 00 4f 64 79 73 73 65 79 2e 2e 32 63 63 63 32 32 32 00 10 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Odyssey..2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 02 01 05 0f 00 39 5b 00 00 1b 13 01 0d 0a 00 1a 63 00 03 1f 05 06 05 0f +00 18 63 00 00 1f 04 03 0c 0f 00 38 63 00 0b 2c 00 00 00 00 32 18 02 04 00 +63 32 00 00 00 32 00 4f 64 79 73 73 65 79 2e 2e 32 63 63 63 32 32 32 00 10 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Odyssey..3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 05 04 06 0e 1e 3d 56 0a 0d 1f 09 00 06 00 00 1d 5d 00 05 1b 02 04 06 0e +1e 1d 63 00 0b 1f 00 00 07 0f 00 3d 63 00 0c 2c 1d 00 00 00 42 18 02 04 00 +63 32 00 00 00 32 00 4f 64 79 73 73 65 79 2e 2e 33 63 63 63 32 32 32 00 20 +00 20 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Odyssey..3 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 05 04 06 0e 1e 3a 56 0a 0d 1f 09 00 06 00 00 19 5d 00 05 1b 02 04 06 0e +1e 18 63 00 0b 1f 00 00 07 0f 00 38 63 00 0c 2c 1d 00 00 00 42 18 02 04 00 +63 32 00 00 00 32 00 4f 64 79 73 73 65 79 2e 2e 33 63 63 63 32 32 32 00 20 +00 20 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OhB1Kanobe +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 1f 00 0a 0f 00 04 55 00 0b 10 1f 00 0a 0f 00 05 55 00 0b 12 0d 09 0a 0e +15 07 62 08 0a 12 0d 09 0a 0e 15 05 63 08 0b 5c 25 00 4b 00 12 0c 02 04 00 +28 02 00 00 00 32 00 4f 68 42 31 4b 61 6e 6f 62 65 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OhB1Kanobe +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +10 1f 00 0a 0f 00 01 55 00 0b 10 1f 00 0a 0f 00 01 55 00 0b 12 0d 09 0a 0e +15 00 62 08 0a 12 0d 09 0a 0e 15 00 63 08 0b 5c 25 00 4b 00 12 0c 02 04 00 +28 02 00 00 00 32 00 4f 68 42 31 4b 61 6e 6f 62 65 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Omega....1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +08 09 10 05 08 00 03 52 10 03 1f 05 00 05 0b 2d 04 4e 08 13 1f 08 00 03 0c +43 06 47 10 1b 1c 06 04 04 07 00 06 63 04 13 7a 21 00 38 00 22 0c 06 04 00 +63 32 00 32 00 32 00 4f 6d 65 67 61 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Omega....2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 03 00 0a 09 37 04 5a 08 0c 1f 1f 0d 0a 0f 39 46 63 08 01 18 04 1c 0a 0a +63 05 63 0d 02 1f 1f 00 0a 0f 00 06 62 04 06 15 46 28 0a 1a 56 0c 07 04 00 +63 19 00 32 00 32 00 4f 6d 65 67 61 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PCM Duck * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0e 07 00 0f 0d 00 00 5c 00 08 0d 1f 00 06 0f 16 00 57 00 15 0b 06 03 0f 0e +0e 07 46 1c 10 1c 14 08 0d 0e 00 02 63 04 03 03 23 00 00 00 52 18 02 04 00 +28 32 00 00 00 32 00 50 43 4d 20 44 75 63 6b 20 2a 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PianoSynth +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +06 02 07 04 0c 1f 0a 46 04 0a 12 1f 00 03 0f 63 04 61 04 13 03 06 16 03 03 +63 05 5a 0a 13 14 05 12 03 03 00 05 5e 08 0d 7b 23 0f 0e 00 42 0c 02 04 00 +63 32 00 00 00 32 00 50 69 61 6e 6f 53 79 6e 74 68 63 63 63 32 32 32 00 20 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PianoSynth +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +06 02 07 04 0c 1f 0a 46 04 0a 12 1f 00 03 0f 63 01 61 04 13 03 06 16 03 03 +63 01 5a 0a 13 14 05 12 03 03 00 00 5e 08 0d 7b 23 0f 0e 00 42 0c 02 04 00 +63 32 00 00 00 32 00 50 69 61 6e 6f 53 79 6e 74 68 63 63 63 32 32 32 00 20 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PlkAnalog +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 14 02 01 06 00 06 51 0a 0e 10 1f 02 05 0f 00 04 63 03 08 0b 1f 00 08 0f +00 03 63 05 0e 1a 1f 00 05 0f 00 04 60 04 0b 3d 1f 0e 00 00 46 11 02 04 00 +28 32 00 12 00 32 00 50 6c 6b 41 6e 61 6c 6f 67 20 63 63 63 32 32 32 04 30 +00 56 00 31 07 48 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Poly 61 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +13 07 03 04 07 0a 04 5a 08 03 1f 03 0c 06 00 00 05 60 08 0b 12 10 0c 06 0e +00 05 61 08 01 12 12 0c 06 0e 00 45 5f 08 0b 35 1f 0b 11 1b 26 18 02 04 00 +28 02 00 00 00 32 00 50 6f 6c 79 20 36 31 20 20 20 63 63 63 32 32 32 00 00 +00 10 00 40 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Poly 61 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +13 07 03 04 07 0a 02 5a 08 03 1f 03 0c 06 00 00 00 60 08 0b 12 10 0c 06 0e +00 00 61 08 01 12 12 0c 06 0e 00 40 5f 08 0b 35 1f 0b 11 1b 26 18 02 04 00 +28 02 00 00 00 32 00 50 6f 6c 79 20 36 31 20 20 20 63 63 63 32 32 32 00 00 +00 10 00 40 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PolyFusion +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0a 07 00 05 0e 00 44 56 04 00 08 07 00 05 0e 0e 44 51 04 06 0e 1f 00 06 0f +00 04 63 04 00 0c 1f 00 07 0f 0a 06 63 08 06 34 22 0e 13 08 56 18 07 04 00 +63 63 00 00 00 32 00 50 6f 6c 79 46 75 73 69 6f 6e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PolyFusion +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0a 07 00 05 0e 00 41 56 04 00 08 07 00 05 0e 0e 41 51 04 06 0e 1f 00 06 0f +00 00 63 04 00 0c 1f 00 07 0f 0a 00 63 08 06 34 22 0e 13 08 56 18 07 04 00 +63 63 00 00 00 32 00 50 6f 6c 79 46 75 73 69 6f 6e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PolyMoog.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 03 02 04 01 0a 05 59 08 0b 1f 0a 0c 06 00 00 44 50 19 13 10 03 03 06 0e +00 06 63 0d 01 12 03 01 06 0f 00 45 63 08 0b 2c 1f 0b 11 1b 26 0c 02 04 00 +28 02 00 00 00 32 00 50 6f 6c 79 4d 6f 6f 67 2e 31 63 63 63 32 32 32 00 20 +00 20 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PolyMoog.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 03 02 04 01 0a 02 59 08 0b 1f 0a 0c 06 00 00 41 50 19 13 10 03 03 06 0e +00 01 63 0d 01 12 03 01 06 0f 00 40 63 08 0b 2c 1f 0b 11 1b 26 0c 02 04 00 +28 02 00 00 00 32 00 50 6f 6c 79 4d 6f 6f 67 2e 31 63 63 63 32 32 32 00 20 +00 20 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PolyMoog.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0c 1f 00 03 0f 63 03 59 08 0e 0e 1f 01 05 0f 00 04 63 08 0c 0a 04 0c 06 07 +3c 06 63 0d 12 0e 1f 01 05 0f 00 05 63 04 0a 75 22 00 14 00 32 00 04 04 00 +63 01 63 00 00 32 00 50 6f 6c 79 4d 6f 6f 67 2e 32 63 63 63 32 32 32 00 20 +00 00 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PolyMoog.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0c 1f 00 03 0f 63 01 59 08 0e 0e 1f 01 05 0f 00 00 63 08 0c 0a 04 0c 06 07 +3c 00 63 0d 12 0e 1f 01 05 0f 00 00 63 04 0a 75 22 00 14 00 32 00 04 04 00 +63 01 63 00 00 32 00 50 6f 6c 79 4d 6f 6f 67 2e 32 63 63 63 32 32 32 00 20 +00 00 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: P.P.G * +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0a 05 07 0f 22 03 4c 07 02 12 04 02 04 0d 08 00 59 00 05 1d 10 06 01 0d +0c 00 2f 3d 06 1f 0a 00 07 0f 09 02 63 04 03 02 29 00 1f 00 32 0c 02 04 00 +28 63 00 00 00 32 00 20 50 2e 50 2e 47 20 20 20 2a 63 63 63 32 32 32 00 07 +00 00 00 3f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Prophet * +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 0a 00 05 0b 00 00 4f 03 00 1f 0b 00 01 0a 00 00 4a 03 05 1b 16 00 05 0d +00 00 63 03 06 1c 16 00 06 0d 00 00 63 05 00 34 1f 00 06 00 32 05 02 04 00 +28 63 00 00 00 32 00 50 72 6f 70 68 65 74 20 20 2a 63 63 63 32 32 32 00 06 +00 06 00 06 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Prophet..1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +13 03 04 0a 06 00 04 4b 04 00 13 07 04 0a 0c 00 04 46 04 06 16 07 04 0a 0c +00 05 22 16 03 17 07 04 0a 0c 00 06 63 04 03 2b 22 21 00 00 32 18 04 05 00 +28 32 00 00 00 32 00 50 72 6f 70 68 65 74 2e 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Prophet..1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +13 03 04 0a 06 00 02 4b 04 00 13 07 04 0a 0c 00 01 46 04 06 16 07 04 0a 0c +00 01 22 16 03 17 07 04 0a 0c 00 00 63 04 03 2b 22 21 00 00 32 18 04 05 00 +28 32 00 00 00 32 00 50 72 6f 70 68 65 74 2e 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Prophet..2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 03 02 07 0f 00 04 4e 04 00 1b 0c 0f 07 0f 19 06 49 0d 03 1b 06 04 07 0d +00 05 63 04 0b 1b 03 03 07 0d 00 07 63 04 15 74 23 00 12 00 12 18 04 05 00 +28 32 00 00 00 32 00 50 72 6f 70 68 65 74 2e 2e 32 63 63 63 32 32 32 00 10 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Prophet..2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 03 02 07 0f 00 02 4e 04 00 1b 0c 0f 07 0f 19 02 49 0d 03 1b 06 04 07 0d +00 00 63 04 0b 1b 03 03 07 0d 00 00 63 04 15 74 23 00 12 00 12 18 04 05 00 +28 32 00 00 00 32 00 50 72 6f 70 68 65 74 2e 2e 32 63 63 63 32 32 32 00 10 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Prophet..3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 04 12 08 0c 19 05 4f 04 00 0e 04 12 08 0c 19 06 4c 04 03 10 03 06 08 0e +00 06 63 04 0b 10 03 04 08 0e 00 06 63 04 0d 3c 26 1d 23 00 22 18 04 05 00 +28 32 00 00 00 32 00 50 72 6f 70 68 65 74 2e 2e 33 63 63 63 32 32 32 00 00 +00 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Prophet..3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +10 04 12 08 0c 19 01 4f 04 00 0e 04 12 08 0c 19 01 4c 04 03 10 03 06 08 0e +00 00 63 04 0b 10 03 04 08 0e 00 00 63 04 0d 3c 26 1d 23 00 22 18 04 05 00 +28 32 00 00 00 32 00 50 72 6f 70 68 65 74 2e 2e 33 63 63 63 32 32 32 00 00 +00 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PS 3100..1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +08 1f 07 02 0f 47 04 54 0d 05 08 1f 02 02 0f 00 44 53 08 02 07 1f 02 04 0f +4e 06 4a 00 0c 07 1f 02 05 0f 00 05 5f 08 1b 63 21 1d 0e 1a 56 0c 08 04 0a +63 32 00 00 00 32 00 50 53 20 33 31 30 30 2e 2e 31 63 63 63 32 32 32 00 00 +00 20 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PS 3100..1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +08 1f 07 02 0f 47 01 54 0d 05 08 1f 02 02 0f 00 41 53 08 02 07 1f 02 04 0f +4e 01 4a 00 0c 07 1f 02 05 0f 00 00 5f 08 1b 63 21 1d 0e 1a 56 0c 08 04 0a +63 32 00 00 00 32 00 50 53 20 33 31 30 30 2e 2e 31 63 63 63 32 32 32 00 00 +00 20 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PS 3100..2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0d 1f 07 02 0f 47 04 53 0a 06 07 1f 02 02 0f 00 44 4e 04 04 0d 1f 02 04 0f +4e 06 48 0d 0a 07 1f 02 05 0f 00 05 62 04 19 61 21 1d 0e 1a 56 0c 08 04 0f +63 32 00 00 00 32 00 50 53 20 33 31 30 30 2e 2e 32 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PS 3100..2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0d 1f 07 02 0f 47 01 53 0a 06 07 1f 02 02 0f 00 41 4e 04 04 0d 1f 02 04 0f +4e 01 48 0d 0a 07 1f 02 05 0f 00 00 62 04 19 61 21 1d 0e 1a 56 0c 08 04 0f +63 32 00 00 00 32 00 50 53 20 33 31 30 30 2e 2e 32 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PS 3300..1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0d 07 01 02 0f 47 03 54 08 05 0c 08 01 02 0f 00 44 50 08 02 0b 07 01 04 0f +4e 06 4f 00 0c 0c 06 02 05 0f 00 06 5f 08 0b 63 21 1d 0e 1a 56 0c 08 04 0a +63 32 00 00 00 32 00 50 53 20 33 33 30 30 2e 2e 31 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PS 3300..1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0d 07 01 02 0f 47 01 54 08 05 0c 08 01 02 0f 00 41 50 08 02 0b 07 01 04 0f +4e 01 4f 00 0c 0c 06 02 05 0f 00 00 5f 08 0b 63 21 1d 0e 1a 56 0c 08 04 0a +63 32 00 00 00 32 00 50 53 20 33 33 30 30 2e 2e 31 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PS 3300..2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0d 05 01 02 0d 47 03 4d 08 06 0f 05 00 02 0f 00 43 4a 04 04 07 06 01 04 0f +4e 04 4e 08 02 07 04 01 05 0d 00 05 62 00 09 61 21 1d 0e 1a 56 0c 08 04 0f +63 32 00 00 00 32 00 50 53 20 33 33 30 30 2e 2e 32 63 63 63 32 32 32 00 00 +00 30 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PS 3300..2 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0d 05 01 02 0d 47 00 4d 08 06 0f 05 00 02 0f 00 40 4a 04 04 07 06 01 04 0f +4e 00 4e 08 02 07 04 01 05 0d 00 00 62 00 09 61 21 1d 0e 1a 56 0c 08 04 0f +63 32 00 00 00 32 00 50 53 20 33 33 30 30 2e 2e 32 63 63 63 32 32 32 00 00 +00 30 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Quadra...1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 07 03 05 0f 00 05 3c 13 06 15 09 04 04 0f 00 04 4a 08 00 13 1f 00 06 0f +00 05 5f 00 06 13 0c 07 06 0f 00 05 61 00 03 6c 17 00 0e 00 42 18 07 04 00 +63 32 63 32 00 32 00 51 75 61 64 72 61 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Quadra...2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 09 04 04 0f 00 04 4c 0a 00 0f 07 02 05 0e 00 06 50 00 06 13 0c 07 06 0f +00 04 5f 00 03 13 1f 00 06 0f 00 05 61 08 06 74 17 00 0b 00 22 18 07 04 00 +63 32 63 32 00 32 00 51 75 61 64 72 61 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ResoSynth1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0d 1f 00 02 0f 00 03 51 08 1e 17 1f 01 02 0f 0a 04 43 04 03 19 1f 00 03 0f +08 06 55 08 16 12 1f 00 01 0f 14 05 5b 04 1b 2a 00 00 00 00 02 0c 07 04 00 +63 63 00 32 00 32 00 52 65 73 6f 53 79 6e 74 68 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ResoSynth2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0d 1f 00 02 0f 00 03 50 00 1e 17 1f 01 02 0f 0a 04 41 04 03 19 1f 00 03 0f +08 04 63 00 16 12 1f 00 01 0f 14 05 63 04 1b 3c 00 00 00 00 02 18 07 04 00 +63 63 00 32 00 32 00 52 65 73 6f 53 79 6e 74 68 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: RMI......1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 09 03 07 0d 00 04 4e 08 0b 18 07 03 08 0d 00 05 59 04 0b 19 07 03 08 0c +00 06 62 04 13 1b 08 04 08 0e 00 06 63 04 0b 24 20 00 00 00 02 18 04 04 00 +28 32 00 00 00 32 00 52 4d 49 2e 2e 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: RMI......2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 09 03 07 0d 00 03 51 08 0b 18 07 03 08 0d 00 04 52 08 13 19 07 03 08 0c +00 06 62 04 13 1b 08 04 08 0e 00 06 62 00 0b 24 20 00 00 00 02 18 04 04 00 +28 32 00 00 00 32 00 52 4d 49 2e 2e 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SH 7.....1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 08 00 04 07 00 0c 57 00 09 17 1f 01 04 0f 0a 0b 3e 10 01 19 1f 00 04 0f +08 05 61 00 15 12 1f 00 04 0f 14 05 63 04 1d 2c 02 00 0a 00 02 0c 07 0d 05 +63 63 63 32 00 32 00 53 48 20 37 2e 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SH 7.....1 +** Source: from a library of patches collected by Duane Bowker, author unknown +10 08 00 04 07 00 08 57 00 09 17 1f 01 04 0f 0a 08 3e 10 01 19 1f 00 04 0f +08 00 61 00 15 12 1f 00 04 0f 14 00 63 04 1d 2c 02 00 0a 00 02 0c 07 0d 05 +63 63 63 32 00 32 00 53 48 20 37 2e 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SH 7.....2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 08 00 05 07 00 05 57 00 11 17 1f 01 05 0f 0a 04 5c 00 11 19 1f 00 05 0f +08 04 61 04 15 12 1f 00 05 0f 14 07 63 04 15 2c 02 00 0a 00 02 0c 07 0d 01 +63 63 63 32 00 32 00 53 48 20 37 2e 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SH 7.....2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +10 08 00 05 07 00 02 57 00 11 17 1f 01 05 0f 0a 01 5c 00 11 19 1f 00 05 0f +08 00 61 04 15 12 1f 00 05 0f 14 00 63 04 15 2c 02 00 0a 00 02 0c 07 0d 01 +63 63 63 32 00 32 00 53 48 20 37 2e 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sigma....1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 09 10 05 08 00 04 4e 10 03 1f 05 00 05 0b 2d 06 5a 04 13 1f 08 00 03 0c +43 04 55 0d 1b 1c 06 04 04 07 00 07 63 04 14 7c 21 00 38 00 22 0c 06 04 00 +63 32 00 32 00 32 00 53 69 67 6d 61 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sigma....2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 08 03 05 0f 00 03 57 04 06 16 0a 0a 05 0d 00 07 4b 3f 03 16 09 01 06 0f +00 06 63 04 00 16 15 01 06 0d 00 06 59 13 05 34 25 49 0f 00 32 00 0c 04 00 +63 00 00 00 00 32 00 53 69 67 6d 61 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sigma....3 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 09 10 05 08 00 03 5a 08 03 1f 03 00 05 06 2d 06 41 13 13 1f 08 00 03 0c +43 04 55 08 1b 1c 06 04 04 07 00 05 63 08 13 6c 21 00 38 00 22 0c 06 04 00 +63 32 00 32 00 32 00 53 69 67 6d 61 2e 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Soft Synth +** Controls: KV, MW (LFO pitch) +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +1f 08 00 06 09 00 3a 27 12 06 18 08 00 06 0b 63 02 54 13 00 1b 10 00 06 0b +00 01 63 09 06 1f 0a 00 06 0a 23 01 63 0a 00 05 1f 06 09 00 42 05 02 04 00 +63 63 00 00 00 32 00 53 6f 66 74 20 53 79 6e 74 68 63 63 63 32 32 32 00 54 +00 30 00 32 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Softsynth* +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0f 00 03 0d 00 03 54 09 00 1f 0f 06 04 0c 18 00 5c 2d 0d 0f 1f 06 05 0f +00 00 63 09 00 0f 1f 06 05 0f 00 00 63 0a 05 3d 23 00 00 00 62 05 02 04 00 +28 32 00 00 00 32 00 53 6f 66 74 73 79 6e 74 68 2a 63 63 63 32 32 32 00 02 +00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SoloSynth +** Controls: KV +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +1f 1f 05 03 0e 28 03 50 08 0a 1f 1d 07 04 0c 11 02 50 00 0a 1f 1d 0c 04 0c +28 02 41 00 0b 1a 01 01 05 0d 00 01 62 00 0c 01 1e 00 00 00 52 24 02 04 00 +28 32 00 00 00 32 00 53 6f 6c 6f 53 79 6e 74 68 20 63 52 63 32 32 32 00 00 +00 10 00 72 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SpiralSynt +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 09 06 01 0e 00 03 60 00 13 16 0c 06 05 0e 03 05 51 04 0c 16 0f 06 07 0e +00 05 62 04 0c 16 09 06 07 0f 00 05 63 04 0a 64 23 00 00 00 02 18 04 04 00 +63 01 63 00 00 32 00 53 70 69 72 61 6c 53 79 6e 74 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SpiralSynt +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +12 09 06 01 0e 00 01 60 00 13 16 0c 06 05 0e 03 01 51 04 0c 16 0f 06 07 0e +00 00 62 04 0c 16 09 06 07 0f 00 00 63 04 0a 64 23 00 00 00 02 18 04 04 00 +63 01 63 00 00 32 00 53 70 69 72 61 6c 53 79 6e 74 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sweeper +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 06 00 0a 0b 00 3b 5b 00 0d 1f 16 00 0a 0d 00 1d 46 00 03 1f 16 00 0a 0d +00 1d 63 00 03 1f 16 00 0a 0d 00 3d 63 00 03 35 25 00 00 00 22 18 02 04 00 +63 32 00 00 00 32 00 53 77 65 65 70 65 72 20 20 20 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sweeper +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 06 00 0a 0b 00 3a 5b 00 0d 1f 16 00 0a 0d 00 19 46 00 03 1f 16 00 0a 0d +00 18 63 00 03 1f 16 00 0a 0d 00 38 63 00 03 35 25 00 00 00 22 18 02 04 00 +63 32 00 00 00 32 00 53 77 65 65 70 65 72 20 20 20 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SweepSynt* +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 11 0d 01 09 00 04 4e 0a 04 05 03 00 01 0d 00 02 50 04 02 11 11 00 07 09 +00 01 5b 08 06 0e 07 00 04 0d 00 02 63 04 08 34 1f 00 00 00 32 18 02 04 00 +28 63 00 00 00 32 00 53 77 65 65 70 53 79 6e 74 2a 63 63 63 32 32 32 00 03 +00 40 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SweetSynth +** Controls: KV +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +14 09 00 03 0f 29 00 12 08 02 0d 0d 00 03 0f 42 01 2d 13 01 1b 0d 00 07 0f +00 02 33 04 04 11 0d 00 07 0f 00 02 63 13 06 00 20 00 00 00 52 05 02 04 00 +63 32 00 00 00 32 00 53 77 65 65 74 53 79 6e 74 68 63 63 63 32 32 32 00 50 +00 30 00 58 00 10 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.AftrTch +** Controls: MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank A, voice 32 +1f 1f 00 03 0f 00 28 46 0a 00 1f 1f 00 03 0f 00 28 44 09 06 0b 1f 00 05 0f +1e 08 56 0a 00 0b 1f 00 05 0f 1e 08 56 0a 06 3c 23 00 2e 00 42 05 02 04 00 +63 32 00 00 00 32 00 53 79 2e 41 66 74 72 54 63 68 63 63 63 32 32 32 00 30 +00 62 00 10 00 30 00 00 00 00 00 00 32 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.AftrTch +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 03 0f 00 28 46 0a 00 1f 1f 00 03 0f 00 28 44 09 06 0b 1f 00 05 0f +1e 08 56 0a 00 0b 1f 00 05 0f 1e 08 56 0a 06 3c 23 00 2e 00 42 05 02 04 00 +63 32 00 00 00 32 00 53 79 2e 41 66 74 72 54 63 68 63 63 63 32 32 32 00 30 +00 62 00 10 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Decay 1 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank A, voice 29 +1f 08 00 04 09 14 02 49 12 06 18 08 00 04 0b 14 02 51 13 00 1b 10 00 04 0b +00 01 60 09 06 1f 0a 00 04 0a 00 01 60 0a 00 3d 1f 06 09 00 52 05 02 04 00 +63 32 00 00 00 32 00 53 79 2e 44 65 63 61 79 20 31 63 63 63 32 32 32 00 54 +00 30 00 32 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Decay 2 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank A, voice 30 +1f 0c 08 0f 0c 22 02 3e 35 11 1f 11 01 04 0e 1a 04 4e 05 16 1f 0b 07 0a 0c +00 43 57 04 0e 1f 07 04 08 0e 00 43 60 05 11 3b 1c 08 02 1b 56 11 02 04 00 +63 32 00 00 00 32 00 53 79 2e 44 65 63 61 79 20 32 63 63 63 32 32 32 00 7f +00 01 00 18 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Decay 2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0c 08 0f 0c 22 02 3e 35 11 1f 11 01 04 0e 1a 04 4e 05 16 1f 0b 07 0d 0c +00 43 57 04 0e 1f 07 04 08 0e 00 43 60 05 11 3b 1c 08 02 1b 56 11 02 04 00 +63 32 00 00 00 32 00 53 79 2e 44 65 63 61 79 20 32 63 63 63 32 32 32 00 7f +00 01 00 18 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Synballs +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank D, voice 31 +1f 1f 00 01 0e 00 41 62 36 03 19 16 00 01 0b 00 41 5f 05 0b 15 1c 06 01 0b +00 41 58 39 13 1f 1f 05 02 08 00 41 63 18 13 29 00 02 00 03 52 12 05 04 00 +63 32 00 00 00 32 00 53 79 6e 62 61 6c 6c 73 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +--Bank 20 + +** Name: Synth....1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 16 07 05 0d 00 04 4b 2d 0b 17 0f 00 06 0d 00 05 57 04 03 16 13 07 06 0d +01 05 63 04 13 0d 09 06 06 0d 00 06 63 04 0b 74 26 21 09 00 42 18 02 04 00 +28 02 00 00 00 32 00 53 79 6e 74 68 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Synth....1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +16 16 07 05 0d 00 01 4b 2d 0b 17 0f 00 06 0d 00 01 57 04 03 16 13 07 06 0d +01 00 63 04 13 0d 09 06 06 0d 00 00 63 04 0b 74 26 21 09 00 42 18 02 04 00 +28 02 00 00 00 32 00 53 79 6e 74 68 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Synth....2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0a 09 03 0d 00 42 50 22 02 1f 0f 00 06 0d 00 44 4e 08 08 0c 0a 07 04 0d +01 45 63 04 12 1f 0a 06 05 0d 00 46 63 08 08 5c 26 23 06 1b 36 0c 02 04 00 +28 02 00 00 00 32 00 53 79 6e 74 68 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Synth....2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0a 09 03 0d 00 43 50 22 02 1f 0f 00 06 0d 00 41 4e 08 08 0c 0a 07 04 0d +01 40 63 04 12 1f 0a 06 05 0d 00 40 63 08 08 5c 26 23 06 1b 36 0c 02 04 00 +28 02 00 00 00 32 00 53 79 6e 74 68 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Synth....3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0d 0a 07 09 0e 00 43 59 08 06 0d 0a 07 09 0e 00 44 52 04 00 1f 1d 07 09 0e +00 46 63 04 03 1f 1d 07 09 0e 00 45 62 04 03 24 24 32 13 02 36 0c 02 04 00 +28 02 00 00 00 32 00 53 79 6e 74 68 2e 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Synth....3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0d 0a 07 09 0e 00 41 59 08 06 0d 0a 07 09 0e 00 41 52 04 00 1f 1d 07 09 0e +00 40 63 04 03 1f 1d 07 09 0e 00 40 62 04 03 24 24 32 13 02 36 0c 02 04 00 +28 02 00 00 00 32 00 53 79 6e 74 68 2e 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Synth....4 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 0f 01 0f 00 05 50 3f 03 1f 06 07 0f 0e 00 05 4d 04 00 18 10 0f 0e 0c +00 06 53 04 03 1f 06 07 0f 0e 00 06 5d 04 03 22 28 00 00 00 32 0c 02 04 00 +28 02 00 00 00 32 00 53 79 6e 74 68 2e 2e 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Synth....4 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 0f 01 0f 00 02 50 3f 03 1f 06 07 0f 0e 00 02 4d 04 00 18 10 0f 0e 0c +00 01 53 04 03 1f 06 07 0f 0e 00 00 5d 04 03 22 28 00 00 00 32 0c 02 04 00 +28 02 00 00 00 32 00 53 79 6e 74 68 2e 2e 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Synth....5 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 14 08 0f 00 00 43 63 10 13 1b 03 06 08 0e 00 44 4c 04 02 1f 15 07 0f 00 +00 45 5f 0d 06 0e 03 06 08 09 00 45 63 04 0e 34 26 21 20 2a 16 0c 02 04 00 +28 02 00 00 00 32 00 53 79 6e 74 68 2e 2e 2e 2e 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Synth....5 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 14 08 0f 00 00 40 63 10 13 1b 03 06 08 0e 00 41 4c 04 02 1f 15 07 0f 00 +00 40 5f 0d 06 0e 03 06 08 09 00 40 63 04 0e 34 26 21 20 2a 16 0c 02 04 00 +28 02 00 00 00 32 00 53 79 6e 74 68 2e 2e 2e 2e 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Synth....6 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 0c 07 0c 0a 00 04 55 04 03 1e 0c 07 07 0a 00 05 55 04 03 1f 16 00 0f 0d +00 05 63 04 03 1f 16 07 07 0d 00 06 62 04 0b 34 26 00 00 00 22 0c 02 04 00 +28 02 00 00 00 32 00 53 79 6e 74 68 2e 2e 2e 2e 36 63 63 63 32 32 32 00 00 +00 10 00 30 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Synth....6 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +10 0c 07 0c 0a 00 01 55 04 03 1e 0c 07 07 0a 00 01 55 04 03 1f 16 00 0f 0d +00 00 63 04 03 1f 16 07 07 0d 00 00 62 04 0b 34 26 00 00 00 22 0c 02 04 00 +28 02 00 00 00 32 00 53 79 6e 74 68 2e 2e 2e 2e 36 63 63 63 32 32 32 00 00 +00 10 00 30 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Synth....7 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0d 09 06 04 00 04 5e 00 05 1f 0c 09 06 0e 00 04 5b 00 02 1f 0c 09 06 0e +00 04 63 00 04 1f 0c 09 06 0e 00 05 63 04 02 2c 25 00 00 00 32 0c 02 04 00 +28 02 00 00 00 32 00 53 79 6e 74 68 2e 2e 2e 2e 37 63 63 63 32 32 32 00 00 +00 00 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Synth....7 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0d 09 06 04 00 01 5e 00 05 1f 0c 09 06 0e 00 01 5b 00 02 1f 0c 09 06 0e +00 00 63 00 04 1f 0c 09 06 0e 00 00 63 04 02 2c 25 00 00 00 32 0c 02 04 00 +28 02 00 00 00 32 00 53 79 6e 74 68 2e 2e 2e 2e 37 63 63 63 32 32 32 00 00 +00 00 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Synthish * +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 08 00 01 0c 00 01 52 08 06 03 0d 00 01 0f 00 01 49 05 18 10 08 00 04 0d +00 01 63 08 0e 0b 0a 00 04 0e 00 00 63 05 08 34 20 05 19 0f 32 08 02 04 00 +28 32 00 00 00 32 00 53 79 6e 74 68 69 73 68 20 2a 63 63 63 32 32 32 00 09 +00 0d 00 09 00 0d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthRise1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 03 0f 00 03 51 00 06 1f 1f 00 03 0f 00 05 5e 00 08 0f 1f 00 04 0f +00 05 5d 08 06 0f 1f 00 05 0f 00 05 5c 08 00 7c 23 00 00 00 02 18 05 04 00 +63 63 63 00 00 32 00 53 79 6e 74 68 52 69 73 65 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthRise1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 03 0f 00 01 51 00 06 1f 1f 00 03 0f 00 01 5e 00 08 0f 1f 00 04 0f +00 00 5d 08 06 0f 1f 00 05 0f 00 00 5c 08 00 7c 23 00 00 00 02 18 05 04 00 +63 63 63 00 00 32 00 53 79 6e 74 68 52 69 73 65 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthRise2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 1f 00 04 0d 00 05 5f 00 06 1f 1f 00 04 0f 00 05 61 00 08 0f 1f 00 05 0f +00 06 5f 08 06 0f 1f 00 05 0f 00 05 58 08 00 74 23 00 00 00 02 18 05 04 00 +63 63 63 00 00 32 00 53 79 6e 74 68 52 69 73 65 32 63 63 63 32 32 32 00 20 +00 40 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthRise2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 1f 00 04 0d 00 01 5f 00 06 1f 1f 00 04 0f 00 02 61 00 08 0f 1f 00 05 0f +00 00 5f 08 06 0f 1f 00 05 0f 00 00 58 08 00 74 23 00 00 00 02 18 05 04 00 +63 63 63 00 00 32 00 53 79 6e 74 68 52 69 73 65 32 63 63 63 32 32 32 00 20 +00 40 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthyPad1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +11 11 06 07 0f 1d 02 62 03 06 0b 08 07 07 0f 16 41 62 05 04 11 07 08 07 0f +1d 02 62 05 00 0e 08 04 05 0f 14 43 63 03 02 7f 22 00 0f 00 36 05 02 04 03 +63 32 00 00 00 32 00 53 79 6e 74 68 79 50 61 64 31 63 63 63 32 32 32 00 16 +00 51 00 11 00 56 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: System 15 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 09 04 09 0e 00 05 54 08 06 16 09 04 09 0e 00 04 5a 00 06 16 09 04 09 0e +00 06 5c 04 03 16 09 04 09 0e 00 05 63 00 03 74 22 00 06 00 32 0c 02 04 00 +28 02 00 00 00 32 00 53 79 73 74 65 6d 20 31 35 20 63 63 63 32 32 32 00 00 +00 00 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: System 15 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +16 09 04 09 0e 00 01 54 08 06 16 09 04 09 0e 00 01 5a 00 06 16 09 04 09 0e +00 00 5c 04 03 16 09 04 09 0e 00 00 63 00 03 74 22 00 06 00 32 0c 02 04 00 +28 02 00 00 00 32 00 53 79 73 74 65 6d 20 31 35 20 63 63 63 32 32 32 00 00 +00 00 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: System35.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +07 01 00 04 0c 00 04 5f 00 09 0b 07 00 04 0f 00 04 50 00 04 0e 03 01 04 0f +00 05 63 04 0b 13 02 00 04 0f 00 05 63 04 06 54 17 00 0b 00 32 18 04 04 00 +63 01 63 00 00 32 00 53 79 73 74 65 6d 33 35 2e 31 63 63 63 32 32 32 00 10 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: System35.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +07 01 00 04 0c 00 01 5f 00 09 0b 07 00 04 0f 00 01 50 00 04 0e 03 01 04 0f +00 00 63 04 0b 13 02 00 04 0f 00 00 63 04 06 54 17 00 0b 00 32 18 04 04 00 +63 01 63 00 00 32 00 53 79 73 74 65 6d 33 35 2e 31 63 63 63 32 32 32 00 10 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: System35.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 04 03 08 0d 00 04 50 04 01 15 04 03 08 0d 00 04 4c 08 03 12 04 03 08 0d +00 04 62 08 03 0a 04 03 08 0d 00 05 5d 08 06 7c 17 00 0b 00 32 0c 04 04 00 +63 01 63 00 00 32 00 53 79 73 74 65 6d 33 35 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: System35.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +15 04 03 08 0d 00 02 50 04 01 15 04 03 08 0d 00 01 4c 08 03 12 04 03 08 0d +00 00 62 08 03 0a 04 03 08 0d 00 00 5d 08 06 7c 17 00 0b 00 32 0c 04 04 00 +63 01 63 00 00 32 00 53 79 73 74 65 6d 33 35 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: System35.3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 01 00 06 0c 00 02 51 00 09 15 04 00 07 0f 00 04 4e 00 06 13 0c 02 06 0f +00 06 63 00 0b 13 03 01 06 0f 00 05 63 00 16 74 17 00 0b 00 32 18 04 04 00 +63 01 63 00 00 32 00 53 79 73 74 65 6d 33 35 2e 33 63 63 63 32 32 32 00 00 +00 40 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: System35.3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 01 00 06 0c 00 01 51 00 09 15 04 00 07 0f 00 02 4e 00 06 13 0c 02 06 0f +00 00 63 00 0b 13 03 01 06 0f 00 00 63 00 16 74 17 00 0b 00 32 18 04 04 00 +63 01 63 00 00 32 00 53 79 73 74 65 6d 33 35 2e 33 63 63 63 32 32 32 00 00 +00 40 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: System55.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +09 09 00 05 0f 00 03 5b 00 00 15 03 00 06 05 00 05 60 00 0e 13 1f 00 06 0f +00 06 63 04 03 13 0c 00 06 0e 00 05 63 04 03 6c 17 00 0b 00 22 18 05 04 00 +63 63 63 00 00 32 00 53 79 73 74 65 6d 35 35 2e 31 63 63 63 32 32 32 00 00 +00 00 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: System55.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +09 09 00 05 0f 00 01 5b 00 00 15 03 00 06 05 00 01 60 00 0e 13 1f 00 06 0f +00 00 63 04 03 13 0c 00 06 0e 00 00 63 04 03 6c 17 00 0b 00 22 18 05 04 00 +63 63 63 00 00 32 00 53 79 73 74 65 6d 35 35 2e 31 63 63 63 32 32 32 00 00 +00 00 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: System55.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +09 09 00 05 0f 00 02 5c 00 06 15 03 00 06 05 00 05 58 08 0e 13 1f 00 06 0f +00 04 63 00 02 13 0c 00 06 0e 00 05 63 00 02 74 17 00 0b 00 22 18 05 04 00 +63 63 63 00 00 32 00 53 79 73 74 65 6d 35 35 2e 32 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: System55.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +09 09 00 05 0f 00 02 5c 00 06 15 03 00 06 05 00 01 58 08 0e 13 1f 00 06 0f +00 00 63 00 02 13 0c 00 06 0e 00 00 63 00 02 74 17 00 0b 00 22 18 05 04 00 +63 63 63 00 00 32 00 53 79 73 74 65 6d 35 35 2e 32 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tamboura * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0a 07 07 01 00 00 00 49 0a 0b 1f 1f 02 03 0f 00 01 56 00 0b 07 08 04 03 00 +00 01 45 24 0b 1e 0d 05 04 0d 00 01 63 04 0b 3b 23 00 00 00 32 18 02 04 00 +28 63 00 00 00 32 00 54 61 6d 62 6f 75 72 61 20 2a 63 63 63 32 32 32 00 20 +00 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tamboura.1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1d 1f 00 03 0f 00 01 50 00 03 1f 1f 00 02 0f 00 03 5f 04 03 19 18 00 02 0f +00 05 45 05 03 1f 1f 00 03 0f 00 06 5a 04 03 7d 23 00 00 00 32 18 02 04 00 +63 63 00 00 00 32 00 54 61 6d 62 6f 75 72 61 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tamboura.1 +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 1f 00 03 0f 00 00 50 00 03 1f 1f 00 02 0f 00 00 5f 04 03 19 18 00 02 0f +00 00 45 05 03 1f 1f 00 03 0f 00 00 5a 04 03 7d 23 00 00 00 32 18 02 04 00 +63 63 00 00 00 32 00 54 61 6d 62 6f 75 72 61 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tamboura.2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1d 11 07 03 0f 00 02 54 00 03 1f 1f 00 04 0f 00 03 63 00 03 19 18 00 03 0f +00 05 45 04 03 1f 1f 00 04 0f 00 05 5b 04 03 45 23 00 00 00 32 18 02 04 00 +63 63 00 00 00 32 00 54 61 6d 62 6f 75 72 61 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tamboura.2 +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 11 07 03 0f 00 00 54 00 03 1f 1f 00 04 0f 00 00 63 00 03 19 18 00 03 0f +00 00 45 04 03 1f 1f 00 04 0f 00 00 5b 04 03 45 23 00 00 00 32 18 02 04 00 +63 63 00 00 00 32 00 54 61 6d 62 6f 75 72 61 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tamboura.3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1d 1f 00 03 0f 00 02 47 00 03 1f 1f 00 03 0f 00 02 43 00 03 19 18 00 03 0f +00 03 5b 04 03 1f 1f 00 03 0f 00 06 5b 04 03 6c 23 00 00 00 32 18 02 04 00 +63 63 00 00 00 32 00 54 61 6d 62 6f 75 72 61 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tamboura.3 +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 1f 00 03 0f 00 00 47 00 03 1f 1f 00 03 0f 00 00 43 00 03 19 18 00 03 0f +00 00 5b 04 03 1f 1f 00 03 0f 00 00 5b 04 03 6c 23 00 00 00 32 18 02 04 00 +63 63 00 00 00 32 00 54 61 6d 62 6f 75 72 61 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Time X * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +06 00 00 01 00 08 00 5a 00 06 1f 00 00 01 00 00 00 48 00 05 1f 00 00 01 00 +00 02 58 00 01 12 06 00 03 00 00 00 63 00 0b 02 23 00 00 00 32 24 02 04 00 +28 63 00 00 00 32 00 54 69 6d 65 20 58 20 20 20 2a 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: TrdrpSynth +** Controls: KV, MW (LFO pitch) +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +17 04 00 06 09 00 3a 1e 12 06 10 04 00 06 0b 63 02 54 1c 00 13 0c 00 06 0b +00 01 63 09 06 17 06 00 06 0a 23 01 63 13 00 05 1f 06 09 00 42 05 02 04 00 +63 63 00 00 00 32 00 54 72 64 72 70 53 79 6e 74 68 63 63 63 32 32 32 00 54 +00 30 00 32 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Voyage * +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +17 09 00 01 00 19 00 5b 00 08 17 05 00 03 00 00 00 5c 00 0e 15 07 00 04 00 +07 02 63 04 08 15 07 00 04 00 06 01 63 03 0b 14 20 00 1c 00 42 11 02 04 00 +28 63 00 00 00 32 00 56 6f 79 61 67 65 20 20 20 2a 63 63 63 32 32 32 00 44 +00 04 00 08 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Walt/Wendy +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0a 09 07 04 0e 00 04 47 16 03 1e 0f 00 05 0d 00 05 4d 08 09 0a 09 07 04 0e +00 04 62 04 0b 09 10 03 04 0f 00 05 63 08 0e 74 26 00 02 00 63 0c 02 04 00 +63 63 00 00 00 32 00 57 61 6c 74 2f 57 65 6e 64 79 63 63 63 32 32 32 00 00 +00 30 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Walt/Wendy +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0a 09 07 04 0e 00 01 47 16 03 1e 0f 00 05 0d 00 02 4d 08 09 0a 09 07 04 0e +00 00 62 04 0b 09 10 03 04 0f 00 00 63 08 0e 74 26 00 02 00 63 0c 02 04 00 +63 63 00 00 00 32 00 57 61 6c 74 2f 57 65 6e 64 79 63 63 63 32 32 32 00 00 +00 30 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Wapper...1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 1c 15 01 0e 00 04 52 0a 13 10 00 03 08 0d 00 06 58 04 0b 10 00 03 09 0d +00 06 5f 0a 08 10 00 03 08 0d 00 05 63 08 0b 34 25 29 26 63 12 0c 04 04 00 +63 01 63 00 00 32 00 57 61 70 70 65 72 2e 2e 2e 31 63 63 63 32 32 32 00 10 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Wapper...1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +12 1c 15 01 0e 00 01 52 0a 13 10 00 03 08 0d 00 02 58 04 0b 10 00 03 09 0d +00 00 5f 0a 08 10 00 03 08 0d 00 00 63 08 0b 34 25 29 26 63 12 0c 04 04 00 +63 01 63 00 00 32 00 57 61 70 70 65 72 2e 2e 2e 31 63 63 63 32 32 32 00 10 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Wapper...2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 1c 0a 01 0e 00 05 49 2a 0b 10 00 03 08 0d 00 05 3e 10 0b 10 00 03 09 0d +00 05 5f 04 08 10 00 03 08 0d 00 05 63 04 0b 2c 25 2a 26 63 12 18 04 04 00 +63 01 63 00 00 32 00 57 61 70 70 65 72 2e 2e 2e 32 63 63 63 32 32 32 00 30 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Wapper...2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +12 1c 0a 01 0e 00 01 49 2a 0b 10 00 03 08 0d 00 01 3e 10 0b 10 00 03 09 0d +00 00 5f 04 08 10 00 03 08 0d 00 00 63 04 0b 2c 25 2a 26 63 12 18 04 04 00 +63 01 63 00 00 32 00 57 61 70 70 65 72 2e 2e 2e 32 63 63 63 32 32 32 00 30 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: WarmSquare +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank C, voice 21 +1f 06 00 03 0f 00 01 4f 03 06 1f 0e 00 03 0f 00 01 50 05 00 12 0e 00 07 0f +00 02 63 03 00 16 0e 00 07 0f 00 02 63 05 06 34 20 00 00 00 52 05 07 0c 00 +63 32 00 00 00 32 00 57 61 72 6d 53 71 75 61 72 65 63 63 63 32 32 32 00 26 +00 51 00 06 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Wendy : +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0e 0a 06 08 0c 00 03 53 04 03 10 07 06 0a 00 00 05 51 04 03 12 07 06 09 0c +00 05 63 04 13 12 09 04 07 0e 00 06 63 04 03 24 23 00 05 00 42 0c 02 04 00 +28 02 00 00 00 32 00 20 57 65 6e 64 79 20 20 3a 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Wendy : +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0e 0a 06 08 0c 00 01 53 04 03 10 07 06 0a 00 00 01 51 04 03 12 07 06 09 0c +00 00 63 04 13 12 09 04 07 0e 00 00 63 04 03 24 23 00 05 00 42 0c 02 04 00 +28 02 00 00 00 32 00 20 57 65 6e 64 79 20 20 3a 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Wendy C +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0c 09 04 04 0f 00 04 31 1f 06 08 00 00 04 0f 00 04 44 08 0b 0e 09 04 04 0f +00 06 62 08 02 08 00 00 05 0f 00 06 62 08 0b 74 2b 00 0b 00 32 0c 02 04 00 +28 02 00 00 00 32 00 57 65 6e 64 79 20 43 20 20 20 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Wendy C +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0c 09 04 04 0f 00 01 31 1f 06 08 00 00 04 0f 00 01 44 08 0b 0e 09 04 04 0f +00 00 62 08 02 08 00 00 05 0f 00 00 62 08 0b 74 2b 00 0b 00 32 0c 02 04 00 +28 02 00 00 00 32 00 57 65 6e 64 79 20 43 20 20 20 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Whos Upset +** Controls: KV, MW (LFO pitch), MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 0f 0f 00 43 58 04 03 1f 1f 00 0f 0f 00 43 63 04 03 1f 1f 00 0f 0f +00 45 63 04 03 1f 1f 00 0f 0f 00 47 63 04 03 5d 2e 3a 45 63 77 18 04 04 00 +63 01 63 00 00 32 00 57 68 6f 73 20 55 70 73 65 74 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Whos Upset +** Controls: MW (LFO pitch), MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 0f 0f 00 40 58 04 03 1f 1f 00 0f 0f 00 40 63 04 03 1f 1f 00 0f 0f +00 40 63 04 03 1f 1f 00 0f 0f 00 40 63 04 03 5d 2e 3a 45 63 77 18 04 04 00 +63 01 63 00 00 32 00 57 68 6f 73 20 55 70 73 65 74 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: X-Pander * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 08 00 06 0d 00 03 52 03 03 0e 08 00 01 0f 00 00 43 04 03 15 0e 00 06 0f +00 00 63 03 0b 0b 1f 00 06 0f 00 00 63 04 0b 3c 21 00 00 00 52 05 02 04 00 +28 32 00 00 00 32 00 58 2d 50 61 6e 64 65 72 20 2a 63 63 63 32 32 32 00 06 +00 08 00 06 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Xuereb * +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +13 08 00 03 0f 00 00 46 3f 1d 1f 00 00 04 0f 00 00 48 08 00 11 07 12 02 00 +00 07 4a 3f 1e 0f 04 09 06 0f 00 02 63 08 0e 33 20 00 14 00 32 00 02 04 00 +28 63 00 00 00 32 00 58 75 65 72 65 62 20 20 20 2a 63 63 63 32 32 32 00 0f +00 00 00 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +--Bank 21 + +* CATEGORY VOICES + +* SUBCATEGORY Breath + +** Name: BaadBreath +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank D, voice 1 +1f 00 00 04 0f 00 40 63 3c 00 0b 08 07 07 0f 05 00 63 04 06 0f 05 03 07 0f +08 00 3b 05 06 0e 08 04 05 0f 00 03 63 03 00 7e 1d 06 0f 00 4a 11 00 04 00 +63 32 00 00 00 32 00 42 61 61 64 42 72 65 61 74 68 63 63 63 32 32 32 06 30 +00 38 00 01 00 46 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BaadBreath +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 00 00 04 0f 00 41 63 3c 00 0c 09 04 07 0f 3e 03 63 06 06 10 07 03 06 0f +0c 03 4d 05 01 0f 08 04 05 0f 33 04 63 05 00 7e 1d 06 0f 29 4e 11 00 04 00 +63 32 00 00 00 32 00 42 61 61 64 42 72 65 61 74 68 63 63 63 32 32 32 0e 30 +00 30 00 42 01 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BaadBreath +** Controls: KV, MW (LFO pitch) +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +1f 00 00 04 0f 00 40 63 3c 00 0c 09 04 07 0f 3e 00 63 06 06 10 07 03 06 0f +0c 01 4d 05 01 0f 08 04 05 0f 33 01 63 05 00 7e 1d 06 0f 29 4e 11 00 04 00 +63 32 00 00 00 32 00 42 61 61 64 42 72 65 61 74 68 63 63 63 32 32 32 0e 30 +00 30 00 42 01 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BadBreath2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 00 00 04 0f 00 40 63 3c 00 0a 08 07 07 0f 15 00 63 04 06 0a 05 03 07 0f +13 00 32 05 06 0a 08 04 05 0f 19 03 63 03 00 7e 1d 06 0f 00 4a 11 00 04 02 +63 32 00 00 00 32 00 42 61 64 42 72 65 61 74 68 32 63 63 63 32 32 32 06 10 +00 38 00 71 00 46 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BreathOrgn +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank B, voice 32 +0d 0b 00 01 0c 00 02 2c 3d 03 0d 07 00 01 0c 00 02 1f 3c 03 0d 1f 00 05 0f +00 02 63 05 06 0d 1f 00 05 0f 00 02 63 04 00 3c 63 00 2f 00 53 11 04 04 00 +63 32 00 00 00 32 00 42 72 65 61 74 68 4f 72 67 6e 63 63 63 32 32 32 04 30 +05 50 00 11 00 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BreathyEns +** Controls: KV, MW (LFO pitch) +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +1f 00 00 03 0f 00 40 63 3c 00 0b 08 07 06 0f 05 00 63 08 06 0f 05 03 06 0f +08 00 2b 08 06 10 04 04 09 0f 00 03 63 08 00 7e 1d 06 0f 00 4a 0c 01 04 00 +63 32 00 00 00 32 00 42 72 65 61 74 68 79 45 6e 73 63 63 63 32 32 32 06 30 +00 10 00 71 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + +* SUBCATEGORY Choir + +** Name: ChoiChoir* +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 19 00 01 0f 08 00 46 04 06 1f 19 00 01 0f 4a 02 4d 04 06 0b 1f 00 06 0f +00 00 63 08 00 09 19 00 07 0f 17 01 4d 20 00 04 1e 1f 3f 00 42 0c 02 04 00 +28 32 00 00 00 32 00 43 68 6f 69 43 68 6f 69 72 2a 63 63 63 32 32 32 00 00 +00 20 00 00 0c 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Choir....1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0c 0b 0c 0c 0d 00 00 37 0a 03 0c 03 09 09 0f 00 07 32 08 04 0c 06 00 09 0f +00 07 45 08 01 08 08 09 07 0d 00 07 60 04 00 4a 20 21 35 00 22 18 07 04 00 +63 32 63 32 00 32 00 43 68 6f 69 72 2e 2e 2e 2e 31 63 63 63 32 32 32 20 00 +10 10 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Choir....1 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0c 0b 0c 0c 0d 00 00 37 0a 03 0c 03 09 09 0f 00 00 32 08 04 0c 06 00 09 0f +00 00 45 08 01 08 08 09 07 0d 00 00 60 04 00 4a 20 21 35 00 22 18 07 04 00 +63 32 63 32 00 32 00 43 68 6f 69 72 2e 2e 2e 2e 31 63 63 63 32 32 32 20 00 +10 10 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Choir....2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0c 08 0c 0c 0d 00 03 35 0a 03 0c 1f 09 09 0f 00 06 35 08 03 0c 06 00 09 0f +00 05 63 08 03 0c 08 09 07 0d 00 05 60 04 00 4c 20 21 35 00 22 18 07 04 00 +63 32 63 32 00 32 00 43 68 6f 69 72 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Choir....2 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0c 08 0c 0c 0d 00 00 35 0a 03 0c 1f 09 09 0f 00 00 35 08 03 0c 06 00 09 0f +00 00 63 08 03 0c 08 09 07 0d 00 00 60 04 00 4c 20 21 35 00 22 18 07 04 00 +63 32 63 32 00 32 00 43 68 6f 69 72 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Choir....3 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 15 1f 07 0f 00 02 3a 0d 02 10 16 09 07 0f 00 06 44 08 04 0b 16 09 07 0f +00 06 5f 08 01 0f 0f 04 07 0f 00 05 5f 04 02 44 1f 23 21 00 22 0c 07 04 00 +63 32 63 32 00 32 00 43 68 6f 69 72 2e 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Choir....3 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +10 15 1f 07 0f 00 00 3a 0d 02 10 16 09 07 0f 00 01 44 08 04 0b 16 09 07 0f +00 00 5f 08 01 0f 0f 04 07 0f 00 00 5f 04 02 44 1f 23 21 00 22 0c 07 04 00 +63 32 63 32 00 32 00 43 68 6f 69 72 2e 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Choir....4 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +07 00 04 04 0a 61 00 39 19 03 09 1f 03 07 0f 63 04 3a 04 00 07 00 06 06 09 +58 05 34 13 03 09 1f 01 06 0f 29 45 58 04 06 21 20 2d 00 00 06 24 02 04 00 +63 32 00 00 00 32 00 43 68 6f 69 72 2e 2e 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 30 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Choir....4 +** Source: from a library of patches collected by Duane Bowker, author unknown +07 00 04 04 0a 61 00 39 19 03 09 1f 03 07 0f 63 00 3a 04 00 07 00 06 06 09 +58 00 34 13 03 09 1f 01 06 0f 29 40 58 04 06 21 20 2d 00 00 06 24 02 04 00 +63 32 00 00 00 32 00 43 68 6f 69 72 2e 2e 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 30 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Choir....5 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +13 12 04 04 0a 3a 03 36 19 06 0b 1f 03 0a 0f 56 05 44 04 00 15 0e 06 0a 09 +63 06 3b 16 00 0e 1f 01 09 0f 00 06 61 04 06 29 21 13 09 00 62 18 02 04 00 +63 32 00 00 00 32 00 43 68 6f 69 72 2e 2e 2e 2e 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Choir....5 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +13 12 04 04 0a 3a 00 36 19 06 0b 1f 03 0a 0f 56 00 44 04 00 15 0e 06 0a 09 +63 00 3b 16 00 0e 1f 01 09 0f 00 00 61 04 06 29 21 13 09 00 62 18 02 04 00 +63 32 00 00 00 32 00 43 68 6f 69 72 2e 2e 2e 2e 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Choir....6 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 15 04 04 0a 3a 03 33 10 06 0c 1f 03 0a 0f 56 04 39 04 00 0d 0e 06 0a 09 +63 06 48 08 00 0c 1f 01 09 0f 00 05 57 04 06 51 21 16 08 00 62 18 02 04 00 +63 32 00 00 00 32 00 43 68 6f 69 72 2e 2e 2e 2e 36 63 63 63 32 32 32 00 10 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Choir....6 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +12 15 04 04 0a 3a 00 33 10 06 0c 1f 03 0a 0f 56 00 39 04 00 0d 0e 06 0a 09 +63 00 48 08 00 0c 1f 01 09 0f 00 00 57 04 06 51 21 16 08 00 62 18 02 04 00 +63 32 00 00 00 32 00 43 68 6f 69 72 2e 2e 2e 2e 36 63 63 63 32 32 32 00 10 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Choral +** Controls: KV, MW (LFO pitch) +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +0b 0d 00 02 0f 0a 40 32 04 00 0a 0d 00 02 0f 0a 40 32 00 06 0c 0b 00 04 0f +1e 42 63 08 00 0a 0d 00 04 0f 14 42 63 04 06 3c 1e 0a 11 04 4a 18 02 04 00 +28 32 00 00 00 32 00 43 68 6f 72 61 6c 20 20 20 20 63 56 63 29 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Chorus +** Controls: MW (LFO pitch) +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +0d 0e 00 02 0f 28 00 32 00 03 0d 0e 00 02 0f 00 00 4e 00 0b 0d 0e 00 04 0f +00 00 63 04 0b 0d 0e 00 04 0f 58 00 63 08 0b 06 1d 00 17 00 22 18 05 04 00 +28 32 0d 00 00 32 00 43 68 6f 72 75 73 20 20 20 20 63 47 63 2f 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Chorus...1 +** Controls: KV, MW (LFO pitch), BC (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 16 02 02 0f 23 42 2f 04 04 06 07 04 04 07 32 46 40 04 03 0a 06 09 09 0f +45 45 39 04 02 0a 06 07 06 0f 0a 46 5d 04 00 2b 23 23 0b 02 46 18 02 04 00 +63 32 00 00 01 32 00 43 68 6f 72 75 73 2e 2e 2e 31 63 63 63 32 32 32 0b 09 +00 10 00 00 00 10 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Chorus...1 +** Controls: MW (LFO pitch), BC (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 16 02 02 0f 23 40 2f 04 04 06 07 04 04 07 32 40 40 04 03 0a 06 09 09 0f +45 40 39 04 02 0a 06 07 06 0f 0a 40 5d 04 00 2b 23 23 0b 02 46 18 02 04 00 +63 32 00 00 01 32 00 43 68 6f 72 75 73 2e 2e 2e 31 63 63 63 32 32 32 0b 09 +00 10 00 00 00 10 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Chorus...2 +** Controls: KV, MW (LFO pitch), BC (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0e 16 05 02 0f 23 43 3a 0d 05 07 07 07 04 07 32 45 43 04 03 09 06 08 09 0f +45 45 40 04 02 0f 06 07 09 0f 0a 45 5f 04 00 3b 23 23 0b 02 46 18 02 04 00 +63 32 00 00 01 32 00 43 68 6f 72 75 73 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Chorus...2 +** Controls: MW (LFO pitch), BC (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +0e 16 05 02 0f 23 40 3a 0d 05 07 07 07 04 07 32 40 43 04 03 09 06 08 09 0f +45 40 40 04 02 0f 06 07 09 0f 0a 40 5f 04 00 3b 23 23 0b 02 46 18 02 04 00 +63 32 00 00 01 32 00 43 68 6f 72 75 73 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Chorus...3 +** Controls: KV, MW (LFO pitch), BC (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0b 09 05 05 0f 23 44 49 08 05 06 07 07 04 07 32 46 4d 08 04 0d 06 08 09 0f +45 45 57 08 02 0d 07 07 09 0f 0a 45 5f 04 00 2e 23 23 0b 02 46 18 02 04 00 +63 32 00 00 01 32 00 43 68 6f 72 75 73 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Chorus...3 +** Controls: KV, MW (LFO pitch), BC (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +0b 09 05 05 0f 23 41 49 08 05 06 07 07 04 07 32 40 4d 08 04 0d 06 08 09 0f +45 40 57 08 02 0d 07 07 09 0f 0a 40 5f 04 00 2e 23 23 0b 02 46 18 02 04 00 +63 32 00 00 01 32 00 43 68 6f 72 75 73 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Chorus...4 +** Controls: KV, MW (LFO pitch), BC (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +07 05 0a 07 0e 2d 43 51 04 0b 0a 04 05 05 09 3c 45 5b 04 05 0d 06 08 09 0f +59 46 60 04 04 0a 05 08 07 0e 0a 46 61 04 0e 06 1b 0f 48 22 16 18 02 04 00 +63 32 00 00 01 32 00 43 68 6f 72 75 73 2e 2e 2e 34 63 63 63 32 32 32 00 10 +00 10 00 10 00 10 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Chorus...4 +** Controls: MW (LFO pitch), BC (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +07 05 0a 07 0e 2d 40 51 04 0b 0a 04 05 05 09 3c 40 5b 04 05 0d 06 08 09 0f +59 40 60 04 04 0a 05 08 07 0e 0a 40 61 04 0e 06 1b 0f 48 22 16 18 02 04 00 +63 32 00 00 01 32 00 43 68 6f 72 75 73 2e 2e 2e 34 63 63 63 32 32 32 00 10 +00 10 00 10 00 10 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Chorus...5 +** Controls: KV, MW (LFO pitch), BC (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +09 07 08 08 0d 2d 44 41 08 04 0c 08 04 06 0b 3c 46 63 04 04 0a 07 05 08 0f +59 46 63 00 01 09 04 08 07 0f 0a 47 61 04 05 0e 1b 0f 4f 26 16 18 02 04 00 +63 32 00 00 01 32 00 43 68 6f 72 75 73 2e 2e 2e 35 63 63 63 32 32 32 00 00 +00 30 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Chorus...5 +** Controls: MW (LFO pitch), BC (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +09 07 08 08 0d 2d 40 41 08 04 0c 08 04 06 0b 3c 40 63 04 04 0a 07 05 08 0f +59 40 63 00 01 09 04 08 07 0f 0a 40 61 04 05 0e 1b 0f 4f 26 16 18 02 04 00 +63 32 00 00 01 32 00 43 68 6f 72 75 73 2e 2e 2e 35 63 63 63 32 32 32 00 00 +00 30 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Chorus...6 +** Controls: KV, MW (LFO pitch), BC (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0c 0a 06 08 0d 3e 45 4b 04 03 0c 06 05 07 0d 32 45 63 08 03 0a 0a 03 07 0f +43 45 63 0a 0b 0c 07 06 08 0f 0a 46 63 04 03 0e 1b 0f 4f 3d 16 18 02 04 00 +63 32 00 00 01 32 00 43 68 6f 72 75 73 2e 2e 2e 36 63 63 63 32 32 32 00 20 +00 00 00 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Chorus...6 +** Controls: MW (LFO pitch), BC (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +0c 0a 06 08 0d 3e 40 4b 04 03 0c 06 05 07 0d 32 40 63 08 03 0a 0a 03 07 0f +43 40 63 0a 0b 0c 07 06 08 0f 0a 40 63 04 03 0e 1b 0f 4f 3d 16 18 02 04 00 +63 32 00 00 01 32 00 43 68 6f 72 75 73 2e 2e 2e 36 63 63 63 32 32 32 00 20 +00 00 00 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Chorus...7 +** Controls: MW (LFO pitch), BC (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +06 07 05 07 0d 17 40 42 04 03 09 03 04 07 0d 32 40 55 0a 03 08 05 04 07 0f +2a 40 5b 08 06 08 08 05 07 0f 1e 40 5b 04 05 1e 1b 0f 4f 3d 36 18 02 04 00 +63 32 00 00 01 32 00 43 68 6f 72 75 73 2e 2e 2e 37 63 63 63 32 32 32 00 00 +00 00 00 30 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Chorus...8 +** Controls: KV, MW (LFO pitch), BC (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +06 05 06 06 0c 17 40 39 0a 03 09 05 03 07 0e 32 45 5b 04 03 09 04 06 06 0d +2a 47 5f 04 03 09 06 02 09 0d 1e 46 5d 0a 03 0e 1b 0f 4f 3d 16 18 02 04 00 +63 32 00 00 01 32 00 43 68 6f 72 75 73 2e 2e 2e 38 63 63 63 32 32 32 00 10 +00 30 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Chorus...8 +** Controls: MW (LFO pitch), BC (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +06 05 06 06 0c 17 40 39 0a 03 09 05 03 07 0e 32 40 5b 04 03 09 04 06 06 0d +2a 40 5f 04 03 09 06 02 09 0d 1e 40 5d 0a 03 0e 1b 0f 4f 3d 16 18 02 04 00 +63 32 00 00 01 32 00 43 68 6f 72 75 73 2e 2e 2e 38 63 63 63 32 32 32 00 10 +00 30 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + +* SUBCATEGORY FVoice + +** Name: F Voice..1 +** Controls: KV, MW (LFO pitch), MW (LFO amplitude), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 13 04 05 0a 00 46 52 04 01 15 18 18 07 0c 00 06 4b 04 02 0c 08 04 09 0e +00 46 5b 04 06 0c 08 04 09 0e 00 06 5e 04 00 74 27 1b 30 08 26 18 07 04 00 +63 32 63 32 00 32 00 46 20 56 6f 69 63 65 2e 2e 31 63 63 63 32 32 32 00 30 +00 30 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: F Voice..1 +** Controls: MW (LFO pitch), MW (LFO amplitude), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 13 04 05 0a 00 40 52 04 01 15 18 18 07 0c 00 00 4b 04 02 0c 08 04 09 0e +00 40 5b 04 06 0c 08 04 09 0e 00 00 5e 04 00 74 27 1b 30 08 26 18 07 04 00 +63 32 63 32 00 32 00 46 20 56 6f 69 63 65 2e 2e 31 63 63 63 32 32 32 00 30 +00 30 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: F Voice..2 +** Controls: KV, MW (LFO pitch), MW (LFO amplitude), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0d 16 0f 03 0e 00 45 32 3d 01 06 07 0f 03 09 00 04 44 04 03 0c 06 0a 07 0e +00 45 1a 04 06 0e 08 04 09 0e 00 06 57 04 00 23 27 22 5b 02 16 18 07 04 00 +63 32 63 32 00 32 00 46 20 56 6f 69 63 65 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: F Voice..2 +** Controls: MW (LFO pitch), MW (LFO amplitude), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0d 16 0f 03 0e 00 40 32 3d 01 06 07 0f 03 09 00 00 44 04 03 0c 06 0a 07 0e +00 40 1a 04 06 0e 08 04 09 0e 00 00 57 04 00 23 27 22 5b 02 16 18 07 04 00 +63 32 63 32 00 32 00 46 20 56 6f 69 63 65 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: F Voice..3 +** Controls: KV, MW (LFO pitch), MW (LFO amplitude), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 1f 0e 06 0f 28 05 63 04 00 0c 19 06 07 0f 3c 06 63 08 05 0d 0c 0a 07 0f +0f 06 63 08 06 0d 19 06 07 0f 00 46 61 04 01 27 23 00 15 28 16 18 07 04 00 +63 32 63 32 00 32 00 46 20 56 6f 69 63 65 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: F Voice..3 +** Controls: MW (LFO pitch), MW (LFO amplitude), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 1f 0e 06 0f 28 00 63 04 00 0c 19 06 07 0f 3c 00 63 08 05 0d 0c 0a 07 0f +0f 00 63 08 06 0d 19 06 07 0f 00 40 61 04 01 27 23 00 15 28 16 18 07 04 00 +63 32 63 32 00 32 00 46 20 56 6f 69 63 65 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: F Voice..4 +** Controls: KV, MW (LFO pitch), MW (LFO amplitude), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 15 03 05 0f 01 44 47 00 03 0f 06 06 07 0e 00 40 43 04 04 12 15 04 05 0f +00 46 37 08 03 12 06 04 09 0f 00 45 58 04 04 3c 23 3a 0a 02 46 24 07 04 00 +63 32 63 32 00 32 00 46 20 56 6f 69 63 65 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: F Voice..4 +** Controls: MW (LFO pitch), MW (LFO amplitude), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +12 15 03 05 0f 01 40 47 00 03 0f 06 06 07 0e 00 40 43 04 04 12 15 04 05 0f +00 40 37 08 03 12 06 04 09 0f 00 40 58 04 04 3c 23 3a 0a 02 46 24 07 04 00 +63 32 63 32 00 32 00 46 20 56 6f 69 63 65 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Fem.Voice* +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 17 00 07 0f 00 00 2d 0d 06 0e 17 00 06 0f 00 00 2f 04 00 0b 0d 00 07 0a +00 02 63 08 00 13 0f 00 07 0f 00 02 63 04 06 24 1e 03 25 00 52 18 02 04 00 +28 63 00 00 00 32 00 46 65 6d 2e 56 6f 69 63 65 2a 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + +* SUBCATEGORY MVoice + +** Name: M Voice..1 +** Controls: KV, MW (LFO pitch), MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 18 03 04 0e 00 45 49 04 0a 0d 05 02 07 0f 00 46 3d 10 0a 0c 06 04 07 0f +00 46 63 08 0a 0d 18 02 07 0f 00 46 5f 08 04 04 1e 21 33 26 16 0c 04 04 00 +63 01 63 00 00 32 00 4d 20 56 6f 69 63 65 2e 2e 31 63 63 63 32 32 32 00 00 +00 40 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: M Voice..1 +** Controls: MW (LFO pitch), MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 18 03 04 0e 00 40 49 04 0a 0d 05 02 07 0f 00 40 3d 10 0a 0c 06 04 07 0f +00 40 63 08 0a 0d 18 02 07 0f 00 40 5f 08 04 04 1e 21 33 26 16 0c 04 04 00 +63 01 63 00 00 32 00 4d 20 56 6f 69 63 65 2e 2e 31 63 63 63 32 32 32 00 00 +00 40 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: M Voice..2 +** Controls: KV, MW (LFO pitch), MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 18 03 04 0f 00 05 47 04 0b 1f 18 03 04 0f 00 06 4a 04 01 0f 18 03 07 0f +00 46 60 08 0b 0f 18 03 07 0f 00 46 63 08 04 24 1d 0c 29 26 26 0c 04 04 00 +63 01 63 00 00 32 00 4d 20 56 6f 69 63 65 2e 2e 32 63 63 63 32 32 32 00 10 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: M Voice..2 +** Controls: MW (LFO pitch), MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 18 03 04 0f 00 00 47 04 0b 1f 18 03 04 0f 00 00 4a 04 01 0f 18 03 07 0f +00 40 60 08 0b 0f 18 03 07 0f 00 40 63 08 04 24 1d 0c 29 26 26 0c 04 04 00 +63 01 63 00 00 32 00 4d 20 56 6f 69 63 65 2e 2e 32 63 63 63 32 32 32 00 10 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: M Voice..3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 18 02 04 0a 00 45 5a 04 0c 12 07 0f 04 03 0a 45 2a 14 0b 09 03 0f 07 09 +00 45 58 04 0c 08 00 0f 08 0c 0a 46 5f 0a 0d 24 1e 21 21 0c 16 0c 04 04 00 +63 32 00 00 00 32 00 4d 20 56 6f 69 63 65 2e 2e 33 63 63 63 32 32 32 10 10 +2b 07 00 10 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: M Voice..3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 18 02 04 0a 00 40 5a 04 0c 12 07 0f 04 03 0a 41 2a 14 0b 09 03 0f 07 09 +00 40 58 04 0c 08 00 0f 08 0c 0a 41 5f 0a 0d 24 1e 21 21 0c 16 0c 04 04 00 +63 32 00 00 00 32 00 4d 20 56 6f 69 63 65 2e 2e 33 63 63 63 32 32 32 10 10 +2b 07 00 10 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: M Voice..4 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0c 05 07 02 03 00 06 46 04 0c 0d 0c 06 05 0f 0a 06 34 19 0c 0c 06 0f 07 0d +00 06 5c 04 0e 0a 00 0f 08 0c 0a 05 5a 04 09 54 21 14 38 00 22 0c 04 04 00 +63 32 00 00 00 32 00 4d 20 56 6f 69 63 65 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: M Voice..4 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0c 05 07 02 03 00 00 46 04 0c 0d 0c 06 05 0f 0a 00 34 19 0c 0c 06 0f 07 0d +00 00 5c 04 0e 0a 00 0f 08 0c 0a 00 5a 04 09 54 21 14 38 00 22 0c 04 04 00 +63 32 00 00 00 32 00 4d 20 56 6f 69 63 65 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Mal.Voice* +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 19 00 04 0f 13 00 4d 04 06 12 06 00 02 0f 00 00 47 04 05 0b 19 00 07 0f +00 00 63 08 00 0a 19 00 07 0f 00 00 4e 28 03 04 20 00 30 26 42 0c 02 04 00 +28 63 00 00 00 32 00 4d 61 6c 2e 56 6f 69 63 65 2a 63 63 63 32 32 32 00 00 +00 00 00 00 0c 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Male Voice +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 00 00 04 0f 2c 00 32 3f 03 0b 02 03 01 0f 0d 00 3c 10 00 0f 02 04 01 0f +23 00 3b 00 06 0e 00 01 06 0f 08 03 5f 0d 03 4b 0a 07 05 01 62 0c 05 04 00 +63 03 00 00 00 32 00 4d 61 6c 65 20 56 6f 69 63 65 63 63 63 32 32 32 00 1f +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MaleVoices +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 00 00 04 0f 2c 00 32 1c 03 0b 02 03 01 0f 0d 00 3c 05 00 0f 02 04 01 0f +23 00 3b 00 06 0e 00 01 06 0f 08 03 5f 04 03 4b 1a 00 05 01 62 11 00 04 00 +63 32 00 00 00 32 00 4d 61 6c 65 56 6f 69 63 65 73 63 63 63 32 32 32 00 11 +00 31 00 04 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + +* SUBCATEGORY Other + +** Name: Quartet..1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +05 07 00 05 0e 00 45 52 00 00 0c 07 00 05 0e 0e 45 56 08 06 0c 1f 00 06 0f +00 05 63 04 00 0c 1f 00 07 0f 0a 06 63 08 06 2c 22 0e 13 08 56 18 07 04 00 +63 63 00 00 00 32 00 51 75 61 72 74 65 74 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Quartet..1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +05 07 00 05 0e 00 41 52 00 00 0c 07 00 05 0e 0e 41 56 08 06 0c 1f 00 06 0f +00 00 63 04 00 0c 1f 00 07 0f 0a 00 63 08 06 2c 22 0e 13 08 56 18 07 04 00 +63 63 00 00 00 32 00 51 75 61 72 74 65 74 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Quartet..2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0e 07 00 05 0e 00 44 51 00 00 0e 07 00 05 0e 0e 45 55 04 06 0e 1f 00 06 0f +00 06 63 08 00 0c 1f 00 07 0f 0a 06 63 08 06 34 22 0e 13 08 56 18 07 04 00 +63 63 00 00 00 32 00 51 75 61 72 74 65 74 2e 2e 32 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Quartet..2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0e 07 00 05 0e 00 41 51 00 00 0e 07 00 05 0e 0e 41 55 04 06 0e 1f 00 06 0f +00 00 63 08 00 0c 1f 00 07 0f 0a 00 63 08 06 34 22 0e 13 08 56 18 07 04 00 +63 63 00 00 00 32 00 51 75 61 72 74 65 74 2e 2e 32 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Ensem.1 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank A, voice 7 +14 06 00 04 07 14 02 49 12 06 0e 08 02 04 09 14 02 59 13 00 0e 09 02 04 0b +00 01 63 09 06 0e 09 02 04 0a 00 01 5e 0a 00 3d 21 08 0c 00 52 05 02 04 00 +63 32 00 00 00 32 00 53 79 2e 45 6e 73 65 6d 2e 31 63 63 63 32 32 32 00 54 +00 30 00 32 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Ensem.2 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank A, voice 8 +1f 17 09 03 0c 14 02 48 3b 03 0a 04 02 05 07 14 01 63 13 06 1f 07 02 05 0b +00 01 63 13 06 0a 03 01 05 0b 00 01 63 0a 00 3e 21 0c 16 00 52 05 02 04 00 +63 32 00 00 00 32 00 53 79 2e 45 6e 73 65 6d 2e 32 63 63 63 32 32 32 00 60 +00 10 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Ensem.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 17 09 03 0c 14 02 48 3b 03 0d 04 02 05 07 14 01 63 13 06 1f 07 02 05 0b +00 01 63 13 06 0d 03 01 05 0b 00 01 63 0a 00 3e 21 0c 16 00 52 05 02 04 00 +63 32 00 00 00 32 00 53 79 2e 45 6e 73 65 6d 2e 32 63 63 63 32 32 32 00 60 +00 10 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Ensem.3 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank A, voice 9 +1f 1f 05 02 0f 27 02 50 0a 06 1f 1f 05 02 0f 00 02 43 0a 00 1a 1f 07 04 0f +00 06 56 10 06 1a 1f 07 04 0f 00 01 5e 04 00 14 63 00 0c 00 63 18 02 04 00 +28 32 00 00 00 32 00 53 79 2e 45 6e 73 65 6d 2e 33 63 63 63 32 32 32 00 00 +00 30 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Ensem.3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 05 02 0f 27 02 50 0a 06 1f 1f 05 02 0f 00 02 43 0d 00 1a 1f 07 04 0f +00 06 56 10 06 1a 1f 07 04 0f 00 01 5e 04 00 14 63 00 0c 00 63 18 02 04 00 +28 32 00 00 00 32 00 53 79 2e 45 6e 73 65 6d 2e 33 63 63 63 32 32 32 00 00 +00 30 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Ensem.4 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank A, voice 10 +08 04 00 04 0f 14 01 3e 13 06 07 07 00 04 0f 14 01 51 0a 02 10 1f 00 04 0f +14 01 63 09 04 1b 09 00 04 0b 14 01 5f 13 00 3c 1f 01 14 00 52 05 02 04 00 +63 32 00 00 00 32 00 53 79 2e 45 6e 73 65 6d 2e 34 63 63 63 32 32 32 00 00 +00 30 00 32 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Ensem.5 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank A, voice 11 +0e 02 00 01 0a 13 00 44 04 03 0b 06 00 05 0e 00 03 63 00 06 0e 06 00 05 0e +00 03 5b 08 00 0e 06 00 05 0e 00 03 63 04 00 35 1c 0b 1b 00 32 18 02 04 00 +28 63 00 00 00 32 00 53 79 2e 45 6e 73 65 6d 2e 35 63 63 63 32 32 32 00 50 +00 10 00 20 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Ensem.5 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0e 02 00 01 0d 13 00 44 04 03 0b 06 00 05 0e 00 03 63 00 06 0e 06 00 05 0e +00 03 5b 08 00 0e 06 00 05 0e 00 03 63 04 00 35 1c 0b 1b 00 32 18 02 04 00 +28 63 00 00 00 32 00 53 79 2e 45 6e 73 65 6d 2e 35 63 63 63 32 32 32 00 50 +00 10 00 20 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Voice 1 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank A, voice 27 +0c 0e 00 04 0f 0a 40 41 04 06 0a 0e 00 04 0f 0a 40 41 04 00 0a 0c 00 06 0f +0a 42 63 04 06 0a 0e 00 06 0f 0a 42 63 08 00 2c 1e 0a 50 04 4a 18 02 04 00 +28 32 00 00 00 32 00 53 79 2e 56 6f 69 63 65 20 31 63 56 63 2e 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Voice 1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0c 0e 00 04 0f 0a 40 41 04 06 0d 0e 00 04 0f 0a 40 41 04 00 0d 0c 00 06 0f +0a 42 63 04 06 0d 0e 00 06 0f 0a 42 63 08 00 2c 1e 0a 50 04 4a 18 02 04 00 +28 32 00 00 00 32 00 53 79 2e 56 6f 69 63 65 20 31 63 56 63 2e 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Voice 2 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank A, voice 28 +12 02 01 04 0f 00 00 37 04 0c 0f 02 01 02 0b 00 00 31 04 0b 0e 02 01 05 0a +0f 02 63 04 0b 0e 02 01 05 0a 0f 02 63 08 08 34 1e 12 2c 00 42 18 02 04 00 +28 32 00 00 00 32 00 53 79 2e 56 6f 69 63 65 20 32 63 3e 63 2f 32 32 00 00 +00 20 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Voice 2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +12 02 01 04 0f 00 00 37 04 0c 0f 02 01 02 0b 00 00 31 04 0b 0e 02 01 05 0d +0f 02 63 04 0b 0e 02 01 05 0d 0f 02 63 08 08 34 1e 12 2c 00 42 18 02 04 00 +28 32 00 00 00 32 00 53 79 2e 56 6f 69 63 65 20 32 63 3e 63 2f 32 32 00 00 +00 20 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Syntvoice* +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 0f 0f 00 00 00 22 03 0b 17 00 06 0f 00 01 52 04 01 0c 0d 00 07 0b +00 02 42 08 06 11 0f 00 07 0f 00 01 63 04 03 3b 1e 0b 21 00 42 18 02 04 00 +28 63 00 00 00 32 00 53 79 6e 74 76 6f 69 63 65 2a 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: VocalNuts +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank D, voice 2 +1f 00 00 04 0f 00 40 47 2f 00 0e 08 07 07 0f 05 00 4c 00 06 13 1c 0d 0c 06 +08 00 63 05 06 14 11 0d 0b 00 00 03 63 04 00 7a 10 00 51 00 68 17 00 04 00 +63 32 00 00 00 32 00 56 6f 63 61 6c 4e 75 74 73 20 63 63 63 32 32 32 06 30 +00 30 00 01 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: > Voices < +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 0e 00 07 0f 63 03 45 04 04 0a 1f 00 03 0f 00 01 42 04 04 09 1f 00 07 0f +00 06 44 1f 02 08 0e 00 06 0f 00 46 63 04 05 3c 23 2a 23 00 36 18 02 04 00 +28 41 00 00 00 32 00 3e 20 56 6f 69 63 65 73 20 3c 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: > Voices < +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 0e 00 07 0f 63 00 45 04 04 0a 1f 00 03 0f 00 00 42 04 04 09 1f 00 07 0f +00 00 44 1f 02 08 0e 00 06 0f 00 40 63 04 05 3c 23 2a 23 00 36 18 02 04 00 +28 41 00 00 00 32 00 3e 20 56 6f 69 63 65 73 20 3c 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Voices +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank B, voice 27 +1f 00 00 04 0f 00 00 39 20 03 0b 02 03 01 0f 05 00 40 05 00 0f 02 04 01 0f +08 00 35 03 06 0e 00 01 06 0f 00 03 63 04 03 7b 1a 00 05 01 62 11 00 04 00 +63 32 00 00 00 32 00 56 6f 69 63 65 73 20 20 20 20 63 63 63 32 32 32 00 01 +00 01 00 06 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Whisper +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0e 00 01 0e 00 40 5c 39 00 0b 08 00 04 0d 26 02 63 05 04 10 0a 00 06 0c +00 03 41 3e 06 0b 08 00 04 0d 00 02 61 03 08 3e 4f 00 44 63 30 11 04 04 00 +63 15 00 00 00 32 00 57 68 69 73 70 65 72 20 20 20 63 63 63 32 32 32 00 2f +00 31 00 60 00 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Wind Voice +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank D, voice 24 +06 1d 01 02 0f 00 01 06 17 00 00 00 0c 02 0f 2e 01 53 19 0e 17 01 00 02 0a +00 02 4b 08 08 0b 01 06 05 0f 01 02 5c 08 0e 01 63 00 52 00 53 18 07 04 00 +63 63 00 00 00 32 00 57 69 6e 64 20 56 6f 69 63 65 63 63 63 32 32 32 00 34 +00 70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +--Bank 22 + +* CATEGORY PERCUSSION + + +* SUBCATEGORY Bell + + +** Name: Agogo * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 07 0f 00 01 49 08 06 1f 1f 00 07 0f 00 00 41 0c 00 1a 0f 00 07 00 +00 02 63 04 06 1a 0f 00 07 00 00 03 63 04 00 44 12 00 00 00 32 24 02 04 00 +28 63 00 00 00 32 00 41 67 6f 67 6f 20 20 20 20 2a 63 63 63 32 32 32 00 4f +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Agogo Bell +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank D, voice 11 +1f 12 19 03 0c 06 02 57 16 0c 1f 13 19 04 0c 11 02 59 3c 09 1f 11 10 06 0e +00 01 63 08 0a 1f 11 0f 06 0a 00 02 63 08 0a 7c 13 00 06 00 62 18 04 04 00 +63 32 00 00 00 32 00 41 67 6f 67 6f 20 42 65 6c 6c 63 63 63 32 32 32 00 20 +0a 1d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Agogo Bell +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 12 19 03 0c 06 02 57 16 0c 1f 13 19 04 0c 11 02 59 3c 09 1f 11 10 06 0e +00 01 63 08 0d 1f 11 0f 06 0d 00 02 63 08 0a 7c 13 00 06 00 62 18 04 04 00 +63 32 00 00 00 32 00 41 67 6f 67 6f 20 42 65 6c 6c 63 63 63 32 32 32 00 20 +0d 1d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Analobell* +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +17 0a 00 04 00 38 00 54 10 0d 1f 03 08 03 00 4c 00 51 09 08 17 06 08 03 00 +14 05 63 10 0b 1d 0a 08 03 00 0e 02 63 0a 0e 04 23 00 00 00 32 02 02 04 00 +28 63 00 00 00 32 00 41 6e 61 6c 6f 62 65 6c 6c 2a 63 63 63 32 32 32 00 04 +00 18 00 04 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bangkok +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +19 1a 00 05 07 00 01 58 09 08 1e 10 00 03 04 00 03 57 08 15 1c 08 05 05 0b +00 00 62 04 0e 1a 0c 05 04 04 00 00 60 0a 00 0c 1e 00 00 00 42 1a 03 04 00 +63 32 26 2a 00 32 00 42 61 6e 67 6b 6f 6b 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bass Bells +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 05 00 02 07 00 01 50 00 1b 1f 10 0c 03 0f 00 01 4e 10 0b 1f 0b 00 05 0e +00 05 62 04 03 1b 0f 0c 03 0f 00 05 4f 04 0c 2c 18 00 00 00 22 0c 04 04 00 +28 32 00 00 00 32 00 42 61 73 73 20 42 65 6c 6c 73 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bass Bells +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 05 00 02 07 00 00 50 00 1b 1f 10 0c 03 0f 00 00 4e 10 0b 1f 0b 00 05 0e +00 00 62 04 03 1b 0f 0c 03 0f 00 00 4f 04 0c 2c 18 00 00 00 22 0c 04 04 00 +28 32 00 00 00 32 00 42 61 73 73 20 42 65 6c 6c 73 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bell +** Controls: KV +** Source: Yamaha DX11 factory preset, bank B, voice 31 +1f 16 07 03 0a 00 01 4c 16 06 1f 10 0a 04 08 00 01 44 0a 00 19 09 00 04 00 +00 03 60 04 06 18 09 00 06 00 00 02 5f 00 00 3c 1e 00 00 00 52 18 02 04 00 +28 32 00 00 00 32 00 42 65 6c 6c 20 20 20 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bell +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 16 07 03 0a 00 01 4c 16 06 1f 10 0a 04 08 00 01 44 0d 00 19 09 00 04 00 +00 03 60 04 06 18 09 00 06 00 00 02 5f 00 00 3c 1e 00 00 00 52 18 02 04 00 +28 32 00 00 00 32 00 42 65 6c 6c 20 20 20 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bell Ensem +** Controls: KV +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +1f 05 00 04 04 50 04 51 20 0e 1e 0a 01 04 02 50 04 53 1f 08 1e 1d 0a 04 0f +00 02 5c 05 0e 1f 1f 0a 04 0f 00 03 5c 04 08 04 1a 00 00 00 52 1d 02 04 00 +63 32 00 32 00 32 00 42 65 6c 6c 20 45 6e 73 65 6d 63 63 63 32 32 32 00 30 +00 46 00 01 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bell Pad +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank C, voice 30 +12 0b 0f 04 07 00 40 43 1c 00 1f 08 07 07 0f 05 00 63 05 00 0e 07 02 07 0f +08 03 5c 00 06 15 08 04 05 0f 00 03 63 03 06 7e 1f 00 06 00 4a 1d 02 04 00 +63 32 00 00 00 32 00 42 65 6c 6c 20 50 61 64 20 20 63 63 63 32 32 32 06 30 +00 51 00 04 00 56 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bell.....1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1d 04 01 02 0d 00 01 52 0d 03 1b 0f 00 03 0e 58 04 57 0d 08 1d 0f 03 03 0e +57 05 63 08 03 1e 02 03 03 0e 00 03 63 08 0e 34 0c 00 06 00 42 00 02 04 00 +63 11 06 00 00 32 00 42 65 6c 6c 2e 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 20 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bell.....1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 04 01 02 0d 00 01 52 0d 03 1b 0f 00 03 0e 58 02 57 0d 08 1d 0f 03 03 0e +57 01 63 08 03 1e 02 03 03 0e 00 00 63 08 0e 34 0c 00 06 00 42 00 02 04 00 +63 11 06 00 00 32 00 42 65 6c 6c 2e 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 20 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bell.....2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 04 00 05 00 62 04 38 2a 16 1f 07 00 04 01 00 02 4a 2a 00 1f 07 00 05 00 +00 06 63 04 0b 1f 08 00 05 00 00 05 60 0d 08 3c 14 00 00 00 62 0c 02 04 00 +63 32 00 32 00 32 00 42 65 6c 6c 2e 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bell.....2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 04 00 05 00 62 01 38 2a 16 1f 07 00 04 01 00 01 4a 2a 00 1f 07 00 05 00 +00 00 63 04 0b 1f 08 00 05 00 00 00 60 0d 08 3c 14 00 00 00 62 0c 02 04 00 +63 32 00 32 00 32 00 42 65 6c 6c 2e 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 10 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bell.....3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1a 04 01 01 0b 16 02 4e 05 03 15 0e 00 01 0d 00 03 54 10 16 1c 06 04 02 07 +00 04 63 08 16 18 18 03 01 0e 00 04 62 04 10 24 09 00 04 00 42 24 04 04 00 +28 32 00 00 00 32 00 42 65 6c 6c 2e 2e 2e 2e 2e 33 63 63 63 32 32 32 00 30 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bell.....3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1a 04 01 01 0b 16 01 4e 05 03 15 0e 00 01 0d 00 01 54 10 16 1c 06 04 02 07 +00 00 63 08 16 18 18 03 01 0e 00 01 62 04 10 24 09 00 04 00 42 24 04 04 00 +28 32 00 00 00 32 00 42 65 6c 6c 2e 2e 2e 2e 2e 33 63 63 63 32 32 32 00 30 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bell.....4 +** Controls: KV, MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +19 0a 17 05 01 00 02 4e 2d 06 19 0a 1f 03 02 00 03 41 2d 04 19 07 12 04 07 +13 05 63 0a 06 19 07 0f 03 07 13 47 63 0a 03 7c 14 0a 00 39 06 0c 02 04 00 +63 15 27 00 00 32 00 42 65 6c 6c 2e 2e 2e 2e 2e 34 63 63 63 32 32 32 00 00 +00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bell.....4 +** Controls: KV, MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +19 0a 17 05 01 00 01 4e 2d 06 19 0a 1f 03 02 00 01 41 2d 04 19 07 12 04 07 +13 01 63 0a 06 19 07 0f 03 07 13 40 63 0a 03 7c 14 0a 00 39 06 0c 02 04 00 +63 15 27 00 00 32 00 42 65 6c 6c 2e 2e 2e 2e 2e 34 63 63 63 32 32 32 00 00 +00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bell.....5 +** Controls: KV, MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +19 0a 02 03 01 00 04 51 2d 06 19 0a 1f 05 02 00 03 48 08 04 19 07 12 04 07 +13 06 62 0d 06 19 07 07 04 07 13 45 63 04 03 76 14 0a 00 39 06 0c 02 04 00 +63 15 27 00 00 32 00 42 65 6c 6c 2e 2e 2e 2e 2e 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bell.....5 +** Controls: KV, MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +19 0a 02 03 01 00 01 51 2d 06 19 0a 1f 05 02 00 01 48 08 04 19 07 12 04 07 +13 01 62 0d 06 19 07 07 04 07 13 40 63 04 03 76 14 0a 00 39 06 0c 02 04 00 +63 15 27 00 00 32 00 42 65 6c 6c 2e 2e 2e 2e 2e 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bell.....6 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1a 0e 04 00 00 05 4e 2d 13 1f 0a 00 05 00 00 04 49 08 0b 1f 1f 00 04 0f +00 05 49 0d 0b 1f 06 00 04 00 00 06 63 04 03 41 23 00 00 00 62 18 04 04 00 +28 32 00 00 00 32 00 42 65 6c 6c 2e 2e 2e 2e 2e 36 63 63 63 32 32 32 00 00 +00 00 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bell.....6 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1a 0e 04 00 00 01 4e 2d 13 1f 0a 00 05 00 00 01 49 08 0b 1f 1f 00 04 0f +00 01 49 0d 0b 1f 06 00 04 00 00 00 63 04 03 41 23 00 00 00 62 18 04 04 00 +28 32 00 00 00 32 00 42 65 6c 6c 2e 2e 2e 2e 2e 36 63 63 63 32 32 32 00 00 +00 00 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bell.....7 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1a 0e 04 00 00 04 4e 28 03 1f 0a 00 05 00 00 04 49 16 03 1f 1f 00 04 0f +00 04 49 16 03 1f 06 00 06 00 00 06 63 04 03 42 23 00 00 00 62 18 04 04 00 +28 32 00 00 00 32 00 42 65 6c 6c 2e 2e 2e 2e 2e 37 63 63 63 32 32 32 00 00 +00 00 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bell.....7 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1a 0e 04 00 00 01 4e 28 03 1f 0a 00 05 00 00 02 49 16 03 1f 1f 00 04 0f +00 01 49 16 03 1f 06 00 06 00 00 00 63 04 03 42 23 00 00 00 62 18 04 04 00 +28 32 00 00 00 32 00 42 65 6c 6c 2e 2e 2e 2e 2e 37 63 63 63 32 32 32 00 00 +00 00 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bell.....8 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0d 1f 04 00 00 05 4b 19 03 1f 00 00 02 0f 00 04 4d 16 1b 1f 0d 1f 04 00 +00 06 63 04 03 1f 0a 07 04 00 00 05 63 04 03 7c 5c 00 01 63 32 18 04 04 00 +28 32 00 00 00 32 00 42 65 6c 6c 2e 2e 2e 2e 2e 38 63 63 63 32 32 32 00 00 +00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bell.....8 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0d 1f 04 00 00 01 4b 19 03 1f 00 00 02 0f 00 01 4d 16 1b 1f 0d 1f 04 00 +00 01 63 04 03 1f 0a 07 04 00 00 01 63 04 03 7c 5c 00 01 63 32 18 04 04 00 +28 32 00 00 00 32 00 42 65 6c 6c 2e 2e 2e 2e 2e 38 63 63 63 32 32 32 00 00 +00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bell.....9 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 15 09 03 0a 00 03 63 34 13 12 1f 0a 05 0f 00 43 63 0d 03 12 1f 0a 05 0f +00 45 63 19 03 12 08 0a 05 0f 00 46 63 04 03 45 1a 00 00 39 66 18 04 04 00 +28 32 00 00 00 32 00 42 65 6c 6c 2e 2e 2e 2e 2e 39 63 63 63 32 32 32 00 00 +00 00 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bell.....9 +** Source: from a library of patches collected by Duane Bowker, author unknown +18 15 09 03 0a 00 00 63 34 13 12 1f 0a 05 0f 00 40 63 0d 03 12 1f 0a 05 0f +00 40 63 19 03 12 08 0a 05 0f 00 40 63 04 03 45 1a 00 00 39 66 18 04 04 00 +28 32 00 00 00 32 00 42 65 6c 6c 2e 2e 2e 2e 2e 39 63 63 63 32 32 32 00 00 +00 00 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bell....10 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0d 06 04 0a 00 04 3f 24 13 1f 0c 06 03 0f 00 04 3f 16 03 1f 06 07 03 0c +00 45 48 0d 03 18 04 09 04 0c 00 06 63 08 03 43 1a 00 00 1c 66 18 04 04 00 +28 32 00 00 00 32 00 42 65 6c 6c 2e 2e 2e 2e 31 30 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bell....10 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0d 06 04 0a 00 01 3f 24 13 1f 0c 06 03 0f 00 01 3f 16 03 1f 06 07 03 0c +00 41 48 0d 03 18 04 09 04 0c 00 01 63 08 03 43 1a 00 00 1c 66 18 04 04 00 +28 32 00 00 00 32 00 42 65 6c 6c 2e 2e 2e 2e 31 30 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bell....11 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 05 0e 04 0f 00 02 48 1c 03 1f 0b 00 05 0a 00 04 5c 24 1b 1f 08 00 04 0a +00 05 5d 08 03 1f 10 00 04 0b 00 05 63 08 03 7e 23 00 00 00 62 18 04 04 00 +28 32 00 00 00 32 00 42 65 6c 6c 2e 2e 2e 2e 31 31 63 63 63 32 32 32 00 00 +00 10 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bell....11 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 05 0e 04 0f 00 02 48 1c 03 1f 0b 00 05 0a 00 00 5c 24 1b 1f 08 00 04 0a +00 00 5d 08 03 1f 10 00 04 0b 00 00 63 08 03 7e 23 00 00 00 62 18 04 04 00 +28 32 00 00 00 32 00 42 65 6c 6c 2e 2e 2e 2e 31 31 63 63 63 32 32 32 00 00 +00 10 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BelleBell* +** Controls: KV, MW (LFO pitch), BC (voice pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1a 08 06 02 0d 16 02 5c 07 0e 18 08 06 02 0d 15 02 5b 08 08 1f 0a 08 03 0e +0d 01 61 00 00 1c 0a 08 04 0e 0b 01 63 00 06 04 19 00 24 00 32 1d 01 04 00 +28 63 00 00 00 30 00 42 65 6c 6c 65 42 65 6c 6c 2a 63 63 63 32 32 32 00 09 +00 0b 00 04 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bells +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0c 0d 04 05 00 00 57 11 03 1f 0c 0d 04 05 00 40 5f 04 03 1f 0c 0d 04 05 +00 38 61 36 03 1f 0c 0d 04 05 00 00 63 14 03 47 1d 00 03 13 5e 30 04 04 00 +63 32 00 00 00 32 00 42 65 6c 6c 73 20 20 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BellyStuff +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 0b 0f 04 07 00 40 43 1c 00 13 0c 07 07 0b 05 00 58 05 00 1f 07 02 07 0f +08 03 5c 00 06 13 0c 04 05 0a 00 03 57 03 06 7e 1f 00 06 00 4a 1d 02 04 00 +63 32 00 00 00 32 00 42 65 6c 6c 79 53 74 75 66 66 63 63 63 32 32 32 06 70 +00 61 00 04 00 66 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Big Bell.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1d 04 01 02 0d 00 03 51 0c 03 1b 0f 00 03 0e 58 03 55 1a 08 1d 0f 03 03 0e +57 07 63 00 03 1e 02 03 03 0e 00 06 63 04 0e 74 0c 00 06 00 63 00 02 04 00 +63 11 06 00 00 32 00 42 69 67 20 42 65 6c 6c 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Big Bell.1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 04 01 02 0d 00 01 51 0c 03 1b 0f 00 03 0e 58 03 55 1a 08 1d 0f 03 03 0e +57 04 63 00 03 1e 02 03 03 0e 00 00 63 04 0e 74 0c 00 06 00 63 00 02 04 00 +63 11 06 00 00 32 00 42 69 67 20 42 65 6c 6c 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Big Bell.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1d 04 01 02 0d 00 04 52 15 03 1b 0f 00 03 0e 58 04 57 12 08 1d 0f 03 03 0e +57 05 63 0d 03 1e 02 03 03 0e 00 05 63 04 0e 74 0c 00 06 00 63 00 02 04 00 +63 11 06 00 00 32 00 42 69 67 20 42 65 6c 6c 2e 32 63 63 63 32 32 32 00 20 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Big Bell.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 04 01 02 0d 00 01 52 15 03 1b 0f 00 03 0e 58 02 57 12 08 1d 0f 03 03 0e +57 02 63 0d 03 1e 02 03 03 0e 00 00 63 04 0e 74 0c 00 06 00 63 00 02 04 00 +63 11 06 00 00 32 00 42 69 67 20 42 65 6c 6c 2e 32 63 63 63 32 32 32 00 20 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Big Bell.3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1d 04 01 02 0d 00 01 51 18 03 1b 0f 00 03 0e 58 03 5a 00 08 1d 0f 03 03 0e +57 06 63 08 03 1e 02 03 03 0e 00 05 63 00 0e 74 0c 00 06 00 63 00 02 04 00 +63 11 06 00 00 32 00 42 69 67 20 42 65 6c 6c 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Big Bell.3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 04 01 02 0d 00 01 51 18 03 1b 0f 00 03 0e 58 03 5a 00 08 1d 0f 03 03 0e +57 04 63 08 03 1e 02 03 03 0e 00 00 63 00 0e 74 0c 00 06 00 63 00 02 04 00 +63 11 06 00 00 32 00 42 69 67 20 42 65 6c 6c 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BowedBell +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank D, voice 6 +0b 04 05 04 0f 00 42 55 22 06 0a 07 04 04 0f 00 02 47 0a 00 0b 1f 02 04 0f +00 02 63 0d 06 0b 1f 02 05 0f 00 02 62 04 00 1c 1e 06 11 09 5a 0c 04 04 00 +63 28 00 00 00 32 00 42 6f 77 65 64 42 65 6c 6c 20 63 63 63 32 32 32 00 10 +00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BrightBell +** Controls: KV +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +1f 0e 05 02 0d 27 02 63 16 06 1f 0e 05 02 0e 1a 02 58 16 00 1a 1f 07 04 0f +00 06 60 08 0e 1a 1f 07 04 0f 00 01 5e 08 08 14 1a 00 00 00 52 18 02 04 00 +28 32 00 00 00 32 00 42 72 69 67 68 74 42 65 6c 6c 63 63 63 32 32 32 00 30 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Brthbells +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank D, voice 16 +1c 08 00 03 0e 00 01 55 12 03 1c 07 00 01 0e 2e 01 58 27 0b 0e 04 00 02 0a +00 02 63 04 0a 0d 09 00 02 0c 01 02 63 10 0b 04 54 00 47 00 53 18 07 04 00 +63 32 00 00 00 32 00 42 72 74 68 62 65 6c 6c 73 20 63 63 63 32 32 32 00 04 +00 40 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Carnival! +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: Yamaha DX11 factory preset, bank D, voice 19 +1f 1f 01 0f 0f 22 00 2f 04 08 18 10 1c 0e 01 24 40 40 05 06 1f 04 10 0f 0b +2c 00 2b 00 00 17 1f 09 08 0f 00 00 54 04 0e 3a 63 3f 31 2c 5e 0c 07 04 00 +63 63 00 32 00 32 00 43 61 72 6e 69 76 61 6c 21 20 63 63 63 32 32 32 00 00 +00 10 00 07 00 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ChurchBell +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 09 1f 03 04 00 01 5b 3d 03 1c 09 1f 04 04 00 04 53 05 00 1c 09 1f 04 04 +00 07 5a 04 03 1c 09 1f 03 04 00 07 63 04 03 2c 19 2a 0e 00 10 18 04 04 00 +28 32 00 00 00 32 00 43 68 75 72 63 68 42 65 6c 6c 63 63 63 32 32 32 08 00 +00 00 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ChurchBell +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 09 1f 03 04 00 01 5b 3d 03 1c 09 1f 04 04 00 01 53 05 00 1c 09 1f 04 04 +00 00 5a 04 03 1c 09 1f 03 04 00 00 63 04 03 2c 19 2a 0e 00 10 18 04 04 00 +28 32 00 00 00 32 00 43 68 75 72 63 68 42 65 6c 6c 63 63 63 32 32 32 08 00 +00 00 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ClickChime +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +19 16 00 03 07 00 01 43 00 03 18 18 03 03 03 22 00 60 00 0c 16 07 06 03 06 +00 01 3c 08 03 1a 05 07 03 00 00 01 63 04 0b 39 23 00 08 00 42 18 04 04 00 +63 32 00 00 00 32 00 43 6c 69 63 6b 43 68 69 6d 65 63 63 63 32 32 32 00 31 +00 03 00 11 00 01 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Cloches * +** Source: from a library of patches collected by Rod Lemcke, author unknown +1e 04 1f 04 00 00 00 4b 0f 0a 1f 05 1b 04 00 00 00 49 10 0c 1e 09 16 03 00 +00 00 63 03 08 1f 09 0a 03 00 00 00 63 04 0e 04 23 00 00 00 62 11 02 04 00 +28 32 00 00 00 32 00 43 6c 6f 63 68 65 73 20 20 2a 63 63 63 32 32 32 00 06 +00 04 00 06 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Cow Bell +** Source: Yamaha DX11 factory preset, bank D, voice 10 +1f 0a 1f 03 0c 00 00 43 20 03 1f 16 00 04 0b 00 00 4f 24 03 1f 12 10 08 07 +00 00 5f 34 03 1f 12 12 08 0f 00 00 63 38 03 3c 23 00 00 00 62 18 04 04 00 +28 32 00 00 00 32 00 43 6f 77 20 42 65 6c 6c 20 20 63 63 63 32 32 32 0b 07 +0c 04 0b 0e 09 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Cow-Belle* +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 17 1f 09 00 00 00 51 38 03 1f 14 1f 0a 00 00 00 47 10 03 1a 0e 1f 09 00 +00 03 63 04 13 1a 10 1f 08 00 00 02 63 04 0b 04 23 00 00 00 62 18 01 04 00 +28 32 00 00 00 32 00 43 6f 77 2d 42 65 6c 6c 65 2a 63 63 63 32 32 32 0b 23 +00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Gong.....1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 07 06 05 02 1f 04 41 04 0b 1f 1f 04 04 0f 00 05 4a 1c 0b 16 07 06 05 02 +1f 06 51 0c 0b 1f 1f 04 04 0f 00 06 63 04 0b 6a 23 00 00 00 52 0c 04 04 00 +63 32 00 00 00 32 00 47 6f 6e 67 2e 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Gong.....1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +16 07 06 05 02 1f 01 41 04 0b 1f 1f 04 04 0f 00 01 4a 1c 0b 16 07 06 05 02 +1f 01 51 0c 0b 1f 1f 04 04 0f 00 00 63 04 0b 6a 23 00 00 00 52 0c 04 04 00 +63 32 00 00 00 32 00 47 6f 6e 67 2e 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Gong.....2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +02 0c 06 03 0c 1f 05 3b 2b 0b 0c 09 0e 03 03 00 03 4d 1c 0b 18 09 07 03 03 +1f 07 50 0c 0b 18 09 05 06 0e 00 45 63 04 0b 72 19 00 00 40 56 0c 04 04 00 +63 32 00 00 00 32 00 47 6f 6e 67 2e 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Gong.....2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +02 0c 06 03 0c 1f 01 3b 2b 0b 0c 09 0e 03 03 00 01 4d 1c 0b 18 09 07 03 03 +1f 01 50 0c 0b 18 09 05 06 0e 00 40 63 04 0b 72 19 00 00 40 56 0c 04 04 00 +63 32 00 00 00 32 00 47 6f 6e 67 2e 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Gong.....3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +19 1f 02 02 0f 1f 04 35 03 0b 07 1f 02 02 0f 00 04 46 02 0b 13 1f 02 02 0f +1f 06 4a 03 0b 1f 1f 03 03 0e 00 45 63 00 0b 72 0b 00 0d 40 66 0c 04 04 00 +63 32 00 00 00 32 00 47 6f 6e 67 2e 2e 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Gong.....3 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +19 1f 02 02 0f 1f 00 35 03 0b 07 1f 02 02 0f 00 00 46 02 0b 13 1f 02 02 0f +1f 00 4a 03 0b 1f 1f 03 03 0e 00 40 63 00 0b 72 0b 00 0d 40 56 0c 04 04 00 +63 32 00 00 00 32 00 47 6f 6e 67 2e 2e 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Gong Ageng +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0b 04 01 01 0b 16 04 43 05 03 07 04 00 01 0d 00 04 47 05 16 10 06 04 02 07 +00 03 63 04 16 18 18 03 01 0e 00 03 5e 04 10 04 52 00 07 00 62 18 04 04 00 +28 32 00 00 00 32 00 47 6f 6e 67 20 41 67 65 6e 67 63 63 63 32 32 32 00 0a +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Gongs * +** Controls: KV, MW (LFO pitch), BC (voice pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 04 0f 00 03 53 05 0b 1f 1f 00 03 0f 00 00 55 01 0b 1f 0d 00 02 0a +00 01 45 0a 0b 16 09 0f 03 0e 00 02 5a 00 0b 6b 63 20 50 00 73 18 03 04 00 +28 63 00 00 00 29 00 47 6f 6e 67 73 20 20 20 20 2a 63 63 63 32 32 32 00 70 +00 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: HiTine81Z +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank A, voice 10 +1f 0d 09 0f 0c 27 02 3d 35 10 1f 12 02 04 0e 19 04 56 05 16 1f 0c 08 0d 0c +00 43 60 04 0e 1f 08 04 07 0e 00 43 63 05 10 3c 14 08 02 1b 56 11 02 04 00 +63 32 00 00 00 32 00 48 69 54 69 6e 65 38 31 5a 20 63 63 63 32 32 32 00 7f +00 01 00 18 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: HumorBells +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0c 06 0a 04 0d 00 03 44 16 03 1f 06 06 04 0d 00 04 56 19 0b 13 06 06 05 0d +00 06 62 04 0b 1f 06 06 04 0d 00 05 57 04 0a 7d 24 23 00 00 02 0c 02 04 00 +63 63 00 00 00 32 00 48 75 6d 6f 72 42 65 6c 6c 73 63 63 63 32 32 32 00 10 +00 20 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: HumorBells +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +0c 06 0a 04 0d 00 01 44 16 03 1f 06 06 04 0d 00 00 56 19 0b 13 06 06 05 0d +00 00 62 04 0b 1f 06 06 04 0d 00 00 57 04 0a 7d 24 23 00 00 02 0c 02 04 00 +63 63 00 00 00 32 00 48 75 6d 6f 72 42 65 6c 6c 73 63 63 63 32 32 32 00 10 +00 20 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: KeyBell +** Controls: KV, MW (LFO pitch), MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0e 0d 04 09 00 43 3f 2d 06 1f 0e 0d 04 09 00 43 3f 2d 00 1f 09 08 04 0d +00 04 5f 05 0e 1f 09 08 04 0d 00 04 63 04 08 04 1f 0b 04 1a 5d 1d 02 04 00 +63 0a 50 00 00 32 00 4b 65 79 42 65 6c 6c 20 20 20 63 63 63 32 32 32 00 70 +00 60 00 01 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Large Ben +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1d 04 01 02 0d 00 04 54 0c 03 1b 0f 00 03 0e 58 06 63 1f 08 1d 0f 03 03 0e +57 06 63 0c 03 1e 02 03 03 0e 00 05 63 05 0e 74 0c 00 06 00 63 00 02 04 00 +63 11 06 00 00 32 00 4c 61 72 67 65 20 42 65 6e 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Large Ben +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 04 01 02 0d 00 01 54 0c 03 1b 0f 00 03 0e 58 03 63 1f 08 1d 0f 03 03 0e +57 04 63 0c 03 1e 02 03 03 0e 00 00 63 05 0e 74 0c 00 06 00 63 00 02 04 00 +63 11 06 00 00 32 00 4c 61 72 67 65 20 42 65 6e 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: LastTwango +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1d 0a 07 08 03 00 03 58 16 03 13 1c 09 04 09 00 03 63 00 1b 16 0c 02 08 04 +00 04 63 00 1b 13 09 06 09 0e 00 05 63 0d 1b 12 23 00 00 00 02 18 04 04 00 +63 01 63 00 00 32 00 4c 61 73 74 54 77 61 6e 67 6f 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: LastTwango +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 0a 07 08 03 00 00 58 16 03 13 1c 09 04 09 00 00 63 00 1b 16 0c 02 08 04 +00 00 63 00 1b 13 09 06 09 0e 00 00 63 0d 1b 12 23 00 00 00 02 18 04 04 00 +63 01 63 00 00 32 00 4c 61 73 74 54 77 61 6e 67 6f 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + +--Bank 23 + +** Name: LoTine81Z +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank A, voice 9 +1f 09 09 0f 0c 27 02 35 37 10 1f 04 03 04 0d 19 04 56 05 16 1f 0f 08 0d 0c +00 43 60 04 0e 1f 0c 03 07 0e 00 43 63 05 10 3c 14 08 02 1b 56 05 02 04 00 +63 32 00 00 00 32 00 4c 6f 54 69 6e 65 38 31 5a 20 63 63 63 32 32 32 00 7f +00 01 00 18 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MellowSqar +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank C, voice 23 +1f 06 00 03 0f 00 02 4f 09 00 1f 0e 00 03 0f 00 02 55 0a 06 15 12 00 07 0f +00 01 63 05 06 14 0e 00 07 0f 00 01 63 04 00 34 20 00 00 00 52 05 07 0c 00 +63 32 00 00 00 32 00 4d 65 6c 6c 6f 77 53 71 61 72 63 63 63 32 32 32 00 02 +00 00 00 01 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Moooo Bell +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 10 12 06 05 00 03 4a 05 13 1f 10 12 06 05 00 05 47 0d 03 1f 10 12 06 05 +00 05 63 08 03 1f 10 12 08 05 00 06 63 0a 03 2c 23 00 00 00 62 18 05 04 00 +63 32 00 00 00 32 00 4d 6f 6f 6f 6f 20 42 65 6c 6c 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Moooo Bell +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 10 12 06 05 00 00 4a 05 13 1f 10 12 06 05 00 00 47 0d 03 1f 10 12 06 05 +00 00 63 08 03 1f 10 12 08 05 00 00 63 0a 03 2c 23 00 00 00 62 18 05 04 00 +63 32 00 00 00 32 00 4d 6f 6f 6f 6f 20 42 65 6c 6c 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Mr.Rogers +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 0f 00 06 01 06 04 50 18 0b 1f 0d 00 06 01 03 04 4f 1b 09 1f 0a 00 05 01 +00 02 63 04 0e 1f 0c 06 04 0b 00 03 63 04 00 04 19 00 00 00 52 23 02 04 00 +63 32 00 32 00 32 00 4d 72 2e 52 6f 67 65 72 73 20 63 63 63 32 32 32 00 00 +00 13 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OhMy!Bells +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 03 0f 00 40 49 10 08 1f 1f 00 03 0f 00 40 49 10 0e 11 1f 05 03 0f +63 00 63 13 10 11 1f 05 03 0f 63 00 63 13 16 04 0c 00 00 0f 00 0c 02 04 00 +63 32 00 00 00 32 00 4f 68 4d 79 21 42 65 6c 6c 73 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntCowBel +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 10 12 06 05 00 02 4f 17 13 1f 10 12 06 05 00 02 46 08 03 1f 10 12 06 05 +00 05 49 04 03 1f 10 12 08 05 00 04 63 04 03 28 23 00 00 00 62 18 05 04 00 +63 32 00 00 00 32 00 4f 72 6e 74 43 6f 77 42 65 6c 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntCowBel +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 10 12 06 05 00 00 4f 17 13 1f 10 12 06 05 00 00 46 08 03 1f 10 12 06 05 +00 00 49 04 03 1f 10 12 08 05 00 00 63 04 03 28 23 00 00 00 62 18 05 04 00 +63 32 00 00 00 32 00 4f 72 6e 74 43 6f 77 42 65 6c 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PluckBell +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 07 04 0d 00 43 63 35 08 1f 16 0f 07 0e 00 04 63 00 0e 1f 1f 0f 07 0e +00 05 63 10 0e 1f 16 0a 06 0e 00 03 63 00 08 04 43 00 04 29 6f 18 04 04 00 +63 00 00 00 00 32 00 50 6c 75 63 6b 42 65 6c 6c 20 63 63 63 32 32 32 26 60 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SpaceBell1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 00 03 03 0f 0a 03 63 0d 03 1f 11 0c 04 0f 00 05 55 08 0b 1f 00 00 04 0f +00 05 51 08 13 09 0d 09 06 0f 00 06 63 08 0b 46 1f 00 0e 00 02 00 02 04 00 +28 02 00 00 00 32 00 53 70 61 63 65 42 65 6c 6c 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SpaceBell1 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 00 03 03 0f 0a 00 63 0d 03 1f 11 0c 04 0f 00 00 55 08 0b 1f 00 00 04 0f +00 00 51 08 13 09 0d 09 06 0f 00 00 63 08 0b 46 1f 00 0e 00 02 00 02 04 00 +28 02 00 00 00 32 00 53 70 61 63 65 42 65 6c 6c 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SpaceBell2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0f 07 01 09 0a 43 55 04 03 19 1f 0a 06 0f 00 44 63 3d 0b 1f 1f 0a 06 0f +00 45 63 38 13 18 0f 0a 06 0f 00 45 63 2a 0b 65 16 00 09 04 36 00 02 04 00 +28 02 00 00 00 32 00 53 70 61 63 65 42 65 6c 6c 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SpaceBell2 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0f 07 01 09 0a 40 55 04 03 19 1f 0a 06 0f 00 40 63 3d 0b 1f 1f 0a 06 0f +00 40 63 38 13 18 0f 0a 06 0f 00 40 63 2a 0b 65 16 00 09 04 36 00 02 04 00 +28 02 00 00 00 32 00 53 70 61 63 65 42 65 6c 6c 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SpaceBell2 +** Controls: MW (LFO pitch) +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +1f 0f 07 00 09 0a 40 55 04 03 19 1f 0a 06 0f 00 40 63 3d 0b 1f 1f 0a 06 0f +00 40 63 38 13 18 0f 0a 06 0f 00 40 63 2a 0b 65 16 00 09 04 36 00 02 04 00 +28 02 00 00 00 32 00 53 70 61 63 65 42 65 6c 6c 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SundayBell +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1a 04 01 01 0b 16 04 4f 22 01 15 0e 00 01 0d 00 06 53 05 13 1c 06 04 02 07 +00 06 63 16 11 18 18 03 01 0e 00 05 5e 04 12 24 07 00 04 00 62 0c 04 04 00 +28 32 00 00 00 32 00 53 75 6e 64 61 79 42 65 6c 6c 63 63 63 32 32 32 00 00 +00 00 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SundayBell +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1a 04 01 01 0b 16 01 4f 22 01 15 0e 00 01 0d 00 01 53 05 13 1c 06 04 02 07 +00 01 63 16 11 18 18 03 01 0e 00 00 5e 04 12 24 07 00 04 00 62 0c 04 04 00 +28 32 00 00 00 32 00 53 75 6e 64 61 79 42 65 6c 6c 63 63 63 32 32 32 00 00 +00 00 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Perc. 1 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank A, voice 12 +1f 11 06 01 08 46 01 4d 3f 03 1f 15 05 01 0c 1e 01 4c 3c 03 1f 0b 06 05 08 +00 01 63 0a 06 1f 0f 06 05 0a 00 01 63 04 00 3c 22 00 0a 00 52 11 02 04 00 +63 32 00 00 00 32 00 53 79 2e 50 65 72 63 2e 20 31 63 63 63 32 32 32 00 30 +00 20 00 00 00 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Perc. 2 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank A, voice 13 +1f 08 00 01 00 00 00 32 13 05 1f 07 00 01 00 00 00 39 28 01 1a 08 00 04 00 +00 02 5c 00 05 1b 09 00 05 00 00 02 5f 08 01 3c 20 00 12 00 42 18 02 04 00 +63 32 00 00 00 32 00 53 79 2e 50 65 72 63 2e 20 32 63 63 63 32 32 32 00 10 +00 10 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Perc. 3 +** Source: Yamaha DX11 factory preset, bank A, voice 14 +1f 14 00 04 00 1e 00 4d 08 00 1f 1a 08 01 04 00 00 3c 04 06 1a 16 0c 09 0c +00 00 5b 04 10 16 15 07 07 0e 00 40 5e 04 16 3c 1f 00 00 00 52 18 02 04 00 +63 32 00 32 00 32 00 53 79 2e 50 65 72 63 2e 20 33 63 63 63 30 32 32 00 00 +00 60 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sy.Perc. 4 +** Controls: KV +** Source: Yamaha DX11 factory preset, bank A, voice 15 +1f 05 00 05 04 1e 04 51 20 0e 1e 0a 01 05 02 1e 04 53 1f 08 1e 1d 0a 05 0f +00 02 5c 05 0e 1f 1f 0a 05 0f 00 03 5c 04 08 04 1a 00 00 00 52 1d 02 04 00 +63 32 00 32 00 32 00 53 79 2e 50 65 72 63 2e 20 34 63 63 63 32 32 32 00 30 +00 46 00 01 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthBell +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 06 06 04 0e 00 05 54 0d 06 1f 06 06 04 0e 00 05 63 08 04 1f 06 06 04 0e +00 05 5b 08 02 1f 06 06 04 0e 00 05 63 00 03 05 23 00 00 00 03 00 04 04 00 +63 01 63 00 00 32 00 53 79 6e 74 68 42 65 6c 6c 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthBell +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 06 06 04 0e 00 02 54 0d 06 1f 06 06 04 0e 00 00 63 08 04 1f 06 06 04 0e +00 00 5b 08 02 1f 06 06 04 0e 00 00 63 00 03 05 23 00 00 00 03 00 04 04 00 +63 01 63 00 00 32 00 53 79 6e 74 68 42 65 6c 6c 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tube Bell +** Controls: KV +** Source: Yamaha DX11 factory preset, bank B, voice 23 +1f 0e 05 02 0a 27 02 50 16 06 1f 0e 05 02 0e 1a 02 43 16 00 1a 1f 07 04 0f +00 06 60 08 0e 1a 1f 07 04 0f 00 01 5e 08 08 14 1a 00 00 00 52 18 02 04 00 +28 32 00 00 00 32 00 54 75 62 65 20 42 65 6c 6c 20 63 63 63 32 32 32 00 30 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tube Bell +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0e 05 02 0d 27 02 50 16 06 1f 0e 05 02 0e 1a 02 43 16 00 1a 1f 07 04 0f +00 06 60 08 0e 1a 1f 07 04 0f 00 01 5e 08 08 14 1a 00 00 00 52 18 02 04 00 +28 32 00 00 00 32 00 54 75 62 65 20 42 65 6c 6c 20 63 63 63 32 32 32 00 30 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tube Bells +** Controls: MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank D, voice 26 +1a 04 01 01 0b 16 00 47 05 03 15 0e 00 01 0d 00 00 4c 05 16 1c 06 04 02 07 +00 00 63 04 16 18 18 03 01 0e 00 00 5e 04 10 24 07 00 04 00 62 24 04 04 00 +63 32 00 00 00 32 00 54 75 62 65 20 42 65 6c 6c 73 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Block + + +** Name: "Air"imba +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank D, voice 20 +1f 03 1a 0f 0f 00 00 3e 3d 05 1f 00 1f 03 00 00 01 40 05 00 1f 13 0b 03 0b +00 01 51 28 06 1f 11 0a 06 0f 00 00 5c 2c 06 3a 63 00 63 00 63 0e 07 04 00 +63 32 00 00 00 32 00 22 41 69 72 22 69 6d 62 61 20 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: "Air"imba +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 03 1a 0f 0f 00 00 3e 3d 05 1f 00 1f 03 00 00 01 40 05 00 1f 13 0b 03 0b +00 01 51 28 06 1f 11 0d 06 0f 00 00 5c 2c 06 3a 63 00 63 00 63 0e 07 04 00 +63 32 00 00 00 32 00 22 41 69 72 22 69 6d 62 61 20 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Balafon * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 17 18 0c 03 22 07 4e 18 03 1d 12 1a 08 04 23 04 4f 0e 00 1c 08 09 04 09 +24 02 63 03 11 1f 0b 18 06 00 14 02 63 04 10 04 23 00 00 00 32 11 02 04 00 +28 00 00 00 00 32 00 42 61 6c 61 66 6f 6e 20 20 2a 63 63 63 32 32 32 0c 08 +00 09 00 06 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BamboBlock +** Controls: MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank D, voice 22 +17 19 15 08 0c 02 00 57 07 0c 1f 17 15 0a 0b 02 00 55 0c 02 1a 12 16 0a 0b +01 00 5c 04 0a 1f 10 10 09 0a 00 00 5a 04 04 34 52 00 07 00 62 18 04 04 00 +28 32 00 00 00 32 00 42 61 6d 62 6f 42 6c 6f 63 6b 63 63 63 32 32 32 00 01 +00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BamboBlock +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +17 19 15 08 0c 02 00 57 07 0c 1f 17 15 0a 0b 02 00 55 0c 02 1a 12 16 0a 0b +01 00 5c 04 0a 1f 10 10 09 0d 00 00 5a 04 04 34 52 00 07 00 62 18 04 04 00 +28 32 00 00 00 32 00 42 61 6d 62 6f 42 6c 6f 63 6b 63 63 63 32 32 32 00 01 +00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BamboChiff +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 12 0f 0f 0c 52 03 51 16 0a 12 1f 12 0f 0f 27 02 5e 22 0b 12 0f 0c 0f 0c +11 07 5b 08 13 13 1f 09 0f 0f 00 06 63 04 03 44 23 00 02 00 12 18 01 04 00 +63 00 63 00 00 32 00 42 61 6d 62 6f 43 68 69 66 66 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BamboChiff +** Source: from a library of patches collected by Duane Bowker, author unknown +15 12 0f 0f 0c 52 00 51 16 0a 12 1f 12 0f 0f 27 00 5e 22 0b 12 0f 0c 0f 0c +11 00 5b 08 13 13 1f 09 0f 0f 00 00 63 04 03 44 23 00 02 00 12 18 01 04 00 +63 00 63 00 00 32 00 42 61 6d 62 6f 43 68 69 66 66 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BamboMar.1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 12 07 0f 00 02 02 4c 19 1c 12 12 06 05 09 00 02 4d 22 1a 1f 0a 06 06 0c +00 04 63 13 1c 12 0a 07 06 00 00 05 63 0a 1b 5c 2c 63 04 00 22 00 02 04 00 +63 32 00 32 00 32 00 42 61 6d 62 6f 4d 61 72 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BamboMar.1 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 12 07 0f 00 02 00 4c 19 1c 12 12 06 05 09 00 00 4d 22 1a 1f 0a 06 06 0c +00 00 63 13 1c 12 0a 07 06 00 00 00 63 0a 1b 5c 2c 63 04 00 22 00 02 04 00 +63 32 00 32 00 32 00 42 61 6d 62 6f 4d 61 72 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BamboMar.2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 0d 0a 0a 0c 02 04 4d 10 1c 12 12 06 05 09 00 05 46 16 12 1b 0a 0a 06 0c +00 05 63 04 1c 12 0a 07 06 00 00 05 63 04 1b 5c 15 00 00 00 02 00 02 04 00 +63 32 00 32 00 32 00 42 61 6d 62 6f 4d 61 72 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BamboMar.2 +** Source: from a library of patches collected by Duane Bowker, author unknown +16 0d 0a 0a 0c 02 00 4d 10 1c 12 12 06 05 09 00 00 46 16 12 1b 0a 0a 06 0c +00 00 63 04 1c 12 0a 07 06 00 00 00 63 04 1b 5c 15 00 00 00 02 00 02 04 00 +63 32 00 32 00 32 00 42 61 6d 62 6f 4d 61 72 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BamboMar.3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 0d 0a 0a 0c 02 01 48 19 1c 12 12 06 05 09 00 04 46 16 1a 1b 0a 0a 06 0c +00 05 63 04 1c 12 0a 07 06 00 00 05 63 04 1b 7c 15 00 00 00 02 00 02 04 00 +63 32 00 32 00 32 00 42 61 6d 62 6f 4d 61 72 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BamboMar.3 +** Source: from a library of patches collected by Duane Bowker, author unknown +16 0d 0a 0a 0c 02 00 48 19 1c 12 12 06 05 09 00 00 46 16 1a 1b 0a 0a 06 0c +00 00 63 04 1c 12 0a 07 06 00 00 00 63 04 1b 7c 15 00 00 00 02 00 02 04 00 +63 32 00 32 00 32 00 42 61 6d 62 6f 4d 61 72 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bamboo * +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1a 06 1f 03 00 46 02 3c 00 10 1c 12 0f 05 04 00 00 5b 01 13 17 1b 0f 05 04 +00 03 50 04 13 1a 0a 1f 05 00 00 02 63 00 0d 2a 17 0c 31 00 32 0c 02 04 00 +28 63 00 00 00 32 00 42 61 6d 62 6f 6f 20 20 20 2a 63 63 63 32 32 32 00 10 +00 14 00 71 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Castanet +** Source: Yamaha DX11 factory preset, bank D, voice 13 +19 16 1f 03 00 00 00 52 20 06 18 16 1f 03 00 00 00 52 27 00 1f 15 00 0c 00 +00 00 63 00 00 1f 15 15 0c 00 00 00 63 00 06 1c 23 00 00 00 62 18 04 04 00 +28 32 00 00 00 32 00 43 61 73 74 61 6e 65 74 20 20 63 63 63 32 32 32 0c 18 +0c 00 08 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Claves * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 0f 0f 00 00 00 04 03 1f 1d 0d 07 08 00 01 3d 00 03 1f 16 0f 0b 07 +00 01 46 0d 03 1f 1c 11 08 0f 00 01 63 04 03 03 23 00 00 00 32 24 02 04 00 +28 63 00 00 00 32 00 43 6c 61 76 65 73 20 20 20 2a 63 63 63 32 32 32 00 00 +0e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MarimbLead +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 18 10 01 0c 63 44 62 22 0b 1f 18 10 01 0c 63 45 59 04 0b 1f 06 06 07 0c +0e 46 5e 04 0b 1f 06 06 07 0c 0e 45 5e 04 0b 7c 32 23 00 52 40 18 04 04 00 +63 01 63 00 00 32 00 4d 61 72 69 6d 62 4c 65 61 64 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MarimbLead +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 18 10 01 0c 63 42 62 22 0b 1f 18 10 01 0c 63 41 59 04 0b 1f 06 06 07 0c +0e 40 5e 04 0b 1f 06 06 07 0c 0e 40 5e 04 0b 7c 32 23 00 52 40 18 04 04 00 +63 01 63 00 00 32 00 4d 61 72 69 6d 62 4c 65 61 64 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Marimba * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 03 12 09 0f 00 03 47 10 06 1f 00 15 05 0f 00 00 3f 08 00 1f 0f 00 05 00 +00 01 60 04 08 1f 0d 00 06 00 00 05 63 04 0e 3c 23 00 00 00 62 18 04 04 00 +00 32 00 00 00 32 00 4d 61 72 69 6d 62 61 20 20 2a 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Marimba +** Controls: KV +** Source: Yamaha DX11 factory preset, bank B, voice 19 +1f 16 0e 07 05 15 06 52 0f 0b 1a 18 0c 07 05 0c 02 52 0a 0b 17 1f 0a 07 0f +00 02 62 08 0b 16 1f 0a 05 0f 00 01 62 00 0b 04 23 00 00 00 52 18 02 04 00 +28 32 00 00 00 32 00 4d 61 72 69 6d 62 61 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Marimba +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 16 0e 07 05 15 06 52 0f 0b 1a 18 0c 07 05 0c 02 52 0a 0b 17 1f 0d 07 0f +00 02 62 08 0b 16 1f 0a 05 0f 00 01 62 00 0b 04 23 00 00 00 52 18 02 04 00 +28 32 00 00 00 32 00 4d 61 72 69 6d 62 61 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Marimba +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 12 0e 07 0f 48 04 49 17 1b 1f 0f 10 06 08 63 05 4f 1a 13 1f 1f 12 07 0f +3b 05 4b 34 1b 1f 1f 0a 06 0f 00 04 63 0d 13 02 1e 09 00 00 52 00 04 04 00 +63 28 00 00 00 32 00 4d 61 72 69 6d 62 61 20 20 20 63 63 63 32 32 32 00 0b +00 03 08 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Marimba..1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1b 00 06 00 00 05 63 28 03 1f 12 00 06 00 00 05 45 13 03 1f 0d 00 06 00 +00 05 44 16 03 1f 0c 00 06 00 00 06 63 04 03 02 23 00 00 00 62 0c 07 04 00 +63 63 00 00 00 32 00 4d 61 72 69 6d 62 61 2e 2e 31 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Marimba..1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1b 00 06 00 00 03 63 28 03 1f 12 00 06 00 00 03 45 13 03 1f 0d 00 06 00 +00 02 44 16 03 1f 0c 00 06 00 00 00 63 04 03 02 23 00 00 00 62 0c 07 04 00 +63 63 00 00 00 32 00 4d 61 72 69 6d 62 61 2e 2e 31 63 63 63 32 32 32 00 00 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Marimba..2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 19 00 07 00 00 05 5b 1f 08 1f 11 00 07 00 00 04 50 13 0e 1f 0a 00 07 00 +11 06 63 04 0e 1f 0a 00 07 00 11 05 63 04 00 2c 15 00 00 00 52 0c 02 05 00 +63 32 00 32 00 32 00 4d 61 72 69 6d 62 61 2e 2e 32 63 63 63 32 32 32 00 30 +00 00 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Marimba..2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 19 00 07 00 00 03 5b 1f 08 1f 11 00 07 00 00 02 50 13 0e 1f 0a 00 07 00 +11 00 63 04 0e 1f 0a 00 07 00 11 00 63 04 00 2c 15 00 00 00 52 0c 02 05 00 +63 32 00 32 00 32 00 4d 61 72 69 6d 62 61 2e 2e 32 63 63 63 32 32 32 00 30 +00 00 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Marimba..3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 19 00 07 00 00 04 4c 19 08 1f 11 00 07 00 00 03 49 16 0e 1f 0a 00 07 00 +11 06 63 04 0e 1f 0a 00 07 00 11 06 62 04 00 2c 15 00 00 00 52 00 02 05 00 +63 32 00 32 00 32 00 4d 61 72 69 6d 62 61 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Marimba..3 +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 19 00 07 00 00 00 4c 19 08 1f 11 00 07 00 00 00 49 16 0e 1f 0a 00 07 00 +11 00 63 04 0e 1f 0a 00 07 00 11 00 62 04 00 2c 15 00 00 00 52 00 02 05 00 +63 32 00 32 00 32 00 4d 61 72 69 6d 62 61 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Marimba..4 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 0d 05 03 00 00 04 58 0a 18 1f 11 00 07 00 00 04 50 10 0e 1f 0a 00 07 00 +11 05 63 04 0e 1f 0a 00 07 00 11 06 62 04 00 2c 15 00 00 00 52 0c 02 05 00 +63 32 00 32 00 32 00 4d 61 72 69 6d 62 61 2e 2e 34 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Marimba..4 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +16 0d 05 03 00 00 02 58 0a 18 1f 11 00 07 00 00 01 50 10 0e 1f 0a 00 07 00 +11 00 63 04 0e 1f 0a 00 07 00 11 00 62 04 00 2c 15 00 00 00 52 0c 02 05 00 +63 32 00 32 00 32 00 4d 61 72 69 6d 62 61 2e 2e 34 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Marimba..5 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1b 00 06 00 00 05 5d 28 03 1f 12 00 06 00 00 05 4d 00 03 1f 0d 00 06 00 +00 07 46 10 03 1f 0c 00 06 00 00 07 61 00 03 02 23 00 00 00 62 0c 07 04 00 +63 63 00 00 00 32 00 4d 61 72 69 6d 62 61 2e 2e 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Marimba..5 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1b 00 06 00 00 02 5d 28 03 1f 12 00 06 00 00 02 4d 00 03 1f 0d 00 06 00 +00 04 46 10 03 1f 0c 00 06 00 00 01 61 00 03 02 23 00 00 00 62 0c 07 04 00 +63 63 00 00 00 32 00 4d 61 72 69 6d 62 61 2e 2e 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Marimba..6 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 02 06 04 00 05 62 19 03 1f 12 00 06 00 00 05 4b 04 03 1f 0d 00 06 00 +00 06 44 16 03 1f 0c 00 06 00 00 06 63 04 03 02 23 00 00 00 62 0c 07 04 00 +63 63 00 00 00 32 00 4d 61 72 69 6d 62 61 2e 2e 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Marimba..6 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 02 06 04 00 02 62 19 03 1f 12 00 06 00 00 01 4b 04 03 1f 0d 00 06 00 +00 01 44 16 03 1f 0c 00 06 00 00 00 63 04 03 02 23 00 00 00 62 0c 07 04 00 +63 63 00 00 00 32 00 4d 61 72 69 6d 62 61 2e 2e 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Marimba..7 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 02 06 03 00 05 63 19 03 1f 12 00 06 00 00 03 4f 0a 03 1f 0d 00 06 00 +00 06 42 04 03 1f 0c 00 06 00 00 05 63 08 03 03 23 00 00 00 62 0c 07 04 00 +63 63 00 00 00 32 00 4d 61 72 69 6d 62 61 2e 2e 37 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Marimba..7 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 02 06 03 00 02 63 19 03 1f 12 00 06 00 00 01 4f 0a 03 1f 0d 00 06 00 +00 01 42 04 03 1f 0c 00 06 00 00 00 63 08 03 03 23 00 00 00 62 0c 07 04 00 +63 63 00 00 00 32 00 4d 61 72 69 6d 62 61 2e 2e 37 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ornt Block +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 18 0c 0f 0c 00 41 51 0a 1b 1f 10 09 07 0d 2e 42 40 04 13 1f 10 09 04 0d +00 44 63 04 1b 1f 10 12 05 0d 01 46 62 04 13 7e 1e 28 24 0f 27 18 07 04 00 +63 32 00 00 00 32 00 4f 72 6e 74 20 42 6c 6f 63 6b 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ornt Block +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +18 18 0c 0f 0c 00 40 51 0a 1b 1f 10 09 07 0d 2e 40 40 04 13 1f 10 09 04 0d +00 40 63 04 1b 1f 10 12 05 0d 01 40 62 04 13 7e 1e 28 24 0f 27 18 07 04 00 +63 32 00 00 00 32 00 4f 72 6e 74 20 42 6c 6f 63 6b 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynGameran +** Source: Yamaha DX11 factory preset, bank D, voice 17 +0a 14 00 01 0b 00 40 2d 11 03 14 03 00 0f 0e 2e 00 41 27 0c 1f 1b 11 05 0a +00 40 3f 0a 0a 1f 0f 00 0b 00 01 00 5a 10 0b 38 3a 00 63 50 5f 0b 05 04 00 +63 00 00 00 00 32 00 53 79 6e 47 61 6d 65 72 61 6e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynGameran +** Source: from a library of patches collected by Duane Bowker, author unknown +0d 14 00 01 0b 00 40 2d 11 03 14 03 00 0f 0e 2e 00 41 27 0c 1f 1b 11 05 0a +00 40 3f 0d 0a 1f 0f 00 0b 00 01 00 5a 10 0b 38 3a 00 63 50 5f 0b 05 04 00 +63 00 00 00 00 32 00 53 79 6e 47 61 6d 65 72 61 6e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthMarib +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 18 10 01 0c 63 43 5d 38 0b 0a 01 07 07 0f 00 45 52 00 03 1f 09 0f 07 0c +0e 45 63 04 0b 0f 02 07 07 0e 00 46 63 04 03 7c 32 23 00 52 40 18 04 04 00 +63 01 63 00 00 32 00 53 79 6e 74 68 4d 61 72 69 62 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthMarib +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 18 10 01 0c 63 41 5d 38 0b 0a 01 07 07 0f 00 41 52 00 03 1f 09 0f 07 0c +0e 40 63 04 0b 0f 02 07 07 0e 00 41 63 04 03 7c 32 23 00 52 40 18 04 04 00 +63 01 63 00 00 32 00 53 79 6e 74 68 4d 61 72 69 62 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tablas * +** Controls: KV, MW (LFO pitch), BC (voice pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +19 1c 17 09 0a 00 03 63 0d 0b 19 1f 1b 09 06 00 00 63 00 0b 1f 05 00 09 0f +00 00 63 3c 0b 13 10 11 06 0a 00 03 63 00 0b 02 18 00 26 00 32 18 0c 04 00 +28 63 00 00 00 13 00 54 61 62 6c 61 73 20 20 20 2a 63 63 63 32 32 32 00 06 +00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Wood Block +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank D, voice 12 +1f 18 01 08 00 00 02 55 07 0b 1f 18 12 0a 0c 00 02 55 0a 0b 1f 15 13 0a 0a +00 01 63 04 0b 1f 12 13 09 00 00 01 63 04 0b 2c 52 00 07 00 62 24 04 04 00 +28 32 00 00 00 32 00 57 6f 6f 64 20 42 6c 6f 63 6b 63 63 63 32 32 32 00 11 +00 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Wood Block +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 18 01 08 00 00 02 55 07 0b 1f 18 12 0a 0c 00 02 55 0a 0b 1f 15 13 0a 0d +00 01 63 04 0b 1f 12 13 09 00 00 01 63 04 0b 2c 52 00 07 00 62 24 04 04 00 +28 32 00 00 00 32 00 57 6f 6f 64 20 42 6c 6f 63 6b 63 63 63 32 32 32 00 11 +00 0d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: WoodBlock* +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 17 00 08 00 00 00 4b 0b 0b 1f 1f 16 07 0f 20 03 49 0f 0b 1a 0f 00 07 00 +00 02 63 03 0b 1f 1f 0c 06 0f 00 01 63 05 13 44 0e 00 63 00 42 11 02 04 00 +28 63 00 00 00 32 00 57 6f 6f 64 42 6c 6f 63 6b 2a 63 63 63 32 32 32 00 0a +00 49 00 06 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: WoodBlock1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 12 0f 0c 0a 00 00 4d 0c 13 1f 10 12 09 0d 00 00 45 04 0b 1f 16 10 08 0c +00 05 63 04 13 1f 10 12 09 0d 00 05 63 04 0b 44 30 00 00 00 62 18 07 04 00 +63 32 00 00 00 32 00 57 6f 6f 64 42 6c 6f 63 6b 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: WoodBlock1 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 12 0f 0c 0a 00 00 4d 0c 13 1f 10 12 09 0d 00 00 45 04 0b 1f 16 10 08 0c +00 00 63 04 13 1f 10 12 09 0d 00 00 63 04 0b 44 30 00 00 00 62 18 07 04 00 +63 32 00 00 00 32 00 57 6f 6f 64 42 6c 6f 63 6b 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: WoodBlock2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 12 0f 0c 0a 00 01 4d 0c 13 1f 10 12 09 0d 00 02 37 04 0b 1f 16 10 08 0c +00 04 42 04 13 1f 10 12 09 0d 00 05 63 04 0b 42 30 00 00 00 62 18 07 04 00 +63 32 00 00 00 32 00 57 6f 6f 64 42 6c 6f 63 6b 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: WoodBlock2 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 12 0f 0c 0a 00 00 4d 0c 13 1f 10 12 09 0d 00 00 37 04 0b 1f 16 10 08 0c +00 00 42 04 13 1f 10 12 09 0d 00 00 63 04 0b 42 30 00 00 00 62 18 07 04 00 +63 32 00 00 00 32 00 57 6f 6f 64 42 6c 6f 63 6b 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: WoodBlock3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 12 0f 0c 0a 00 00 44 0c 13 1f 10 12 09 0d 00 01 4b 05 0b 1f 16 10 08 0c +00 05 48 07 13 1f 10 12 09 0d 00 05 63 04 0b 42 30 00 00 00 62 18 07 04 00 +63 32 00 00 00 32 00 57 6f 6f 64 42 6c 6f 63 6b 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: WoodBlock3 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 12 0f 0c 0a 00 00 44 0c 13 1f 10 12 09 0d 00 00 4b 05 0b 1f 16 10 08 0c +00 00 48 07 13 1f 10 12 09 0d 00 00 63 04 0b 42 30 00 00 00 62 18 07 04 00 +63 32 00 00 00 32 00 57 6f 6f 64 42 6c 6f 63 6b 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +--Bank 24 + +* SUBCATEGORY Chime + + +** Name: BriteCelst +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank A, voice 31 +1f 0c 00 06 01 0a 04 50 20 0e 1f 0c 00 06 01 0a 04 50 1f 08 1f 0b 09 05 0e +00 02 63 05 0e 1f 0b 09 05 0e 00 03 63 04 08 04 1a 00 00 00 52 1d 02 04 00 +63 32 00 32 00 32 00 42 72 69 74 65 43 65 6c 73 74 63 63 63 32 32 32 00 20 +00 26 00 01 00 08 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Celeste +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank A, voice 30 +19 1c 00 06 01 00 04 52 07 08 1f 10 00 06 01 00 04 46 16 0e 1f 0a 00 06 01 +00 02 63 04 0e 1f 0d 00 04 01 00 03 63 04 00 04 19 00 00 00 52 24 02 04 00 +63 32 00 32 00 32 00 43 65 6c 65 73 74 65 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Celeste..1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +19 1c 00 06 01 00 03 51 2e 10 1f 10 00 06 01 00 05 3c 19 0e 1f 0a 00 06 01 +00 05 63 04 0e 1f 0d 00 04 01 00 05 63 04 00 04 19 00 00 00 52 24 00 04 00 +63 32 00 32 00 32 00 43 65 6c 65 73 74 65 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Celeste..1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +19 1c 00 06 01 00 01 51 2e 10 1f 10 00 06 01 00 01 3c 19 0e 1f 0a 00 06 01 +00 01 63 04 0e 1f 0d 00 04 01 00 01 63 04 00 04 19 00 00 00 52 24 00 04 00 +63 32 00 32 00 32 00 43 65 6c 65 73 74 65 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Celeste..2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 15 12 06 00 00 01 3b 1f 10 1f 10 00 06 01 00 05 3b 08 0e 1f 0a 00 06 01 +00 04 63 0d 0e 1f 0d 00 04 01 00 06 63 04 00 04 19 00 00 00 52 24 00 04 00 +63 32 00 32 00 32 00 43 65 6c 65 73 74 65 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Celeste..2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 15 12 06 00 00 01 3b 1f 10 1f 10 00 06 01 00 02 3b 08 0e 1f 0a 00 06 01 +00 01 63 0d 0e 1f 0d 00 04 01 00 01 63 04 00 04 19 00 00 00 52 24 00 04 00 +63 32 00 32 00 32 00 43 65 6c 65 73 74 65 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Chimes * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 07 02 0d 12 02 5c 10 09 1f 1f 09 02 0d 11 01 56 11 09 19 1f 07 03 0d +00 42 53 08 0c 17 1f 07 03 0d 00 40 63 08 0d 6c 29 00 00 00 0b 24 02 04 00 +28 00 36 00 00 32 00 43 68 69 6d 65 73 20 20 20 2a 63 63 63 32 32 32 00 00 +00 30 00 08 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Chiming +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0e 02 01 00 00 43 3d 2d 03 1f 05 07 02 0d 00 43 4d 16 06 1f 18 00 02 00 +00 07 4c 3d 03 1f 08 0a 05 0d 00 04 63 04 0b 02 19 02 01 16 5a 11 02 04 00 +63 28 00 00 00 32 00 43 68 69 6d 69 6e 67 20 20 20 63 63 63 32 32 32 00 60 +10 07 00 40 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Glocken +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank B, voice 22 +1f 1d 00 06 00 00 07 63 0a 03 1f 0a 00 06 00 0a 07 63 1f 03 1f 0c 00 05 00 +0f 07 63 08 03 1f 0e 01 06 00 00 07 5b 2d 03 3d 21 00 0a 00 32 18 02 04 00 +28 32 00 00 00 32 00 47 6c 6f 63 6b 65 6e 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Glocken +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1d 00 06 00 00 07 63 0a 03 1f 0d 00 06 00 0a 07 63 1f 03 1f 0c 00 05 00 +0f 07 63 08 03 1f 0e 01 06 00 00 07 5b 2d 03 3d 21 00 0d 00 32 18 02 04 00 +28 32 00 00 00 32 00 47 6c 6f 63 6b 65 6e 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Glocken..1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 13 04 05 0a 23 02 4d 2a 06 1f 0e 05 02 09 00 04 3d 04 00 18 11 08 05 0f +0a 05 63 04 0e 1f 11 08 05 0f 05 43 63 0d 00 26 23 00 00 00 3e 18 05 04 00 +63 63 28 00 00 32 00 47 6c 6f 63 6b 65 6e 2e 2e 31 63 63 63 32 32 32 00 00 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Glocken..1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 13 04 05 0a 23 02 4d 2a 06 1f 0e 05 02 09 00 01 3d 04 00 18 11 08 05 0f +0a 01 63 04 0e 1f 11 08 05 0f 05 41 63 0d 00 26 23 00 00 00 3e 18 05 04 00 +63 63 28 00 00 32 00 47 6c 6f 63 6b 65 6e 2e 2e 31 63 63 63 32 32 32 00 00 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Glocken..2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 13 04 05 0a 23 02 4c 2d 0e 1f 0e 05 02 09 00 06 39 19 00 1e 12 0a 05 0c +0a 05 63 04 0e 1f 11 08 05 0f 05 46 63 04 00 24 23 00 00 00 3e 24 05 04 00 +63 63 28 00 00 32 00 47 6c 6f 63 6b 65 6e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Glocken..2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 13 04 05 0a 23 02 4c 2d 0e 1f 0e 05 02 09 00 01 39 19 00 1e 12 0a 05 0c +0a 01 63 04 0e 1f 11 08 05 0f 05 41 63 04 00 24 23 00 00 00 3e 24 05 04 00 +63 63 28 00 00 32 00 47 6c 6f 63 6b 65 6e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: GoodVibes* +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0f 0f 07 0d 00 47 3a 2a 16 19 1a 0c 07 0d 00 44 41 0a 10 14 1a 07 07 0d +00 41 63 04 08 14 1a 07 07 0d 00 41 63 04 0e 04 1a 00 08 00 0e 18 02 04 00 +28 17 3b 00 00 32 00 47 6f 6f 64 56 69 62 65 73 2a 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: GreatVibes +** Controls: KV, MW (LFO amplitude) +** Source: Yamaha TX81Z factory preset, bank C, voice 28 +1f 14 07 07 0d 00 43 63 04 06 1f 10 15 06 00 00 43 63 2a 0e 1f 14 0b 07 0d +00 43 63 0d 06 1f 14 07 07 0d 00 43 63 04 00 07 16 00 00 2a 66 0c 02 04 00 +63 08 32 00 00 32 00 47 72 65 61 74 56 69 62 65 73 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Mod Chime +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0f 08 0f 00 00 45 5b 3f 03 0f 08 0d 06 09 00 44 63 0d 01 1f 1f 0b 06 0f +00 46 63 3e 03 0e 08 0d 06 09 00 45 63 08 05 5e 19 13 07 5c 36 00 0c 04 00 +63 00 00 00 00 32 00 4d 6f 64 20 43 68 69 6d 65 20 63 63 63 32 32 32 00 20 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Mod Chime +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0f 08 0f 00 00 42 5b 3f 03 0f 08 0d 06 09 00 42 63 0d 01 1f 1f 0b 06 0f +00 42 63 3e 03 0e 08 0d 06 09 00 40 63 08 05 5e 19 13 07 5c 36 00 0c 04 00 +63 00 00 00 00 32 00 4d 6f 64 20 43 68 69 6d 65 20 63 63 63 32 32 32 00 20 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthChime +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +00 1f 10 04 0d 0a 44 63 0d 0d 0d 0a 1f 03 01 0a 45 4c 08 09 1f 09 08 04 02 +0a 45 60 1f 0c 10 05 09 06 03 0a 45 63 08 0c 4c 23 00 03 0a 4a 0c 04 04 00 +63 32 00 00 00 32 00 53 79 6e 74 68 43 68 69 6d 65 63 63 63 32 32 32 00 20 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthChime +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +00 1f 10 04 0d 0a 41 63 0d 0d 0d 0a 1f 03 01 0a 42 4c 08 09 1f 09 08 04 02 +0a 40 60 1f 0c 10 05 09 06 03 0a 40 63 08 0c 4c 23 00 03 0a 4a 0c 04 04 00 +63 32 00 00 00 32 00 53 79 6e 74 68 43 68 69 6d 65 63 63 63 32 32 32 00 20 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Triangle.1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 0c 04 0e 00 05 39 22 13 1f 1f 0c 04 0e 00 03 40 08 03 1f 1f 0c 04 0f +00 05 63 2f 03 1f 1f 0c 04 0f 00 05 63 08 03 45 23 00 00 00 62 18 04 04 00 +28 32 00 00 00 32 00 54 72 69 61 6e 67 6c 65 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Triangle.1 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 0c 04 0e 00 00 39 22 13 1f 1f 0c 04 0e 00 00 40 08 03 1f 1f 0c 04 0f +00 00 63 2f 03 1f 1f 0c 04 0f 00 00 63 08 03 45 23 00 00 00 62 18 04 04 00 +28 32 00 00 00 32 00 54 72 69 61 6e 67 6c 65 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Triangle.2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 0c 04 0e 00 03 30 22 13 1f 0d 1f 04 00 00 04 61 13 03 1f 1f 0c 04 0f +00 06 63 2a 03 1f 1f 0c 04 0f 00 06 63 08 03 46 23 00 00 00 62 18 04 04 00 +28 32 00 00 00 32 00 54 72 69 61 6e 67 6c 65 2e 32 63 63 63 32 32 32 0a 00 +08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Triangle.2 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 0c 04 0e 00 00 30 22 13 1f 0d 1f 04 00 00 00 61 13 03 1f 1f 0c 04 0f +00 00 63 2a 03 1f 1f 0c 04 0f 00 00 63 08 03 46 23 00 00 00 62 18 04 04 00 +28 32 00 00 00 32 00 54 72 69 61 6e 67 6c 65 2e 32 63 63 63 32 32 32 0a 00 +08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Vib Lead.1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 03 07 09 0e 00 04 51 08 1b 16 0a 07 09 0f 00 04 63 04 1b 17 0a 07 09 0f +00 07 63 08 1b 18 16 07 09 0f 00 05 63 04 1b 2d 27 00 00 00 42 18 04 04 00 +28 32 00 00 00 32 00 56 69 62 20 4c 65 61 64 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Vib Lead.1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +15 03 07 09 0e 00 02 51 08 1b 16 0a 07 09 0f 00 01 63 04 1b 17 0a 07 09 0f +00 00 63 08 1b 18 16 07 09 0f 00 00 63 04 1b 2d 27 00 00 00 42 18 04 04 00 +28 32 00 00 00 32 00 56 69 62 20 4c 65 61 64 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Vib Lead.2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 03 07 09 0e 00 04 51 08 0b 1f 0f 0a 0c 0b 00 05 3e 2a 13 17 0a 07 09 0f +00 05 63 04 1b 1f 07 07 0a 0e 00 06 63 04 0b 2c 27 00 00 00 42 18 04 04 00 +28 32 00 00 00 32 00 56 69 62 20 4c 65 61 64 2e 32 63 63 63 32 32 32 00 20 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Vib Lead.2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +15 03 07 09 0e 00 01 51 08 0b 1f 0f 0a 0c 0b 00 01 3e 2a 13 17 0a 07 09 0f +00 00 63 04 1b 1f 07 07 0a 0e 00 00 63 04 0b 2c 27 00 00 00 42 18 04 04 00 +28 32 00 00 00 32 00 56 69 62 20 4c 65 61 64 2e 32 63 63 63 32 32 32 00 20 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Vibe. +** Controls: KV, MW (LFO amplitude) +** Source: Yamaha DX11 factory preset, bank B, voice 21 +1f 0f 0e 0a 0a 00 02 36 24 00 1f 0e 08 06 09 00 02 36 10 06 1f 11 05 04 0f +00 02 61 04 16 1f 11 05 04 0f 00 42 61 04 10 04 1f 00 00 1f 3e 18 02 04 00 +63 32 1e 00 00 32 00 56 69 62 65 2e 20 20 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Vibe.....1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 0d 0a 0a 0d 00 03 3b 19 12 1b 16 00 0c 07 00 05 57 16 13 1f 0a 0a 0d 0c +00 02 60 04 0b 1f 09 07 06 0c 00 05 5e 04 0b 7c 15 00 00 00 22 0c 02 04 00 +63 08 32 00 00 32 00 56 69 62 65 2e 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Vibe.....1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +16 0d 0a 0a 0d 00 01 3b 19 12 1b 16 00 0c 07 00 01 57 16 13 1f 0a 0a 0d 0c +00 00 60 04 0b 1f 09 07 06 0c 00 00 5e 04 0b 7c 15 00 00 00 22 0c 02 04 00 +63 08 32 00 00 32 00 56 69 62 65 2e 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Vibe.....2 +** Controls: KV, MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 14 07 07 0d 00 44 63 08 06 1f 10 15 06 00 00 45 63 24 0e 1f 14 0b 07 0d +00 44 63 0d 06 1f 14 07 07 0d 00 47 63 04 00 07 16 00 00 2a 66 0c 02 04 00 +63 08 32 00 00 32 00 56 69 62 65 2e 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Vibe.....2 +** Controls: MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 14 07 07 0d 00 40 63 08 06 1f 10 15 06 00 00 40 63 24 0e 1f 14 0b 07 0d +00 40 63 0d 06 1f 14 07 07 0d 00 40 63 04 00 07 16 00 00 2a 66 0c 02 04 00 +63 08 32 00 00 32 00 56 69 62 65 2e 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Vibe.....3 +** Controls: KV, MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 14 07 07 0d 00 42 63 0d 16 1f 10 15 06 00 00 44 63 16 0e 1f 14 0b 07 0d +00 45 63 04 06 1f 14 07 07 0d 00 47 63 04 00 07 16 00 00 2a 66 0c 02 04 00 +63 08 32 00 00 32 00 56 69 62 65 2e 2e 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Vibe.....3 +** Controls: MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 14 07 07 0d 00 40 63 0d 16 1f 10 15 06 00 00 40 63 16 0e 1f 14 0b 07 0d +00 40 63 04 06 1f 14 07 07 0d 00 40 63 04 00 07 16 00 00 2a 66 0c 02 04 00 +63 08 32 00 00 32 00 56 69 62 65 2e 2e 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Vibe.....4 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 06 1f 09 04 00 43 3a 24 16 1b 09 03 06 0d 00 45 63 0d 0e 1b 09 03 06 0d +00 44 63 04 0e 1f 15 06 08 0c 00 47 63 04 00 6d 21 00 00 63 02 0c 02 04 00 +63 08 32 00 00 32 00 56 69 62 65 2e 2e 2e 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Vibe.....4 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +12 06 1f 09 04 00 41 3a 24 16 1b 09 03 06 0d 00 42 63 0d 0e 1b 09 03 06 0d +00 41 63 04 0e 1f 15 06 08 0c 00 40 63 04 00 6d 21 00 00 63 02 0c 02 04 00 +63 08 32 00 00 32 00 56 69 62 65 2e 2e 2e 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Vibe.....5 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 06 1f 09 04 00 43 39 10 1e 1b 09 03 06 0d 00 44 5b 16 1e 1b 09 03 06 0d +00 44 63 04 1e 1f 15 06 08 0c 00 46 63 04 08 6d 21 00 00 63 02 0c 02 04 00 +63 08 32 00 00 32 00 56 69 62 65 2e 2e 2e 2e 2e 35 63 63 63 32 32 32 00 00 +00 00 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Vibe.....5 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +12 06 1f 09 04 00 41 39 10 1e 1b 09 03 06 0d 00 40 5b 16 1e 1b 09 03 06 0d +00 40 63 04 1e 1f 15 06 08 0c 00 40 63 04 08 6d 21 00 00 63 02 0c 02 04 00 +63 08 32 00 00 32 00 56 69 62 65 2e 2e 2e 2e 2e 35 63 63 63 32 32 32 00 00 +00 00 00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Vibe.....6 +** Controls: KV, MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 14 07 07 0d 00 44 63 0d 06 1f 10 15 06 00 00 45 63 24 0e 1f 14 0b 07 0d +00 45 63 0d 06 1f 14 07 07 0d 00 47 63 08 00 07 16 00 00 2a 66 0c 02 04 00 +63 08 32 00 00 32 00 56 69 62 65 2e 2e 2e 2e 2e 36 63 63 63 32 32 32 00 20 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Vibe.....6 +** Controls: KV, MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 14 07 07 0d 00 41 63 0d 06 1f 10 15 06 00 00 41 63 24 0e 1f 14 0b 07 0d +00 41 63 0d 06 1f 14 07 07 0d 00 41 63 08 00 07 16 00 00 2a 66 0c 02 04 00 +63 08 32 00 00 32 00 56 69 62 65 2e 2e 2e 2e 2e 36 63 63 63 32 32 32 00 20 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Vibesyn * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 0a 1f 05 00 15 05 54 0a 0b 1f 14 12 01 00 00 07 59 13 0c 1c 1b 0b 06 0e +0b 00 63 04 16 1b 1a 0a 05 0e 0b 03 63 04 10 3c 23 00 00 00 42 0c 02 04 00 +28 63 00 00 00 32 00 56 69 62 65 73 79 6e 20 20 2a 63 63 63 32 32 32 00 10 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: WindChime1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 12 09 03 0b 00 43 52 2d 03 06 0f 09 02 0b 00 44 63 22 03 1f 12 09 02 0b +00 44 63 22 03 1f 12 09 04 0b 00 47 62 22 03 06 2d 00 05 06 37 18 04 04 00 +28 32 00 00 00 32 00 57 69 6e 64 43 68 69 6d 65 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: WindChime1 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 12 09 03 0b 00 40 52 2d 03 06 0f 09 02 0b 00 40 63 22 03 1f 12 09 02 0b +00 40 63 22 03 1f 12 09 04 0b 00 40 62 22 03 06 2d 00 05 06 37 18 04 04 00 +28 32 00 00 00 32 00 57 69 6e 64 43 68 69 6d 65 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: WindChime2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 0c 00 03 0e 00 02 50 19 03 1c 12 00 02 0e 2e 03 50 27 0b 0e 10 00 02 0a +00 05 59 09 0a 11 0d 00 03 0c 01 06 62 22 0b 0e 4e 00 38 00 53 0c 07 04 00 +63 32 00 00 00 32 00 57 69 6e 64 43 68 69 6d 65 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: WindChime2 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 0c 00 03 0e 00 00 50 19 03 1c 12 00 02 0e 2e 00 50 27 0b 0e 10 00 02 0a +00 00 59 09 0a 11 0d 00 03 0c 01 00 62 22 0b 0e 4e 00 38 00 53 0c 07 04 00 +63 32 00 00 00 32 00 57 69 6e 64 43 68 69 6d 65 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Xylophone* +** Controls: KV, MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0e 0e 06 0e 11 01 4b 10 16 1f 12 0d 05 0e 00 41 5a 04 13 19 10 0e 05 0d +20 42 4b 08 16 1f 11 0c 05 0e 00 41 63 04 10 75 29 2c 00 36 09 18 02 04 00 +28 00 31 00 00 32 00 58 79 6c 6f 70 68 6f 6e 65 2a 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Xylophone +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank C, voice 27 +1f 16 00 09 05 00 01 5a 08 03 1f 17 10 05 05 00 01 56 10 13 1f 1f 12 07 0f +00 01 63 04 03 1f 1f 0f 07 0f 00 02 63 04 03 2a 23 00 00 00 62 18 04 04 00 +63 32 00 00 00 32 00 58 79 6c 6f 70 68 6f 6e 65 20 63 63 63 32 32 32 00 00 +00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Xylophone +** Controls: KV +** Source: Yamaha DX11 factory preset, bank B, voice 20 +1f 1f 16 09 0f 26 02 41 1f 13 1f 1f 16 09 0f 00 03 50 19 0b 1f 1f 0f 07 0f +00 01 62 04 0b 1f 1f 0f 07 0f 00 02 62 0a 13 04 23 00 00 00 62 24 02 04 00 +28 32 00 00 00 32 00 58 79 6c 6f 70 68 6f 6e 65 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Xylophone +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 16 09 0f 26 02 41 1f 13 1f 1f 16 09 0f 00 03 50 19 0b 1f 1f 0f 07 0f +00 01 62 04 0b 1f 1f 0f 07 0f 00 02 62 0d 13 04 23 00 00 00 62 24 02 04 00 +28 32 00 00 00 32 00 58 79 6c 6f 70 68 6f 6e 65 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Xylophone1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0d 07 07 0e 00 04 53 13 1e 1b 10 06 06 0e 00 05 56 04 16 1f 0d 07 07 0e +00 07 63 0c 1b 1b 10 06 06 0e 00 05 63 00 0b 75 23 00 00 00 32 24 02 04 00 +63 11 06 00 00 32 00 58 79 6c 6f 70 68 6f 6e 65 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Xylophone1 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0d 07 07 0e 00 01 53 13 1e 1b 10 06 06 0e 00 02 56 04 16 1f 0d 07 07 0e +00 04 63 0c 1b 1b 10 06 06 0e 00 00 63 00 0b 75 23 00 00 00 32 24 02 04 00 +63 11 06 00 00 32 00 58 79 6c 6f 70 68 6f 6e 65 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Xylophone2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 12 07 07 0d 14 03 4f 0d 12 1f 12 07 04 0d 19 05 5d 08 1e 1f 0c 06 07 0d +00 07 63 04 09 1f 0a 06 07 0d 00 05 63 04 0b 74 23 00 00 00 32 24 02 04 00 +63 11 06 00 00 32 00 58 79 6c 6f 70 68 6f 6e 65 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Xylophone2 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 12 07 07 0d 14 01 4f 0d 12 1f 12 07 04 0d 19 03 5d 08 1e 1f 0c 06 07 0d +00 04 63 04 09 1f 0a 06 07 0d 00 00 63 04 0b 74 23 00 00 00 32 24 02 04 00 +63 11 06 00 00 32 00 58 79 6c 6f 70 68 6f 6e 65 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Xylophone3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 0d 05 05 0c 14 03 4f 0d 12 1d 16 00 0c 07 19 03 5b 2a 1e 1f 0c 06 07 0d +00 07 63 04 11 1f 09 07 06 0c 00 06 63 04 0b 74 23 00 00 00 32 24 02 04 00 +63 11 06 00 00 32 00 58 79 6c 6f 70 68 6f 6e 65 33 63 63 63 32 32 32 00 10 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Xylophone3 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +16 0d 05 05 0c 14 01 4f 0d 12 1d 16 00 0c 07 19 01 5b 2a 1e 1f 0c 06 07 0d +00 04 63 04 11 1f 09 07 06 0c 00 00 63 04 0b 74 23 00 00 00 32 24 02 04 00 +63 11 06 00 00 32 00 58 79 6c 6f 70 68 6f 6e 65 33 63 63 63 32 32 32 00 10 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Xylophone4 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0d 07 04 0e 00 04 40 08 1e 1b 10 06 05 0e 00 06 54 08 0e 1f 0d 07 05 0e +00 07 63 0c 1b 1b 10 06 05 0e 00 06 63 00 0b 75 23 00 00 00 32 24 02 04 00 +63 11 06 00 00 32 00 58 79 6c 6f 70 68 6f 6e 65 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Xylophone4 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0d 07 04 0e 00 01 40 08 1e 1b 10 06 05 0e 00 03 54 08 0e 1f 0d 07 05 0e +00 04 63 0c 1b 1b 10 06 05 0e 00 00 63 00 0b 75 23 00 00 00 32 24 02 04 00 +63 11 06 00 00 32 00 58 79 6c 6f 70 68 6f 6e 65 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Xylophone5 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 13 04 05 0a 00 04 41 28 01 1f 0e 05 05 09 00 04 43 13 0c 1f 1f 00 08 0f +00 05 3e 00 05 1f 11 08 05 0f 00 05 63 04 0a 4d 23 00 19 00 32 24 02 04 00 +63 32 00 00 00 32 00 58 79 6c 6f 70 68 6f 6e 65 35 63 63 63 32 32 32 00 00 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Xylophone5 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 13 04 05 0a 00 01 41 28 01 1f 0e 05 05 09 00 01 43 13 0c 1f 1f 00 08 0f +00 01 3e 00 05 1f 11 08 05 0f 00 00 63 04 0a 4d 23 00 19 00 32 24 02 04 00 +63 32 00 00 00 32 00 58 79 6c 6f 70 68 6f 6e 65 35 63 63 63 32 32 32 00 00 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Xylophone6 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0e 09 07 0a 00 03 52 30 19 1f 0e 05 06 09 00 04 42 08 0c 1f 1f 00 09 0f +00 04 3b 0d 0d 1f 11 08 06 0f 00 04 63 04 0a 4d 23 00 19 00 32 24 02 04 00 +63 32 00 00 00 32 00 58 79 6c 6f 70 68 6f 6e 65 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Xylophone6 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0e 09 07 0a 00 01 52 30 19 1f 0e 05 06 09 00 01 42 08 0c 1f 1f 00 09 0f +00 00 3b 0d 0d 1f 11 08 06 0f 00 00 63 04 0a 4d 23 00 19 00 32 24 02 04 00 +63 32 00 00 00 32 00 58 79 6c 6f 70 68 6f 6e 65 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Xylophone7 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0e 09 07 0a 00 05 55 13 19 12 12 05 06 09 00 06 5b 04 1c 1f 1f 00 09 0f +00 04 5f 04 1d 1f 11 08 06 0f 00 07 63 00 0a 4c 23 00 00 00 32 24 02 04 00 +63 32 00 00 00 32 00 58 79 6c 6f 70 68 6f 6e 65 37 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Xylophone7 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0e 09 07 0a 00 01 55 13 19 12 12 05 06 09 00 01 5b 04 1c 1f 1f 00 09 0f +00 01 5f 04 1d 1f 11 08 06 0f 00 00 63 00 0a 4c 23 00 00 00 32 24 02 04 00 +63 32 00 00 00 32 00 58 79 6c 6f 70 68 6f 6e 65 37 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Xylophone8 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +16 0d 05 05 0d 00 04 4f 13 12 1f 15 00 0c 07 00 05 63 2a 0e 1f 0a 05 06 0c +00 07 63 04 0b 1c 0f 06 06 0c 00 06 63 04 13 74 23 00 00 00 32 24 02 04 00 +63 11 06 00 00 32 00 58 79 6c 6f 70 68 6f 6e 65 38 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Xylophone8 +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +16 0d 05 05 0d 00 01 4f 13 12 1f 15 00 0c 07 00 03 63 2a 0e 1f 0a 05 06 0c +00 04 63 04 0b 1c 0f 06 06 0c 00 00 63 04 13 74 23 00 00 00 32 24 02 04 00 +63 11 06 00 00 32 00 58 79 6c 6f 70 68 6f 6e 65 38 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Cymbal + + +** Name: Chin.Cymb* +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 00 00 01 00 0b 00 44 04 00 1e 00 01 01 00 1f 41 4e 0a 00 1f 00 00 01 00 +00 01 56 14 06 1d 0b 1f 04 00 0a 04 63 00 06 7b 1f 0d 0e 1e 0e 18 0c 04 00 +63 32 00 32 00 32 00 43 68 69 6e 2e 43 79 6d 62 2a 63 63 63 32 32 32 01 73 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Cymbal...1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 01 0e 00 40 59 35 03 19 16 00 01 0b 00 40 4e 03 0b 15 1c 06 01 0b +00 40 57 3b 13 1f 1f 05 02 08 00 45 63 1b 13 31 00 02 00 03 52 12 05 04 00 +63 32 00 00 00 32 00 43 79 6d 62 61 6c 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Cymbal...1 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 01 0e 00 40 59 36 03 19 16 00 01 0b 00 40 4e 03 0b 15 1c 06 01 0b +00 40 57 3b 13 1f 1f 05 02 08 00 40 63 1b 13 31 00 02 00 03 52 12 05 04 00 +63 32 00 00 00 32 00 43 79 6d 62 61 6c 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Cymbal...1 +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +1f 1f 00 00 0e 00 40 59 36 03 19 16 00 01 0b 00 40 4e 03 0b 15 1c 06 00 0b +00 40 57 3b 13 1f 1f 05 02 08 00 40 63 1b 13 31 00 02 00 03 52 12 05 04 00 +63 32 00 00 00 32 00 43 79 6d 62 61 6c 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Cymbal...2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 01 0e 00 40 59 24 03 19 16 00 01 0b 00 40 55 1e 0b 15 1c 06 01 0b +00 40 56 19 13 1f 1f 05 02 08 00 44 63 1b 13 31 00 02 00 03 52 12 05 04 00 +63 32 00 00 00 32 00 43 79 6d 62 61 6c 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Cymbal...2 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 01 0e 00 40 59 24 03 19 16 00 01 0b 00 40 55 1e 0b 15 1c 06 01 0b +00 40 56 16 13 1f 1f 05 02 08 00 40 63 1b 13 31 00 02 00 03 52 12 05 04 00 +63 32 00 00 00 32 00 43 79 6d 62 61 6c 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Cymbal...2 +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +1f 1f 00 00 0e 00 40 59 24 03 19 16 00 01 0b 00 40 55 1e 0b 15 1c 06 00 0b +00 40 56 16 13 1f 1f 05 02 08 00 40 63 1b 13 31 00 02 00 03 52 12 05 04 00 +63 32 00 00 00 32 00 43 79 6d 62 61 6c 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Cymbal...3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 01 0e 00 40 5b 37 03 19 16 00 01 0b 00 41 55 17 0b 15 1c 06 01 0b +00 40 5b 20 13 1f 1f 05 02 08 00 44 63 15 13 33 00 02 00 03 52 12 05 04 00 +63 32 00 00 00 32 00 43 79 6d 62 61 6c 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Cymbal...3 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 01 0e 00 40 5b 37 03 19 16 00 01 0b 00 40 55 17 0b 15 1c 06 01 0b +00 40 5b 20 13 1f 1f 05 02 08 00 40 63 15 13 33 00 02 00 03 52 12 05 04 00 +63 32 00 00 00 32 00 43 79 6d 62 61 6c 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Cymbal...3 +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +1f 1f 00 00 0e 00 40 5b 37 03 19 16 00 01 0b 00 40 55 17 0b 15 1c 06 00 0b +00 40 5b 20 13 1f 1f 05 02 08 00 40 63 15 13 33 00 02 00 03 52 12 05 04 00 +63 32 00 00 00 32 00 43 79 6d 62 61 6c 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +--Bank 25 + +* SUBCATEGORY Drum1 + + +** Name: Bass/Snare +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 05 0f 00 00 63 32 03 1f 12 00 05 07 00 00 4d 00 03 1f 1f 10 07 0f +63 05 63 28 13 1f 1f 0b 08 0f 00 05 63 00 03 34 23 00 00 00 62 00 04 04 00 +63 32 00 00 00 32 00 42 61 73 73 2f 53 6e 61 72 65 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bass/Snare +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 05 0f 00 00 63 32 03 1f 12 00 05 07 00 00 4d 00 03 1f 1f 10 07 0f +63 00 63 28 13 1f 1f 0b 08 0f 00 00 63 00 03 34 23 00 00 00 62 00 04 04 00 +63 32 00 00 00 32 00 42 61 73 73 2f 53 6e 61 72 65 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bass Drum +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank D, voice 25 +1f 1f 13 03 00 00 00 5f 2d 06 1f 12 13 02 00 00 01 52 00 02 1f 14 13 03 00 +00 02 56 1c 05 1e 14 13 0f 00 00 00 63 00 03 3b 63 00 00 00 03 0d 07 04 00 +63 32 00 00 00 32 00 42 61 73 73 20 44 72 75 6d 20 63 63 63 32 32 32 08 00 +00 00 08 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bass Drum1 +** Controls: MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank D, voice 1 +1f 0f 1f 07 00 00 00 4e 08 03 1f 18 00 06 08 00 00 5f 04 03 1f 15 08 07 0a +00 00 49 01 03 1f 0b 12 0c 0e 00 00 5b 08 03 03 50 00 4a 00 72 00 04 04 00 +28 32 00 00 00 32 00 42 61 73 73 20 44 72 75 6d 31 63 63 63 32 32 32 00 00 +00 00 00 00 08 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bass Drum2 +** Source: Yamaha DX11 factory preset, bank D, voice 2 +1f 19 07 07 0b 00 00 46 20 01 1f 18 00 0b 0a 00 00 47 04 01 1f 15 00 0c 0a +00 00 45 00 05 1f 0a 15 0a 0f 00 00 63 15 05 31 23 00 00 00 62 00 04 04 00 +28 32 00 00 00 32 00 42 61 73 73 20 44 72 75 6d 32 63 63 63 32 32 32 09 03 +08 05 08 05 08 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bass Drum2 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 19 07 07 0b 00 00 46 20 01 1f 18 00 0b 0d 00 00 47 04 01 1f 15 00 0c 0d +00 00 45 00 05 1f 0d 15 0a 0f 00 00 63 15 05 31 23 00 00 00 62 00 04 04 00 +28 32 00 00 00 32 00 42 61 73 73 20 44 72 75 6d 32 63 63 63 32 32 32 09 03 +08 05 08 05 08 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BassDrum.1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1b 19 0f 0e 00 00 55 03 03 18 10 19 0c 0d 00 01 63 03 13 1b 12 10 08 0e +00 06 63 00 13 1f 0f 12 09 0f 00 05 63 02 13 35 00 00 00 00 02 0c 06 04 00 +63 32 00 32 00 32 00 42 61 73 73 44 72 75 6d 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BassDrum.1 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1b 19 0f 0e 00 00 55 03 03 18 10 19 0c 0d 00 00 63 03 13 1b 12 10 08 0e +00 00 63 00 13 1f 0f 12 09 0f 00 00 63 02 13 35 00 00 00 00 02 0c 06 04 00 +63 32 00 32 00 32 00 42 61 73 73 44 72 75 6d 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BassDrum.2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1b 19 0f 0e 00 00 4e 03 03 18 1b 19 0c 0d 00 02 46 03 13 1b 12 10 08 0e +00 05 63 00 13 1f 0f 12 09 0f 00 03 63 00 13 34 00 00 00 00 02 0c 06 04 00 +63 32 00 32 00 32 00 42 61 73 73 44 72 75 6d 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BassDrum.2 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1b 19 0f 0e 00 00 4e 03 03 18 1b 19 0c 0d 00 00 46 03 13 1b 12 10 08 0e +00 00 63 00 13 1f 0f 12 09 0f 00 00 63 00 13 34 00 00 00 00 02 0c 06 04 00 +63 32 00 32 00 32 00 42 61 73 73 44 72 75 6d 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BassDrum.3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1b 19 0f 0e 00 00 48 04 03 18 1b 19 0c 0d 00 01 4e 00 13 1b 12 10 08 0e +00 02 55 02 13 1f 0f 12 09 0f 00 03 63 00 13 32 00 00 00 00 02 0c 06 04 00 +63 32 00 32 00 32 00 42 61 73 73 44 72 75 6d 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BassDrum.3 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1b 19 0f 0e 00 00 48 04 03 18 1b 19 0c 0d 00 00 4e 00 13 1b 12 10 08 0e +00 00 55 02 13 1f 0f 12 09 0f 00 00 63 00 13 32 00 00 00 00 02 0c 06 04 00 +63 32 00 32 00 32 00 42 61 73 73 44 72 75 6d 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BoConga +** Controls: KV +** Source: Yamaha DX11 factory preset, bank D, voice 15 +19 15 1f 0e 00 05 03 52 00 00 18 11 09 06 04 1e 02 42 04 16 18 0f 00 07 00 +02 00 63 04 10 1c 0c 14 06 0b 00 00 63 01 13 04 23 00 00 00 62 1d 04 04 00 +28 32 00 00 00 32 00 42 6f 43 6f 6e 67 61 20 20 20 63 11 2a 32 32 32 00 02 +00 57 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Congas * +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +19 1d 17 09 09 00 03 63 00 0b 19 1f 1b 09 06 00 00 63 00 0b 1f 05 00 09 0b +00 00 63 28 0b 13 10 11 06 0a 00 03 63 00 0b 02 18 00 26 00 32 18 02 04 00 +28 63 00 00 00 32 00 43 6f 6e 67 61 73 20 20 20 2a 63 63 63 32 32 32 00 06 +00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: DrmSpring1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 19 12 0f 0b 2e 03 4c 04 1a 1f 1b 1f 0f 0b 00 04 63 08 10 1f 1b 1f 0f 0b +00 05 63 08 0a 1f 18 07 07 0f 00 06 63 04 0b 32 22 0a 09 00 02 0c 02 04 00 +63 32 00 32 00 32 00 44 72 6d 53 70 72 69 6e 67 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: DrmSpring1 +** Source: from a library of patches collected by Duane Bowker, author unknown +18 19 12 0f 0b 2e 00 4c 04 1a 1f 1b 1f 0f 0b 00 00 63 08 10 1f 1b 1f 0f 0b +00 00 63 08 0a 1f 18 07 07 0f 00 00 63 04 0b 32 22 0a 09 00 02 0c 02 04 00 +63 32 00 32 00 32 00 44 72 6d 53 70 72 69 6e 67 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: DrmSpring2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 19 12 0f 0b 2e 03 63 02 1a 1f 1b 1f 0f 0b 00 05 60 07 10 1f 1b 1f 0f 0b +00 06 60 09 0a 1f 18 07 07 0f 00 07 63 02 0b 3a 22 0a 19 00 02 0c 02 04 00 +63 32 00 32 00 32 00 44 72 6d 53 70 72 69 6e 67 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: DrmSpring2 +** Source: from a library of patches collected by Duane Bowker, author unknown +18 19 12 0f 0b 2e 00 63 02 1a 1f 1b 1f 0f 0b 00 00 60 07 10 1f 1b 1f 0f 0b +00 00 60 09 0a 1f 18 07 07 0f 00 00 63 02 0b 3a 22 0a 19 00 02 0c 02 04 00 +63 32 00 32 00 32 00 44 72 6d 53 70 72 69 6e 67 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: DrumString +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +06 08 01 04 0d 63 02 51 1e 05 1f 0a 03 06 0d 00 03 52 08 0b 15 0a 04 07 0d +00 06 62 09 04 1f 04 08 07 00 00 05 63 08 06 2c 21 23 0f 00 12 00 04 04 00 +28 32 00 00 00 32 00 44 72 75 6d 53 74 72 69 6e 67 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: DrumString +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +06 08 01 04 0d 63 00 51 1e 05 1f 0a 03 06 0d 00 00 52 08 0b 15 0a 04 07 0d +00 00 62 09 04 1f 04 08 07 00 00 00 63 08 06 2c 21 23 0f 00 12 00 04 04 00 +28 32 00 00 00 32 00 44 72 75 6d 53 74 72 69 6e 67 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Efem Toms +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank D, voice 32 +1f 12 13 03 05 00 00 5f 3d 06 1f 10 0b 02 05 00 01 52 05 02 1f 0f 0e 03 06 +00 01 56 28 05 1e 09 0d 06 09 00 00 63 06 03 3c 63 00 63 00 63 20 07 04 00 +63 32 00 00 00 32 00 45 66 65 6d 20 54 6f 6d 73 20 63 63 63 32 32 32 08 00 +00 00 08 00 00 00 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: El.Snare * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0e 08 02 00 00 01 57 0d 0b 1f 03 00 01 00 00 00 5f 00 0b 1b 04 0a 01 07 +00 01 54 18 0b 1f 0e 04 07 00 00 00 63 00 0b 03 23 00 00 00 32 00 02 04 00 +28 63 00 00 00 32 00 45 6c 2e 53 6e 61 72 65 20 2a 63 63 63 32 32 32 00 00 +08 00 08 04 08 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: El.Snare2* +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0e 02 05 00 00 00 57 0c 0b 1f 03 00 03 07 00 00 44 04 0b 1f 02 01 01 00 +00 00 51 20 0b 1f 10 00 08 00 00 01 63 0a 0b 13 23 00 00 00 32 00 02 04 00 +28 63 00 00 00 32 00 45 6c 2e 53 6e 61 72 65 32 2a 63 63 63 32 32 32 00 01 +08 10 08 54 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: FM Hi-Hats +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank D, voice 24 +1f 0c 00 05 0f 00 00 63 3b 03 1f 09 00 04 0f 00 38 4b 16 03 1f 0c 00 06 0f +00 00 56 16 03 1f 0d 1f 0f 04 00 02 63 08 03 3b 00 00 00 00 62 18 0c 04 00 +63 32 00 00 00 32 00 46 4d 20 48 69 2d 48 61 74 73 63 63 63 32 32 32 00 70 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hand Drum +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank D, voice 30 +1f 16 00 03 07 00 01 50 00 03 1f 18 03 03 03 22 00 63 00 14 1d 07 06 03 06 +00 01 3c 08 03 1f 05 07 03 00 00 01 63 04 1b 39 23 00 08 00 42 18 04 04 00 +63 32 00 00 00 32 00 48 61 6e 64 20 44 72 75 6d 20 63 63 63 32 32 32 00 01 +00 03 00 01 00 01 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hand Drum1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1a 15 00 07 09 00 00 53 01 13 1f 18 03 04 0d 00 01 3b 03 13 1d 1a 06 04 04 +00 06 41 09 03 1f 00 07 03 0f 00 03 63 03 1b 29 23 00 00 00 62 18 05 04 00 +63 00 00 00 00 32 00 48 61 6e 64 20 44 72 75 6d 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hand Drum1 +** Source: from a library of patches collected by Duane Bowker, author unknown +1a 15 00 07 09 00 00 53 01 13 1f 18 03 04 0d 00 00 3b 03 13 1d 1a 06 04 04 +00 00 41 09 03 1f 00 07 03 0f 00 00 63 03 1b 29 23 00 00 00 62 18 05 04 00 +63 00 00 00 00 32 00 48 61 6e 64 20 44 72 75 6d 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hand Drum2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1a 15 00 07 09 00 00 57 01 13 1f 18 03 04 0d 00 00 3b 04 13 1d 1a 06 04 04 +00 00 41 01 03 1f 00 07 08 0f 00 05 63 01 1b 29 23 00 00 00 62 18 05 04 00 +63 00 00 00 00 32 00 48 61 6e 64 20 44 72 75 6d 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hand Drum2 +** Source: from a library of patches collected by Duane Bowker, author unknown +1a 15 00 07 09 00 00 57 01 13 1f 18 03 04 0d 00 00 3b 04 13 1d 1a 06 04 04 +00 00 41 01 03 1f 00 07 08 0f 00 00 63 01 1b 29 23 00 00 00 62 18 05 04 00 +63 00 00 00 00 32 00 48 61 6e 64 20 44 72 75 6d 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: "Hi!" Hat! +** Controls: MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank D, voice 9 +1f 06 06 0f 0f 00 00 63 20 1b 1f 09 1f 0f 0f 00 00 63 24 1b 1f 0a 00 0f 00 +00 00 63 20 1b 1f 0a 00 0f 00 00 00 59 30 1b 3c 63 00 55 46 62 18 04 04 00 +28 32 00 00 00 32 00 22 48 69 21 22 20 48 61 74 21 63 63 63 32 32 32 0e 0f +0e 08 0e 0c 0b 0b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hi-Hat * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0c 00 05 0f 00 00 63 3b 03 1f 09 00 04 0f 00 38 4e 16 03 1f 0c 00 06 0f +00 00 5e 16 03 1f 13 1f 0f 00 00 02 63 08 03 3b 00 00 00 00 62 18 0c 04 00 +63 32 00 00 00 32 00 48 69 2d 48 61 74 20 20 20 2a 63 63 63 32 32 32 00 70 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Java Jive +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank C, voice 26 +15 13 0d 03 0d 1e 02 50 18 0e 15 14 09 04 0c 1e 02 56 11 08 1b 1f 0f 07 0f +00 01 63 04 06 1a 1f 0e 06 0f 00 02 63 04 00 7c 0b 00 08 00 62 18 04 04 00 +63 32 00 00 00 32 00 4a 61 76 61 20 4a 69 76 65 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: KickDrum * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 16 00 05 03 00 00 5f 02 03 1f 11 01 08 00 00 00 53 04 13 1f 19 13 05 04 +00 02 5f 00 1b 1f 1d 10 08 0f 00 00 63 10 0b 38 23 00 00 00 62 0c 04 0c 00 +63 32 00 00 00 32 00 4b 69 63 6b 44 72 75 6d 20 2a 63 63 63 32 32 32 0d 30 +08 00 08 20 08 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Log Drum.1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +13 18 0f 06 04 00 41 1d 08 1b 1f 18 0c 05 00 00 41 51 00 03 18 06 0f 06 04 +00 45 63 00 13 1b 0f 0d 06 00 00 44 63 00 0b 2c 24 00 00 50 02 18 04 04 00 +28 32 00 00 00 32 00 4c 6f 67 20 44 72 75 6d 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Log Drum.1 +** Source: from a library of patches collected by Duane Bowker, author unknown +13 18 0f 06 04 00 40 1d 08 1b 1f 18 0c 05 00 00 40 51 00 03 18 06 0f 06 04 +00 40 63 00 13 1b 0f 0d 06 00 00 40 63 00 0b 2c 24 00 00 50 02 18 04 04 00 +28 32 00 00 00 32 00 4c 6f 67 20 44 72 75 6d 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Log Drum.2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +13 18 0f 06 04 00 40 5d 05 1b 1f 18 0c 05 00 00 41 49 03 0b 18 06 0f 06 04 +00 44 63 01 13 1b 0f 0d 06 00 00 44 63 01 0b 2c 24 00 00 50 02 18 04 04 00 +28 32 00 00 00 32 00 4c 6f 67 20 44 72 75 6d 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Log Drum.2 +** Source: from a library of patches collected by Duane Bowker, author unknown +13 18 0f 06 04 00 40 5d 05 1b 1f 18 0c 05 00 00 40 49 03 0b 18 06 0f 06 04 +00 40 63 01 13 1b 0f 0d 06 00 00 40 63 01 0b 2c 24 00 00 50 02 18 04 04 00 +28 32 00 00 00 32 00 4c 6f 67 20 44 72 75 6d 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MiamiToms* +** Controls: KV, MW (LFO pitch), BC (voice pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0d 00 03 00 21 01 48 07 0b 1f 0a 00 02 00 04 00 46 02 0b 1f 02 00 04 00 +00 01 40 00 0b 1f 0d 0f 06 0d 00 02 63 00 0b 68 04 00 45 00 62 18 02 04 00 +28 63 00 00 00 2a 00 4d 69 61 6d 69 54 6f 6d 73 2a 63 63 63 32 32 32 00 30 +00 52 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntDrm..1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 19 18 0d 0d 00 02 62 03 0b 18 0f 0c 09 00 00 02 5a 08 13 1d 15 15 0f 0f +00 03 63 07 03 19 0f 18 07 04 00 05 62 04 0b 7c 23 00 00 00 02 18 02 04 00 +63 63 00 00 00 32 00 4f 72 6e 74 44 72 6d 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntDrm..1 +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 19 18 0d 0d 00 00 62 03 0b 18 0f 0c 09 00 00 00 5a 08 13 1d 15 15 0f 0f +00 00 63 07 03 19 0f 18 07 04 00 00 62 04 0b 7c 23 00 00 00 02 18 02 04 00 +63 63 00 00 00 32 00 4f 72 6e 74 44 72 6d 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntDrm..2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 01 07 04 00 00 02 49 02 0b 1f 16 00 03 00 00 42 56 00 0c 1f 09 06 04 0b +00 03 63 00 13 1f 0c 1f 06 00 00 05 62 00 13 2c 28 00 10 2e 26 18 02 04 00 +63 63 00 00 00 32 00 4f 72 6e 74 44 72 6d 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntDrm..2 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 01 07 04 00 00 00 49 02 0b 1f 16 00 03 00 00 40 56 00 0c 1f 09 06 04 0b +00 00 63 00 13 1f 0c 1f 06 00 00 00 62 00 13 2c 28 00 10 2e 26 18 02 04 00 +63 63 00 00 00 32 00 4f 72 6e 74 44 72 6d 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntDrm..3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 01 07 04 00 00 04 48 02 0b 1f 16 00 03 00 00 04 55 00 0c 1f 09 06 04 0b +00 04 3e 03 13 1f 0c 1f 06 00 00 05 62 00 13 2c 0b 00 10 00 22 18 02 04 00 +63 63 00 00 00 32 00 4f 72 6e 74 44 72 6d 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntDrm..3 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 01 07 04 00 00 00 48 02 0b 1f 16 00 03 00 00 00 55 00 0c 1f 09 06 04 0b +00 00 3e 03 13 1f 0c 1f 06 00 00 00 62 00 13 2c 0b 00 10 00 22 18 02 04 00 +63 63 00 00 00 32 00 4f 72 6e 74 44 72 6d 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntDrm..4 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0a 09 06 00 00 02 4b 01 0b 1f 16 00 03 00 00 03 38 20 0c 1f 0b 09 06 0b +00 05 59 01 13 1f 0c 1f 06 00 00 06 62 08 13 2c 0b 00 10 00 22 0c 02 04 00 +63 63 00 00 00 32 00 4f 72 6e 74 44 72 6d 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntDrm..4 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0a 09 06 00 00 00 4b 01 0b 1f 16 00 03 00 00 00 38 20 0c 1f 0b 09 06 0b +00 00 59 01 13 1f 0c 1f 06 00 00 00 62 08 13 2c 0b 00 10 00 22 0c 02 04 00 +63 63 00 00 00 32 00 4f 72 6e 74 44 72 6d 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntDrm..5 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0d 12 07 0e 00 03 43 31 1b 1f 10 0c 06 0e 00 03 48 08 0c 1f 09 16 0a 0d +00 04 61 04 0b 1b 0c 0c 06 0d 00 04 62 04 0b 2c 0b 00 10 00 22 18 02 04 00 +63 63 00 00 00 32 00 4f 72 6e 74 44 72 6d 2e 2e 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntDrm..5 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0d 12 07 0e 00 00 43 31 1b 1f 10 0c 06 0e 00 00 48 08 0c 1f 09 16 0a 0d +00 00 61 04 0b 1b 0c 0c 06 0d 00 00 62 04 0b 2c 0b 00 10 00 22 18 02 04 00 +63 63 00 00 00 32 00 4f 72 6e 74 44 72 6d 2e 2e 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntDrm..6 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 0a 05 05 0c 00 03 4d 04 1b 00 0f 00 01 09 00 02 61 09 03 1c 09 09 07 0d +00 04 63 00 13 1c 09 09 07 0c 00 07 62 00 0b 4c 23 00 00 00 22 18 02 04 00 +63 63 00 00 00 32 00 4f 72 6e 74 44 72 6d 2e 2e 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntDrm..6 +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 0a 05 05 0c 00 00 4d 04 1b 00 0f 00 01 09 00 00 61 09 03 1c 09 09 07 0d +00 00 63 00 13 1c 09 09 07 0c 00 00 62 00 0b 4c 23 00 00 00 22 18 02 04 00 +63 63 00 00 00 32 00 4f 72 6e 74 44 72 6d 2e 2e 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntDrm..6 +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +0f 0a 05 05 0c 00 00 4d 04 1b 00 0f 00 00 09 00 00 61 09 03 1c 09 09 07 0d +00 00 63 00 13 1c 09 09 07 0c 00 00 62 00 0b 4c 23 00 00 00 22 18 02 04 00 +63 63 00 00 00 32 00 4f 72 6e 74 44 72 6d 2e 2e 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntDrm..7 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0a 09 06 00 00 05 48 02 13 1f 16 00 03 00 00 03 53 01 12 1f 0b 09 06 0b +00 03 57 03 13 1f 0c 1f 06 00 00 05 62 00 13 2c 0b 00 10 00 22 0c 02 04 00 +63 63 00 00 00 32 00 4f 72 6e 74 44 72 6d 2e 2e 37 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntDrm..7 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0a 09 06 00 00 00 48 02 13 1f 16 00 03 00 00 00 53 01 12 1f 0b 09 06 0b +00 00 57 03 13 1f 0c 1f 06 00 00 00 62 00 13 2c 0b 00 10 00 22 0c 02 04 00 +63 63 00 00 00 32 00 4f 72 6e 74 44 72 6d 2e 2e 37 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntDrm..8 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0a 09 06 00 00 02 48 02 13 1f 16 00 03 00 00 03 53 01 12 1f 0b 09 06 0b +00 06 57 05 13 1f 0c 1f 06 00 00 04 62 00 13 32 0b 00 10 00 22 0c 02 04 00 +63 63 00 00 00 32 00 4f 72 6e 74 44 72 6d 2e 2e 38 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntDrm..8 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0a 09 06 00 00 00 48 02 13 1f 16 00 03 00 00 00 53 01 12 1f 0b 09 06 0b +00 00 57 05 13 1f 0c 1f 06 00 00 00 62 00 13 32 0b 00 10 00 22 0c 02 04 00 +63 63 00 00 00 32 00 4f 72 6e 74 44 72 6d 2e 2e 38 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntDrm..9 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0b 09 06 00 00 03 30 08 1b 1f 16 00 03 00 00 02 44 01 12 1f 1a 09 06 0b +00 05 5f 05 13 1f 0c 1f 06 00 00 04 62 00 13 32 0b 00 10 00 22 0c 02 04 00 +63 63 00 00 00 32 00 4f 72 6e 74 44 72 6d 2e 2e 39 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntDrm..9 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0b 09 06 00 00 00 30 08 1b 1f 16 00 03 00 00 00 44 01 12 1f 1a 09 06 0b +00 00 5f 05 13 1f 0c 1f 06 00 00 00 62 00 13 32 0b 00 10 00 22 0c 02 04 00 +63 63 00 00 00 32 00 4f 72 6e 74 44 72 6d 2e 2e 39 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntDrm.10 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0b 09 06 00 00 03 30 03 1b 18 0f 18 07 05 00 04 44 09 12 1f 1a 09 06 0b +00 03 37 07 13 18 0f 0c 08 00 00 06 62 01 13 33 0b 00 10 00 22 0c 02 04 00 +63 63 00 00 00 32 00 4f 72 6e 74 44 72 6d 2e 31 30 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntDrm.10 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0b 09 06 00 00 00 30 03 1b 18 0f 18 07 05 00 00 44 09 12 1f 1a 09 06 0b +00 00 37 07 13 18 0f 0c 08 00 00 00 62 01 13 33 0b 00 10 00 22 0c 02 04 00 +63 63 00 00 00 32 00 4f 72 6e 74 44 72 6d 2e 31 30 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntEchoDr +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 18 0f 06 0f 63 02 5b 08 1b 0f 0a 03 07 0d 00 04 48 00 03 19 06 0f 06 04 +00 06 63 00 13 1c 05 03 07 0d 00 05 5d 00 0b 2c 26 1c 0e 00 70 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 45 63 68 6f 44 72 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntEchoDr +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +12 18 0f 06 0f 63 00 5b 08 1b 0f 0a 03 07 0d 00 00 48 00 03 19 06 0f 06 04 +00 00 63 00 13 1c 05 03 07 0d 00 00 5d 00 0b 2c 26 1c 0e 00 70 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 45 63 68 6f 44 72 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Percussive +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 05 04 0f 00 00 5a 0b 03 1f 12 0c 05 08 46 00 5f 03 03 1f 12 09 06 0a +00 05 4e 00 03 1f 1f 0c 06 0f 00 05 5a 07 0b 3c 23 00 00 00 62 18 04 04 00 +63 32 00 00 00 32 00 50 65 72 63 75 73 73 69 76 65 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Percussive +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 05 04 0f 00 00 5a 0b 03 1f 12 0c 05 08 46 00 5f 01 03 1f 12 09 06 0a +00 00 4e 00 03 1f 1f 0c 06 0f 00 00 5a 07 0b 3c 23 00 00 00 62 18 04 04 00 +63 32 00 00 00 32 00 50 65 72 63 75 73 73 69 76 65 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Simmons1 * +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0d 00 02 00 00 00 63 01 03 1f 00 00 02 00 00 00 42 00 03 1f 09 00 04 00 +00 00 53 0c 03 1f 10 00 07 00 00 00 63 00 0b 41 02 00 5f 00 72 18 02 04 00 +28 63 00 00 00 32 00 53 69 6d 6d 6f 6e 73 31 20 2a 63 63 63 32 32 32 00 01 +00 23 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Simmons2 * +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0d 00 02 00 00 00 63 01 03 1f 00 00 05 00 00 00 3c 00 03 1f 09 00 01 00 +00 00 4b 0c 03 1f 0f 00 06 00 00 00 63 00 0b 41 02 00 5f 00 72 18 02 04 00 +28 63 00 00 00 32 00 53 69 6d 6d 6f 6e 73 32 20 2a 63 63 63 32 32 32 00 01 +00 23 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Skankin' +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 19 08 0a 03 00 03 63 0b 10 1f 13 05 0b 05 00 03 58 00 0b 1f 19 06 0b 05 +00 03 63 0a 0e 1f 0f 11 09 07 00 04 63 04 03 3a 14 00 00 00 42 18 02 04 00 +63 32 00 32 00 32 00 53 6b 61 6e 6b 69 6e 27 20 20 63 63 63 32 32 32 00 30 +20 30 00 20 00 00 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Snare * +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 00 00 01 00 00 00 63 32 03 1f 0e 00 01 00 00 00 59 08 13 1f 00 00 01 00 +00 00 54 08 1b 1f 1a 10 08 0f 00 00 63 14 0b 3a 23 00 00 00 62 0c 04 04 00 +63 32 00 00 00 32 00 53 6e 61 72 65 20 20 20 20 2a 63 63 63 32 32 32 0e 30 +08 0a 00 20 08 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Snare 1 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank D, voice 3 +1f 18 00 01 0f 00 00 5a 38 06 1f 15 09 03 0b 00 00 63 00 00 1f 0a 12 08 0e +00 02 63 00 00 1f 0f 10 08 0a 00 02 63 3c 06 7c 63 00 63 00 73 18 04 04 00 +28 32 00 00 00 32 00 53 6e 61 72 65 20 20 20 20 31 63 63 63 32 32 32 0f 0e +01 07 08 00 09 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Snare 1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 18 00 01 0f 00 00 5a 38 06 1f 15 09 03 0b 00 00 63 00 00 1f 0d 12 08 0e +00 02 63 00 00 1f 0f 10 08 0d 00 02 63 3c 06 7c 63 00 63 00 73 18 04 04 00 +28 32 00 00 00 32 00 53 6e 61 72 65 20 20 20 20 31 63 63 63 32 32 32 0f 0e +01 07 08 00 09 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Snare 2 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank D, voice 4 +1f 1a 00 05 0f 00 40 61 3c 1e 1f 15 09 04 0b 00 44 4e 2c 18 1b 13 13 09 0e +00 42 63 30 00 1f 13 13 07 0e 00 42 63 2c 06 7c 63 00 30 0f 6a 0c 04 04 00 +28 32 00 00 00 32 00 53 6e 61 72 65 20 20 20 20 32 63 63 63 32 32 32 0c 09 +08 01 08 0c 08 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Snare 1 +** Source: Yamaha TX81Z factory preset, bank D, voice 28 +1f 1f 00 05 0f 00 00 62 32 03 1f 14 08 05 08 00 00 5f 00 0b 1f 1f 10 08 0f +0c 00 63 0b 1b 1f 1f 0f 08 0f 00 00 63 05 0b 3b 23 00 00 00 62 0c 04 04 00 +63 32 00 00 00 32 00 53 6e 61 72 65 20 31 20 20 20 63 63 63 32 32 32 08 00 +00 02 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Snare 2 +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank D, voice 29 +1f 00 00 05 0f 00 00 63 32 03 1f 14 08 05 08 00 01 63 02 0b 1f 04 10 08 0f +00 00 63 0b 0b 1f 1f 0f 08 0f 00 00 63 05 0b 3c 23 00 00 00 62 0c 04 04 00 +63 32 00 00 00 32 00 53 6e 61 72 65 20 32 20 20 20 63 63 63 32 32 32 07 60 +00 00 00 70 08 00 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Snare....1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 01 0f 00 00 60 0b 00 1f 1a 0a 05 0a 00 00 58 06 03 13 1f 11 08 0f +00 05 5e 04 03 1f 1f 10 07 0f 00 04 57 00 03 3c 23 00 00 00 62 0c 04 04 00 +63 32 00 00 00 32 00 53 6e 61 72 65 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Snare....1 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 01 0f 00 00 60 0b 00 1f 1a 0a 05 0a 00 00 58 06 03 13 1f 11 08 0f +00 00 5e 04 03 1f 1f 10 07 0f 00 00 57 00 03 3c 23 00 00 00 62 0c 04 04 00 +63 32 00 00 00 32 00 53 6e 61 72 65 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Snare....1 +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +1f 1f 00 00 0f 00 00 60 0b 00 1f 1a 0a 05 0a 00 00 58 06 03 13 1f 11 08 0f +00 00 5e 04 03 1f 1f 10 07 0f 00 00 57 00 03 3c 23 00 00 00 62 0c 04 04 00 +63 32 00 00 00 32 00 53 6e 61 72 65 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Snare....2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 01 0f 00 00 63 3f 03 1f 1a 0a 05 0a 00 00 4f 06 03 13 16 11 08 0d +00 05 63 06 03 1f 1f 10 08 0f 00 05 63 02 03 28 23 00 00 00 52 0c 04 04 00 +63 32 00 00 00 32 00 53 6e 61 72 65 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Snare....2 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 01 0f 00 00 63 3f 03 1f 1a 0a 05 0a 00 00 4f 06 03 13 16 11 08 0d +00 00 63 06 03 1f 1f 10 08 0f 00 00 63 02 03 28 23 00 00 00 52 0c 04 04 00 +63 32 00 00 00 32 00 53 6e 61 72 65 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Snare....2 +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +1f 1f 00 00 0f 00 00 63 3f 03 1f 1a 0a 05 0a 00 00 4f 06 03 13 16 11 08 0d +00 00 63 06 03 1f 1f 10 08 0f 00 00 63 02 03 28 23 00 00 00 52 0c 04 04 00 +63 32 00 00 00 32 00 53 6e 61 72 65 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Snare....3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 05 0f 00 00 63 32 03 1f 15 0f 05 09 14 00 21 06 03 1f 1f 12 08 0f +00 04 53 00 0b 1f 1f 10 08 0f 00 04 63 01 03 3b 23 00 00 00 62 18 07 04 00 +63 32 00 00 00 32 00 53 6e 61 72 65 2e 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Snare....3 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 05 0f 00 00 63 32 03 1f 15 0f 05 09 14 00 21 06 03 1f 1f 12 08 0f +00 00 53 00 0b 1f 1f 10 08 0f 00 00 63 01 03 3b 23 00 00 00 62 18 07 04 00 +63 32 00 00 00 32 00 53 6e 61 72 65 2e 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Snare....4 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 05 0f 00 01 63 32 03 1f 13 10 05 05 14 01 47 3f 13 1f 1f 12 08 0f +00 06 63 00 0b 1f 1f 0f 08 0f 00 05 43 3f 03 3c 23 00 00 00 62 18 07 04 00 +63 32 00 00 00 32 00 53 6e 61 72 65 2e 2e 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Snare....4 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 05 0f 00 00 63 32 03 1f 13 10 05 05 14 00 47 3f 13 1f 1f 12 08 0f +00 00 63 00 0b 1f 1f 0f 08 0f 00 00 43 3f 03 3c 23 00 00 00 62 18 07 04 00 +63 32 00 00 00 32 00 53 6e 61 72 65 2e 2e 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SnareDrm.* +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 1a 00 01 0f 00 00 63 1c 03 1f 14 00 01 00 00 00 51 1c 03 1f 1f 0e 07 0f +00 02 63 00 0b 1f 12 0f 06 00 00 02 63 24 03 3c 23 00 00 00 62 24 02 04 00 +28 32 00 00 00 32 00 53 6e 61 72 65 44 72 6d 2e 2a 63 63 63 32 32 32 08 0e +08 0d 08 02 09 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Snare&Tom +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 00 00 05 0f 00 00 63 32 03 1f 10 08 05 08 00 01 63 02 0b 1f 04 10 08 0f +00 00 63 0b 0b 1f 1f 0f 00 0f 2e 00 63 05 0b 3c 23 24 00 00 62 0c 04 04 00 +63 32 00 00 00 32 00 53 6e 61 72 65 26 54 6f 6d 20 63 63 63 32 32 32 07 30 +00 00 00 70 08 00 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Steel Drum +** Controls: KV +** Source: Yamaha DX11 factory preset, bank B, voice 32 +14 10 10 06 0a 1a 03 27 30 03 13 08 00 04 0a 1a 01 42 04 01 15 0c 0e 06 0c +00 02 4c 0b 03 18 0c 0f 05 0f 00 01 5f 04 0a 01 20 00 00 00 52 18 02 04 00 +28 32 00 00 00 32 00 53 74 65 65 6c 20 44 72 75 6d 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Steel Drum +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +14 10 10 06 0a 1a 03 27 30 03 13 08 00 04 0d 1a 01 42 04 01 15 0c 0e 06 0c +00 02 4c 0b 03 18 0c 0f 05 0f 00 01 5f 04 0d 01 20 00 00 00 52 18 02 04 00 +28 32 00 00 00 32 00 53 74 65 65 6c 20 44 72 75 6d 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SteelDrum +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 09 04 03 0a 1a 07 44 05 08 0d 08 0c 05 0b 32 06 40 13 0b 0e 05 03 04 0a +00 04 28 1a 0e 15 08 0c 06 0c 00 05 63 08 0c 02 10 00 09 00 52 0c 02 04 00 +63 32 00 00 00 32 00 53 74 65 65 6c 44 72 75 6d 20 63 63 63 32 32 32 10 37 +00 10 00 26 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SteelDrum1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 06 09 03 0e 00 03 54 0a 11 1b 0a 0d 06 0e 2d 03 63 04 15 1b 0a 0d 06 0e +43 06 5f 04 15 1f 0c 0d 06 0e 00 05 63 04 0e 66 23 00 00 00 32 0c 06 04 00 +63 32 00 32 00 32 00 53 74 65 65 6c 44 72 75 6d 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SteelDrum1 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 06 09 03 0e 00 00 54 0a 11 1b 0a 0d 06 0e 2d 00 63 04 15 1b 0a 0d 06 0e +43 00 5f 04 15 1f 0c 0d 06 0e 00 00 63 04 0e 66 23 00 00 00 32 0c 06 04 00 +63 32 00 32 00 32 00 53 74 65 65 6c 44 72 75 6d 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SteelDrum2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 06 09 03 0e 00 42 54 07 11 1b 0a 0d 06 0e 2d 43 63 08 15 1b 0a 0d 06 0e +43 46 5f 04 15 1f 0c 0d 06 0e 00 44 63 04 0e 2c 19 00 0a 15 26 0c 06 04 00 +63 32 00 32 00 32 00 53 74 65 65 6c 44 72 75 6d 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SteelDrum2 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 06 09 03 0e 00 40 54 07 11 1b 0a 0d 06 0e 2d 40 63 08 15 1b 0a 0d 06 0e +43 40 5f 04 15 1f 0c 0d 06 0e 00 40 63 04 0e 2c 19 00 0a 15 26 0c 06 04 00 +63 32 00 32 00 32 00 53 74 65 65 6c 44 72 75 6d 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SteelDrum3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +14 10 00 03 00 00 01 49 0b 0b 14 0a 00 04 00 00 03 3c 06 03 14 0a 00 04 00 +00 05 3f 04 03 14 0a 00 06 00 00 05 63 04 03 3a 23 00 00 00 62 18 05 04 00 +63 63 00 00 00 32 00 53 74 65 65 6c 44 72 75 6d 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SteelDrum3 +** Source: from a library of patches collected by Duane Bowker, author unknown +14 10 00 03 00 00 00 49 0b 0b 14 0a 00 04 00 00 00 3c 06 03 14 0a 00 04 00 +00 00 3f 04 03 14 0a 00 06 00 00 00 63 04 03 3a 23 00 00 00 62 18 05 04 00 +63 63 00 00 00 32 00 53 74 65 65 6c 44 72 75 6d 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SteelDrum4 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +14 10 00 03 00 00 02 42 0b 03 14 0a 00 04 00 00 03 42 06 03 14 0a 00 04 00 +00 06 2f 06 03 14 0a 00 06 00 00 06 63 04 03 3a 23 00 00 00 62 18 05 04 00 +63 63 00 00 00 32 00 53 74 65 65 6c 44 72 75 6d 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SteelDrum4 +** Source: from a library of patches collected by Duane Bowker, author unknown +14 10 00 03 00 00 00 42 0b 03 14 0a 00 04 00 00 00 42 06 03 14 0a 00 04 00 +00 00 2f 06 03 14 0a 00 06 00 00 00 63 04 03 3a 23 00 00 00 62 18 05 04 00 +63 63 00 00 00 32 00 53 74 65 65 6c 44 72 75 6d 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SyBon +** Controls: KV +** Source: Yamaha DX11 factory preset, bank D, voice 14 +19 15 1f 02 00 4b 04 5f 00 1e 18 11 09 06 04 1e 04 5d 00 11 17 0b 04 04 0a +32 00 59 04 18 1b 12 0a 05 0a 00 00 5d 00 16 03 23 00 00 00 62 0c 04 04 00 +28 32 00 00 00 32 00 53 79 42 6f 6e 20 20 20 20 20 63 19 19 32 15 15 00 02 +00 07 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SyBon +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +19 15 1f 02 00 4b 04 5f 00 1e 18 11 09 06 04 1e 04 5d 00 11 17 0b 04 04 0d +32 00 59 04 18 1b 12 0d 05 0d 00 00 5d 00 16 03 23 00 00 00 62 0c 04 04 00 +28 32 00 00 00 32 00 53 79 42 6f 6e 20 20 20 20 20 63 19 19 32 15 15 00 02 +00 07 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + +* SUBCATEGORY Drum2 + + +** Name: SynthDrm.1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 18 1f 0a 0f 00 02 3c 0f 03 18 18 16 0b 04 2d 03 55 04 05 15 15 0c 0a 00 +43 05 63 13 03 15 13 0c 0b 00 00 04 63 08 03 7c 3f 00 63 00 60 0c 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm.1 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +18 18 1f 0a 0f 00 00 3c 0f 03 18 18 16 0b 04 2d 00 55 04 05 15 15 0c 0a 00 +43 00 63 13 03 15 13 0c 0b 00 00 00 63 08 03 7c 3f 00 63 00 60 0c 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm.2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 18 1f 0a 0f 00 01 5d 3f 03 18 18 16 0b 04 2d 01 55 04 15 15 15 0c 0a 00 +43 04 63 09 0b 15 13 0c 0b 00 00 05 63 00 0b 7c 3f 00 63 00 60 0c 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm.2 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +18 18 1f 0a 0f 00 00 5d 3f 03 18 18 16 0b 04 2d 00 55 04 15 15 15 0c 0a 00 +43 00 63 09 0b 15 13 0c 0b 00 00 00 63 00 0b 7c 3f 00 63 00 60 0c 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm.3 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 18 1f 0a 0f 00 02 63 04 03 1f 18 16 0b 04 2d 00 55 04 15 15 15 0c 0a 00 +43 03 63 04 0b 1c 13 0c 0b 00 00 05 63 00 0b 7c 3f 00 63 00 60 18 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm.3 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +18 18 1f 0a 0f 00 00 63 04 03 1f 18 16 0b 04 2d 00 55 04 15 15 15 0c 0a 00 +43 00 63 04 0b 1c 13 0c 0b 00 00 00 63 00 0b 7c 3f 00 63 00 60 18 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm.4 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 18 1f 0a 0f 00 01 63 30 03 19 0c 07 04 0f 2d 01 63 01 03 15 15 0c 0a 00 +43 05 63 04 0b 1f 12 09 07 00 00 06 63 00 03 24 1e 63 00 00 73 18 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm.4 +** Source: from a library of patches collected by Duane Bowker, author unknown +18 18 1f 0a 0f 00 00 63 30 03 19 0c 07 04 0f 2d 00 63 01 03 15 15 0c 0a 00 +43 00 63 04 0b 1f 12 09 07 00 00 00 63 00 03 24 1e 63 00 00 73 18 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm.5 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 18 1f 0a 0f 00 03 63 2c 1b 1f 1f 07 05 0f 2d 03 5c 00 0b 1f 1f 00 0f 0f +43 04 63 00 0b 1f 11 09 05 00 00 06 63 00 03 24 1e 63 00 00 73 18 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 2e 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm.5 +** Source: from a library of patches collected by Duane Bowker, author unknown +18 18 1f 0a 0f 00 00 63 2c 1b 1f 1f 07 05 0f 2d 00 5c 00 0b 1f 1f 00 0f 0f +43 00 63 00 0b 1f 11 09 05 00 00 00 63 00 03 24 1e 63 00 00 73 18 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 2e 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm.6 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 18 1f 0a 0f 00 02 5d 01 03 18 18 16 0b 04 2d 03 55 01 15 15 15 0c 0a 00 +43 05 63 00 0b 15 13 0c 0b 00 00 45 63 00 0b 5a 17 00 00 2a 66 0c 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 2e 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm.6 +** Source: from a library of patches collected by Duane Bowker, author unknown +18 18 1f 0a 0f 00 00 5d 01 03 18 18 16 0b 04 2d 00 55 01 15 15 15 0c 0a 00 +43 00 63 00 0b 15 13 0c 0b 00 00 40 63 00 0b 5a 17 00 00 2a 66 0c 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 2e 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm.7 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 18 1f 0a 0f 00 02 5d 3f 03 18 18 16 0b 04 2d 03 55 01 15 15 15 0c 0a 00 +43 05 63 04 0b 1c 13 0c 0b 00 00 45 63 04 0b 5b 17 00 00 2a 66 0c 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 2e 37 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm.7 +** Source: from a library of patches collected by Duane Bowker, author unknown +18 18 1f 0a 0f 00 00 5d 3f 03 18 18 16 0b 04 2d 00 55 01 15 15 15 0c 0a 00 +43 00 63 04 0b 1c 13 0c 0b 00 00 40 63 04 0b 5b 17 00 00 2a 66 0c 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 2e 37 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm.8 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 06 07 02 00 00 02 19 3f 03 19 19 09 07 00 2d 02 63 04 15 1f 1f 06 06 0c +43 03 63 07 0b 10 10 12 09 0c 00 45 63 00 0b 5a 17 00 00 2a 66 0c 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 2e 38 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm.8 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 06 07 02 00 00 00 19 3f 03 19 19 09 07 00 2d 00 63 04 15 1f 1f 06 06 0c +43 00 63 07 0b 10 10 12 09 0c 00 40 63 00 0b 5a 17 00 00 2a 66 0c 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 2e 38 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm.9 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 1f 02 0a 00 01 39 3d 03 1f 13 1f 06 00 2d 02 63 04 13 1f 0c 00 06 00 +43 03 63 00 0b 1f 10 1f 09 06 00 45 63 00 0b 5c 17 00 00 2a 66 0c 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 2e 39 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm.9 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 1f 02 0a 00 00 39 3d 03 1f 13 1f 06 00 2d 00 63 04 13 1f 0c 00 06 00 +43 00 63 00 0b 1f 10 1f 09 06 00 40 63 00 0b 5c 17 00 00 2a 66 0c 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 2e 39 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm10 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 1f 02 0a 00 01 39 3a 03 1f 13 1f 06 00 2d 02 63 01 13 1f 0c 00 06 00 +43 05 63 01 0b 1f 10 1f 09 06 00 06 63 05 0b 64 08 00 63 00 60 0c 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 31 30 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm10 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 1f 02 0a 00 00 39 3a 03 1f 13 1f 06 00 2d 00 63 01 13 1f 0c 00 06 00 +43 00 63 01 0b 1f 10 1f 09 06 00 00 63 05 0b 64 08 00 63 00 60 0c 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 31 30 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm11 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1a 15 00 07 09 00 02 4a 00 13 1f 1f 10 04 0a 00 03 54 01 13 1d 1a 06 07 04 +00 05 63 05 03 1f 10 1f 05 00 00 05 63 00 0b 2c 23 00 00 00 62 18 05 04 00 +63 00 00 00 00 32 00 53 79 6e 74 68 44 72 6d 31 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm11 +** Source: from a library of patches collected by Duane Bowker, author unknown +1a 15 00 07 09 00 00 4a 00 13 1f 1f 10 04 0a 00 00 54 01 13 1d 1a 06 07 04 +00 00 63 05 03 1f 10 1f 05 00 00 00 63 00 0b 2c 23 00 00 00 62 18 05 04 00 +63 00 00 00 00 32 00 53 79 6e 74 68 44 72 6d 31 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm12 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 1f 19 06 0f 00 02 2d 34 1b 1f 14 1f 06 00 2d 02 63 04 13 1f 0b 00 06 00 +43 44 63 00 0b 1f 10 1f 09 06 00 46 63 07 0b 5c 24 1c 02 4d 76 0c 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 31 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm12 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +12 1f 19 06 0f 00 00 2d 34 1b 1f 14 1f 06 00 2d 00 63 04 13 1f 0b 00 06 00 +43 40 63 00 0b 1f 10 1f 09 06 00 40 63 07 0b 5c 24 1c 02 4d 76 0c 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 31 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm13 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 18 1f 0a 0f 00 04 61 3f 03 18 18 16 0b 04 2d 04 5f 06 05 15 15 0c 0a 00 +43 04 63 07 03 15 13 0c 0b 00 00 06 63 01 03 7c 3f 00 63 00 60 0c 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 31 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm13 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +18 18 1f 0a 0f 00 00 61 3f 03 18 18 16 0b 04 2d 00 5f 06 05 15 15 0c 0a 00 +43 00 63 07 03 15 13 0c 0b 00 00 00 63 01 03 7c 3f 00 63 00 60 0c 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 31 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm14 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 18 1f 0a 0f 00 03 61 3f 03 18 18 16 0b 04 2d 03 56 01 05 15 15 0c 0a 00 +43 03 42 07 03 15 13 0c 0b 00 00 04 63 01 03 78 3f 00 63 00 60 0c 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 31 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm14 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +18 18 1f 0a 0f 00 00 61 3f 03 18 18 16 0b 04 2d 00 56 01 05 15 15 0c 0a 00 +43 00 42 07 03 15 13 0c 0b 00 00 00 63 01 03 78 3f 00 63 00 60 0c 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 31 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm15 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 18 1f 0a 0f 00 03 63 08 03 13 18 0e 0b 0a 2d 03 35 00 05 1f 18 0d 0a 09 +43 04 5e 04 03 15 11 0c 0b 00 00 05 63 00 03 7b 23 00 00 00 32 0c 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 31 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm15 +** Source: from a library of patches collected by Duane Bowker, author unknown +18 18 1f 0a 0f 00 00 63 08 03 13 18 0e 0b 0a 2d 00 35 00 05 1f 18 0d 0a 09 +43 00 5e 04 03 15 11 0c 0b 00 00 00 63 00 03 7b 23 00 00 00 32 0c 06 04 00 +63 32 00 32 00 32 00 53 79 6e 74 68 44 72 6d 31 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm16 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 1e 08 01 00 63 02 63 0a 0b 14 07 16 0f 00 00 02 51 00 1b 1f 0c 1f 06 00 +00 05 61 01 03 1c 0f 07 07 07 3e 04 63 03 0b 7c 00 00 00 00 73 0c 02 04 00 +63 62 00 00 00 32 00 53 79 6e 74 68 44 72 6d 31 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SynthDrm16 +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 1e 08 01 00 63 00 63 0a 0b 14 07 16 0f 00 00 00 51 00 1b 1f 0c 1f 06 00 +00 00 61 01 03 1c 0f 07 07 07 3e 00 63 03 0b 7c 00 00 00 00 73 0c 02 04 00 +63 62 00 00 00 32 00 53 79 6e 74 68 44 72 6d 31 36 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tibet Drum +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 0f 09 01 0c 32 02 59 0a 15 1c 0f 1f 02 0a 1e 03 34 10 0a 1c 09 0d 02 0a +32 05 5d 04 0a 1c 09 0d 02 0a 1e 06 61 04 0e 24 20 2c 14 00 42 0c 0c 04 00 +63 32 32 00 00 32 00 54 69 62 65 74 20 44 72 75 6d 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tibet Drum +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 0f 09 01 0c 32 00 59 0a 15 1c 0f 1f 02 0a 1e 00 34 10 0a 1c 09 0d 02 0a +32 00 5d 04 0a 1c 09 0d 02 0a 1e 00 61 04 0e 24 20 2c 14 00 42 0c 0c 04 00 +63 32 32 00 00 32 00 54 69 62 65 74 20 44 72 75 6d 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Timbale..1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 07 03 05 0f 00 00 37 02 06 15 09 04 04 0f 00 00 47 01 00 13 1f 00 06 0f +00 04 5f 03 06 1f 0c 07 06 00 00 04 63 00 13 3c 0b 00 10 00 22 18 07 04 00 +63 32 63 32 00 32 00 54 69 6d 62 61 6c 65 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Timbale..1 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 07 03 05 0f 00 00 37 02 06 15 09 04 04 0f 00 00 47 01 00 13 1f 00 06 0f +00 00 5f 03 06 1f 0c 07 06 00 00 00 63 00 13 3c 0b 00 10 00 22 18 07 04 00 +63 32 63 32 00 32 00 54 69 6d 62 61 6c 65 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Timbale..2 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 01 07 04 00 00 00 3d 02 06 1f 18 09 03 0a 00 00 53 01 08 1f 09 06 04 0b +00 05 57 03 06 1f 0c 07 06 00 00 05 63 00 13 2c 0b 00 10 00 22 18 07 04 00 +63 32 63 32 00 32 00 54 69 6d 62 61 6c 65 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Timbale..2 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 01 07 04 00 00 00 3d 02 06 1f 18 09 03 0a 00 00 53 01 08 1f 09 06 04 0b +00 00 57 03 06 1f 0c 07 06 00 00 00 63 00 13 2c 0b 00 10 00 22 18 07 04 00 +63 32 63 32 00 32 00 54 69 6d 62 61 6c 65 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Timbales * +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 00 00 02 00 13 00 50 04 0b 1f 0d 00 07 00 0c 00 55 01 03 1f 11 00 09 00 +32 00 3c 2b 03 1f 0e 00 06 00 00 06 63 08 03 41 02 00 5f 00 72 00 02 04 00 +28 63 00 00 00 32 00 54 69 6d 62 61 6c 65 73 20 2a 63 63 63 32 32 32 00 1a +00 22 03 04 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Timpani * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0f 08 03 00 00 07 4f 00 00 1f 11 06 03 0b 36 02 4b 00 08 1f 12 0c 04 0f +00 05 4f 01 0e 1d 0b 00 04 00 00 00 63 00 0b 02 07 00 00 00 62 18 0c 04 00 +28 50 00 00 00 32 00 54 69 6d 70 61 6e 69 20 20 2a 63 63 63 32 32 32 00 32 +00 02 10 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Timpani +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank D, voice 23 +1d 12 00 03 00 00 00 41 3c 03 1f 0f 07 04 0f 00 00 3c 00 03 1f 0f 11 03 0c +3b 01 52 02 03 1f 11 0c 04 0f 00 02 63 00 03 3a 15 00 03 00 6a 0c 07 04 00 +63 32 00 00 00 32 00 54 69 6d 70 61 6e 69 20 20 20 63 63 63 32 32 32 08 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Timpani..1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1d 12 00 03 00 00 00 37 00 03 1f 13 0c 04 0b 00 00 48 00 03 1f 07 04 02 0c +3b 05 3f 02 03 1f 0c 0c 04 0f 00 06 63 00 03 2a 15 00 03 00 6a 0c 07 04 00 +63 32 00 00 00 32 00 54 69 6d 70 61 6e 69 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Timpani..1 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 12 00 03 00 00 00 37 00 03 1f 13 0c 04 0b 00 00 48 00 03 1f 07 04 02 0c +3b 00 3f 02 03 1f 0c 0c 04 0f 00 00 63 00 03 2a 15 00 03 00 6a 0c 07 04 00 +63 32 00 00 00 32 00 54 69 6d 70 61 6e 69 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Timpani..2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1d 12 00 02 00 00 00 3d 02 0b 1f 1f 08 04 0f 00 00 37 00 03 1f 0f 07 03 0c +3b 05 4f 00 03 1f 1f 0c 04 0f 00 05 63 02 0b 3a 15 00 03 00 6a 00 07 04 00 +63 32 00 00 00 32 00 54 69 6d 70 61 6e 69 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Timpani..2 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 12 00 02 00 00 00 3d 02 0b 1f 1f 08 04 0f 00 00 37 00 03 1f 0f 07 03 0c +3b 00 4f 00 03 1f 1f 0c 04 0f 00 00 63 02 0b 3a 15 00 03 00 6a 00 07 04 00 +63 32 00 00 00 32 00 54 69 6d 70 61 6e 69 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tom 1 +** Source: Yamaha DX11 factory preset, bank D, voice 5 +1f 05 0a 08 0e 00 00 5d 08 03 1f 0c 10 07 04 00 00 34 18 03 1f 0e 0a 06 00 +00 00 51 20 03 1f 10 0a 07 0f 00 00 5e 04 03 01 23 00 00 00 62 00 04 04 00 +28 32 00 00 00 32 00 54 6f 6d 20 20 20 20 20 20 31 63 17 23 32 2e 2e 08 05 +08 04 09 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tom 1 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 05 0d 08 0e 00 00 5d 08 03 1f 0c 10 07 04 00 00 34 18 03 1f 0e 0a 06 00 +00 00 51 20 03 1f 10 0d 07 0f 00 00 5e 04 03 01 23 00 00 00 62 00 04 04 00 +28 32 00 00 00 32 00 54 6f 6d 20 20 20 20 20 20 31 63 17 23 32 2e 2e 08 05 +08 04 09 0d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tom 2 +** Controls: KV +** Source: Yamaha DX11 factory preset, bank D, voice 6 +1f 1f 00 01 0f 00 00 63 00 03 1f 1f 00 01 0f 13 01 37 04 0b 1f 18 11 03 06 +00 01 5e 04 0b 1f 1f 0b 06 0f 00 01 63 00 0b 3b 23 00 00 00 62 18 04 04 00 +28 32 00 00 00 32 00 54 6f 6d 20 20 20 20 20 20 32 63 25 26 32 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tom 3 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank D, voice 7 +1f 1f 00 01 0f 00 00 46 1b 03 1f 1f 00 01 0f 13 01 37 04 0b 1f 18 05 03 06 +00 01 5e 03 0b 1f 14 0b 06 0e 00 01 63 00 0b 3b 63 00 63 00 63 18 04 04 00 +28 32 00 00 00 32 00 54 6f 6d 20 20 20 20 20 20 33 63 25 26 32 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tom 4 +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank D, voice 8 +1f 1f 00 01 0f 00 00 46 06 03 1f 1f 00 01 0f 13 01 37 00 0b 1f 18 05 03 06 +00 01 5e 00 0b 1f 0b 1f 0a 0a 00 01 63 00 0b 23 63 00 63 00 63 18 04 04 00 +28 32 00 00 00 32 00 54 6f 6d 20 20 20 20 20 20 34 63 25 26 32 2c 2c 00 00 +00 02 00 52 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tom 4 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 01 0f 00 00 46 06 03 1f 1f 00 01 0f 13 01 37 00 0b 1f 18 05 03 06 +00 01 5e 00 0b 1f 0b 1f 0a 0d 00 01 63 00 0b 23 63 00 63 00 63 18 04 04 00 +28 32 00 00 00 32 00 54 6f 6d 20 20 20 20 20 20 34 63 25 26 32 2c 2c 00 00 +00 02 00 52 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tom Tom..1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 1f 17 0f 0f 00 00 00 04 03 15 1f 1b 0f 0f 00 00 5d 02 06 18 1f 10 0f 0f +00 06 00 04 06 13 16 0d 0a 0f 00 04 63 00 08 03 23 00 00 00 62 18 0c 04 00 +63 32 00 00 00 32 00 54 6f 6d 20 54 6f 6d 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tom Tom..1 +** Source: from a library of patches collected by Duane Bowker, author unknown +18 1f 17 0f 0f 00 00 00 04 03 15 1f 1b 0f 0f 00 00 5d 02 06 18 1f 10 0f 0f +00 00 00 04 06 13 16 0d 0a 0f 00 00 63 00 08 03 23 00 00 00 62 18 0c 04 00 +63 32 00 00 00 32 00 54 6f 6d 20 54 6f 6d 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tom Tom..2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 1f 1a 0f 0f 00 00 63 07 03 15 1f 1b 0f 0f 00 00 5d 02 06 18 1f 10 0f 0f +00 05 47 02 06 13 16 0d 0a 0f 00 05 63 00 08 03 23 00 00 00 62 18 0c 04 00 +63 32 00 00 00 32 00 54 6f 6d 20 54 6f 6d 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tom Tom..2 +** Source: from a library of patches collected by Duane Bowker, author unknown +18 1f 1a 0f 0f 00 00 63 07 03 15 1f 1b 0f 0f 00 00 5d 02 06 18 1f 10 0f 0f +00 00 47 02 06 13 16 0d 0a 0f 00 00 63 00 08 03 23 00 00 00 62 18 0c 04 00 +63 32 00 00 00 32 00 54 6f 6d 20 54 6f 6d 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tom Tom..3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +18 1f 1a 0f 0f 00 00 63 01 03 15 1f 1b 0f 0f 00 00 63 01 16 18 1f 10 0f 0f +00 05 63 02 06 13 16 0d 0a 0f 00 05 63 01 10 04 23 00 00 00 62 18 0c 04 00 +63 32 00 00 00 32 00 54 6f 6d 20 54 6f 6d 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tom Tom..3 +** Source: from a library of patches collected by Duane Bowker, author unknown +18 1f 1a 0f 0f 00 00 63 01 03 15 1f 1b 0f 0f 00 00 63 01 16 18 1f 10 0f 0f +00 00 63 02 06 13 16 0d 0a 0f 00 00 63 01 10 04 23 00 00 00 62 18 0c 04 00 +63 32 00 00 00 32 00 54 6f 6d 20 54 6f 6d 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tom Tom..4 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 13 0c 0a 0a 00 00 4d 0a 00 1f 13 0a 05 0d 32 00 4e 0c 03 1f 0d 0c 0a 0d +1f 05 59 10 03 1f 1c 0f 07 0f 00 05 63 0a 03 2c 23 00 00 00 62 0c 04 04 00 +63 32 00 00 00 32 00 54 6f 6d 20 54 6f 6d 2e 2e 34 63 63 63 32 32 32 00 00 +00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tom Tom..4 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 13 0c 0a 0a 00 00 4d 02 00 1f 13 0a 05 0d 32 00 4e 0c 03 1f 0d 0c 0a 0d +1f 00 59 0e 03 1f 1c 0f 07 0f 00 00 63 09 03 2c 23 00 00 00 62 0c 04 04 00 +63 32 00 00 00 32 00 54 6f 6d 20 54 6f 6d 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tom-Pany +** Controls: MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank D, voice 16 +1f 10 00 01 00 35 00 50 00 00 1f 16 04 03 09 36 00 63 00 00 13 0b 03 02 09 +3b 00 3c 03 06 1d 0c 00 06 00 00 00 5a 00 06 1a 07 00 51 00 52 0c 04 04 00 +28 32 00 00 00 32 00 54 6f 6d 2d 50 61 6e 79 20 20 63 40 43 32 18 16 00 50 +00 03 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Wood Drum +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 1f 07 0f 00 00 63 3f 03 18 1f 1f 07 0f 46 01 63 00 03 1f 1f 1f 06 0f +00 06 63 00 03 1b 1f 0f 06 0f 00 04 63 00 03 04 23 00 00 00 62 18 04 04 00 +63 32 00 00 00 32 00 57 6f 6f 64 20 44 72 75 6d 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Wood Drum +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 1f 07 0f 00 00 63 3f 03 18 1f 1f 07 0f 46 00 63 00 03 1f 1f 1f 06 0f +00 00 63 00 03 1b 1f 0f 06 0f 00 00 63 00 03 04 23 00 00 00 62 18 04 04 00 +63 32 00 00 00 32 00 57 6f 6f 64 20 44 72 75 6d 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: XyloSpring +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 16 15 0f 05 2e 04 63 04 06 10 0c 0c 03 09 00 03 3f 01 01 1f 16 0f 06 03 +00 06 63 08 03 1f 09 09 06 0c 00 06 62 00 02 7c 23 00 00 00 32 0c 02 04 00 +63 32 00 32 00 32 00 58 79 6c 6f 53 70 72 69 6e 67 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: XyloSpring +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 16 15 0f 05 2e 00 63 04 06 10 0c 0c 03 09 00 00 3f 01 01 1f 16 0f 06 03 +00 00 63 08 03 1f 09 09 06 0c 00 00 62 00 02 7c 23 00 00 00 32 0c 02 04 00 +63 32 00 32 00 32 00 58 79 6c 6f 53 70 72 69 6e 67 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Other + + +** Name: Cabassa * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 15 00 0f 00 00 00 63 1c 03 1f 0d 00 07 00 00 41 63 24 03 1f 0d 00 07 00 +00 42 63 38 03 1f 0d 00 06 00 00 42 63 24 03 7d 51 00 00 63 7f 30 02 04 00 +28 63 00 00 00 32 00 43 61 62 61 73 73 61 20 20 2a 63 63 63 32 32 32 0d 00 +0d 50 0c 00 0d 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Maracas * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 15 00 09 00 00 00 62 1c 03 1f 0d 00 07 00 00 41 63 3c 03 1f 0d 00 06 00 +00 42 63 24 03 1f 0d 00 07 00 00 42 63 3c 03 7d 59 00 00 63 7f 30 02 04 00 +28 63 00 00 00 32 00 4d 61 72 61 63 61 73 20 20 2a 63 63 63 32 32 32 0e 00 +0d 43 0e 00 0d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Metalimba +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank D, voice 4 +1f 17 00 05 05 1c 02 55 28 0b 1f 10 00 04 08 0a 02 4d 15 0e 1f 0b 00 05 08 +0c 02 4d 16 08 1f 0e 00 06 00 00 01 63 04 0b 02 23 00 00 00 62 0c 07 04 00 +63 63 00 00 00 32 00 4d 65 74 61 6c 69 6d 62 61 20 63 63 63 32 32 32 00 60 +00 01 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tambourin* +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 13 00 0f 00 00 01 63 04 03 1f 00 00 01 0f 00 01 59 24 03 1f 12 00 01 0f +00 00 45 04 03 18 10 1f 07 00 00 03 63 18 03 32 23 00 00 00 32 00 02 04 00 +28 63 00 00 00 32 00 54 61 6d 62 6f 75 72 69 6e 2a 63 63 63 32 32 32 0b 05 +0e 09 08 00 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +--Bank 27 + +* CATEGORY NOISES + +* SUBCATEGORY Noises1 + +** Name: Airplane.1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 04 02 08 0f 00 45 4d 04 03 13 12 11 03 0c 03 45 63 00 03 0f 04 03 08 0f +00 46 63 04 03 0c 12 03 03 0f 02 46 5f 00 03 0c 63 00 00 63 27 18 02 04 00 +63 63 00 00 00 32 00 41 69 72 70 6c 61 6e 65 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Airplane.1 +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 04 02 08 0f 00 40 4d 04 03 13 12 11 03 0c 03 40 63 00 03 0f 04 03 08 0f +00 40 63 04 03 0c 12 03 03 0f 02 40 5f 00 03 0c 63 00 00 63 27 18 02 04 00 +63 63 00 00 00 32 00 41 69 72 70 6c 61 6e 65 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Airplane.2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 04 02 08 0f 00 44 56 09 03 13 12 11 03 0c 03 44 63 09 03 0f 04 03 08 0f +00 44 63 04 03 0c 12 03 03 0f 02 47 5f 00 03 0c 63 00 00 63 27 18 02 04 00 +63 63 00 00 00 32 00 41 69 72 70 6c 61 6e 65 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Airplane.2 +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 04 02 08 0f 00 40 56 09 03 13 12 11 03 0c 03 40 63 09 03 0f 04 03 08 0f +00 40 63 04 03 0c 12 03 03 0f 02 40 5f 00 03 0c 63 00 00 63 27 18 02 04 00 +63 63 00 00 00 32 00 41 69 72 70 6c 61 6e 65 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Alarm Call +** Controls: MW (LFO amplitude) +** Source: Yamaha TX81Z factory preset, bank D, voice 18 +1f 1f 00 03 0f 00 00 2e 3f 00 1f 1f 00 04 0f 00 00 47 11 06 1f 1f 00 06 0f +00 40 3a 0b 00 1f 1f 00 06 0f 00 40 5c 3f 06 22 37 00 00 28 6d 18 04 04 00 +63 01 63 00 00 32 00 41 6c 61 72 6d 20 43 61 6c 6c 63 63 63 32 32 32 00 40 +0e 50 00 00 0a 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Alien 3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 05 02 04 0e 00 00 4d 08 01 19 07 04 05 0f 08 00 4c 06 00 0f 0a 00 07 0e +06 02 63 05 05 14 15 03 05 0e 00 01 62 06 00 24 26 03 05 00 46 05 03 04 00 +63 2b 00 00 00 32 00 41 6c 69 65 6e 20 33 20 20 20 63 63 63 32 32 32 01 31 +00 21 00 23 00 45 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Alien Chat +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0a 0c 01 06 0e 00 43 28 04 05 16 10 1f 05 0d 00 44 2c 04 02 16 0f 1f 06 0d +00 45 46 0a 06 15 04 1f 06 0e 00 45 63 08 03 42 32 00 00 63 05 18 02 04 00 +28 02 00 00 00 32 00 41 6c 69 65 6e 20 43 68 61 74 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Alien Chat +** Source: from a library of patches collected by Duane Bowker, author unknown +0a 0c 01 06 0e 00 40 28 04 05 16 10 1f 05 0d 00 40 2c 04 02 16 0f 1f 06 0d +00 40 46 0a 06 15 04 1f 06 0e 00 40 63 08 03 42 32 00 00 63 05 18 02 04 00 +28 02 00 00 00 32 00 41 6c 69 65 6e 20 43 68 61 74 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Artofnoiz* +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1d 0a 08 02 07 00 05 5e 0d 0b 1f 03 00 01 00 00 00 63 00 0b 1b 04 0a 01 07 +00 03 57 18 0b 1f 13 04 06 0f 00 00 63 00 13 03 23 00 00 00 32 00 02 04 00 +28 63 00 00 00 32 00 41 72 74 6f 66 6e 6f 69 7a 2a 63 63 63 32 32 32 00 00 +08 00 08 04 08 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AutoDecent +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +07 1b 0d 0d 0f 00 03 63 11 00 0c 1b 0d 0d 0f 00 04 63 13 03 0a 1b 0d 0d 0f +00 04 63 12 06 1f 1b 0d 0d 0f 00 06 63 19 03 47 25 00 00 00 32 00 02 04 00 +28 02 00 00 00 32 00 41 75 74 6f 44 65 63 65 6e 74 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AutoDecent +** Source: from a library of patches collected by Duane Bowker, author unknown +07 1b 0d 0d 0f 00 00 63 11 00 0c 1b 0d 0d 0f 00 00 63 13 03 0a 1b 0d 0d 0f +00 00 63 12 06 1f 1b 0d 0d 0f 00 00 63 19 03 47 25 00 00 00 32 00 02 04 00 +28 02 00 00 00 32 00 41 75 74 6f 44 65 63 65 6e 74 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AutoStorm1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 07 01 03 05 00 03 30 0a 00 14 0b 04 01 09 00 04 4d 15 00 14 06 01 03 05 +00 04 53 00 00 0f 09 00 01 0c 00 05 63 00 00 2b 63 00 40 00 73 00 05 04 00 +63 63 63 00 00 32 00 41 75 74 6f 53 74 6f 72 6d 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AutoStorm1 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +12 07 01 03 05 00 00 30 0a 00 14 0b 04 01 09 00 00 4d 15 00 14 06 01 03 05 +00 00 53 00 00 0f 09 00 01 0c 00 00 63 00 00 2b 63 00 40 00 73 00 05 04 00 +63 63 63 00 00 32 00 41 75 74 6f 53 74 6f 72 6d 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AutoStorm2 +** Controls: KV, MW (LFO pitch), MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 07 09 03 05 00 43 33 0d 00 12 0b 09 01 09 00 43 4d 15 00 18 06 09 03 05 +00 44 53 00 00 13 09 09 01 0c 00 45 63 00 00 5b 50 00 63 11 77 00 05 04 00 +63 63 63 00 00 32 00 41 75 74 6f 53 74 6f 72 6d 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: AutoStorm2 +** Controls: MW (LFO pitch), MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 07 09 03 05 00 40 33 0d 00 12 0b 09 01 09 00 40 4d 15 00 18 06 09 03 05 +00 40 53 00 00 13 09 09 01 0c 00 40 63 00 00 5b 50 00 63 11 77 00 05 04 00 +63 63 63 00 00 32 00 41 75 74 6f 53 74 6f 72 6d 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Big Belch +** Controls: KV, MW (LFO pitch), MW (LFO amplitude), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 0c 0b 0b 00 44 42 0d 03 1f 1b 07 09 0c 00 43 54 0d 1b 1f 1c 0c 0b 0c +00 44 63 0d 03 1f 1b 07 09 0f 00 45 63 00 1b 74 59 00 63 23 75 0c 07 04 00 +63 32 01 32 00 32 00 42 69 67 20 42 65 6c 63 68 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Big Belch +** Controls: MW (LFO pitch), MW (LFO amplitude), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 0c 0b 0b 00 40 42 0d 03 1f 1b 07 09 0c 00 40 54 0d 1b 1f 1c 0c 0b 0c +00 40 63 0d 03 1f 1b 07 09 0f 00 40 63 00 1b 74 59 00 63 23 75 0c 07 04 00 +63 32 01 32 00 32 00 42 69 67 20 42 65 6c 63 68 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Birds * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 00 00 0f 0f 00 00 00 0c 03 1c 00 00 01 0f 00 00 55 20 03 1b 12 00 01 0f +00 00 63 00 03 10 15 00 09 0e 00 03 63 00 03 02 23 00 00 00 32 00 02 04 00 +28 63 00 00 00 32 00 42 69 72 64 73 20 20 20 20 2a 63 63 63 32 32 32 0f 09 +0e 09 08 01 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Birds +** Controls: MW (LFO pitch), MW (LFO amplitude), BC (voice pitch) +** Source: Yamaha TX81Z factory preset, bank D, voice 12 +1f 1f 00 07 0f 28 00 51 01 03 1f 1f 00 0f 0f 28 00 4b 01 03 13 1f 00 0e 0f +0a 40 63 3f 03 1f 1f 00 0f 0f 0a 40 63 3f 03 04 22 00 50 5e 6e 0c 0c 04 00 +63 63 63 00 00 33 00 42 69 72 64 73 20 20 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BlendOrgan +** Description: Strange, loud, obnoxious sound +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 00 00 0a 0f 09 00 45 0e 03 19 00 00 08 0f 23 00 61 07 08 13 00 00 08 0f +00 00 5f 0b 01 12 00 00 05 0f 00 00 63 02 0d 3c 1f 00 23 00 42 0c 06 04 00 +63 3d 00 1d 00 32 00 42 6c 65 6e 64 4f 72 67 61 6e 63 63 63 32 32 32 00 00 +00 20 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Blow Up +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 04 04 06 02 00 3b 62 00 03 0f 06 04 06 0d 00 1d 63 00 1b 13 15 15 06 09 +00 1a 63 04 1b 0f 04 04 09 0c 00 3f 63 0d 03 3a 00 00 00 00 02 00 02 04 00 +63 32 00 00 00 32 00 42 6c 6f 77 20 55 70 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Blow Up +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 04 04 06 02 00 38 62 00 03 0f 06 04 06 0d 00 18 63 00 1b 13 15 15 06 09 +00 18 63 04 1b 0f 04 04 09 0c 00 38 63 0d 03 3a 00 00 00 00 02 00 02 04 00 +63 32 00 00 00 32 00 42 6c 6f 77 20 55 70 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Boingggggg +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0a 1b 03 00 00 42 4b 1d 15 1f 07 0c 04 00 00 44 32 16 15 1f 07 1c 03 00 +00 44 3a 38 13 1f 07 0c 0d 00 00 45 63 08 10 2b 11 00 49 5a 74 00 02 04 00 +63 63 00 00 00 32 00 42 6f 69 6e 67 67 67 67 67 67 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Boingggggg +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0a 1b 03 00 00 40 4b 1d 15 1f 07 0c 04 00 00 40 32 16 15 1f 07 1c 03 00 +00 40 3a 38 13 1f 07 0c 0d 00 00 40 63 08 10 2b 11 00 49 5a 74 00 02 04 00 +63 63 00 00 00 32 00 42 6f 69 6e 67 67 67 67 67 67 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BrokWindow +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 13 06 06 06 00 03 3f 10 03 1f 0d 00 05 0b 00 03 50 31 03 1f 1f 00 08 0f +00 05 39 3f 03 1f 1f 0f 07 0f 00 06 63 10 03 2a 34 00 37 49 73 1a 05 04 00 +63 32 00 00 00 32 00 42 72 6f 6b 57 69 6e 64 6f 77 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BrokWindow +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 13 06 06 06 00 00 3f 10 03 1f 0d 00 05 0b 00 00 50 31 03 1f 1f 00 08 0f +00 00 39 3f 03 1f 1f 0f 07 0f 00 00 63 10 03 2a 34 00 37 49 73 1a 05 04 00 +63 32 00 00 00 32 00 42 72 6f 6b 57 69 6e 64 6f 77 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bubbly +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +17 06 00 04 0e 0a 04 3a 01 00 1f 1f 1f 0f 0f 00 04 00 04 00 1f 1f 1f 0f 0f +00 43 41 01 0b 18 0d 0d 06 00 00 45 63 0a 13 7b 32 00 63 43 39 18 02 04 00 +28 02 00 00 00 32 00 42 75 62 62 6c 79 20 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Bubbly +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +17 06 00 04 0e 0a 00 3a 01 00 1f 1f 1f 0f 0f 00 00 00 04 00 1f 1f 1f 0f 0f +00 40 41 01 0b 18 0d 0d 06 00 00 40 63 0a 13 7b 32 00 63 43 39 18 02 04 00 +28 02 00 00 00 32 00 42 75 62 62 6c 79 20 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Busy * +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 0f 0f 00 00 00 04 03 1f 1f 00 0f 0f 00 40 5f 34 03 1f 1f 00 0f 0f +00 40 3a 20 03 1f 1f 00 0f 0f 00 40 63 2c 03 46 13 46 00 63 4d 18 04 04 00 +28 32 00 00 00 32 00 42 75 73 79 20 20 20 20 20 2a 63 63 63 32 32 32 00 00 +09 0a 09 07 09 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Busy.....1 +** Controls: KV, MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 05 0f 00 43 32 04 08 1f 1f 00 05 0f 00 43 34 00 0e 1f 1f 00 05 0f +00 46 40 08 08 1f 1f 00 05 0f 00 45 63 00 0e 02 0f 00 00 5a 0d 18 04 04 00 +63 01 63 00 00 32 00 42 75 73 79 2e 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Busy.....1 +** Controls: MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 05 0f 00 40 32 04 08 1f 1f 00 05 0f 00 40 34 00 0e 1f 1f 00 05 0f +00 40 40 08 08 1f 1f 00 05 0f 00 40 63 00 0e 02 0f 00 00 5a 0d 18 04 04 00 +63 01 63 00 00 32 00 42 75 73 79 2e 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Busy.....2 +** Controls: MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 05 0f 00 40 63 04 08 1f 1f 00 05 0f 00 40 63 00 0e 1f 1f 00 05 0f +00 40 63 08 08 1f 1f 00 05 0f 00 40 63 00 0e 07 0f 00 00 63 0d 18 04 04 00 +63 01 63 00 00 32 00 42 75 73 79 2e 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Choo Choo +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1a 10 11 08 0f 00 03 48 04 15 1c 1f 1f 06 0f 00 04 63 18 1d 1c 10 03 06 0f +00 05 63 08 1b 10 0c 03 09 0f 00 46 63 03 10 7a 63 00 10 54 06 18 02 04 00 +63 63 00 00 00 32 00 43 68 6f 6f 20 43 68 6f 6f 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Choo Choo +** Source: from a library of patches collected by Duane Bowker, author unknown +1a 10 11 08 0f 00 00 48 04 15 1c 1f 1f 06 0f 00 00 63 18 1d 1c 10 03 06 0f +00 00 63 08 1b 10 0c 03 09 0f 00 40 63 03 10 7a 63 00 10 54 06 18 02 04 00 +63 63 00 00 00 32 00 43 68 6f 6f 20 43 68 6f 6f 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Chopper..1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 01 0f 0a 43 63 3f 03 1f 1f 00 01 0f 00 43 63 29 03 1f 1f 00 03 0f +00 45 63 35 03 0b 0b 00 07 0f 00 45 63 00 03 38 2a 00 42 5a 64 18 02 04 00 +28 02 00 00 00 32 00 43 68 6f 70 70 65 72 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Chopper..1 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 01 0f 0a 40 63 3f 03 1f 1f 00 01 0f 00 40 63 29 03 1f 1f 00 03 0f +00 40 63 35 03 0b 0b 00 07 0f 00 40 63 00 03 38 2a 00 42 5a 64 18 02 04 00 +28 02 00 00 00 32 00 43 68 6f 70 70 65 72 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Chopper..1 +** Controls: MW (LFO pitch) +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +1f 1f 00 00 0f 0a 40 63 3f 03 1f 1f 00 00 0f 00 40 63 29 03 1f 1f 00 03 0f +00 40 63 35 03 0b 0b 00 07 0f 00 40 63 00 03 38 2a 00 42 5a 64 18 02 04 00 +28 02 00 00 00 32 00 43 68 6f 70 70 65 72 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Chopper..2 +** Controls: KV, MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 02 0f 00 44 50 0a 04 1f 1f 00 03 0f 00 46 56 05 02 1f 1f 00 03 0f +00 44 4e 08 04 1f 1f 00 03 0f 00 46 5f 02 04 6b 33 00 00 63 7c 0c 07 04 00 +63 32 01 32 00 32 00 43 68 6f 70 70 65 72 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Chopper..2 +** Controls: MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 02 0f 00 40 50 0a 04 1f 1f 00 03 0f 00 40 56 05 02 1f 1f 00 03 0f +00 40 4e 08 04 1f 1f 00 03 0f 00 40 5f 02 04 6b 33 00 00 63 7c 0c 07 04 00 +63 32 01 32 00 32 00 43 68 6f 70 70 65 72 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Cricket * +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 01 0f 00 00 5a 2c 03 1f 1f 00 01 0f 00 00 5a 28 03 1c 1f 00 04 0f +00 40 52 30 03 1d 1f 00 04 0f 00 40 52 34 03 24 20 00 00 63 0d 18 04 04 00 +28 32 00 00 00 32 00 43 72 69 63 6b 65 74 20 20 2a 63 63 63 32 32 32 08 0a +08 02 0d 0f 0d 0d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Diving Fly +** Controls: KV, MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0d 1f 00 08 0f 00 44 36 06 03 0d 1f 00 03 0f 00 44 63 04 03 0d 1f 00 04 0f +00 46 63 05 03 0d 1f 00 03 0f 00 47 63 04 03 4d 63 00 00 31 7e 24 05 04 00 +63 63 63 00 00 32 00 44 69 76 69 6e 67 20 46 6c 79 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Diving Fly +** Controls: MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +0d 1f 00 08 0f 00 40 36 06 03 0d 1f 00 03 0f 00 40 63 04 03 0d 1f 00 04 0f +00 40 63 05 03 0d 1f 00 03 0f 00 40 63 04 03 4d 63 00 00 31 7e 24 05 04 00 +63 63 63 00 00 32 00 44 69 76 69 6e 67 20 46 6c 79 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Dynamite +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 08 09 02 05 00 3c 4f 04 03 1f 03 0d 04 00 00 1c 38 04 03 1b 0a 0d 03 0f +00 1d 49 3f 03 1f 03 0d 04 00 00 3e 5a 04 03 3a 55 00 2d 00 72 00 02 04 00 +63 32 00 00 00 32 00 44 79 6e 61 6d 69 74 65 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Dynamite +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 08 09 02 05 00 38 4f 04 03 1f 03 0d 04 00 00 18 38 04 03 1b 0a 0d 03 0f +00 18 49 3f 03 1f 03 0d 04 00 00 38 5a 04 03 3a 55 00 2d 00 72 00 02 04 00 +63 32 00 00 00 32 00 44 79 6e 61 6d 69 74 65 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: EarthQuake +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 02 09 05 00 00 3c 56 00 00 0f 06 12 03 0c 00 1c 3a 04 1b 13 15 15 03 09 +00 1c 3e 00 1b 0f 04 0a 07 0e 00 3f 5d 04 03 3a 00 00 00 00 02 00 02 04 00 +63 32 00 00 00 32 00 45 61 72 74 68 51 75 61 6b 65 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: EarthQuake +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 02 09 05 00 00 38 56 00 00 0f 06 12 03 0c 00 18 3a 04 1b 13 15 15 03 09 +00 18 3e 00 1b 0f 04 0a 07 0e 00 38 5d 04 03 3a 00 00 00 00 02 00 02 04 00 +63 32 00 00 00 32 00 45 61 72 74 68 51 75 61 6b 65 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Earthquake +** Controls: KV, MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank D, voice 28 +17 0c 05 01 0e 03 43 4c 0a 0b 15 06 06 01 0e 00 40 56 07 0b 10 0b 05 01 0a +00 40 4c 0a 03 17 07 06 04 0f 00 41 5d 00 0b 38 63 00 0c 00 67 00 04 04 00 +28 32 00 00 00 32 00 45 61 72 74 68 71 75 61 6b 65 63 63 12 32 32 00 00 0a +00 01 00 03 00 00 00 00 00 00 00 26 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Earthquake +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +17 0c 05 01 0e 03 43 4c 0d 0b 15 06 06 01 0e 00 40 56 07 0b 10 0b 05 01 0d +00 40 4c 0a 03 17 07 06 04 0f 00 41 5d 00 0b 38 63 00 0c 00 67 00 04 04 00 +28 32 00 00 00 32 00 45 61 72 74 68 71 75 61 6b 65 63 63 12 32 32 00 00 0d +00 01 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Eng Siren +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 05 0f 23 04 2b 08 03 1f 1f 00 02 0f 00 04 4d 08 03 1f 1f 00 05 0f +0a 05 5d 04 0b 15 1f 00 05 0f 05 06 63 04 03 04 0d 00 63 00 61 18 05 04 00 +63 63 28 00 00 32 00 45 6e 67 20 53 69 72 65 6e 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Eng Siren +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 05 0f 23 00 2b 08 03 1f 1f 00 02 0f 00 00 4d 08 03 1f 1f 00 05 0f +0a 00 5d 04 0b 15 1f 00 05 0f 05 00 63 04 03 04 0d 00 63 00 61 18 05 04 00 +63 63 28 00 00 32 00 45 6e 67 20 53 69 72 65 6e 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Excuse Me +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1b 03 07 04 0e 4d 04 5b 04 03 12 1f 09 0a 0f 00 04 43 08 03 12 1f 0b 0a 0f +4b 05 55 08 03 12 1f 08 0a 0f 01 05 5f 04 03 23 00 00 00 00 02 00 02 04 00 +63 32 00 00 00 32 00 45 78 63 75 73 65 20 4d 65 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Excuse Me +** Source: from a library of patches collected by Duane Bowker, author unknown +1b 03 07 04 0e 4d 00 5b 04 03 12 1f 09 0a 0f 00 00 43 08 03 12 1f 0b 0a 0f +4b 00 55 08 03 12 1f 08 0a 0f 01 00 5f 04 03 23 00 00 00 00 02 00 02 04 00 +63 32 00 00 00 32 00 45 78 63 75 73 65 20 4d 65 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Exo/Bird * +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 0f 0f 00 00 00 04 03 13 08 08 04 0f 00 00 51 0a 03 0d 03 01 04 0f +00 00 5b 04 03 11 0d 1f 07 00 00 00 63 00 03 00 23 00 00 00 62 0e 04 04 00 +28 32 00 00 00 32 00 45 78 6f 2f 42 69 72 64 20 2a 63 63 63 32 32 32 00 00 +00 00 08 02 08 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Explosion +** Controls: KV, MW (LFO pitch), MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 09 04 07 0f 00 43 5f 10 08 10 09 04 07 0f 00 44 63 0d 0e 10 09 04 07 0f +00 43 4e 06 08 10 09 04 07 0f 00 46 2c 04 08 05 47 00 63 63 37 18 04 04 00 +63 01 63 00 00 32 00 45 78 70 6c 6f 73 69 6f 6e 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Explosion +** Controls: MW (LFO pitch), MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +10 09 04 07 0f 00 40 5f 10 08 10 09 04 07 0f 00 40 63 0d 0e 10 09 04 07 0f +00 40 4e 06 08 10 09 04 07 0f 00 40 2c 04 08 05 47 00 63 63 37 18 04 04 00 +63 01 63 00 00 32 00 45 78 70 6c 6f 73 69 6f 6e 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: FaucetDrip +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 08 1f 05 0d 0a 05 39 00 03 1f 0a 1f 0a 0f 00 06 63 04 03 1f 09 1f 0a 0f +00 02 63 08 03 1f 0e 1f 0a 0d 00 05 63 04 03 7d 39 00 63 00 70 18 02 04 00 +28 02 00 00 00 32 00 46 61 75 63 65 74 44 72 69 70 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: FaucetDrip +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 08 1f 05 0d 0a 00 39 00 03 1f 0a 1f 0a 0f 00 00 63 04 03 1f 09 1f 0a 0f +00 00 63 08 03 1f 0e 1f 0a 0d 00 00 63 04 03 7d 39 00 63 00 70 18 02 04 00 +28 02 00 00 00 32 00 46 61 75 63 65 74 44 72 69 70 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Feedback * +** Description: A raspy sound +** Controls: MW (LFO pitch), BC (voice pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0a 00 07 0f 30 00 40 13 01 1f 14 05 08 0b 00 00 61 04 00 1f 1f 00 07 0f +05 00 49 04 04 1c 1f 01 08 0e 00 00 63 13 06 39 1d 14 06 00 62 24 0c 04 00 +28 32 00 00 00 36 00 46 65 65 64 62 61 63 6b 20 2a 63 63 63 32 32 32 00 00 +00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Flight Sim +** Source: Yamaha TX81Z factory preset, bank D, voice 15 +1f 1f 00 04 0f 00 00 49 04 03 1f 1f 00 01 0f 32 00 59 04 03 1f 1f 00 05 0f +3b 40 43 10 03 0e 1f 00 06 0f 00 00 5c 0d 03 3a 39 00 00 63 6a 00 0c 0c 63 +63 32 00 00 00 32 00 46 6c 69 67 68 74 20 53 69 6d 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 2d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Gizmo * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 0d 05 06 0f 1e 01 3f 10 06 1a 1a 05 05 0a 36 01 63 07 0e 0f 1a 04 05 0f +13 01 63 00 10 1f 13 07 07 0f 00 01 63 04 0e 3b 14 00 00 00 42 18 02 04 00 +63 32 00 32 00 32 00 47 69 7a 6d 6f 20 20 20 20 2a 63 63 63 32 32 32 00 00 +00 27 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: GrandPrix* +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 01 0f 00 00 43 04 00 1f 1f 00 01 0f 00 00 4b 04 00 1f 1f 00 01 0f +00 00 4e 04 06 1f 1f 00 07 0f 00 00 63 04 03 00 63 00 63 00 73 00 0c 0c 00 +28 63 00 00 00 32 00 47 72 61 6e 64 50 72 69 78 2a 63 63 63 32 32 32 00 0c +00 20 00 04 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: GuiRoach:: +** Controls: KV +** Source: Yamaha DX11 factory preset, bank D, voice 25 +0f 00 0b 0a 0a 00 40 5b 2d 03 1f 00 00 03 0f 00 40 61 00 03 1f 00 00 03 0f +00 40 4c 2d 03 0e 0b 0a 0f 0e 00 43 5c 00 03 3a 61 00 00 34 0a 18 04 04 00 +28 32 00 00 00 32 00 47 75 69 52 6f 61 63 68 3a 3a 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: GuiRoach:: +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 00 0b 0a 0d 00 40 5b 2d 03 1f 00 00 03 0f 00 40 61 00 03 1f 00 00 03 0f +00 40 4c 2d 03 0e 0b 0d 0f 0e 00 43 5c 00 03 3a 61 00 00 34 0d 18 04 04 00 +28 32 00 00 00 32 00 47 75 69 52 6f 61 63 68 3a 3a 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Gurgle +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank D, voice 10 +1f 11 00 01 0f 47 00 44 06 06 19 0b 01 01 0f 00 40 55 00 05 01 10 00 06 0f +18 00 63 08 00 02 03 00 06 0f 00 00 63 0c 01 3c 27 36 1b 44 7f 0c 07 04 00 +63 63 00 32 00 32 00 47 75 72 67 6c 65 20 20 20 20 63 63 63 32 32 32 1b 00 +00 00 08 70 08 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hard Rain +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 04 00 06 0f 2e 03 63 1c 02 1f 06 16 06 0f 00 04 30 31 0b 1f 15 00 06 0f +00 05 63 04 0a 12 04 00 09 0f 00 04 5a 04 06 3a 21 00 63 00 02 00 02 04 00 +63 32 00 32 00 32 00 48 61 72 64 20 52 61 69 6e 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hard Rain +** Source: from a library of patches collected by Duane Bowker, author unknown +12 04 00 06 0f 2e 00 63 1c 02 1f 06 16 06 0f 00 00 30 31 0b 1f 15 00 06 0f +00 00 63 04 0a 12 04 00 09 0f 00 00 5a 04 06 3a 21 00 63 00 02 00 02 04 00 +63 32 00 32 00 32 00 48 61 72 64 20 52 61 69 6e 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harley Hog +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 0f 0f 00 43 5b 09 13 1f 1f 00 02 0f 00 44 13 08 0e 1f 1f 06 09 0f +00 45 5a 00 0b 1f 1f 00 04 0f 00 45 51 05 03 7a 63 00 63 63 34 00 00 04 00 +63 32 00 32 00 32 00 48 61 72 6c 65 79 20 48 6f 67 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Harley Hog +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 0f 0f 00 40 5b 09 13 1f 1f 00 02 0f 00 40 13 08 0e 1f 1f 06 09 0f +00 40 5a 00 0b 1f 1f 00 04 0f 00 40 51 05 03 7a 63 00 63 63 34 00 00 04 00 +63 32 00 32 00 32 00 48 61 72 6c 65 79 20 48 6f 67 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Heart Beat +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 18 0f 0f 00 03 63 04 03 15 12 12 08 0c 00 04 34 04 03 07 13 12 08 0f +00 04 63 00 1b 15 13 12 08 0c 00 05 63 00 03 44 00 00 00 00 02 0c 02 04 00 +28 02 00 00 00 32 00 48 65 61 72 74 20 42 65 61 74 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Heart Beat +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 18 0f 0f 00 00 63 04 03 15 12 12 08 0c 00 00 34 04 03 07 13 12 08 0f +00 00 63 00 1b 15 13 12 08 0c 00 00 63 00 03 44 00 00 00 00 02 0c 02 04 00 +28 02 00 00 00 32 00 48 65 61 72 74 20 42 65 61 74 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Helicopter +** Controls: MW (LFO amplitude) +** Source: Yamaha TX81Z factory preset, bank D, voice 14 +0d 1f 00 01 0f 28 40 5c 00 03 1f 1f 00 01 0f 28 40 62 00 03 0e 1f 00 04 0f +0a 40 63 29 03 0e 1f 00 04 0f 0a 00 63 16 03 3c 33 00 00 5b 6e 18 0c 04 00 +63 63 63 00 00 32 00 48 65 6c 69 63 6f 70 74 65 72 63 63 63 32 32 32 00 00 +00 20 08 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hi Alarm +** Controls: KV, MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 04 0f 00 04 31 10 00 1f 1f 00 04 0f 00 04 43 13 06 1f 1f 00 04 0f +00 44 37 0a 00 1f 1f 00 06 0f 00 45 63 1f 06 22 38 00 00 32 6d 18 04 04 00 +63 01 63 00 00 32 00 48 69 20 41 6c 61 72 6d 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hi Alarm +** Controls: MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 04 0f 00 00 31 10 00 1f 1f 00 04 0f 00 00 43 13 06 1f 1f 00 04 0f +00 40 37 0a 00 1f 1f 00 06 0f 00 40 63 1f 06 22 38 00 00 32 6d 18 04 04 00 +63 01 63 00 00 32 00 48 69 20 41 6c 61 72 6d 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Hole in 1 +** Source: Yamaha TX81Z factory preset, bank D, voice 11 +1f 14 00 01 0b 00 40 54 11 03 15 07 00 0f 0e 2e 00 33 27 0b 14 0c 11 05 0a +00 40 58 0d 0a 1f 12 10 0b 00 01 00 62 10 0b 3c 3a 00 63 50 5f 18 05 04 00 +63 00 00 00 00 32 00 48 6f 6c 65 20 69 6e 20 31 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: House Fly +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +09 05 06 04 0c 00 04 4b 1a 03 07 0c 06 04 0c 00 04 3e 1a 06 1f 1f 00 0f 0f +00 05 3f 00 03 1f 1f 00 0f 0f 00 07 63 00 03 7c 2f 00 00 00 31 00 05 04 00 +63 63 63 00 00 32 00 48 6f 75 73 65 20 46 6c 79 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: House Fly +** Source: from a library of patches collected by Duane Bowker, author unknown +09 05 06 04 0c 00 00 4b 1a 03 07 0c 06 04 0c 00 00 3e 1a 06 1f 1f 00 0f 0f +00 00 3f 00 03 1f 1f 00 0f 0f 00 00 63 00 03 7c 2f 00 00 00 31 00 05 04 00 +63 63 63 00 00 32 00 48 6f 75 73 65 20 46 6c 79 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: HowlAtMoon +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 0a 06 0c 0f 0a 02 33 0f 03 12 10 06 0a 0d 00 04 3d 1c 0b 0f 09 03 09 0e +00 04 52 0d 0b 0e 0c 09 0a 0f 00 05 5d 0c 0c 3c 19 2a 00 00 22 00 02 04 00 +28 02 00 00 00 32 00 48 6f 77 6c 41 74 4d 6f 6f 6e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: HowlAtMoon +** Source: from a library of patches collected by Duane Bowker, author unknown +12 0a 06 0c 0f 0a 00 33 0f 03 12 10 06 0a 0d 00 00 3d 1c 0b 0f 09 03 09 0e +00 00 52 0d 0b 0e 0c 09 0a 0f 00 00 5d 0c 0c 3c 19 2a 00 00 22 00 02 04 00 +28 02 00 00 00 32 00 48 6f 77 6c 41 74 4d 6f 6f 6e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Lil'Birdie +** Controls: KV, MW (LFO pitch), BC (LFO pitch), BC (EG amplitude), BC (voice pitch), FC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +08 0d 17 07 0f 5d 19 09 2e 0b 02 09 0a 08 05 25 1f 63 0c 1c 0c 1d 0c 0d 07 +0c 0a 4b 34 0c 1f 04 0e 02 0b 2c 00 1e 0c 08 04 63 43 20 4a 42 18 0b 00 26 +51 29 1f 51 2f 25 1b 4c 69 6c 27 42 69 72 64 69 65 00 00 00 00 00 00 2a 29 +02 5c 34 18 39 48 04 15 1c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Lo Alarm +** Controls: KV, MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 03 0f 00 03 31 03 00 1f 1f 00 04 0f 00 04 43 18 06 1f 1f 00 06 0f +00 45 37 07 00 1f 1f 00 06 0f 00 44 63 07 06 52 38 00 00 27 65 00 04 04 00 +63 01 63 00 00 32 00 4c 6f 20 41 6c 61 72 6d 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Lo Alarm +** Controls: MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 03 0f 00 00 31 03 00 1f 1f 00 04 0f 00 00 43 18 06 1f 1f 00 06 0f +00 40 37 07 00 1f 1f 00 06 0f 00 40 63 07 06 52 38 00 00 27 65 00 04 04 00 +63 01 63 00 00 32 00 4c 6f 20 41 6c 61 72 6d 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MT:Apr'88 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 04 00 02 0f 0f 00 44 04 03 1f 09 03 02 0f 15 01 3a 08 00 1f 00 00 0b 0f +0c 02 44 07 06 1a 0a 00 05 0f 05 01 5c 08 13 3c 18 06 10 00 5a 0c 04 04 00 +63 32 00 00 00 32 00 4d 54 3a 41 70 72 27 38 38 20 63 63 63 32 32 32 20 00 +30 30 10 04 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MachineGun +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1a 15 12 09 0f 00 40 63 00 00 19 09 08 09 0f 00 40 54 08 03 1f 15 1f 0a 0f +00 45 63 06 03 19 15 03 09 0f 00 45 63 00 0b 7c 40 00 63 63 74 18 02 04 00 +28 02 00 00 00 32 00 4d 61 63 68 69 6e 65 47 75 6e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MachineGun +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1a 15 12 09 0f 00 40 63 00 00 19 09 08 09 0f 00 40 54 08 03 1f 15 1f 0a 0f +00 40 63 06 03 19 15 03 09 0f 00 40 63 00 0b 7c 40 00 63 63 74 18 02 04 00 +28 02 00 00 00 32 00 4d 61 63 68 69 6e 65 47 75 6e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MalibuNite +** Controls: MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank D, voice 13 +1f 1f 00 01 0f 00 00 63 3f 03 1f 1f 00 01 0f 00 00 63 29 03 1f 1f 00 03 0f +00 00 63 35 03 0b 16 00 07 0f 00 40 5b 00 03 38 05 00 42 5a 6e 00 04 04 00 +63 32 00 00 00 32 00 4d 61 6c 69 62 75 4e 69 74 65 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Med Musak +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +07 11 00 01 09 00 45 4f 00 00 01 08 00 01 09 05 01 62 0a 03 01 07 00 01 08 +08 41 62 23 06 01 08 00 01 0a 00 43 63 00 00 3f 21 00 35 1c 6f 14 0c 04 1e +63 32 00 00 00 32 00 4d 65 64 20 4d 75 73 61 6b 20 63 63 63 32 32 32 30 37 +20 1f 20 21 00 22 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Mouse-Tom +** Source: Yamaha DX11 factory preset, bank D, voice 18 +1f 1f 0c 07 0f 00 00 5c 32 03 1f 14 1f 09 01 00 00 63 00 0b 1f 1f 1f 0f 0f +0c 00 3e 0b 1b 1f 1f 0e 0f 0f 00 00 5c 05 0b 3b 23 00 00 00 62 24 04 04 00 +63 32 00 00 00 32 00 4d 6f 75 73 65 2d 54 6f 6d 20 63 63 63 32 32 32 08 00 +00 03 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Mr.Mr.Noiz +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 13 03 00 00 00 5f 3d 06 14 12 13 02 00 00 01 52 05 02 17 14 13 03 00 +00 01 56 28 05 16 0b 13 0f 09 00 00 63 06 03 3b 63 00 63 00 73 10 07 04 00 +63 32 00 00 00 32 00 4d 72 2e 4d 72 2e 4e 6f 69 7a 63 63 63 32 32 32 08 00 +00 00 08 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Noise Shot +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank D, voice 27 +1f 1f 13 03 00 00 00 5f 3d 06 1f 12 13 02 00 00 01 52 05 02 1f 14 13 03 00 +00 01 56 28 05 1e 0b 13 0f 09 00 00 63 06 03 3b 63 00 63 00 73 23 07 04 00 +63 32 00 00 00 32 00 4e 6f 69 73 65 20 53 68 6f 74 63 63 63 32 32 32 08 00 +00 00 08 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ofthewall* +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0c 08 00 07 00 00 00 63 00 03 08 1f 00 09 0f 00 00 43 00 05 0b 1f 00 05 0f +00 01 63 0a 06 0c 1f 00 06 0f 00 02 63 04 00 64 4f 2e 63 63 62 18 02 04 00 +28 63 00 00 00 32 00 4f 66 74 68 65 77 61 6c 6c 2a 63 63 63 32 32 32 08 20 +08 30 00 50 00 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OldClock +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 02 04 0f 00 43 3c 21 0e 1f 19 08 03 0f 63 07 63 17 08 1f 1f 0a 04 0a +5a 07 63 0a 0a 1f 1f 07 03 0f 00 04 63 0a 08 3b 0e 00 00 00 56 0f 04 04 00 +63 37 00 00 00 32 00 4f 6c 64 43 6c 6f 63 6b 20 20 63 63 63 32 32 32 04 00 +08 08 08 1b 07 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OutOfTune +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0f 03 09 06 0e 0a 03 3c 00 03 1f 03 03 06 0d 00 04 60 04 02 1f 04 02 06 0d +00 04 62 0a 03 1f 02 02 06 0d 00 06 63 04 03 3d 10 00 59 00 52 18 02 04 00 +28 02 00 00 00 32 00 4f 75 74 4f 66 54 75 6e 65 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OutOfTune +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0f 03 09 06 0e 0a 00 3c 00 03 1f 03 03 06 0d 00 00 60 04 02 1f 04 02 06 0d +00 00 62 0a 03 1f 02 02 06 0d 00 00 63 04 03 3d 10 00 59 00 52 18 02 04 00 +28 02 00 00 00 32 00 4f 75 74 4f 66 54 75 6e 65 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Passing By +** Source: Yamaha DX11 factory preset, bank D, voice 27 +1f 1f 00 01 0f 00 00 55 04 03 1f 1f 00 01 0f 00 00 52 0a 03 02 1f 1f 06 0f +00 00 5a 04 0b 02 1f 1f 06 0f 00 00 5a 04 0b 7c 0a 00 00 00 71 0c 04 04 00 +28 32 00 00 00 32 00 50 61 73 73 69 6e 67 20 42 79 4a 02 1b 32 00 00 00 10 +00 10 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Passing By +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 01 0f 00 00 55 04 03 1f 1f 00 01 0f 00 00 52 0a 03 02 1f 1f 06 0f +00 00 5a 04 0b 02 1f 1f 06 0f 00 00 5a 04 0b 7c 0d 00 00 00 71 0c 04 04 00 +28 32 00 00 00 32 00 50 61 73 73 69 6e 67 20 42 79 4a 02 1b 32 00 00 00 10 +00 10 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Pull Over +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 0f 0f 00 44 2b 08 03 1f 1f 00 09 0f 00 44 4a 08 03 10 1f 00 0f 0f +00 05 5d 04 03 15 1f 00 09 0f 00 05 63 04 03 04 15 00 63 63 76 24 02 04 00 +28 02 00 00 00 32 00 50 75 6c 6c 20 4f 76 65 72 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Pull Over +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 0f 0f 00 40 2b 08 03 1f 1f 00 09 0f 00 40 4a 08 03 10 1f 00 0f 0f +00 00 5d 04 03 15 1f 00 09 0f 00 00 63 04 03 04 15 00 63 63 76 24 02 04 00 +28 02 00 00 00 32 00 50 75 6c 6c 20 4f 76 65 72 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: R2-D2 * +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 0f 0f 00 00 00 04 03 0d 1f 00 09 0f 00 00 00 04 03 1d 1f 00 09 0f +00 00 63 3f 03 1d 1f 00 09 0f 00 00 63 31 03 44 2e 00 63 00 73 24 0c 04 00 +28 63 00 00 00 32 00 52 32 2d 44 32 20 20 20 20 2a 63 63 63 32 32 32 00 00 +00 00 00 50 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Racing Car +** Controls: MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank D, voice 19 +1f 1f 00 02 0f 00 00 47 00 03 1f 1f 00 01 0f 00 00 35 04 03 1f 1f 00 03 0f +00 00 5b 01 03 15 1f 00 03 0f 00 00 63 04 03 3a 05 00 3c 00 62 18 0c 04 00 +63 32 00 00 00 32 00 52 61 63 69 6e 67 20 43 61 72 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: RADIATION? +** Controls: MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank D, voice 31 +03 03 00 01 0f 00 40 51 28 03 15 09 00 03 0f 00 00 61 0c 03 0b 05 00 02 0f +00 40 33 34 03 12 18 00 06 0e 00 40 5a 30 03 7b 32 00 06 56 25 00 04 04 00 +28 32 00 00 00 32 00 52 41 44 49 41 54 49 4f 4e 3f 63 63 63 32 32 32 09 09 +08 02 0b 0e 08 0c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rain Storm +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 00 00 03 0f 22 04 63 0c 08 1f 00 00 05 0f 24 44 2c 08 00 1f 00 00 03 0f +00 05 63 04 06 1f 00 00 04 0f 00 04 5a 01 0e 3a 55 00 2d 00 7e 00 04 04 00 +63 32 00 32 00 32 00 52 61 69 6e 20 53 74 6f 72 6d 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Rain Storm +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 00 00 03 0f 22 00 63 0c 08 1f 00 00 05 0f 24 40 2c 08 00 1f 00 00 03 0f +00 00 63 04 06 1f 00 00 04 0f 00 00 5a 01 0e 3a 55 00 2d 00 7e 00 04 04 00 +63 32 00 32 00 32 00 52 61 69 6e 20 53 74 6f 72 6d 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Refs.Wisl* +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1d 15 00 08 0d 00 00 4b 34 03 12 0c 00 06 0f 00 00 5d 04 03 1f 1f 00 05 0f +00 00 00 04 0b 0f 0c 00 08 0f 00 01 63 20 03 12 51 00 00 00 72 18 07 04 00 +28 63 00 00 00 32 00 52 65 66 73 2e 57 69 73 6c 2a 63 63 63 32 32 32 0d 35 +08 0d 00 00 0c 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Repeater.1 +** Source: from a library of patches collected by Duane Bowker, author unknown +13 18 06 0a 0f 00 78 5f 00 04 16 04 06 07 09 00 58 42 04 06 16 04 06 07 09 +00 58 63 04 00 16 04 06 07 09 00 78 63 04 03 6c 29 00 00 63 34 18 02 04 00 +63 32 00 00 00 32 00 52 65 70 65 61 74 65 72 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Repeater.2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +13 18 06 0a 0f 00 7b 47 10 04 16 04 06 07 09 00 5b 37 10 06 16 04 06 07 09 +00 5d 61 04 00 16 04 06 07 09 00 7c 59 10 03 3a 29 3d 54 63 74 18 02 04 00 +63 32 00 00 00 32 00 52 65 70 65 61 74 65 72 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Repeater.2 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +13 18 06 0a 0f 00 78 47 10 04 16 04 06 07 09 00 58 37 10 06 16 04 06 07 09 +00 58 61 04 00 16 04 06 07 09 00 78 59 10 03 3a 29 3d 54 63 74 18 02 04 00 +63 32 00 00 00 32 00 52 65 70 65 61 74 65 72 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Repeater.3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +13 0f 0a 0f 0f 00 79 58 16 04 16 09 06 0f 0f 00 5b 49 10 06 16 09 06 0f 0f +00 5d 61 04 00 16 09 06 0f 0f 00 7d 59 04 03 7a 33 00 00 63 34 18 02 04 00 +63 32 00 00 00 32 00 52 65 70 65 61 74 65 72 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Repeater.3 +** Source: from a library of patches collected by Duane Bowker, author unknown +13 0f 0a 0f 0f 00 78 58 16 04 16 09 06 0f 0f 00 58 49 10 06 16 09 06 0f 0f +00 58 61 04 00 16 09 06 0f 0f 00 78 59 04 03 7a 33 00 00 63 34 18 02 04 00 +63 32 00 00 00 32 00 52 65 70 65 61 74 65 72 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Repeater.4 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 06 13 07 07 00 7b 47 08 03 1f 06 1f 04 00 00 5b 4c 04 04 15 06 0c 06 07 +00 5d 63 04 00 1f 06 1f 04 00 00 7d 63 04 06 6c 40 00 00 63 34 18 02 04 00 +63 32 00 00 00 32 00 52 65 70 65 61 74 65 72 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Repeater.4 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 06 13 07 07 00 78 47 08 03 1f 06 1f 04 00 00 58 4c 04 04 15 06 0c 06 07 +00 58 63 04 00 1f 06 1f 04 00 00 78 63 04 06 6c 40 00 00 63 34 18 02 04 00 +63 32 00 00 00 32 00 52 65 70 65 61 74 65 72 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Repeater.5 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1b 04 07 0f 00 7b 52 08 03 03 1b 04 07 0f 00 5c 56 04 03 13 1b 04 07 0f +00 5d 51 08 03 1b 0f 04 07 0e 00 7e 63 04 03 45 25 00 00 63 35 18 02 04 00 +63 32 00 00 00 32 00 52 65 70 65 61 74 65 72 2e 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Repeater.5 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1b 04 07 0f 00 78 52 08 03 03 1b 04 07 0f 00 58 56 04 03 13 1b 04 07 0f +00 58 51 08 03 1b 0f 04 07 0e 00 78 63 04 03 45 25 00 00 63 35 18 02 04 00 +63 32 00 00 00 32 00 52 65 70 65 61 74 65 72 2e 35 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +* SUBCATEGORY Noises2 + +** Name: Ringing..1 +** Controls: MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +15 1f 00 03 0f 00 00 34 1a 03 1f 1f 00 02 0f 00 00 3e 19 03 1f 1f 00 02 0f +00 00 39 1a 03 16 1f 00 06 0f 00 40 63 19 03 52 58 00 00 32 65 00 05 04 00 +63 63 63 00 00 32 00 52 69 6e 67 69 6e 67 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ringing..2 +** Controls: MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +15 1f 00 03 0f 00 00 1c 00 03 1f 1f 00 02 0f 00 00 3e 1f 03 1f 1f 00 02 0f +00 00 39 04 03 16 1f 00 06 0f 00 40 63 1f 03 52 3b 00 00 3c 65 00 05 04 00 +63 63 63 00 00 32 00 52 69 6e 67 69 6e 67 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: RiseDecent +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0a 06 06 04 0e 00 44 43 0d 03 0c 06 06 04 0e 00 44 63 08 03 1f 06 06 04 0e +00 46 5b 04 03 1f 06 06 04 0e 00 45 63 00 03 7d 1e 00 48 3c 67 18 02 04 00 +28 02 00 00 00 32 00 52 69 73 65 44 65 63 65 6e 74 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: RiseDecent +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0a 06 06 04 0e 00 40 43 0d 03 0c 06 06 04 0e 00 40 63 08 03 1f 06 06 04 0e +00 40 5b 04 03 1f 06 06 04 0e 00 40 63 00 03 7d 1e 00 48 3c 67 18 02 04 00 +28 02 00 00 00 32 00 52 69 73 65 44 65 63 65 6e 74 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: RubberBand +** Description: An interesting use of portamento +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: GLIB (Michael Kesti and others) +1f 17 03 06 0f 52 07 5c 08 03 1f 1f 05 09 0b 00 06 63 10 03 1f 09 00 09 00 +00 03 62 08 03 1f 0b 04 09 0b 00 07 63 04 03 02 1e 09 04 00 62 0c 07 02 03 +63 32 00 32 00 32 00 52 75 62 62 65 72 42 61 6e 64 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: RubberBand +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: DX100 GLIB patch (Michael Kesti and others) +0c 04 02 01 09 08 01 43 04 0b 11 07 02 07 09 00 01 50 04 03 12 07 02 07 09 +00 01 35 04 0b 0f 08 02 07 09 36 02 63 04 0b 30 1f 1c 13 00 52 18 07 04 00 +63 32 00 32 00 32 00 52 75 62 62 65 72 42 61 6e 64 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: RubberBand +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: DX100 GLIB patch (Michael Kesti and others) +1f 02 03 06 00 52 03 50 04 03 1f 0b 00 09 0c 00 00 4e 04 03 1f 06 00 09 01 +00 00 5f 04 03 0b 09 04 09 0a 00 03 63 08 03 3c 1e 09 04 00 62 0c 07 04 00 +63 32 00 32 00 32 00 52 75 62 62 65 72 42 61 6e 64 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: RubberBand +** Source: DX100 GLIB patch (Michael Kesti and others) +1f 1f 00 00 0f 00 00 31 04 03 1f 1f 00 00 0f 21 00 3c 04 06 1f 1f 00 00 0f +1b 00 42 04 00 0b 1f 00 06 0f 00 00 60 04 03 3a 20 00 00 00 62 18 0c 04 00 +63 32 00 32 00 32 00 52 75 62 62 65 72 42 61 6e 64 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: RubberBand +** Source: DX100 GLIB patch (Michael Kesti and others) +1f 1f 00 00 0f 00 00 32 08 03 1f 1f 00 00 0f 21 00 4e 04 06 1f 1f 00 00 0f +1b 00 40 04 00 0b 1f 00 06 0f 00 00 5a 04 03 3a 20 00 00 00 62 18 0c 04 00 +63 32 00 32 00 32 00 52 75 62 62 65 72 42 61 6e 64 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: RubberBand +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: DX100 GLIB patch (Michael Kesti and others) +1f 02 03 06 00 0a 43 52 08 1b 1f 0a 00 09 0c 00 04 63 08 03 1f 08 02 09 0a +00 05 60 04 03 1f 1c 04 09 0c 00 07 63 04 03 3c 1e 09 03 00 62 18 07 04 00 +63 32 00 32 00 32 00 52 75 62 62 65 72 42 61 6e 64 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: RubberBand +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: DX100 GLIB patch (Michael Kesti and others) +1f 17 03 06 0f 52 07 5c 08 03 1f 1f 05 09 0b 00 06 63 10 03 1f 09 00 09 00 +00 03 62 08 03 1f 0b 04 09 0b 00 07 63 04 03 02 1e 09 04 00 62 0c 07 0a 03 +63 32 00 32 00 32 00 52 75 62 62 65 72 42 61 6e 64 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: RubberBand +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: DX100 GLIB patch (Michael Kesti and others) +1f 02 03 06 00 52 03 50 04 03 1f 0b 00 09 0c 00 00 4e 04 04 1f 06 00 09 01 +00 00 5f 04 03 1f 1c 04 09 0a 00 03 63 08 03 3c 1e 09 04 00 62 0c 02 04 00 +63 32 00 32 00 32 00 52 75 62 62 65 72 42 61 6e 64 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: RubberBand +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: DX100 GLIB patch (Michael Kesti and others) +1f 02 03 06 00 52 03 50 04 03 1f 0b 00 09 0c 00 00 4e 04 04 1f 06 00 09 01 +00 00 5f 04 03 1f 1c 04 09 0a 00 03 63 08 03 3c 1e 09 04 00 62 0c 02 0a 07 +63 32 00 32 00 32 00 52 75 62 62 65 72 42 61 6e 64 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: RubberBand +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: DX100 GLIB patch (Michael Kesti and others) +1f 02 03 06 00 0e 03 55 04 1b 1f 0b 00 09 0c 00 00 4e 04 04 1f 06 00 09 01 +00 00 5f 04 03 1f 1c 04 09 0a 00 03 63 08 03 3c 1e 09 04 00 62 0c 02 05 00 +63 32 00 32 00 32 00 52 75 62 62 65 72 42 61 6e 64 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SCM Writer +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 01 0f 0a 44 63 3f 03 1f 0d 06 04 0f 00 44 55 20 1b 1f 1f 00 03 0f +00 44 63 35 03 1f 0f 09 07 00 00 44 63 3f 1b 3b 05 00 00 58 66 18 02 04 00 +28 02 00 00 00 32 00 53 43 4d 20 57 72 69 74 65 72 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SCM Writer +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 01 0f 0a 40 63 3f 03 1f 0d 06 04 0f 00 40 55 20 1b 1f 1f 00 03 0f +00 40 63 35 03 1f 0f 09 07 00 00 40 63 3f 1b 3b 05 00 00 58 66 18 02 04 00 +28 02 00 00 00 32 00 53 43 4d 20 57 72 69 74 65 72 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SCM Writer +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +1f 1f 00 00 0f 0a 40 63 3f 03 1f 0d 06 04 0f 00 40 55 20 1b 1f 1f 00 03 0f +00 40 63 35 03 1f 0f 09 07 00 00 40 63 3f 1b 3b 05 00 00 58 66 18 02 04 00 +28 02 00 00 00 32 00 53 43 4d 20 57 72 69 74 65 72 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Saron Gam +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1d 09 05 06 0a 00 05 50 19 0e 1f 0c 06 06 0c 00 05 5d 06 16 1f 0d 08 03 0f +00 05 5e 11 1e 1f 11 07 06 0f 00 02 63 04 10 37 52 00 07 00 62 18 04 04 00 +28 32 00 00 00 32 00 53 61 72 6f 6e 20 47 61 6d 20 63 63 63 32 32 32 00 0f +00 0c 00 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Shore Wave +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +10 0f 00 0d 0d 00 00 63 20 03 17 0e 00 0d 0f 00 00 63 20 03 17 0f 00 0a 0f +00 00 63 3c 03 03 09 00 0f 00 00 00 52 3f 03 02 23 00 00 00 62 30 04 04 00 +28 32 00 00 00 32 00 53 68 6f 72 65 20 57 61 76 65 63 63 63 32 32 32 0c 06 +00 12 0b 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Shore Wv2 +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +10 0f 00 07 0d 00 00 63 20 03 17 0e 00 07 0f 00 00 63 20 03 17 0f 00 04 0f +00 00 63 3c 03 03 05 00 09 00 00 00 52 3f 03 02 23 00 00 00 62 30 04 04 00 +28 32 00 00 00 32 00 53 68 6f 72 65 20 57 76 32 20 63 63 63 32 32 32 0c 06 +00 12 0b 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sick Siren +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0e 1f 00 0f 0f 00 43 2b 08 03 0e 1f 00 09 0f 00 45 4a 08 03 10 1f 00 0f 0f +00 45 5d 04 03 15 1f 00 09 0f 00 45 63 04 03 04 0d 00 00 63 64 24 02 04 00 +28 02 00 00 00 32 00 53 69 63 6b 20 53 69 72 65 6e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sick Siren +** Source: from a library of patches collected by Duane Bowker, author unknown +0e 1f 00 0f 0f 00 40 2b 08 03 0e 1f 00 09 0f 00 40 4a 08 03 10 1f 00 0f 0f +00 40 5d 04 03 15 1f 00 09 0f 00 40 63 04 03 04 0d 00 00 63 64 24 02 04 00 +28 02 00 00 00 32 00 53 69 63 6b 20 53 69 72 65 6e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Space BUG? +** Controls: MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank D, voice 26 +1f 1f 00 01 0f 06 00 63 01 1b 1f 1f 00 0f 0f 02 40 63 01 1b 0f 15 00 04 0f +00 40 56 00 1b 19 1f 00 0a 0f 63 40 53 00 1b 7c 1f 00 2a 3c 3c 00 04 04 00 +28 32 00 00 00 32 00 53 70 61 63 65 20 42 55 47 3f 63 63 63 32 32 32 0f 06 +00 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Space BUG? +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 01 0f 06 00 63 01 1b 1f 1f 00 0f 0f 02 40 63 01 1b 0f 15 00 04 0f +00 40 56 00 1b 19 1f 00 0d 0f 63 40 53 00 1b 7c 1f 00 2a 3c 3c 00 04 04 00 +28 32 00 00 00 32 00 53 70 61 63 65 20 42 55 47 3f 63 63 63 32 32 32 0f 06 +00 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Space Gong +** Controls: MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank D, voice 30 +16 0a 0c 06 0f 03 00 53 04 08 0e 09 03 02 0f 03 00 59 07 0e 0a 06 05 04 0f +00 40 5a 00 00 14 08 05 04 08 00 40 5a 00 06 3c 0a 08 2d 3c 36 1b 04 04 00 +28 32 00 00 00 32 00 53 70 61 63 65 20 47 6f 6e 67 5e 63 12 29 32 15 00 16 +00 20 00 15 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Space Gong +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +16 0d 0c 06 0f 03 00 53 04 08 0e 09 03 02 0f 03 00 59 07 0e 0a 06 05 04 0f +00 40 5a 00 00 14 08 05 04 08 00 40 5a 00 06 3c 0a 08 2d 3c 36 1b 04 04 00 +28 32 00 00 00 32 00 53 70 61 63 65 20 47 6f 6e 67 5e 63 12 29 32 15 00 16 +00 20 00 15 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Space Gun +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 08 1f 05 0d 0a 02 39 00 03 1f 0a 1f 0a 0f 00 05 63 04 03 1f 09 1f 0a 0f +00 04 63 08 03 1f 04 1f 0a 0d 00 04 63 04 03 7d 39 00 63 00 70 18 02 04 00 +28 02 00 00 00 32 00 53 70 61 63 65 20 47 75 6e 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Space Gun +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 08 1f 05 0d 0a 00 39 00 03 1f 0a 1f 0a 0f 00 00 63 04 03 1f 09 1f 0a 0f +00 00 63 08 03 1f 04 1f 0a 0d 00 00 63 04 03 7d 39 00 63 00 70 18 02 04 00 +28 02 00 00 00 32 00 53 70 61 63 65 20 47 75 6e 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Space Talk +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank D, voice 21 +05 1f 01 01 0f 60 44 63 0b 03 06 1f 03 01 0f 02 42 63 06 03 0b 1f 04 01 0f +03 42 63 09 03 08 1f 02 09 0f 01 42 63 04 04 05 32 00 63 00 6d 18 05 04 3c +63 32 00 00 00 32 00 53 70 61 63 65 20 54 61 6c 6b 63 63 63 32 32 32 00 70 +00 40 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Space Vibe +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank D, voice 22 +19 0f 0f 07 0f 05 00 62 0d 00 19 00 0f 07 0f 05 01 63 04 00 19 00 0f 07 0f +05 02 63 0d 06 1f 00 06 02 0f 05 01 63 04 06 47 23 00 4b 00 71 1e 0c 04 00 +63 32 00 00 00 32 00 53 70 61 63 65 20 56 69 62 65 63 63 63 32 32 32 00 10 +00 00 00 50 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Space....1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +04 0c 00 03 0f 00 03 57 2d 06 04 09 00 03 0f 00 03 59 04 01 06 09 00 04 0f +00 03 63 04 05 06 09 00 04 0f 00 04 63 00 01 6c 23 21 00 00 02 18 02 04 00 +28 02 00 00 00 32 00 53 70 61 63 65 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Space....1 +** Source: from a library of patches collected by Duane Bowker, author unknown +04 0c 00 03 0f 00 00 57 2d 06 04 09 00 03 0f 00 00 59 04 01 06 09 00 04 0f +00 00 63 04 05 06 09 00 04 0f 00 00 63 00 01 6c 23 21 00 00 02 18 02 04 00 +28 02 00 00 00 32 00 53 70 61 63 65 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Space....2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 07 0f 00 41 57 04 03 03 1f 00 04 0f 00 43 59 1c 05 09 1f 00 06 0f +00 43 63 04 03 0c 1f 00 04 0f 00 45 63 13 00 2c 05 00 2f 63 14 18 02 04 00 +28 02 00 00 00 32 00 53 70 61 63 65 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Space....2 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 07 0f 00 40 57 04 03 03 1f 00 04 0f 00 40 59 1c 05 09 1f 00 06 0f +00 40 63 04 03 0c 1f 00 04 0f 00 40 63 13 00 2c 05 00 2f 63 14 18 02 04 00 +28 02 00 00 00 32 00 53 70 61 63 65 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Space....3 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +19 12 06 06 00 00 42 63 04 13 04 09 1f 04 04 00 43 4a 0b 04 15 15 09 0a 0f +00 43 5d 04 03 1c 09 04 04 04 00 44 5f 04 00 0c 2b 41 0b 5a 76 18 02 04 00 +63 63 00 00 00 32 00 53 70 61 63 65 2e 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Space....3 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +19 12 06 06 00 00 40 63 04 13 04 09 1f 04 04 00 40 4a 0b 04 15 15 09 0a 0f +00 40 5d 04 03 1c 09 04 04 04 00 40 5f 04 00 0c 2b 41 0b 5a 76 18 02 04 00 +63 63 00 00 00 32 00 53 70 61 63 65 2e 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Space....4 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 09 15 04 00 00 02 46 13 0c 06 04 07 04 00 00 04 46 04 0b 14 1d 15 06 00 +00 04 63 08 0c 19 03 0c 04 00 00 04 5f 04 0b 4c 63 00 63 00 72 18 02 04 00 +63 63 00 00 00 32 00 53 70 61 63 65 2e 2e 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Space....4 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 09 15 04 00 00 00 46 13 0c 06 04 07 04 00 00 00 46 04 0b 14 1d 15 06 00 +00 00 63 08 0c 19 03 0c 04 00 00 00 5f 04 0b 4c 63 00 63 00 72 18 02 04 00 +63 63 00 00 00 32 00 53 70 61 63 65 2e 2e 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SpaceBirds +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 06 00 0a 0e 0a 43 39 0d 00 1f 1f 00 09 0f 00 45 63 29 03 1f 0b 00 0a 0f +00 44 36 08 06 0b 0b 00 0b 0f 00 45 63 00 03 07 25 00 42 5a 6e 00 02 04 00 +28 02 00 00 00 32 00 53 70 61 63 65 42 69 72 64 73 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SpaceBirds +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +10 06 00 0a 0e 0a 40 39 0d 00 1f 1f 00 09 0f 00 40 63 29 03 1f 0b 00 0a 0f +00 40 36 08 06 0b 0b 00 0b 0f 00 40 63 00 03 07 25 00 42 5a 6e 00 02 04 00 +28 02 00 00 00 32 00 53 70 61 63 65 42 69 72 64 73 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Spc Midiot +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank D, voice 9 +04 07 00 09 0d 22 00 4b 3d 08 14 14 00 05 0b 24 41 52 08 00 15 03 00 06 06 +00 01 60 14 06 05 15 00 08 0f 00 04 63 00 06 7b 1f 0d 0e 1e 0e 18 0c 04 00 +63 32 00 32 00 32 00 53 70 63 20 4d 69 64 69 6f 74 63 63 63 32 32 32 08 70 +00 00 00 10 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SteelPan * +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +14 0c 07 04 0f 27 05 52 0a 08 14 07 08 03 0f 2b 03 52 09 0e 16 07 09 06 0f +00 02 63 04 0e 11 07 09 05 0f 00 02 63 04 16 04 19 00 0a 63 52 18 02 04 00 +28 32 00 00 00 32 00 53 74 65 65 6c 50 61 6e 20 2a 63 63 63 32 32 32 00 01 +00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Storm Wind +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank D, voice 17 +12 08 01 03 05 00 01 43 0a 00 14 0b 04 01 09 00 01 60 11 00 14 07 01 03 05 +00 01 63 00 00 0f 06 00 01 0c 00 02 63 00 00 33 63 00 63 00 73 00 05 04 00 +63 63 63 00 00 32 00 53 74 6f 72 6d 20 57 69 6e 64 63 63 63 32 32 32 00 50 +00 10 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: TAP TAP<<< +** Source: Yamaha DX11 factory preset, bank D, voice 29 +12 09 00 01 0f 06 00 3a 00 1b 12 09 00 01 0f 02 00 61 00 1b 17 08 00 01 0f +00 00 33 00 1b 15 15 00 0a 0f 00 40 53 3e 1b 3a 1c 00 00 63 6e 00 04 04 00 +28 63 00 00 00 32 00 54 41 50 20 54 41 50 3c 3c 3c 63 63 63 32 32 32 00 00 +00 00 00 00 00 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: TAP TAP<<< +** Source: from a library of patches collected by Duane Bowker, author unknown +12 09 00 01 0f 06 00 3a 00 1b 12 09 00 01 0f 02 00 61 00 1b 17 08 00 01 0f +00 00 33 00 1b 15 15 00 0d 0f 00 40 53 3e 1b 3a 1c 00 00 63 6e 00 04 04 00 +28 63 00 00 00 32 00 54 41 50 20 54 41 50 3c 3c 3c 63 63 63 32 32 32 00 00 +00 00 00 00 00 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Telephone* +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 0f 0f 00 40 4b 30 03 1f 1f 00 06 0f 00 40 48 28 03 1f 1f 00 06 0f +00 00 63 30 03 1f 1f 00 06 0f 00 00 63 24 03 7c 3a 00 00 63 09 18 04 04 00 +28 32 00 00 00 32 00 54 65 6c 65 70 68 6f 6e 65 2a 63 63 63 32 32 32 0c 0a +0c 05 0b 16 0e 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Terror! +** Controls: MW (LFO pitch) +** Source: Yamaha DX11 factory preset, bank D, voice 23 +0c 1f 00 03 0f 20 00 2e 31 03 1f 1f 00 03 0f 00 00 3b 08 06 0a 1f 00 03 0f +2a 00 34 08 00 12 1f 00 04 0f 00 00 54 00 03 03 63 00 23 00 63 18 04 04 00 +28 32 00 00 00 32 00 54 65 72 72 6f 72 21 20 20 20 63 24 11 2d 32 25 04 6f +00 20 00 40 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Terror! +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0c 1f 00 03 0f 20 00 2e 31 03 1f 1f 00 03 0f 00 00 3b 08 06 0d 1f 00 03 0f +2a 00 34 08 00 12 1f 00 04 0f 00 00 54 00 03 03 63 00 23 00 63 18 04 04 00 +28 32 00 00 00 32 00 54 65 72 72 6f 72 21 20 20 20 63 24 11 2d 32 25 04 6f +00 20 00 40 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Traffic..1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 02 0f 00 02 42 02 03 1f 1f 00 01 0f 00 04 32 0a 03 1f 1f 00 03 0f +00 05 46 01 03 15 1f 00 03 0f 00 05 63 04 03 3a 47 00 3c 00 62 18 0c 04 0e +63 32 00 00 00 32 00 54 72 61 66 66 69 63 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Traffic..1 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 02 0f 00 00 42 02 03 1f 1f 00 01 0f 00 00 32 0a 03 1f 1f 00 03 0f +00 00 46 01 03 15 1f 00 03 0f 00 00 63 04 03 3a 47 00 3c 00 62 18 0c 04 0e +63 32 00 00 00 32 00 54 72 61 66 66 69 63 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Traffic..2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 02 0f 00 04 48 06 03 1f 1f 00 01 0f 00 05 32 07 03 1f 1f 00 03 0f +00 05 46 00 03 15 1f 00 03 0f 00 05 63 04 03 3a 15 00 5f 00 73 18 0c 04 0e +63 32 00 00 00 32 00 54 72 61 66 66 69 63 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Traffic..2 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 02 0f 00 00 48 06 03 1f 1f 00 01 0f 00 00 32 07 03 1f 1f 00 03 0f +00 00 46 00 03 15 1f 00 03 0f 00 00 63 04 03 3a 15 00 5f 00 73 18 0c 04 0e +63 32 00 00 00 32 00 54 72 61 66 66 69 63 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tug Boat +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +15 16 00 01 0f 0a 03 00 06 03 0f 0d 00 01 0f 00 04 3b 08 03 1f 07 00 03 0c +00 06 3c 06 03 13 16 00 07 0f 00 06 63 04 03 7a 0c 00 00 00 40 18 02 04 00 +28 02 00 00 00 32 00 54 75 67 20 42 6f 61 74 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tug Boat +** Source: from a library of patches collected by Duane Bowker, author unknown +15 16 00 01 0f 0a 00 00 06 03 0f 0d 00 01 0f 00 00 3b 08 03 1f 07 00 03 0c +00 00 3c 06 03 13 16 00 07 0f 00 00 63 04 03 7a 0c 00 00 00 40 18 02 04 00 +28 02 00 00 00 32 00 54 75 67 20 42 6f 61 74 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Tug Boat +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +15 16 00 00 0f 0a 00 00 06 03 0f 0d 00 00 0f 00 00 3b 08 03 1f 07 00 03 0c +00 00 3c 06 03 13 16 00 07 0f 00 00 63 04 03 7a 0c 00 00 00 40 18 02 04 00 +28 02 00 00 00 32 00 54 75 67 20 42 6f 61 74 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Typwriter* +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 05 00 07 00 00 00 3e 00 03 1f 1f 00 03 0f 00 00 4d 24 03 1f 1f 00 07 0f +00 00 59 18 03 1f 11 00 09 00 00 41 63 38 03 3b 4a 00 00 00 0d 18 02 04 00 +28 63 00 00 00 32 00 54 79 70 77 72 69 74 65 72 2a 63 63 63 32 32 32 08 70 +0c 02 08 04 09 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: UFO Decent +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 06 00 05 0e 0a 43 39 0d 00 1f 1f 00 01 0f 00 43 63 29 03 1f 0b 00 0a 0f +00 45 36 08 06 0b 0b 00 07 0f 00 45 63 00 03 38 05 00 42 5a 6e 18 02 04 00 +28 02 00 00 00 32 00 55 46 4f 20 44 65 63 65 6e 74 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: UFO Decent +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +10 06 00 05 0e 0a 40 39 0d 00 1f 1f 00 01 0f 00 40 63 29 03 1f 0b 00 0a 0f +00 40 36 08 06 0b 0b 00 07 0f 00 40 63 00 03 38 05 00 42 5a 6e 18 02 04 00 +28 02 00 00 00 32 00 55 46 4f 20 44 65 63 65 6e 74 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: UFO Decent +** Controls: MW (LFO pitch) +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +10 06 00 05 0e 0a 40 39 0d 00 1f 1f 00 00 0f 00 40 63 29 03 1f 0b 00 0a 0f +00 40 36 08 06 0b 0b 00 07 0f 00 40 63 00 03 38 05 00 42 5a 6e 18 02 04 00 +28 02 00 00 00 32 00 55 46 4f 20 44 65 63 65 6e 74 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Uzzie +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 06 08 07 0f 0a 43 63 3f 03 1f 04 00 06 0f 00 45 63 29 03 1f 09 00 06 0f +00 45 47 35 03 1f 0a 00 07 0f 00 45 63 00 03 12 44 00 00 63 04 18 02 04 00 +28 02 00 00 00 32 00 20 20 55 7a 7a 69 65 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Uzzie +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 06 08 07 0f 0a 40 63 3f 03 1f 04 00 06 0f 00 40 63 29 03 1f 09 00 06 0f +00 40 47 35 03 1f 0a 00 07 0f 00 40 63 00 03 12 44 00 00 63 04 18 02 04 00 +28 02 00 00 00 32 00 20 20 55 7a 7a 69 65 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Water * +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +06 00 06 04 0f 00 40 44 18 00 08 08 07 07 0f 00 00 63 04 06 06 07 08 07 0f +00 00 5a 05 06 09 08 04 05 0f 00 03 63 03 00 7f 43 00 63 63 7b 18 02 04 00 +63 32 00 00 00 32 00 57 61 74 65 72 20 20 20 20 2a 63 63 63 32 32 32 00 08 +00 38 00 01 00 46 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Waves....1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 01 0f 0a 43 63 3f 03 1f 1f 00 01 0f 00 43 63 29 03 1f 1f 00 03 0f +00 45 63 35 03 0b 0b 00 07 0f 00 45 63 00 03 38 06 00 42 5a 66 18 02 04 00 +28 02 00 00 00 32 00 57 61 76 65 73 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Waves....1 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 01 0f 0a 40 63 3f 03 1f 1f 00 01 0f 00 40 63 29 03 1f 1f 00 03 0f +00 40 63 35 03 0b 0b 00 07 0f 00 40 63 00 03 38 06 00 42 5a 66 18 02 04 00 +28 02 00 00 00 32 00 57 61 76 65 73 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Waves....1 +** Controls: MW (LFO pitch) +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +1f 1f 00 00 0f 0a 40 63 3f 03 1f 1f 00 00 0f 00 40 63 29 03 1f 1f 00 03 0f +00 40 63 35 03 0b 0b 00 07 0f 00 40 63 00 03 38 06 00 42 5a 66 18 02 04 00 +28 02 00 00 00 32 00 57 61 76 65 73 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Waves....2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 01 0f 0a 43 63 3f 03 1f 1f 00 01 0f 00 43 63 29 03 1f 1f 00 03 0f +00 45 63 35 03 04 0b 00 07 0f 00 45 63 00 03 38 04 00 42 5a 66 18 02 04 00 +28 02 00 00 00 32 00 57 61 76 65 73 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Waves....2 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 01 0f 0a 40 63 3f 03 1f 1f 00 01 0f 00 40 63 29 03 1f 1f 00 03 0f +00 40 63 35 03 04 0b 00 07 0f 00 40 63 00 03 38 04 00 42 5a 66 18 02 04 00 +28 02 00 00 00 32 00 57 61 76 65 73 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Waves....2 +** Controls: MW (LFO pitch) +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +1f 1f 00 00 0f 0a 40 63 3f 03 1f 1f 00 00 0f 00 40 63 29 03 1f 1f 00 03 0f +00 40 63 35 03 04 0b 00 07 0f 00 40 63 00 03 38 04 00 42 5a 66 18 02 04 00 +28 02 00 00 00 32 00 57 61 76 65 73 2e 2e 2e 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Waves....3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 01 0f 0a 45 63 3f 03 1f 1f 00 01 0f 00 44 63 29 03 1f 1f 00 03 0f +00 45 63 35 03 08 0b 00 07 0f 00 45 63 00 03 38 05 00 00 58 66 18 02 04 00 +28 02 00 00 00 32 00 57 61 76 65 73 2e 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Waves....3 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 01 0f 0a 40 63 3f 03 1f 1f 00 01 0f 00 40 63 29 03 1f 1f 00 03 0f +00 40 63 35 03 08 0b 00 07 0f 00 40 63 00 03 38 05 00 00 58 66 18 02 04 00 +28 02 00 00 00 32 00 57 61 76 65 73 2e 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Waves....3 +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +1f 1f 00 00 0f 0a 40 63 3f 03 1f 1f 00 00 0f 00 40 63 29 03 1f 1f 00 03 0f +00 40 63 35 03 08 0b 00 07 0f 00 40 63 00 03 38 05 00 00 58 66 18 02 04 00 +28 02 00 00 00 32 00 57 61 76 65 73 2e 2e 2e 2e 33 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Waves....4 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1e 1f 00 01 0f 0a 43 63 3f 03 1f 1f 00 01 0f 00 45 00 29 03 0a 1f 00 03 0f +00 46 63 35 03 0b 0b 00 07 0f 00 46 01 00 03 3e 05 00 42 55 66 18 02 04 00 +28 02 00 00 00 32 00 57 61 76 65 73 2e 2e 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Waves....4 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 00 01 0f 0a 02 63 08 03 1f 1f 00 01 0f 00 04 63 0a 03 1f 1f 00 03 0f +00 04 63 08 03 0c 0a 09 07 0e 00 05 63 00 03 38 23 00 00 00 62 00 02 04 00 +28 02 00 00 00 32 00 57 61 76 65 73 2e 2e 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Waves....4 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 1f 00 01 0f 0a 40 63 3f 03 1f 1f 00 01 0f 00 40 00 29 03 0a 1f 00 03 0f +0f 40 63 35 03 0b 0b 00 07 0f 00 40 01 00 03 3e 05 00 42 55 66 18 02 04 00 +28 02 00 00 00 32 00 57 61 76 65 73 2e 2e 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Waves....4 +** Controls: MW (LFO pitch) +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +1e 1f 00 00 0f 0a 40 63 3f 03 1f 1f 00 00 0f 00 40 00 29 03 0a 1f 00 03 0f +0f 40 63 35 03 0b 0b 00 07 0f 00 40 01 00 03 3e 05 00 42 55 66 18 02 04 00 +28 02 00 00 00 32 00 57 61 76 65 73 2e 2e 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Waves....4 +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 00 01 0f 0a 00 63 08 03 1f 1f 00 01 0f 00 00 63 0a 03 1f 1f 00 03 0f +00 00 63 08 03 0c 0a 09 07 0e 00 00 63 00 03 38 23 00 00 00 62 00 02 04 00 +28 02 00 00 00 32 00 57 61 76 65 73 2e 2e 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Waves....4 +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +1f 1f 00 00 0f 0a 00 63 08 03 1f 1f 00 00 0f 00 00 63 0a 03 1f 1f 00 03 0f +00 00 63 08 03 0c 0a 09 07 0e 00 00 63 00 03 38 23 00 00 00 62 00 02 04 00 +28 02 00 00 00 32 00 57 61 76 65 73 2e 2e 2e 2e 34 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Wind * +** Controls: KV, MW (LFO pitch), BC (voice pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 00 13 01 00 00 00 63 21 06 1f 05 13 01 00 00 00 00 00 02 1f 00 13 01 00 +00 00 40 28 05 06 08 00 02 0e 00 01 63 05 03 3b 63 00 63 00 73 24 0c 04 00 +63 32 00 00 00 53 00 57 69 6e 64 20 20 20 20 20 2a 63 63 63 32 32 32 08 00 +00 00 0c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: >>WOW<< +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank D, voice 7 +1f 0c 0d 08 0a 00 01 45 04 03 1f 10 00 04 0f 00 00 4c 00 03 0f 04 02 0a 0a +00 01 55 00 03 1f 1f 00 0c 0f 00 02 63 04 03 39 23 00 00 00 62 0c 02 04 00 +63 32 00 32 00 32 00 3e 3e 57 4f 57 3c 3c 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: WaterGlass +** Controls: KV +** Source: Yamaha TX81Z factory preset, bank D, voice 5 +1f 1f 00 05 0f 00 00 41 32 03 1f 14 10 05 05 01 02 63 07 03 1f 0b 12 08 0f +00 01 63 0c 03 1f 1f 0f 08 0f 00 01 63 04 03 39 23 00 00 00 62 18 07 04 00 +63 32 00 00 00 32 00 57 61 74 65 72 47 6c 61 73 73 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: WeirdAxe * +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0f 0d 09 0f 00 00 5f 3c 03 1f 0f 0d 09 0f 00 02 63 38 03 1d 0f 0d 07 0f +00 01 63 1a 03 1f 0f 0d 07 0f 00 01 63 00 03 04 23 00 00 00 32 24 02 04 00 +28 63 00 00 00 32 00 57 65 69 72 64 41 78 65 20 2a 63 63 63 32 32 32 0d 03 +0d 31 00 04 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: White Blow +** Source: Yamaha DX11 factory preset, bank D, voice 32 +18 13 00 0f 0a 00 00 3f 20 03 1f 12 00 0a 0f 00 00 56 20 03 1f 13 00 0c 0f +00 00 5c 3c 03 0b 0a 0a 0b 0a 00 00 5a 3f 03 02 23 00 00 00 62 30 04 04 00 +28 32 00 00 00 32 00 57 68 69 74 65 20 42 6c 6f 77 63 63 63 32 32 32 0c 06 +00 02 0b 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: White Blow +** Source: from a library of patches collected by Duane Bowker, author unknown +18 13 00 0f 0d 00 00 3f 20 03 1f 12 00 0d 0f 00 00 56 20 03 1f 13 00 0c 0f +00 00 5c 3c 03 0b 0d 0a 0b 0d 00 00 5a 3f 03 02 23 00 00 00 62 30 04 04 00 +28 32 00 00 00 32 00 57 68 69 74 65 20 42 6c 6f 77 63 63 63 32 32 32 0c 06 +00 02 0b 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +--Bank 29 + +* CATEGORY OTHER + +* SUBCATEGORY Other + +** Name: 120 VAC +** Description: A guitar-like sound +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 07 07 06 0f 00 3d 5e 04 0c 1f 07 07 05 0f 00 1d 46 28 01 1f 07 07 07 0f +00 1d 63 10 0c 1f 07 0a 05 0f 00 3d 5d 04 01 24 1c 11 02 00 42 18 02 04 00 +63 32 00 00 00 32 00 31 32 30 20 56 41 43 20 20 20 63 63 63 32 32 32 00 00 +00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: 120 VAC +** Description: A guitar-like sound +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 07 07 06 0f 00 3a 5e 04 0c 1f 07 07 05 0f 00 19 46 28 01 1f 07 07 07 0f +00 19 63 10 0c 1f 07 0a 05 0f 00 38 5d 04 01 24 1c 11 02 00 42 18 02 04 00 +63 32 00 00 00 32 00 31 32 30 20 56 41 43 20 20 20 63 63 63 32 32 32 00 00 +00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Amazon +** Description: A jungle sound +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 13 1f 03 05 00 06 4b 13 13 13 1f 1f 05 05 00 06 4a 10 13 1f 1f 01 05 0f +00 03 63 03 0d 1f 1f 01 05 0f 00 03 63 05 09 2c 1c 09 07 00 52 05 04 04 00 +63 28 00 0f 00 32 00 41 6d 61 7a 6f 6e 20 20 20 20 63 63 63 32 32 32 00 10 +00 6d 00 16 00 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ArcoGlass* +** Description: A glass harp +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 09 00 05 00 0a 01 47 12 0e 1f 09 00 05 00 0a 01 47 0d 0e 0b 0a 0a 05 00 +09 40 63 00 06 0b 0a 0a 05 00 09 40 63 00 00 2c 15 01 16 0c 3a 24 02 04 00 +28 37 00 00 00 32 00 41 72 63 6f 47 6c 61 73 73 2a 63 63 63 32 32 32 00 06 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Aviary +** Description: A glassy sound +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1f 1f 0f 0f 0a 00 00 1e 03 1f 1f 0b 00 0f 00 00 2f 1a 03 0c 1f 0d 07 0f +00 00 48 03 03 0c 0f 06 05 0f 00 00 50 03 03 7c 23 00 00 00 32 18 02 04 00 +28 02 00 00 00 32 00 41 76 69 61 72 79 20 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Aviary +** Description: A glassy sound +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 1f 0f 0f 0a 00 00 1e 03 1f 1f 0b 01 0f 00 00 2f 1a 03 0c 1f 0d 07 0f +00 00 48 03 03 0c 0f 06 05 0f 00 00 50 03 03 7c 23 00 00 00 32 18 02 04 00 +28 02 00 00 00 32 00 41 76 69 61 72 79 20 20 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: BC1 GlassV +** Controls: KV, MW (LFO pitch), BC (EG amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +09 03 03 06 0f 00 3b 4c 19 0b 0c 0c 05 05 0d 40 04 59 10 10 0b 0a 06 06 0c +27 06 63 08 08 09 06 06 06 0d 00 06 5c 04 13 0c 1e 18 03 00 62 18 07 04 00 +63 32 01 00 00 32 63 42 43 31 20 47 6c 61 73 73 56 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Botl.Shff* +** Description: Blowing across the top of a bottle +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 13 11 0a 0d 00 01 55 13 09 1f 19 00 07 0d 00 01 4f 0a 00 1f 11 0d 09 09 +00 02 5c 09 06 0e 08 00 07 0e 00 42 63 05 0b 3b 1c 00 00 00 5e 05 02 04 00 +63 10 2e 00 00 32 00 42 6f 74 6c 2e 53 68 66 66 2a 63 63 63 32 32 32 00 00 +00 00 00 02 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Cairo * +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 08 06 07 0e 14 00 53 04 0e 1f 0f 0a 0b 0b 00 00 3d 38 0b 1f 1e 06 07 0e +00 02 63 03 08 1f 07 07 0a 0b 00 02 63 04 0b 04 15 00 0a 00 32 05 02 04 00 +28 63 00 00 00 32 00 43 61 69 72 6f 20 20 20 20 2a 63 63 63 32 32 32 00 18 +00 06 00 06 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Celestial +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 00 00 04 0f 00 18 41 39 06 0b 02 03 04 00 00 00 50 05 06 0f 02 04 03 0a +00 08 55 03 04 0e 00 01 06 00 00 02 63 04 00 7e 1a 00 05 01 62 11 0c 05 00 +63 32 00 00 00 32 00 43 65 6c 65 73 74 69 61 6c 20 63 63 63 32 32 32 00 21 +00 11 00 46 00 48 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ChimeStrig +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 09 04 03 08 00 04 57 0a 03 1f 1f 00 03 0f 00 04 5e 00 06 1f 09 04 04 08 +00 04 5b 1f 02 0f 1f 00 04 0f 00 06 5e 08 06 2c 23 00 00 00 02 18 04 04 00 +28 32 00 00 00 32 00 43 68 69 6d 65 53 74 72 69 67 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ChimeStrig +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 09 04 03 08 00 02 57 0a 03 1f 1f 00 03 0f 00 01 5e 00 06 1f 09 04 04 08 +00 00 5b 1f 02 0f 1f 00 04 0f 00 00 5e 08 06 2c 23 00 00 00 02 18 04 04 00 +28 32 00 00 00 32 00 43 68 69 6d 65 53 74 72 69 67 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Deep Space +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1b 07 07 00 0a 44 54 13 03 1f 0a 07 06 00 00 45 52 04 13 1f 12 07 06 00 +00 46 53 10 03 10 0a 0a 04 00 00 46 63 04 03 07 2a 48 01 4b 06 18 02 04 00 +28 02 00 00 00 32 00 44 65 65 70 20 53 70 61 63 65 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Deep Space +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1b 07 07 00 0a 40 54 13 03 1f 0a 07 06 00 00 40 52 04 13 1f 12 07 06 00 +00 40 53 10 03 10 0a 0a 04 00 00 40 63 04 03 07 2a 48 01 4b 06 18 02 04 00 +28 02 00 00 00 32 00 44 65 65 70 20 53 70 61 63 65 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: EleChamber +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0c 06 02 03 0e 00 02 3f 08 02 0b 03 03 05 08 00 04 47 08 00 0a 08 03 07 0f +00 05 63 08 06 09 10 03 05 0f 00 05 63 08 05 5c 21 23 09 00 32 0c 05 04 00 +63 63 63 00 00 32 00 45 6c 65 43 68 61 6d 62 65 72 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: EleChamber +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0c 06 02 03 0e 00 00 3f 08 02 0b 03 03 05 08 00 00 47 08 00 0a 08 03 07 0f +00 01 63 08 06 09 10 03 05 0f 00 01 63 08 05 5c 21 23 09 00 32 0c 05 04 00 +63 63 63 00 00 32 00 45 6c 65 43 68 61 6d 62 65 72 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Enc3rdKind +** Controls: KV, MW (LFO pitch), MW (LFO amplitude) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0a 00 06 00 00 44 63 00 03 1f 0d 00 06 00 00 43 63 04 03 1f 0c 00 06 00 +00 45 63 04 03 1f 0a 00 06 0a 00 45 63 04 03 47 14 4f 1e 02 15 18 04 04 00 +63 01 63 00 00 32 00 45 6e 63 33 72 64 4b 69 6e 64 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Enc3rdKind +** Controls: MW (LFO pitch), MW (LFO amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0a 00 06 00 00 40 63 00 03 1f 0d 00 06 00 00 40 63 04 03 1f 0c 00 06 00 +00 40 63 04 03 1f 0a 00 06 0a 00 40 63 04 03 47 14 4f 1e 02 15 18 04 04 00 +63 01 63 00 00 32 00 45 6e 63 33 72 64 4b 69 6e 64 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Etherial +** Controls: MW (LFO pitch) +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +1f 1f 00 03 0f 00 00 42 13 03 1f 1f 00 03 0f 00 00 3c 13 03 14 1f 00 05 0f +1e 00 56 0a 03 14 1f 00 05 0f 1e 00 56 1c 03 3c 23 00 32 00 42 05 02 04 00 +63 63 00 00 00 32 00 45 74 68 65 72 69 61 6c 20 20 63 63 63 32 32 32 00 30 +00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Floot Base +** Description: Almost a flute, and down a fifth +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +18 1f 16 0f 0f 00 00 63 05 00 18 07 00 0f 07 1b 00 45 03 0c 1f 1f 15 0f 0f +03 00 63 1e 05 0f 14 00 0f 0f 05 01 5f 04 02 3b 20 00 00 00 62 0c 02 05 00 +63 13 63 00 00 32 00 46 6c 6f 6f 74 20 42 61 73 65 63 63 63 32 32 32 00 72 +00 36 00 04 00 08 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Full Ranks +** Source: Unknown (downloaded from TX81Z patch directory on ucsd.edu) +16 00 00 0a 0f 00 00 39 1f 02 18 00 00 05 0f 5b 00 5b 00 10 0f 00 00 08 0f +00 00 63 08 10 0c 00 00 05 0f 00 00 63 00 16 3c 23 00 00 00 02 0c 00 04 00 +63 00 00 00 00 32 00 46 75 6c 6c 20 52 61 6e 6b 73 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: FuzzyPad +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 06 06 04 0f 00 40 40 05 00 14 08 07 05 0f 05 00 47 04 00 0f 07 03 07 0e +08 03 63 04 06 13 08 04 05 0f 00 03 60 04 06 64 1f 00 06 00 4a 05 02 04 00 +63 32 00 00 00 32 00 46 75 7a 7a 79 50 61 64 20 20 63 63 63 32 32 32 06 31 +00 38 00 08 00 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Gender Gam +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +15 13 05 06 0a 00 04 54 19 0e 1f 0e 04 06 0c 00 04 4a 06 0e 18 13 03 08 0c +00 04 59 10 06 1f 12 03 06 0d 00 01 63 04 00 37 52 00 07 00 62 18 04 04 00 +28 32 00 00 00 32 00 47 65 6e 64 65 72 20 47 61 6d 63 63 63 32 32 32 00 1e +00 0b 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: GlassHarp1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1c 0a 00 04 00 00 02 50 15 02 1f 0a 00 05 00 00 03 4e 0d 02 0f 0c 0a 06 00 +00 03 63 00 02 0f 0c 00 06 0f 00 04 63 00 04 2e 63 00 00 00 33 1b 04 04 00 +63 01 63 00 00 32 00 47 6c 61 73 73 48 61 72 70 31 63 63 63 32 32 32 0f 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: GlassHarp1 +** Source: from a library of patches collected by Duane Bowker, author unknown +1c 0a 00 04 00 00 00 50 15 02 1f 0a 00 05 00 00 00 4e 0d 02 0f 0c 0a 06 00 +00 00 63 00 02 0f 0c 00 06 0f 00 00 63 00 04 2e 63 00 00 00 33 1b 04 04 00 +63 01 63 00 00 32 00 47 6c 61 73 73 48 61 72 70 31 63 63 63 32 32 32 0f 00 +00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: GlassHarp2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +09 03 03 06 0f 00 3c 40 19 0b 0c 0c 05 05 0d 40 04 4f 10 10 0b 0a 06 06 0c +27 05 63 08 08 09 06 06 06 0d 00 05 5c 04 13 0c 1e 18 03 00 62 18 07 04 00 +63 32 01 00 00 32 00 47 6c 61 73 73 48 61 72 70 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: GlassHarp2 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +09 03 03 06 0f 00 38 40 19 0b 0c 0c 05 05 0d 40 00 4f 10 10 0b 0a 06 06 0c +27 00 63 08 08 09 06 06 06 0d 00 00 5c 04 13 0c 1e 18 03 00 62 18 07 04 00 +63 32 01 00 00 32 00 47 6c 61 73 73 48 61 72 70 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: GlassHarp3 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0c 07 04 04 0a 00 04 3e 2a 03 07 07 04 04 09 00 04 27 2d 05 0c 06 07 07 03 +00 04 63 10 06 0a 08 05 05 0c 00 04 63 10 00 2e 63 00 00 00 23 18 04 04 00 +63 01 63 00 00 32 00 47 6c 61 73 73 48 61 72 70 33 63 63 63 32 32 32 0f 07 +00 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: GlassHarp3 +** Source: from a library of patches collected by Duane Bowker, author unknown +0c 07 04 04 0a 00 00 3e 2a 03 07 07 04 04 09 00 00 27 2d 05 0c 06 07 07 03 +00 00 63 10 06 0a 08 05 05 0c 00 00 63 10 00 2e 63 00 00 00 33 18 04 04 00 +63 01 63 00 00 32 00 47 6c 61 73 73 48 61 72 70 33 63 63 63 32 32 32 0f 07 +00 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: HarmoPad +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank B, voice 28 +0a 1f 02 05 0f 27 43 4d 05 06 0a 1f 02 05 0f 27 03 4f 04 00 0b 1f 00 04 0f +00 01 63 05 0e 0b 1f 00 04 0f 00 01 63 04 08 04 1c 0e 1c 00 36 05 04 04 00 +28 32 00 00 00 32 00 48 61 72 6d 6f 50 61 64 20 20 63 63 63 32 32 32 04 41 +00 48 00 31 07 38 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Impression +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +09 15 04 07 0f 00 06 50 00 0b 09 15 04 07 0f 00 06 43 00 0b 16 07 04 07 0f +00 05 63 00 03 16 07 04 07 0f 00 05 63 00 03 14 20 3b 02 00 02 18 04 04 00 +63 01 63 00 00 32 00 49 6d 70 72 65 73 73 69 6f 6e 63 63 63 32 32 32 00 00 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Impression +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +09 15 04 07 0f 00 02 50 00 0b 09 15 04 07 0f 00 01 43 00 0b 16 07 04 07 0f +00 00 63 00 03 16 07 04 07 0f 00 00 63 00 03 14 20 3b 02 00 02 18 04 04 00 +63 01 63 00 00 32 00 49 6d 70 72 65 73 73 69 6f 6e 63 63 63 32 32 32 00 00 +00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Jump.....1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 03 01 06 0e 00 03 54 04 03 12 04 01 04 0e 00 05 4d 08 03 15 03 02 09 0e +00 05 63 04 03 15 0c 03 09 0e 00 05 63 04 01 34 26 02 0d 00 32 0c 04 04 00 +28 32 00 00 00 32 00 4a 75 6d 70 2e 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Jump.....1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +12 03 01 06 0e 00 01 54 04 03 12 04 01 04 0e 00 02 4d 08 03 15 03 02 09 0e +00 00 63 04 03 15 0c 03 09 0e 00 00 63 04 01 34 26 02 0d 00 32 0c 04 04 00 +28 32 00 00 00 32 00 4a 75 6d 70 2e 2e 2e 2e 2e 31 63 63 63 32 32 32 00 00 +00 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Jump.....2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 03 07 09 0e 00 03 57 04 03 1f 16 18 09 0c 00 05 63 08 1b 1f 16 00 09 0e +00 05 63 04 03 1f 16 00 09 0c 00 05 63 08 03 2c 26 21 20 00 12 18 04 04 00 +28 32 00 00 00 32 00 4a 75 6d 70 2e 2e 2e 2e 2e 32 63 63 63 32 32 32 00 10 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Jump.....2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +12 03 07 09 0e 00 01 57 04 03 1f 16 18 09 0c 00 02 63 08 1b 1f 16 00 09 0e +00 00 63 04 03 1f 16 00 09 0c 00 00 63 08 03 2c 26 21 20 00 12 18 04 04 00 +28 32 00 00 00 32 00 4a 75 6d 70 2e 2e 2e 2e 2e 32 63 63 63 32 32 32 00 10 +00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: KrstlChoir +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank D, voice 3 +1f 00 06 04 0f 00 40 43 18 00 0b 08 07 07 0f 05 00 63 04 06 0f 07 08 07 0f +08 00 59 05 06 0e 08 04 05 0f 00 03 63 03 00 7e 22 00 0f 00 4a 1d 02 04 00 +63 32 00 00 00 32 00 4b 72 73 74 6c 43 68 6f 69 72 63 63 63 32 32 32 00 38 +00 38 00 01 00 46 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: KrystlPad1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 11 06 07 0f 00 45 4f 1a 00 0b 08 07 07 0f 05 01 62 04 03 0f 07 08 07 0f +08 01 62 05 06 0e 08 04 05 0f 00 03 63 03 00 7f 22 00 0f 00 26 11 02 04 00 +63 32 00 00 00 32 00 4b 72 79 73 74 6c 50 61 64 31 63 63 63 32 32 32 00 38 +00 18 00 21 00 26 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: MilkBottle +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0c 1f 06 05 01 00 03 3f 09 08 13 1c 03 05 0b 00 02 53 09 0e 1c 1f 01 05 0f +00 03 46 0a 08 0c 09 01 08 0d 00 04 63 04 00 33 1a 09 07 1f 52 05 02 04 00 +63 19 1f 10 1e 32 00 4d 69 6c 6b 42 6f 74 74 6c 65 63 63 63 32 32 32 20 33 +00 02 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Movement.1 +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0a 09 03 06 0b 00 43 42 2a 10 1f 09 05 03 0f 00 43 63 04 04 1f 09 05 06 0b +00 44 63 19 0a 1f 09 06 06 0f 00 46 63 04 05 64 18 39 09 19 35 00 00 04 00 +63 32 00 32 00 32 00 4d 6f 76 65 6d 65 6e 74 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Movement.1 +** Controls: MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0a 09 03 06 0b 00 40 42 2a 10 1f 09 05 03 0f 00 40 63 04 04 1f 09 05 06 0b +00 40 63 19 0a 1f 09 06 06 0f 00 40 63 04 05 64 18 39 09 19 35 00 00 04 00 +63 32 00 32 00 32 00 4d 6f 76 65 6d 65 6e 74 2e 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Movement.2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0b 09 00 06 0e 00 43 3e 1c 18 1f 09 00 03 0f 00 44 53 08 01 1f 09 01 06 0e +00 43 63 08 02 1f 09 00 06 0f 00 45 63 08 15 7c 25 00 00 27 37 00 00 04 00 +63 32 00 32 00 32 00 4d 6f 76 65 6d 65 6e 74 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Movement.2 +** Source: from a library of patches collected by Duane Bowker, author unknown +0b 09 00 06 0e 00 40 3e 1c 18 1f 09 00 03 0f 00 40 53 08 01 1f 09 01 06 0e +00 40 63 08 02 1f 09 00 06 0f 00 40 63 08 15 7c 25 00 00 27 37 00 00 04 00 +63 32 00 32 00 32 00 4d 6f 76 65 6d 65 6e 74 2e 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Musicbox * +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 1a 01 01 09 00 00 4b 1f 06 1f 1f 1f 0f 00 00 00 5e 30 03 1f 1c 0a 04 0b +00 00 63 08 08 1b 16 1f 0f 00 00 00 52 30 03 04 04 00 00 00 52 18 02 04 00 +28 63 00 00 00 32 00 4d 75 73 69 63 62 6f 78 20 2a 63 63 63 32 32 32 00 10 +0c 0f 00 00 0a 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Obelisk +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +02 1d 00 04 0f 00 18 41 39 06 02 02 03 04 00 00 00 50 05 06 02 02 04 03 0a +00 08 55 03 04 02 0d 01 06 00 00 02 63 04 00 7f 1a 00 05 01 62 11 0c 05 00 +63 32 00 00 00 32 00 4f 62 65 6c 69 73 6b 20 20 20 63 63 63 32 32 32 00 21 +00 11 00 46 00 48 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ornt E.T. +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 03 00 06 04 00 42 50 2a 05 1f 05 00 06 04 00 42 47 34 03 1f 03 00 06 04 +00 45 5d 22 04 1f 04 00 06 04 00 44 63 04 03 6c 48 2a 0a 27 36 18 04 04 00 +28 32 00 00 00 32 00 4f 72 6e 74 20 45 2e 54 2e 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ornt E.T. +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 03 00 06 04 00 40 50 2a 05 1f 05 00 06 04 00 40 47 34 03 1f 03 00 06 04 +00 40 5d 22 04 1f 04 00 06 04 00 40 63 04 03 6c 48 2a 0a 27 36 18 04 04 00 +28 32 00 00 00 32 00 4f 72 6e 74 20 45 2e 54 2e 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ornt Quest +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +09 08 1f 09 05 00 03 63 3f 1b 12 1f 0e 0f 0f 00 04 63 0d 03 0a 1f 09 0f 0f +00 04 5e 19 03 1f 06 03 0f 0f 00 05 61 04 03 3f 15 00 15 23 12 18 04 04 00 +28 32 00 00 00 32 00 4f 72 6e 74 20 51 75 65 73 74 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Ornt Quest +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +09 08 1f 09 05 00 00 63 3f 1b 12 1f 0e 0f 0f 00 00 63 0d 03 0a 1f 09 0f 0f +00 00 5e 19 03 1f 06 03 0f 0f 00 00 61 04 03 3f 15 00 15 23 12 18 04 04 00 +28 32 00 00 00 32 00 4f 72 6e 74 20 51 75 65 73 74 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntFlight +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +12 06 00 04 00 2e 02 46 0d 1a 1f 13 1d 09 0a 00 02 63 34 04 12 02 00 04 00 +2e 05 63 08 1a 13 03 15 09 0d 00 04 5d 08 03 7c 23 00 00 00 32 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 46 6c 69 67 68 74 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntFlight +** Source: from a library of patches collected by Duane Bowker, author unknown +12 06 00 04 00 2e 00 46 0d 1a 1f 13 1d 09 0a 00 00 63 34 04 12 02 00 04 00 +2e 00 63 08 1a 13 03 15 09 0d 00 00 5d 08 03 7c 23 00 00 00 32 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 46 6c 69 67 68 74 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntSound1 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +09 03 02 05 00 00 02 40 0a 03 1f 0a 03 05 00 00 03 54 08 03 1f 12 04 05 00 +00 03 63 0a 03 06 05 00 05 00 00 05 63 04 06 77 38 44 00 3f 12 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 53 6f 75 6e 64 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntSound1 +** Source: from a library of patches collected by Duane Bowker, author unknown +09 03 02 05 00 00 00 40 0a 03 1f 0a 03 05 00 00 00 54 08 03 1f 12 04 05 00 +00 00 63 0a 03 06 05 00 05 00 00 00 63 04 06 77 38 44 00 3f 12 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 53 6f 75 6e 64 31 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntSound2 +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +09 03 09 04 0c 00 02 40 08 03 09 0d 03 02 0c 00 02 54 04 03 16 0f 04 05 0c +00 05 63 04 03 16 06 01 07 0c 00 05 63 04 06 74 38 44 00 3f 31 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 53 6f 75 6e 64 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: OrntSound2 +** Source: from a library of patches collected by Duane Bowker, author unknown +09 03 09 04 0c 00 00 40 08 03 09 0d 03 02 0c 00 00 54 04 03 16 0f 04 05 0c +00 00 63 04 03 16 06 01 07 0c 00 00 63 04 06 74 38 44 00 3f 31 0c 02 04 00 +63 32 00 32 00 32 00 4f 72 6e 74 53 6f 75 6e 64 32 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: ParisDream +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0a 0b 06 0b 00 02 4b 1f 01 13 0b 0c 07 0a 00 02 63 16 01 1f 09 0c 06 0a +00 02 54 0a 0d 0e 0f 0c 07 0d 00 00 63 16 05 3e 1a 00 05 00 42 0c 01 04 00 +63 32 00 00 00 32 00 50 61 72 69 73 44 72 65 61 6d 63 63 63 32 32 32 00 38 +00 10 00 08 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PianoVoice +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 0a 0e 07 06 63 04 4d 1f 03 0a 1f 00 03 0f 00 04 4c 08 03 1f 07 07 05 07 +00 05 63 04 03 08 0e 00 06 0f 00 45 63 04 03 7c 23 00 0e 00 36 18 02 04 00 +28 02 00 00 00 32 00 50 69 61 6e 6f 56 6f 69 63 65 63 63 63 32 32 32 00 00 +00 00 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PianoVoice +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 0a 0e 07 06 63 03 4d 1f 03 0a 1f 00 03 0f 00 02 4c 08 03 1f 07 07 05 07 +00 00 63 04 03 08 0e 00 06 0f 00 40 63 04 03 7c 23 00 0e 00 36 18 02 04 00 +28 02 00 00 00 32 00 50 69 61 6e 6f 56 6f 69 63 65 63 63 63 32 32 32 00 00 +00 00 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PianoStrng +** Controls: KV, MW (LFO pitch) +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +1f 1c 00 04 0f 1e 02 43 09 06 1f 1c 00 04 0f 1e 02 43 0a 00 1f 1f 00 05 0f +1e 01 63 09 06 1f 1f 00 05 0f 1e 01 63 0a 00 3c 1f 06 0a 00 52 05 02 04 00 +63 32 00 00 00 32 00 50 69 61 6e 6f 53 74 72 6e 67 63 63 63 32 32 32 00 02 +00 00 02 32 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PlasticHit +** Controls: KV, MW (LFO pitch) +** Source: Yamaha TX81Z factory preset, bank C, voice 31 +1f 14 0e 07 04 00 04 5b 30 16 1f 12 04 0a 06 00 04 61 04 10 1f 0f 03 05 0b +00 02 5e 04 10 1f 0b 03 06 0b 00 02 63 04 16 03 1b 0b 05 00 52 0c 04 04 00 +32 32 00 00 00 32 00 50 6c 61 73 74 69 63 48 69 74 63 63 63 32 32 32 00 30 +00 50 00 50 07 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Pno String +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 07 07 05 07 00 04 43 2a 02 18 03 03 05 08 00 04 58 08 00 1f 08 06 06 07 +00 07 63 04 0e 09 10 03 05 0f 00 06 5e 08 05 2c 21 23 0f 00 12 0c 05 04 00 +63 63 63 00 00 32 00 50 6e 6f 20 53 74 72 69 6e 67 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Pno String +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 07 07 05 07 00 03 43 2a 02 18 03 03 05 08 00 01 58 08 00 1f 08 06 06 07 +00 00 63 04 0e 09 10 03 05 0f 00 00 5e 08 05 2c 21 23 0f 00 12 0c 05 04 00 +63 63 63 00 00 32 00 50 6e 6f 20 53 74 72 69 6e 67 63 63 63 32 32 32 00 00 +00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PnoClouds +** Controls: KV, MW (LFO pitch), BC (LFO pitch), BC (EG amplitude) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 1f 08 05 0f 17 45 47 05 02 06 0b 01 04 0e 00 24 4e 1a 00 1f 1f 08 05 0f +00 04 63 04 03 07 07 01 04 0e 00 24 4e 1a 06 06 1c 0e 09 2e 4a 05 02 04 00 +63 32 00 07 00 32 39 50 6e 6f 43 6c 6f 75 64 73 20 63 63 63 32 32 32 06 41 +00 57 00 78 00 56 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: PopPercuss +** Description: guitar / horn / electric piano mix +** Controls: KV +** Source: GLIB (Michael Kesti and others) +1f 0c 06 0b 06 00 04 56 04 02 1f 02 03 0b 0e 43 04 61 04 10 1f 12 06 08 0e +00 04 60 08 00 1a 17 08 08 0c 00 03 63 04 03 33 14 00 00 00 62 18 01 04 00 +63 32 00 32 00 32 00 50 6f 70 50 65 72 63 75 73 73 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Sawsy Pad1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +0e 08 06 07 0e 1d 01 63 03 06 0e 08 07 07 0f 16 41 62 05 00 0e 08 05 07 0f +1d 01 62 05 00 0e 08 04 05 0f 14 41 63 04 06 7f 22 00 0f 00 36 05 02 05 03 +63 32 00 00 00 32 00 53 61 77 73 79 20 50 61 64 31 63 63 63 32 32 32 00 36 +00 31 00 31 00 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Solstice +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +0a 1b 0d 06 0f 00 04 31 12 00 0d 1b 0d 06 0f 00 04 43 13 06 0c 1b 0d 06 0f +00 04 37 12 00 1f 1b 0d 06 0f 00 04 63 19 03 47 23 13 00 00 32 0c 04 04 00 +63 01 63 00 00 32 00 53 6f 6c 73 74 69 63 65 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Solstice +** Source: from a library of patches collected by Duane Bowker, author unknown +0a 1b 0d 06 0f 00 00 31 12 00 0d 1b 0d 06 0f 00 00 43 13 06 0c 1b 0d 06 0f +00 00 37 12 00 1f 1b 0d 06 0f 00 00 63 19 03 47 23 13 00 00 32 0c 04 04 00 +63 01 63 00 00 32 00 53 6f 6c 73 74 69 63 65 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SpoonChoir +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1e 0b 0f 04 07 00 40 43 1c 00 13 0c 07 07 0b 05 00 54 05 00 1f 07 02 07 0f +08 03 5c 00 06 13 0c 04 05 0a 00 03 57 03 06 7c 1f 00 06 00 4a 11 02 04 00 +63 32 00 00 00 32 00 53 70 6f 6f 6e 43 68 6f 69 72 63 63 63 32 32 32 06 70 +00 71 00 04 00 56 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SpreadThin +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +10 0a 06 08 0c 00 02 59 08 0b 18 12 06 0a 00 00 05 5a 04 0b 15 07 06 08 0c +00 04 63 04 0b 15 1d 06 0f 0f 00 05 63 04 03 24 1e 00 00 00 22 00 05 04 00 +63 63 63 00 00 32 00 53 70 72 65 61 64 54 68 69 6e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: SpreadThin +** Controls: KV +** Source: from a library of patches collected by Duane Bowker, author unknown +10 0a 06 08 0c 00 01 59 08 0b 18 12 06 0a 00 00 01 5a 04 0b 15 07 06 08 0c +00 00 63 04 0b 15 1d 06 0f 0f 00 00 63 04 03 24 1e 00 00 00 22 00 05 04 00 +63 63 63 00 00 32 00 53 70 72 65 61 64 54 68 69 6e 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: St Nick..1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 00 00 01 0f 00 04 4c 00 02 1f 1f 0c 05 0f 00 03 53 2a 0b 0c 0c 06 05 0f +00 04 63 00 04 1f 0c 06 05 0f 00 07 63 08 0b 3c 1b 28 10 00 22 18 04 04 00 +28 32 00 00 00 32 00 53 74 20 4e 69 63 6b 2e 2e 31 63 63 63 32 32 32 00 20 +00 00 00 40 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: St Nick..1 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 00 00 01 0f 00 01 4c 00 02 1f 1f 0c 05 0f 00 00 53 2a 0b 0c 0c 06 05 0f +00 00 63 00 04 1f 0c 06 05 0f 00 01 63 08 0b 3c 1b 28 10 00 22 18 04 04 00 +28 32 00 00 00 32 00 53 74 20 4e 69 63 6b 2e 2e 31 63 63 63 32 32 32 00 20 +00 00 00 40 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: St Nick..2 +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 00 00 01 0f 00 02 4c 04 00 19 1f 0c 05 0f 00 03 63 0a 03 0c 0c 06 05 0f +00 04 5a 04 06 19 0c 06 05 0f 00 06 63 04 03 36 22 28 2b 00 12 18 04 04 00 +28 32 00 00 00 32 00 53 74 20 4e 69 63 6b 2e 2e 32 63 63 63 32 32 32 00 20 +00 10 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: St Nick..2 +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 00 00 01 0f 00 00 4c 04 00 19 1f 0c 05 0f 00 00 63 0a 03 0c 0c 06 05 0f +00 00 5a 04 06 19 0c 06 05 0f 00 00 63 04 03 36 22 28 2b 00 12 18 04 04 00 +28 32 00 00 00 32 00 53 74 20 4e 69 63 6b 2e 2e 32 63 63 63 32 32 32 00 20 +00 10 00 10 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: StonedCycl +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +04 0f 07 06 0f 00 05 4d 08 00 04 0d 07 06 0f 00 04 63 04 06 04 0e 07 06 0f +00 06 38 00 00 05 0e 07 06 0f 00 06 63 04 03 7a 63 63 06 00 53 00 04 04 00 +63 01 63 00 00 32 00 53 74 6f 6e 65 64 43 79 63 6c 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: StonedCycl +** Controls: MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +04 0f 07 06 0f 00 00 4d 08 00 04 0d 07 06 0f 00 00 63 04 06 04 0e 07 06 0f +00 00 38 00 00 05 0e 07 06 0f 00 00 63 04 03 7a 63 63 06 00 53 00 04 04 00 +63 01 63 00 00 32 00 53 74 6f 6e 65 64 43 79 63 6c 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Texture * +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +0c 0f 0d 07 0f 00 00 63 00 00 1b 00 0d 07 0f 00 01 63 04 00 0f 00 0d 07 0f +00 02 63 0d 06 1f 00 0d 07 0f 00 01 63 04 06 6f 32 00 63 00 33 18 0c 04 00 +63 32 00 00 00 32 00 54 65 78 74 75 72 65 20 20 2a 63 63 63 32 32 32 00 50 +00 40 00 60 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: That Girl* +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Rod Lemcke, author unknown +1e 02 07 05 00 00 02 5e 05 19 1e 07 0a 08 0b 00 05 59 38 18 1e 06 0a 07 00 +00 02 63 03 0c 1b 06 1f 0b 00 00 02 60 04 13 04 1d 12 1e 00 32 05 02 04 00 +28 63 00 00 00 32 00 54 68 61 74 20 47 69 72 6c 2a 63 63 63 32 32 32 00 01 +00 06 00 06 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Up We Go +** Controls: KV +** Source: from a library of patches collected by Rod Lemcke, author unknown +1f 12 0c 06 0e 00 04 5f 04 03 1f 0f 0c 04 0e 00 02 50 07 0b 1b 03 01 02 0e +00 05 51 0e 03 1f 09 0f 06 0d 00 06 63 04 03 44 23 00 00 00 32 18 04 04 00 +63 01 63 00 00 32 00 55 70 20 57 65 20 47 6f 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: Up We Go +** Source: from a library of patches collected by Duane Bowker, author unknown +1f 12 0c 06 0e 00 00 5f 04 03 1f 0f 0c 04 0e 00 00 50 07 0b 1b 03 01 02 0e +00 00 51 0e 03 1f 09 0f 06 0d 00 00 63 04 03 44 23 00 00 00 32 18 04 04 00 +63 01 63 00 00 32 00 55 70 20 57 65 20 47 6f 20 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: WineGlass* +** Controls: KV, MW (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +03 05 05 04 00 40 01 35 24 08 08 07 01 04 0c 40 41 34 19 0e 08 09 00 04 0c +32 44 63 08 1e 03 01 00 04 0c 32 42 5b 08 18 04 08 00 08 22 3e 18 04 04 00 +63 32 00 00 00 32 60 57 69 6e 65 47 6c 61 73 73 2a 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: WireWaves +** Controls: KV, MW (LFO pitch), BC (LFO pitch) +** Source: from a library of patches collected by Duane Bowker, author unknown +14 19 03 05 00 00 07 5d 18 12 19 09 00 05 00 1f 06 3e 2d 16 12 07 07 05 0c +00 05 63 0b 08 10 09 07 05 0d 00 05 63 0d 08 34 1a 09 05 00 52 00 02 04 00 +63 19 00 10 00 32 00 57 69 72 65 57 61 76 65 73 20 63 63 63 32 32 32 20 32 +1d 74 00 69 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + + +** Name: XyloSynth +** Controls: KV +** Source: by Steve Michelson, from the patch library of his dx11lib librarian +1f 16 0e 07 07 15 06 63 24 0b 1a 18 0c 07 05 0c 02 63 0a 0b 17 1f 0d 07 0f +00 02 63 0a 0b 16 1f 0a 05 0f 00 01 63 04 0b 3e 23 00 00 00 52 18 02 04 00 +28 32 00 00 00 32 00 58 79 6c 6f 53 79 6e 74 68 20 63 63 63 32 32 32 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 + diff --git a/attic/muse_qt4_evolution/synti/deicsonze/CMakeLists.txt b/attic/muse_qt4_evolution/synti/deicsonze/CMakeLists.txt new file mode 100644 index 00000000..bbb1f13b --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/CMakeLists.txt @@ -0,0 +1,59 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +include(${PROJECT_SOURCE_DIR}/pch.txt) + +QT4_WRAP_CPP ( deicsonze_mocs deicsonzegui.h ) +QT4_WRAP_UI ( deicsonze_uis deicsonzegui.ui ) + +add_library ( deicsonze SHARED + ${PROJECT_BINARY_DIR}/all.h + ${PROJECT_BINARY_DIR}/all-pic.h.pch + deicsonze.cpp + deicsonzepreset.cpp + deicsonzeplugin.cpp + deicsonzefilter.cpp + deicsonzegui.cpp + deicsonzegui.h + + ${deicsonze_mocs} + ${deicsonze_uis} + ) + +target_link_libraries( deicsonze synti ) + +# - tell cmake to name target deicsonze.so instead of +# libdeicsonze.so +# - use precompiled header files +# +set_target_properties ( deicsonze + PROPERTIES PREFIX "" + #COMPILE_FLAGS "-O2 -include ${PROJECT_BINARY_DIR}/all-pic.h" + COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all-pic.h" + ) + +target_link_libraries(deicsonze + al awl synti + ${QT_LIBRARIES} + ) + +install_targets ( /${CMAKE_INSTALL_LIBDIR}/${MusE_INSTALL_NAME}/synthi/ deicsonze ) + +install_files ( /share/${MusE_INSTALL_NAME}/presets/deicsonze SutulaBank.dei ) diff --git a/attic/muse_qt4_evolution/synti/deicsonze/README b/attic/muse_qt4_evolution/synti/deicsonze/README new file mode 100644 index 00000000..c9b36d02 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/README @@ -0,0 +1,57 @@ +DeicsOnze + +Copyright (C) 2005-2006 by Nil Geisweiller + +------- +License +------- + +DeicsOnze is distributed under the terms of the GNU General Public License +(see COPYING file). + +---------- +Descripion +---------- + +DeicsOnze is a virtual synthesizer plugin for MusE which reproduces the +FM synthesis of the YAMAHA DX11 synthesizer/TX81Z sound module. + +------- +Remarks +------- + +It contains over 2000 presets archived by Bryan Sutula belonging to the public +domain. If by any chance you find some of them that are under copyright please +contact me to take them off. + +Not every function is implemented but it's already sounding like the original +(even better). Pitch bend, modulation and some others are not implemented yet. + +The files with the extention .fig in the directory pics have been made +with xfig. + +----------- +Compilation +----------- + +DeicsOnze is compiled with the optimization -O3. This permits it to be +twice faster than without optimization, however the compilation time is longer +(10 minutes on my Athlon XP-M 2000) and may not pass on any machine. If not +remove -O3 in the file CMakeLists.txt. + +---- +Help +---- + +The last features (portamento and pitch envelope) have been implemented +without DX11 only with the documentation. If you have a DX11 or TX81Z I need +you! Please record your sound with different values of portamento and pitch +envelope and send it to me so I can adjust the paramenter of DeicsOnze to fit +the real DX11. + +------- +Contact +------- + +Nil Geisweiller +a-lin[NO_SPAM_PLEASE]@users.sourceforge.net diff --git a/attic/muse_qt4_evolution/synti/deicsonze/SutulaBank.dei b/attic/muse_qt4_evolution/synti/deicsonze/SutulaBank.dei new file mode 100644 index 00000000..3a64e876 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/SutulaBank.dei @@ -0,0 +1,177644 @@ + + + Sutula Bank + + ORCHESTRA + 0 + + Orchestra + 0 + + FIFTH + 6 + + TRIANGL + 33 + 35 + 15 + 0 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 2 + 5 + 2 + + + 2 + 2 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 2 + -3 + 3 + -1 + + 9 + 24 + 17 + 9 + 16 + 3 + 7 + 3 + 15 + 8 + 11 + 11 + 3 + 3 + 3 + 3 + 5 + 5 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 99 + 78 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + EleOrchtra + 0 + + + SEVENTH + 7 + + TRIANGL + 33 + 33 + 7 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + + + 1.49 + 2.99 + 3 + 3 + no + no + no + no + 9 + 10 + 8 + 8 + + W4 + W2 + W1 + W1 + -3 + 3 + -3 + -3 + + 8 + 7 + 15 + 16 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 97 + 99 + 75 + + 1 + 1 + 1 + 1 + 0 + 11 + 0 + 0 + + + -19 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Orchestra* + 1 + + + FIFTH + 4 + + TRIANGL + 32 + 44 + 20 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 5 + 1 + + + 2 + 2 + 6 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -1 + -1 + 2 + + 31 + 16 + 14 + 16 + 21 + 12 + 21 + 12 + 15 + 15 + 15 + 15 + 6 + 3 + 6 + 3 + 5 + 4 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 62 + 93 + 71 + + 1 + 1 + 1 + 1 + 30 + 50 + 30 + 50 + + + -12 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntOrkest + 2 + + + + Symphony + 1 + + FIFTH + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 4 + + + 2 + 0.5 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W1 + 3 + 3 + -1 + 0 + + 15 + 31 + 15 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 4 + 3 + 4 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 95 + 91 + 89 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sympathy.1 + 0 + + + FIFTH + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 3 + + + 2 + 2 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W1 + 3 + 3 + -1 + 0 + + 15 + 31 + 15 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 4 + 3 + 4 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 85 + 91 + 82 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sympathy.2 + 1 + + + FIFTH + 7 + + TRIANGL + 35 + 14 + 14 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1.5 + 1.5 + 1.51 + 1.51 + no + no + no + no + 16 + 16 + 14 + 14 + + W1 + W2 + W1 + W1 + -3 + 3 + 0 + 0 + + 7 + 13 + 12 + 15 + 4 + 4 + 4 + 4 + 14 + 14 + 14 + 14 + 3 + 0 + 3 + 3 + 5 + 5 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 99 + 74 + + 0 + 0 + 0 + 0 + 12 + 29 + 14 + 22 + + + -7 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sympho * + 2 + + + FIFTH + 7 + + TRIANGL + 31 + 12 + 16 + 0 + off + + + 4 + 3 + on + off + on + on + 7 + 0 + 7 + 1 + 0 + 0 + 0 + 1 + + + 1.51 + 1.5 + 1.5 + 1.5 + no + no + no + no + 14 + 16 + 16 + 16 + + W1 + W4 + W1 + W1 + -3 + 3 + 0 + 0 + + 10 + 17 + 12 + 21 + 4 + 23 + 8 + 4 + 14 + 15 + 15 + 14 + 3 + 3 + 3 + 0 + 5 + 4 + 5 + 1 + VOF + V12 + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 69 + 99 + 77 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -19 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 12 + 7 + 0 + 0 + 50 + 25 + 0 + 0 + 0 + 0 + 0 + + Symphony * + 3 + + + FIFTH + 4 + + TRIANGL + 38 + 24 + 15 + 0 + on + + + 2 + 1 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 4 + 4 + + + 2 + 2 + 4 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W3 + W2 + W2 + 0 + 0 + 0 + -1 + + 12 + 14 + 24 + 25 + 13 + 9 + 9 + 19 + 13 + 14 + 14 + 14 + 0 + 0 + 5 + 7 + 5 + 5 + 4 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 75 + 89 + + 0 + 0 + 1 + 2 + 0 + 0 + 10 + 10 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Symphony.1 + 4 + + + FIFTH + 6 + + TRIANGL + 34 + 24 + 15 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 3 + 5 + 1 + + + 4 + 8 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W2 + W2 + -3 + -1 + -2 + 2 + + 31 + 25 + 12 + 25 + 10 + 19 + 10 + 5 + 11 + 14 + 15 + 14 + 6 + 6 + 0 + 0 + 4 + 4 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 77 + 77 + 98 + 81 + + 0 + 1 + 0 + 0 + 0 + 10 + 10 + 65 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Symphony.2 + 5 + + + FIFTH + 5 + + TRIANGL + 30 + 0 + 6 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 3 + 3 + 3 + + + 2 + 2 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W7 + W3 + W1 + W1 + -2 + -1 + 0 + -2 + + 18 + 15 + 13 + 28 + 8 + 12 + 10 + 5 + 13 + 14 + 14 + 14 + 3 + 1 + 0 + 0 + 6 + 5 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 88 + 57 + 93 + 76 + + 0 + 0 + 0 + 0 + 0 + 10 + 10 + 41 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Symphony.3 + 6 + + + FIFTH + 6 + + TRIANGL + 30 + 11 + 9 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 5 + 2 + + + 2 + 6 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W3 + W3 + W4 + -2 + 2 + 0 + 1 + + 12 + 23 + 21 + 27 + 10 + 12 + 13 + 26 + 15 + 15 + 14 + 13 + 0 + 0 + 5 + 5 + 5 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 75 + 99 + 73 + + 0 + 0 + 1 + 1 + 10 + 10 + 52 + 52 + + + -24 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Symphony.4 + 7 + + + SIXTH + 6 + + TRIANGL + 30 + 26 + 12 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 0 + 3 + 3 + + + 2 + 4 + 3 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W5 + W3 + W5 + -2 + -1 + 1 + 1 + + 12 + 12 + 13 + 29 + 9 + 10 + 11 + 3 + 9 + 9 + 9 + 10 + 8 + 8 + 6 + 6 + 7 + 6 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 74 + 97 + 72 + + 0 + 1 + 0 + 2 + 21 + 10 + 26 + 41 + + + -24 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Symphony.5 + 8 + + + SIXTH + 6 + + TRIANGL + 30 + 26 + 12 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 2 + 2 + 3 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W3 + W5 + -2 + -1 + 1 + 1 + + 12 + 12 + 13 + 29 + 9 + 10 + 11 + 3 + 14 + 14 + 15 + 15 + 0 + 1 + 6 + 6 + 4 + 5 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 74 + 79 + 72 + + 0 + 1 + 0 + 2 + 21 + 10 + 26 + 41 + + + -24 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Symphony.5* + 9 + + + FIFTH + 4 + + TRIANGL + 29 + 25 + 61 + 37 + off + + + 2 + 1 + on + on + on + on + 0 + 5 + 0 + 0 + 4 + 5 + 0 + 0 + + + 4 + 8 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W3 + W1 + W4 + 2 + 1 + -3 + -1 + + 23 + 26 + 11 + 15 + 10 + 5 + 10 + 10 + 15 + 14 + 15 + 5 + 0 + 0 + 3 + 2 + 6 + 7 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 91 + 80 + 86 + 76 + + 0 + 0 + 2 + 1 + 20 + 10 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Symphony.6 + 10 + + + FIFTH + 4 + + TRIANGL + 28 + 0 + 42 + 11 + off + + + 2 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + + + 2 + 6 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W2 + 2 + 1 + -3 + -1 + + 16 + 10 + 19 + 9 + 10 + 5 + 8 + 10 + 15 + 14 + 15 + 5 + 0 + 0 + 2 + 2 + 6 + 7 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 91 + 53 + 86 + 76 + + 0 + 0 + 2 + 1 + 20 + 10 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Symphony.6* + 11 + + + FIFTH + 5 + + TRIANGL + 28 + 0 + 15 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 4 + 3 + 3 + + + 2 + 2 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W2 + W1 + W5 + -2 + -1 + 1 + -3 + + 18 + 18 + 14 + 15 + 16 + 12 + 16 + 12 + 14 + 14 + 14 + 14 + 0 + 4 + 0 + 4 + 5 + 4 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 81 + 77 + 95 + 81 + + 0 + 1 + 0 + 1 + 0 + 10 + 73 + 73 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Symphony.7 + 12 + + + + + WIND + 1 + + Brass + 0 + + SEVENTH + 5 + + TRIANGL + 31 + 14 + 16 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 4 + 4 + 4 + + + 1 + 1 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W3 + W1 + W1 + 0 + 0 + 0 + 0 + + 13 + 13 + 13 + 13 + 31 + 31 + 31 + 7 + 15 + 15 + 15 + 14 + 0 + 0 + 0 + 0 + 7 + 7 + 8 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 95 + 95 + 85 + + 0 + 0 + 0 + 1 + 10 + 10 + 0 + 15 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgBrass1 + 0 + + + SIXTH + 5 + + TRIANGL + 31 + 0 + 5 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 6 + 2 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W3 + W4 + W1 + 0 + 0 + 0 + 0 + + 15 + 15 + 16 + 13 + 5 + 5 + 31 + 4 + 15 + 15 + 15 + 12 + 1 + 1 + 0 + 3 + 8 + 8 + 9 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 86 + 85 + 83 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgBrass2 + 1 + + + SEVENTH + 7 + + TRIANGL + 31 + 14 + 16 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 5 + 4 + + + 2 + 1 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W5 + W3 + 3 + 1 + 1 + -2 + + 15 + 13 + 13 + 13 + 31 + 31 + 31 + 7 + 15 + 15 + 15 + 14 + 0 + 0 + 0 + 0 + 7 + 7 + 8 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 95 + 95 + 77 + + 0 + 0 + 0 + 0 + 10 + 10 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgBrass3 + 2 + + + SIXTH + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 5 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W4 + W1 + W4 + 3 + 3 + 1 + -1 + + 15 + 15 + 16 + 13 + 3 + 3 + 31 + 4 + 1 + 1 + 5 + 15 + 4 + 4 + 0 + 0 + 8 + 8 + 9 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 85 + 85 + 83 + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgBrass4 + 3 + + + FIFTH + 6 + + TRIANGL + 35 + 0 + 5 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 3 + 2 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W5 + W3 + W4 + W1 + 3 + 3 + 0 + 0 + + 16 + 21 + 22 + 18 + 27 + 16 + 7 + 10 + 12 + 9 + 15 + 12 + 6 + 6 + 6 + 6 + 7 + 7 + 8 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 73 + 99 + 83 + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgBrass5 + 4 + + + FOURTH + 4 + + TRIANGL + 30 + 37 + 37 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 6 + 2 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W3 + W1 + W3 + 3 + 2 + 1 + -2 + + 17 + 21 + 15 + 18 + 10 + 9 + 7 + 10 + 12 + 11 + 15 + 12 + 5 + 6 + 6 + 6 + 7 + 6 + 8 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 82 + 76 + 83 + + 0 + 1 + 0 + 1 + 15 + 30 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgBrass6 + 5 + + + SIXTH + 4 + + TRIANGL + 34 + 36 + 15 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 5 + 2 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W5 + W1 + W3 + 3 + 2 + 3 + 1 + + 16 + 16 + 22 + 20 + 31 + 31 + 31 + 10 + 13 + 13 + 14 + 12 + 6 + 9 + 5 + 3 + 14 + 14 + 13 + 13 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 99 + 99 + 88 + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FINGER + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgBrass7 + 6 + + + SEVENTH + 4 + + TRIANGL + 40 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 3 + 1 + + + 0.5 + 0.5 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W3 + W1 + W1 + 2 + 1 + 0 + -1 + + 31 + 31 + 31 + 31 + 24 + 10 + 24 + 10 + 15 + 15 + 15 + 15 + 6 + 6 + 6 + 6 + 13 + 13 + 13 + 13 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 94 + 94 + 97 + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FINGER + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgBrass8 + 7 + + + FIFTH + 7 + + TRIANGL + 43 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 4 + 1 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W2 + W1 + W1 + 0 + 3 + 3 + 0 + + 31 + 18 + 31 + 31 + 6 + 12 + 22 + 10 + 12 + 10 + 12 + 15 + 4 + 2 + 8 + 6 + 13 + 15 + 15 + 13 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 81 + 99 + 81 + + 0 + 1 + 0 + 1 + 0 + 10 + 0 + 0 + + + -12 + POLY + 2 + FINGER + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgBrass9 + 8 + + + FIFTH + 6 + + TRIANGL + 28 + 21 + 6 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 1 + 4 + 2 + + + 1.5 + 1.5 + 1.49 + 1.49 + no + no + no + no + 16 + 16 + 9 + 9 + + W1 + W4 + W1 + W1 + -2 + -1 + 2 + 2 + + 16 + 15 + 16 + 15 + 5 + 14 + 31 + 31 + 14 + 14 + 15 + 15 + 0 + 0 + 0 + 4 + 7 + 8 + 9 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 91 + 97 + 83 + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + -7 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AtackBrass + 9 + + + THIRD + 7 + + TRIANGL + 30 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 15 + 13 + 31 + 13 + 31 + 14 + 31 + 31 + 15 + 0 + 15 + 15 + 0 + 0 + 0 + 0 + 8 + 15 + 15 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 71 + 0 + 67 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Back Brass + 10 + + + FOURTH + 7 + + TRIANGL + 35 + 1 + 10 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 7 + 5 + 4 + 4 + 4 + + + 2 + 2 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -1 + 0 + 0 + + 18 + 18 + 18 + 27 + 31 + 31 + 31 + 3 + 15 + 15 + 15 + 14 + 0 + 0 + 0 + 0 + 10 + 10 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 75 + 79 + 71 + + 0 + 0 + 0 + 0 + 1 + 0 + 69 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 99 + 0 + 0 + 0 + 0 + 0 + + BC1 Feed + 11 + + + THIRD + 7 + + TRIANGL + 32 + 5 + 3 + 0 + off + + + 6 + 0 + off + off + off + off + 5 + 4 + 4 + 7 + 6 + 4 + 5 + 3 + + + 1 + 1 + 3.14 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 14 + 9 + 10 + 11 + 31 + 31 + 31 + 9 + 15 + 15 + 15 + 14 + 0 + 0 + 0 + 0 + 9 + 8 + 15 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 61 + 33 + 74 + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 99 + 0 + 0 + 0 + 0 + 0 + + BC1 Horns + 12 + + + FIFTH + 7 + + TRIANGL + 32 + 6 + 3 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + + + 2 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W1 + W1 + 1 + -1 + -1 + -2 + + 19 + 16 + 20 + 16 + 31 + 11 + 31 + 9 + 15 + 10 + 15 + 10 + 0 + 0 + 0 + 0 + 10 + 9 + 10 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 82 + 98 + 80 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Brass 1 + 13 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -2 + 3 + -3 + 3 + + 13 + 13 + 13 + 13 + 13 + 13 + 13 + 13 + 11 + 15 + 11 + 13 + 0 + 0 + 0 + 0 + 8 + 10 + 8 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 79 + 99 + 71 + + 1 + 1 + 1 + 1 + 0 + 45 + 0 + 1 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Brass 1* + 14 + + + FIFTH + 7 + + TRIANGL + 32 + 6 + 3 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 1 + 2 + + + 0.5 + 0.5 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W4 + W1 + W1 + -1 + -3 + 3 + 1 + + 18 + 10 + 21 + 17 + 31 + 8 + 31 + 10 + 15 + 10 + 15 + 10 + 0 + 0 + 0 + 0 + 9 + 8 + 10 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 89 + 98 + 83 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Brass 2 + 15 + + + THIRD + 6 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + -3 + 3 + 3 + + 20 + 31 + 20 + 25 + 31 + 4 + 11 + 5 + 15 + 10 + 15 + 14 + 0 + 0 + 15 + 0 + 10 + 5 + 10 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 55 + 80 + 81 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Brass 3 + 16 + + + SIXTH + 7 + + TRIANGL + 35 + 20 + 10 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 21 + 21 + 21 + 15 + 31 + 31 + 31 + 10 + 15 + 15 + 15 + 13 + 0 + 0 + 0 + 0 + 10 + 10 + 10 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 92 + 92 + 73 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Brass 4 + 17 + + + THIRD + 7 + + TRIANGL + 35 + 27 + 10 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 1 + 3.14 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 21 + 17 + 31 + 17 + 31 + 17 + 16 + 14 + 15 + 12 + 5 + 14 + 0 + 0 + 0 + 0 + 11 + 9 + 15 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 70 + 52 + 74 + + 1 + 0 + 1 + 0 + 0 + 0 + 32 + 10 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Brass 5 + 18 + + + FOURTH + 7 + + TRIANGL + 35 + 15 + 16 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 5 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 21 + 31 + 19 + 15 + 12 + 15 + 11 + 0 + 17 + 0 + 0 + 5 + 3 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 79 + 70 + 85 + + 0 + 0 + 0 + 0 + 0 + 30 + 30 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Brass 6 + 19 + + + SECOND + 7 + + TRIANGL + 35 + 15 + 16 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 2 + 1 + 1 + 11 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 25 + 31 + 31 + 31 + 31 + 11 + 17 + 17 + 15 + 15 + 14 + 11 + 0 + 0 + 0 + 19 + 5 + 3 + 3 + 12 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 57 + 93 + 72 + + 0 + 0 + 0 + 0 + 0 + 30 + 30 + 15 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Brass 7 + 20 + + + FIFTH + 5 + + TRIANGL + 38 + 33 + 0 + 71 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 2 + + + 2 + 2 + 3 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W3 + W1 + W1 + 3 + 3 + -1 + -1 + + 19 + 19 + 19 + 16 + 5 + 5 + 21 + 6 + 11 + 11 + 11 + 11 + 6 + 6 + 6 + 6 + 8 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 75 + 99 + 85 + + 0 + 0 + 0 + 0 + 10 + 10 + 10 + 33 + + + -12 + POLY + 4 + FINGER + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Brass 5th + 21 + + + FIFTH + 7 + + TRIANGL + 31 + 45 + 1 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 5 + 2 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W2 + W3 + -3 + 1 + -1 + 3 + + 19 + 8 + 20 + 8 + 7 + 9 + 8 + 7 + 12 + 14 + 13 + 12 + 6 + 5 + 6 + 6 + 8 + 9 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 96 + 90 + 88 + + 0 + 0 + 0 + 0 + 0 + 71 + 0 + 39 + + + 0 + POLY + 4 + FINGER + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Brass....1 + 22 + + + FOURTH + 7 + + TRIANGL + 35 + 45 + 5 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 6 + 1 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W4 + W1 + W6 + 2 + 1 + 2 + 1 + + 17 + 14 + 15 + 20 + 7 + 10 + 10 + 27 + 12 + 0 + 12 + 9 + 6 + 4 + 6 + 6 + 8 + 10 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 75 + 78 + 81 + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 39 + + + 0 + POLY + 4 + FINGER + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Brass....2 + 23 + + + FOURTH + 7 + + TRIANGL + 35 + 45 + 5 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 2 + 1 + + + 1 + 1 + 0.5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W4 + W1 + W6 + 2 + 1 + 2 + 1 + + 17 + 14 + 15 + 20 + 7 + 10 + 10 + 27 + 12 + 0 + 12 + 9 + 6 + 4 + 6 + 6 + 8 + 10 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 75 + 78 + 81 + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 39 + + + 0 + POLY + 4 + FINGER + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Brass....2* + 24 + + + FOURTH + 6 + + TRIANGL + 35 + 12 + 15 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 5 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W5 + W3 + W3 + 1 + -3 + 1 + 2 + + 16 + 12 + 15 + 21 + 7 + 10 + 10 + 27 + 12 + 0 + 12 + 9 + 6 + 4 + 6 + 6 + 8 + 10 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 67 + 73 + 89 + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 39 + + + 0 + POLY + 4 + FINGER + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Brass....3 + 25 + + + FIFTH + 4 + + TRIANGL + 36 + 35 + 0 + 43 + on + + + 0 + 1 + on + on + on + off + 0 + 0 + 0 + 0 + 6 + 5 + 4 + 3 + + + 4 + 8 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W3 + W2 + -1 + 0 + 0 + 0 + + 31 + 31 + 20 + 17 + 6 + 6 + 7 + 4 + 13 + 13 + 14 + 15 + 6 + 6 + 5 + 4 + 6 + 5 + 6 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 83 + 82 + 97 + 80 + + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BrassChime + 26 + + + FIFTH + 3 + + TRIANGL + 14 + 0 + 13 + 0 + on + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 4 + 2 + + + 0.5 + 0.5 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W4 + W3 + W1 + -1 + -3 + -1 + 3 + + 14 + 21 + 16 + 12 + 12 + 19 + 31 + 17 + 14 + 15 + 15 + 15 + 7 + 5 + 4 + 3 + 6 + 7 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 68 + 97 + 71 + + 0 + 0 + 0 + 1 + 20 + 60 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BrassEns.1 + 27 + + + SIXTH + 6 + + TRIANGL + 38 + 0 + 0 + 38 + off + + + 1 + 1 + off + off + on + off + 0 + 0 + 0 + 0 + 4 + 1 + 5 + 1 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W7 + W5 + W4 + 2 + -2 + -2 + 2 + + 20 + 14 + 19 + 15 + 12 + 19 + 31 + 17 + 14 + 15 + 15 + 15 + 7 + 4 + 4 + 3 + 6 + 7 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 96 + 98 + 79 + + 0 + 0 + 0 + 1 + 20 + 43 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BrassEns.2 + 28 + + + FIFTH + 4 + + TRIANGL + 32 + 51 + 11 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 4 + 1 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W4 + 2 + -3 + 2 + -1 + + 15 + 14 + 12 + 14 + 12 + 9 + 31 + 5 + 14 + 15 + 15 + 15 + 4 + 4 + 4 + 3 + 5 + 6 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 69 + 92 + 87 + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BrassEns.3 + 29 + + + FOURTH + 4 + + TRIANGL + 32 + 51 + 11 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 2 + 5 + 2 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W3 + W1 + W1 + 1 + -1 + 2 + -2 + + 17 + 20 + 12 + 31 + 5 + 8 + 12 + 15 + 14 + 15 + 15 + 12 + 4 + 4 + 9 + 3 + 7 + 9 + 7 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 65 + 63 + 58 + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BrassEns.4 + 30 + + + FIFTH + 7 + + TRIANGL + 32 + 6 + 3 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 7 + 0 + 7 + 1 + 1 + 1 + 1 + + + 0.5 + 0.5 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W4 + W1 + W1 + -1 + -3 + 3 + 1 + + 14 + 9 + 14 + 13 + 22 + 5 + 22 + 10 + 15 + 13 + 15 + 13 + 0 + 0 + 0 + 0 + 6 + 5 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 89 + 98 + 83 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BrassSynth + 31 + + + FOURTH + 6 + + TRIANGL + 35 + 0 + 25 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 3 + 6 + 2 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W3 + W1 + W2 + -3 + 0 + 0 + 3 + + 17 + 16 + 15 + 21 + 7 + 10 + 10 + 31 + 12 + 0 + 12 + 9 + 6 + 5 + 6 + 6 + 8 + 10 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 82 + 77 + 84 + + 0 + 0 + 0 + 0 + 0 + 0 + 90 + 0 + + + 0 + POLY + 2 + FINGER + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Brass.Vibe + 32 + + + FIFTH + 6 + + TRIANGL + 23 + 0 + 11 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + + + 1.5 + 1.5 + 1.5 + 1.5 + no + no + no + no + 16 + 16 + 16 + 16 + + W1 + W1 + W1 + W1 + 0 + -3 + 3 + 3 + + 16 + 13 + 18 + 14 + 12 + 8 + 31 + 8 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 99 + 81 + + 0 + 0 + 0 + 0 + 13 + 39 + 9 + 25 + + + -19 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 30 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Brassy * + 33 + + + FIFTH + 7 + + SQUARE + 29 + 0 + 0 + 8 + off + + + 0 + 3 + off + off + on + on + 0 + 0 + 0 + 0 + 2 + 0 + 2 + 0 + + + 1 + 0.5 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W3 + 3 + 3 + -3 + -3 + + 13 + 13 + 15 + 14 + 14 + 14 + 12 + 14 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 4 + 2 + 4 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 50 + 99 + 78 + + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 13 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Chariots + 34 + + + FIFTH + 7 + + TRIANGL + 28 + 6 + 6 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + + + 1.5 + 1.5 + 1.49 + 1.49 + no + no + no + no + 16 + 16 + 9 + 9 + + W4 + W4 + W1 + W1 + -3 + -3 + 3 + 3 + + 14 + 14 + 14 + 14 + 18 + 8 + 18 + 8 + 15 + 13 + 15 + 13 + 0 + 0 + 0 + 0 + 8 + 9 + 8 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 87 + 99 + 78 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -19 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ChorusBras + 35 + + + FIFTH + 7 + + TRIANGL + 30 + 45 + 12 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 2 + 0 + + + 6 + 2.99 + 2.99 + 3 + no + no + no + no + 8 + 10 + 10 + 8 + + W4 + W2 + W1 + W4 + 1 + 3 + 3 + -3 + + 13 + 13 + 11 + 28 + 11 + 20 + 11 + 12 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 78 + 99 + 70 + + 0 + 0 + 0 + 0 + 0 + 47 + 0 + 0 + + + -19 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Ensemble * + 36 + + + FIFTH + 7 + + TRIANGL + 33 + 8 + 12 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 2 + + + 3 + 6 + 2.99 + 9 + no + no + no + no + 8 + 8 + 10 + 8 + + W3 + W4 + W3 + W5 + -3 + -3 + 3 + 3 + + 15 + 11 + 10 + 20 + 6 + 4 + 7 + 6 + 11 + 7 + 10 + 10 + 1 + 2 + 2 + 0 + 5 + 4 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 82 + 99 + 61 + + 0 + 0 + 0 + 0 + 0 + 20 + 0 + 20 + + + -19 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Ensemble 1 + 37 + + + FIFTH + 7 + + TRIANGL + 33 + 8 + 12 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 2 + + + 3 + 6 + 2.99 + 9 + no + no + no + no + 8 + 8 + 10 + 8 + + W3 + W4 + W5 + W6 + -3 + -3 + 3 + 3 + + 17 + 11 + 12 + 20 + 6 + 4 + 7 + 6 + 11 + 8 + 11 + 8 + 1 + 2 + 2 + 0 + 5 + 4 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 80 + 99 + 61 + + 0 + 0 + 0 + 0 + 0 + 20 + 0 + 20 + + + -19 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Ensemble 2 + 38 + + + SIXTH + 7 + + TRIANGL + 29 + 15 + 8 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 3 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W1 + W1 + 3 + 0 + 2 + 2 + + 17 + 15 + 16 + 15 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 9 + 0 + 8 + 8 + 9 + 8 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 79 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 7 + + Full Brass + 39 + + + THIRD + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 25 + 31 + 31 + 20 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 10 + 15 + 15 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 58 + 52 + 71 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Hard Brass + 40 + + + THIRD + 7 + + TRIANGL + 30 + 9 + 2 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 3 + 1 + + + 0.5 + 0.5 + 1.57 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W4 + W1 + 0 + 0 + 0 + 0 + + 15 + 16 + 16 + 10 + 24 + 8 + 15 + 7 + 15 + 10 + 5 + 14 + 0 + 0 + 0 + 0 + 10 + 10 + 10 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 67 + 64 + 77 + + 1 + 1 + 1 + 1 + 0 + 28 + 9 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 19 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Horn + 41 + + + SIXTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 2 + + + 1 + 1 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W3 + 3 + 3 + 1 + 1 + + 15 + 14 + 16 + 13 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 11 + 8 + 8 + 9 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 91 + 81 + 90 + 85 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Horn.....1 + 42 + + + THIRD + 4 + + TRIANGL + 35 + 0 + 4 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 1 + + + 1 + 1 + 8.48 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W1 + W4 + -2 + 0 + 1 + 3 + + 16 + 15 + 22 + 15 + 7 + 8 + 16 + 10 + 12 + 10 + 0 + 9 + 6 + 6 + 6 + 6 + 9 + 8 + 10 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 73 + 70 + 80 + + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Horn.....2 + 43 + + + FOURTH + 5 + + TRIANGL + 35 + 0 + 8 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 6 + 4 + 1 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W2 + -1 + -1 + 1 + 2 + + 16 + 15 + 15 + 11 + 6 + 9 + 9 + 31 + 11 + 5 + 4 + 15 + 4 + 5 + 6 + 6 + 8 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 84 + 73 + 78 + + 0 + 3 + 2 + 0 + 0 + 66 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Horn.....3 + 44 + + + SIXTH + 5 + + TRIANGL + 32 + 19 + 9 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 4 + 3 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W2 + W1 + W6 + 1 + 1 + -1 + 3 + + 18 + 16 + 15 + 18 + 22 + 10 + 10 + 7 + 11 + 12 + 15 + 12 + 2 + 4 + 3 + 3 + 10 + 10 + 10 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 99 + 99 + 81 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Horn.....4 + 45 + + + FOURTH + 4 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 6 + 4 + + + 1.51 + 1.5 + 1.5 + 1.5 + no + no + no + no + 14 + 16 + 16 + 16 + + W1 + W4 + W1 + W1 + 2 + 2 + -2 + -2 + + 17 + 17 + 21 + 18 + 6 + 9 + 4 + 7 + 15 + 13 + 15 + 15 + 5 + 8 + 1 + 8 + 9 + 9 + 12 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 83 + 60 + 73 + + 0 + 1 + 0 + 0 + 0 + 0 + 30 + 0 + + + -7 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Horn.....5 + 46 + + + SIXTH + 6 + + TRIANGL + 35 + 0 + 8 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 2 + + + 1 + 2 + 4 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W4 + W1 + W1 + 1 + 1 + -1 + 3 + + 16 + 17 + 21 + 18 + 6 + 8 + 4 + 7 + 15 + 13 + 15 + 15 + 5 + 6 + 1 + 2 + 9 + 9 + 12 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 87 + 79 + + 0 + 1 + 0 + 0 + 0 + 0 + 30 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Horn.....6 + 47 + + + FOURTH + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 1 + + + 1 + 1 + 5 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + -2 + 0 + 1 + 3 + + 21 + 19 + 15 + 16 + 7 + 8 + 3 + 10 + 12 + 10 + 9 + 9 + 6 + 6 + 6 + 6 + 9 + 8 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 71 + 62 + 78 + + 0 + 0 + 0 + 0 + 0 + 0 + 85 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Horn.....7 + 48 + + + SIXTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 7 + 0 + 0 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 3 + 0 + 0 + + 15 + 14 + 16 + 14 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 19 + 4 + 5 + 8 + 8 + 8 + 9 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 70 + 75 + 86 + 70 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Horns short + 49 + + + SIXTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 3 + 0 + 0 + + 15 + 14 + 16 + 13 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 11 + 8 + 8 + 9 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 91 + 72 + 91 + 70 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Horns + 50 + + + SIXTH + 7 + + TRIANGL + 29 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 5 + 4 + 4 + 4 + 2 + 2 + 3 + 2 + + + 1.5 + 1.49 + 1.5 + 1.5 + no + no + no + no + 16 + 9 + 16 + 16 + + W1 + W1 + W1 + W1 + -3 + 3 + -3 + 0 + + 16 + 15 + 17 + 14 + 31 + 31 + 31 + 9 + 15 + 15 + 15 + 14 + 0 + 0 + 0 + 0 + 9 + 8 + 9 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 82 + 99 + 81 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -19 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 99 + 0 + 0 + 0 + 0 + 0 + + Horns BC + 51 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 3 + -3 + 3 + + 22 + 11 + 17 + 11 + 4 + 3 + 1 + 3 + 13 + 13 + 13 + 13 + 1 + 1 + 1 + 1 + 5 + 7 + 5 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 60 + 93 + 99 + 73 + + 2 + 1 + 2 + 0 + 0 + 0 + 0 + 31 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + JonesBrass + 52 + + + THIRD + 0 + + TRIANGL + 28 + 15 + 16 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 0 + + + 1 + 2 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + 0 + 0 + 0 + 1 + + 16 + 29 + 29 + 16 + 3 + 18 + 10 + 4 + 15 + 12 + 12 + 13 + 1 + 19 + 9 + 1 + 9 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 65 + 66 + 59 + + 0 + 0 + 0 + 0 + 0 + 0 + 90 + 0 + + + 0 + POLY + 2 + FINGER + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + LightBrass + 53 + + + FIFTH + 6 + + TRIANGL + 28 + 15 + 11 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 6 + 2 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W3 + W1 + W1 + 2 + 3 + -3 + -3 + + 16 + 14 + 15 + 14 + 18 + 7 + 15 + 17 + 15 + 12 + 15 + 13 + 0 + 2 + 1 + 2 + 7 + 7 + 8 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 90 + 99 + 83 + + 0 + 0 + 0 + 0 + 0 + 0 + 90 + 0 + + + 0 + POLY + 2 + FINGER + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + MelloBrass + 54 + + + FIFTH + 7 + + TRIANGL + 32 + 6 + 3 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 1 + 2 + + + 0.5 + 0.5 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W4 + W1 + W1 + -1 + -3 + 3 + 1 + + 23 + 18 + 26 + 22 + 31 + 10 + 31 + 15 + 15 + 13 + 15 + 13 + 0 + 0 + 0 + 0 + 9 + 8 + 10 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 71 + 99 + 82 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + MufflBrass + 55 + + + THIRD + 7 + + TRIANGL + 32 + 62 + 6 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 3 + + + 1 + 1 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 16 + 18 + 15 + 21 + 9 + 9 + 9 + 9 + 13 + 13 + 13 + 13 + 9 + 9 + 9 + 9 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 66 + 75 + + 1 + 1 + 2 + 1 + 35 + 13 + 99 + 63 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Ornt Brass + 56 + + + FIFTH + 4 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 5 + 4 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W3 + 2 + 0 + -1 + 0 + + 27 + 27 + 21 + 24 + 6 + 6 + 7 + 18 + 8 + 8 + 15 + 15 + 6 + 6 + 6 + 6 + 7 + 7 + 8 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 86 + 92 + 93 + + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 10 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + PianoBrass1 + 57 + + + FIFTH + 7 + + TRIANGL + 35 + 52 + 3 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 6 + 3 + 4 + + + 2 + 4 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + 0 + 0 + 0 + 3 + + 31 + 31 + 10 + 8 + 6 + 5 + 31 + 31 + 15 + 11 + 15 + 15 + 4 + 0 + 0 + 0 + 6 + 15 + 9 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 70 + 99 + 78 + + 2 + 3 + 3 + 0 + 0 + 99 + 99 + 16 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + PianoBrass2 + 58 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 14 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 3 + -3 + 3 + + 22 + 22 + 17 + 11 + 4 + 12 + 1 + 3 + 13 + 11 + 13 + 13 + 1 + 8 + 1 + 1 + 5 + 4 + 5 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 53 + 99 + 72 + + 2 + 2 + 2 + 1 + 0 + 52 + 0 + 31 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + PianoBrass3 + 59 + + + FIRST + 7 + + TRIANGL + 32 + 20 + 31 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W6 + W1 + W4 + 0 + 0 + 0 + 3 + + 27 + 26 + 19 + 16 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 12 + 0 + 0 + 0 + 0 + 11 + 3 + 5 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 73 + 72 + 73 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + POWERBRASS + 60 + + + FIRST + 7 + + TRIANGL + 32 + 20 + 31 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 3 + + 27 + 26 + 19 + 16 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 12 + 0 + 0 + 0 + 0 + 11 + 3 + 5 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 73 + 72 + 73 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + PowerBrass + 61 + + + FOURTH + 6 + + TRIANGL + 35 + 1 + 13 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 2 + + + 1 + 1 + 4 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W3 + W3 + W5 + 0 + 1 + 0 + 0 + + 20 + 12 + 21 + 15 + 7 + 10 + 31 + 31 + 12 + 10 + 11 + 15 + 3 + 4 + 0 + 0 + 9 + 9 + 10 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 84 + 69 + 91 + + 0 + 1 + 0 + 0 + 0 + 0 + 76 + 99 + + + 0 + POLY + 4 + FINGER + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SplatBrass + 62 + + + THIRD + 7 + + TRIANGL + 31 + 25 + 7 + 0 + off + + + 5 + 0 + off + off + off + off + 5 + 3 + 4 + 5 + 2 + 2 + 3 + 2 + + + 1 + 1 + 3.14 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + 0 + 0 + 0 + + 15 + 16 + 31 + 12 + 31 + 31 + 15 + 5 + 15 + 15 + 6 + 14 + 0 + 0 + 0 + 0 + 9 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 70 + 72 + 82 + + 1 + 0 + 0 + 1 + 0 + 0 + 35 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 99 + 0 + 0 + 0 + 0 + 0 + + SpitBoneBC + 63 + + + FIFTH + 7 + + TRIANGL + 33 + 30 + 4 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W4 + W1 + W1 + 3 + 3 + -3 + -3 + + 24 + 18 + 24 + 18 + 31 + 11 + 31 + 10 + 15 + 14 + 15 + 14 + 0 + 0 + 0 + 0 + 11 + 9 + 11 + 9 + VOF + VOF + VOF + VOF + + + 99 + 95 + 99 + 50 + 50 + 50 + + 98 + 82 + 98 + 83 + + 0 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Brass 1 + 64 + + + FIFTH + 5 + + TRIANGL + 33 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W8 + W4 + W8 + W4 + 3 + 3 + -3 + -3 + + 24 + 18 + 24 + 18 + 31 + 12 + 31 + 12 + 15 + 6 + 15 + 6 + 0 + 0 + 0 + 0 + 11 + 9 + 11 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 90 + 98 + 85 + + 0 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Brass 2 + 65 + + + THIRD + 7 + + TRIANGL + 31 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W7 + W7 + W4 + 0 + 0 + 0 + 0 + + 17 + 18 + 15 + 15 + 31 + 10 + 11 + 8 + 15 + 11 + 11 + 14 + 0 + 0 + 0 + 0 + 10 + 7 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 45 + 77 + 82 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 7 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Brass 3 + 66 + + + FIFTH + 7 + + TRIANGL + 28 + 28 + 10 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 1 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W2 + W4 + W2 + -3 + -3 + 3 + 3 + + 17 + 15 + 17 + 15 + 9 + 15 + 9 + 15 + 12 + 14 + 12 + 14 + 0 + 0 + 0 + 0 + 10 + 1 + 10 + 1 + VOF + VOF + VOF + VOF + + + 99 + 96 + 99 + 50 + 50 + 50 + + 99 + 76 + 99 + 76 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Brass 4 + 67 + + + FIFTH + 5 + + TRIANGL + 34 + 33 + 0 + 16 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 2 + + + 1 + 2 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W3 + W1 + W3 + 0 + 1 + 0 + 0 + + 21 + 19 + 21 + 18 + 6 + 14 + 6 + 6 + 12 + 10 + 11 + 10 + 8 + 9 + 6 + 3 + 9 + 10 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 83 + 99 + 91 + + 3 + 1 + 1 + 1 + 0 + 0 + 10 + 33 + + + 0 + POLY + 4 + FINGER + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + TightBrass + 68 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 1 + + + 2 + 2 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W7 + W1 + W1 + 2 + 3 + -2 + 0 + + 23 + 21 + 25 + 20 + 14 + 15 + 17 + 14 + 14 + 12 + 15 + 14 + 0 + 0 + 0 + 0 + 10 + 10 + 10 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 95 + 99 + 84 + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Tpt.Sect.* + 69 + + + FIFTH + 7 + + TRIANGL + 31 + 14 + 28 + 0 + off + + + 3 + 0 + off + off + off + on + 0 + 0 + 0 + 0 + 1 + 3 + 1 + 2 + + + 1.5 + 1.5 + 1.49 + 1.49 + no + no + no + no + 16 + 16 + 9 + 9 + + W2 + W4 + W2 + W4 + -3 + -3 + 3 + 3 + + 10 + 7 + 17 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 2 + 0 + 2 + 4 + 5 + 7 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 79 + 99 + 77 + + 1 + 0 + 1 + 0 + 12 + 39 + 0 + 27 + + + -7 + POLY + 4 + FINGER + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Tpt&Woodwd + 70 + + + FOURTH + 5 + + TRIANGL + 29 + 30 + 53 + 0 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 2 + 5 + 2 + + + 1 + 3.14 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W3 + W1 + W3 + -1 + 0 + -1 + 2 + + 12 + 15 + 18 + 14 + 7 + 16 + 12 + 13 + 11 + 9 + 15 + 15 + 5 + 6 + 5 + 3 + 7 + 7 + 8 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 65 + 76 + 73 + + 0 + 0 + 0 + 0 + 0 + 0 + 69 + 35 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 1 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + WindEns..1 + 71 + + + FOURTH + 5 + + TRIANGL + 29 + 30 + 53 + 0 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 2 + 4 + 2 + + + 1 + 1 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W4 + W2 + -1 + 0 + -1 + 2 + + 13 + 22 + 13 + 31 + 7 + 16 + 12 + 13 + 11 + 9 + 15 + 15 + 5 + 6 + 7 + 3 + 7 + 7 + 8 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 71 + 76 + 80 + + 0 + 0 + 0 + 0 + 0 + 0 + 69 + 35 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 1 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + WindEns..2 + 72 + + + FIFTH + 7 + + TRIANGL + 32 + 6 + 4 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 1 + 3 + 1 + + + 2 + 2 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 2 + -2 + -3 + + 14 + 31 + 16 + 18 + 31 + 31 + 31 + 8 + 15 + 15 + 15 + 14 + 0 + 0 + 0 + 0 + 11 + 7 + 12 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 65 + 86 + 76 + + 1 + 0 + 0 + 1 + 0 + 0 + 26 + 54 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Wood Wind + 73 + + + FIFTH + 7 + + TRIANGL + 28 + 29 + 16 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 5 + + + 1 + 1 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 3 + + 31 + 31 + 31 + 19 + 18 + 9 + 9 + 5 + 10 + 0 + 14 + 10 + 8 + 0 + 5 + 0 + 8 + 11 + 8 + 14 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 77 + 89 + 89 + + 0 + 2 + 0 + 0 + 0 + 67 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + pianohorn + 74 + + + + Accordion + 1 + + THIRD + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 5 + 2 + off + off + on + on + 0 + 0 + 2 + 2 + 0 + 0 + 0 + 0 + + + 2 + 1 + 6 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W2 + W7 + 0 + -1 + 1 + 0 + + 15 + 19 + 31 + 15 + 4 + 4 + 4 + 4 + 2 + 2 + 2 + 2 + 3 + 3 + 3 + 3 + 10 + 7 + 7 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 67 + 56 + 64 + + 0 + 0 + 0 + 0 + 16 + 0 + 35 + 16 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 99 + 0 + 0 + 0 + 0 + 0 + + Accordion* + 0 + + + FIFTH + 3 + + TRIANGL + 28 + 10 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 2 + + + 2 + 1 + 3 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W6 + W2 + W2 + W8 + 3 + 3 + -3 + -3 + + 14 + 31 + 14 + 20 + 31 + 31 + 31 + 18 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 8 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 70 + 83 + 84 + + 1 + 1 + 1 + 1 + 6 + 0 + 14 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Accordion + 1 + + + FIFTH + 5 + + TRIANGL + 18 + 0 + 3 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 6 + 6 + 2 + + + 1 + 4 + 2 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W1 + W1 + W3 + 3 + -3 + 1 + 0 + + 14 + 31 + 18 + 31 + 31 + 4 + 5 + 5 + 15 + 15 + 13 + 15 + 0 + 0 + 3 + 3 + 10 + 5 + 10 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 73 + 99 + 62 + + 0 + 0 + 0 + 0 + 0 + 0 + 99 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Accordion1 + 2 + + + THIRD + 7 + + TRIANGL + 18 + 0 + 3 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 1 + + + 1 + 4 + 2 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W1 + W1 + W1 + 3 + -3 + 3 + -3 + + 14 + 31 + 31 + 16 + 31 + 4 + 11 + 6 + 15 + 15 + 15 + 14 + 0 + 0 + 0 + 0 + 10 + 5 + 10 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 55 + 54 + 65 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Accordion2 + 3 + + + THIRD + 7 + + TRIANGL + 18 + 0 + 3 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 4 + 3 + + + 1 + 4 + 4 + 9 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W3 + W1 + W1 + 3 + -3 + 3 + -3 + + 14 + 31 + 31 + 16 + 31 + 4 + 11 + 6 + 15 + 15 + 15 + 14 + 0 + 0 + 0 + 0 + 10 + 5 + 10 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 55 + 54 + 62 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Accordion3 + 4 + + + THIRD + 7 + + TRIANGL + 18 + 0 + 3 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 6 + 5 + 2 + + + 2 + 2 + 2 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W2 + 3 + -3 + 3 + -3 + + 14 + 31 + 31 + 16 + 31 + 4 + 11 + 6 + 15 + 15 + 15 + 14 + 0 + 0 + 0 + 0 + 10 + 5 + 10 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 61 + 54 + 62 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Accordion4 + 5 + + + SECOND + 7 + + TRIANGL + 25 + 0 + 3 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + + + 1 + 4 + 2 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -3 + 3 + -3 + + 14 + 31 + 31 + 16 + 31 + 4 + 11 + 6 + 15 + 15 + 15 + 14 + 0 + 0 + 0 + 0 + 10 + 5 + 10 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 73 + 70 + 74 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Squeezebox + 6 + + + + Bag + 2 + + FIFTH + 4 + + TRIANGL + 38 + 60 + 6 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 6 + 5 + + + 3 + 1 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W3 + W1 + W1 + 0 + 0 + 0 + 0 + + 19 + 23 + 19 + 24 + 7 + 10 + 7 + 10 + 15 + 13 + 12 + 12 + 6 + 4 + 6 + 4 + 10 + 2 + 10 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 78 + 96 + 87 + + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bag Pipe + 0 + + + + Bassoon + 3 + + FIRST + 7 + + TRIANGL + 31 + 8 + 7 + 10 + off + + + 5 + 3 + off + on + on + on + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 1 + + + 2 + 0.5 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 15 + 25 + 16 + 16 + 31 + 31 + 31 + 23 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 9 + 7 + 1 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 91 + 78 + 75 + 68 + + 0 + 0 + 0 + 0 + 0 + 53 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 35 + 30 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bassoon + 0 + + + FIFTH + 3 + + TRIANGL + 37 + 41 + 0 + 0 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 4 + 5 + + + 1 + 1 + 2 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W4 + 1 + 0 + 0 + 0 + + 18 + 18 + 18 + 18 + 13 + 13 + 13 + 0 + 14 + 13 + 13 + 13 + 9 + 9 + 9 + 3 + 10 + 10 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 65 + 98 + 80 + + 0 + 0 + 0 + 0 + 0 + 65 + 67 + 71 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bassoon..1 + 1 + + + FIRST + 4 + + TRIANGL + 32 + 12 + 6 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 5 + 4 + 2 + + + 2 + 0.5 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W3 + W1 + 0 + 0 + 0 + 0 + + 15 + 24 + 17 + 17 + 31 + 31 + 31 + 22 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 8 + 8 + 1 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 88 + 83 + 69 + 56 + + 0 + 0 + 0 + 0 + 0 + 71 + 0 + 0 + + + -12 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bassoon..2 + 2 + + + SIXTH + 6 + + TRIANGL + 39 + 33 + 0 + 38 + off + + + 3 + 1 + off + off + on + off + 0 + 0 + 0 + 0 + 3 + 3 + 5 + 1 + + + 2 + 4 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W1 + W3 + W1 + 0 + 0 + 0 + 0 + + 18 + 19 + 19 + 18 + 24 + 6 + 24 + 24 + 15 + 15 + 15 + 15 + 6 + 6 + 6 + 6 + 9 + 9 + 9 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 69 + + 0 + 0 + 0 + 0 + 0 + 71 + 0 + 99 + + + -12 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bassoon..3 + 4 + + + FIFTH + 3 + + TRIANGL + 39 + 33 + 0 + 38 + off + + + 2 + 1 + off + off + on + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 1 + + + 1 + 2 + 2 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 18 + 18 + 19 + 19 + 12 + 12 + 13 + 6 + 14 + 13 + 14 + 14 + 6 + 6 + 9 + 3 + 10 + 10 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 73 + 99 + 78 + + 1 + 1 + 0 + 0 + 0 + 71 + 0 + 99 + + + -12 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bassoon..4 + 5 + + + SIXTH + 1 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 6 + 2 + + + 3 + 0.5 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 2 + 3 + + 16 + 22 + 15 + 22 + 31 + 16 + 6 + 8 + 15 + 15 + 15 + 7 + 0 + 0 + 0 + 5 + 10 + 4 + 11 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 85 + 99 + 89 + + 1 + 0 + 0 + 1 + 0 + 70 + 0 + 25 + + + -12 + POLY + 7 + FULL + 1 + POR + 99 + 0 + 0 + 50 + 0 + 30 + 10 + 50 + 99 + 0 + 0 + 0 + 0 + 0 + + BassoonSyn + 6 + + + + Clarinet + 4 + + THIRD + 0 + + TRIANGL + 37 + 0 + 0 + 41 + off + + + 1 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 4 + 1 + + + 1 + 2 + 4 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + 0 + 0 + 1 + + 16 + 31 + 31 + 19 + 31 + 27 + 17 + 18 + 15 + 14 + 12 + 13 + 0 + 6 + 0 + 0 + 11 + 4 + 6 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 85 + 63 + 82 + 71 + + 1 + 0 + 0 + 1 + 0 + 65 + 90 + 34 + + + -24 + POLY + 2 + FINGER + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bass Clair + 0 + + + THIRD + 7 + + TRIANGL + 34 + 20 + 10 + 24 + off + + + 5 + 3 + off + off + on + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 1 + + + 1 + 1 + 5 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 16 + 12 + 31 + 19 + 31 + 20 + 17 + 18 + 15 + 14 + 12 + 13 + 0 + 0 + 0 + 0 + 11 + 5 + 6 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 85 + 59 + 79 + 76 + + 0 + 0 + 0 + 1 + 0 + 60 + 90 + 34 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + Clairnet.1 + 1 + + + FIFTH + 7 + + TRIANGL + 36 + 39 + 0 + 0 + on + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 5 + 1 + + + 2 + 4 + 4 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W4 + 0 + 1 + 0 + 2 + + 15 + 31 + 16 + 30 + 6 + 6 + 12 + 12 + 14 + 15 + 14 + 15 + 6 + 4 + 12 + 15 + 7 + 6 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 70 + 84 + 51 + + 1 + 0 + 0 + 0 + 40 + 92 + 71 + 65 + + + -24 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Clairnet.2 + 2 + + + SEVENTH + 7 + + TRIANGL + 36 + 2 + 31 + 81 + off + + + 1 + 1 + on + on + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 1 + + + 0.5 + 1 + 0.5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 18 + 31 + 18 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 5 + 4 + 5 + 6 + 7 + 6 + 9 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 99 + 81 + + 1 + 0 + 0 + 0 + 14 + 52 + 14 + 54 + + + 12 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Clairnet.3 + 3 + + + FIRST + 4 + + TRIANGL + 20 + 0 + 0 + 16 + off + + + 6 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 4 + 3 + + + 1 + 2 + 4 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W4 + 0 + 0 + 0 + 3 + + 31 + 11 + 19 + 31 + 7 + 6 + 6 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 4 + 4 + 3 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 74 + 54 + 71 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ClaraPiano + 4 + + + THIRD + 0 + + TRIANGL + 31 + 20 + 7 + 16 + off + + + 5 + 3 + off + off + on + off + 0 + 0 + 0 + 0 + 2 + 2 + 3 + 2 + + + 1 + 2 + 3 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W3 + W1 + 0 + 0 + 0 + 0 + + 17 + 14 + 19 + 18 + 31 + 20 + 17 + 2 + 15 + 14 + 11 + 14 + 0 + 0 + 0 + 0 + 9 + 5 + 6 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 89 + 72 + 86 + 81 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 9 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 30 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Clarinet + 5 + + + THIRD + 7 + + TRIANGL + 30 + 10 + 3 + 5 + off + + + 6 + 3 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 3 + 3 + 1 + + + 1 + 2 + 5 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W1 + W1 + 0 + 0 + 0 + 0 + + 17 + 21 + 16 + 21 + 31 + 15 + 16 + 10 + 15 + 10 + 14 + 14 + 0 + 0 + 0 + 0 + 10 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 84 + 65 + 75 + + 1 + 2 + 1 + 0 + 0 + 27 + 31 + 47 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 26 + 15 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Clarinet 1 + 6 + + + THIRD + 4 + + TRIANGL + 30 + 10 + 3 + 5 + off + + + 6 + 3 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 1 + 2 + + + 1 + 2 + 3 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W6 + W3 + W1 + 0 + 0 + 0 + 0 + + 17 + 15 + 18 + 31 + 31 + 15 + 18 + 31 + 15 + 10 + 10 + 15 + 0 + 0 + 0 + 0 + 11 + 9 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 76 + 74 + 75 + + 1 + 2 + 1 + 0 + 0 + 82 + 58 + 15 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 26 + 15 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Clarinet 2 + 7 + + + FIFTH + 5 + + TRIANGL + 38 + 7 + 3 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 4 + 2 + + + 1 + 2 + 0.5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + 0 + 0 + 1 + + 16 + 16 + 15 + 15 + 4 + 4 + 16 + 11 + 15 + 13 + 12 + 13 + 3 + 3 + 3 + 6 + 9 + 8 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 68 + 90 + 71 + + 1 + 0 + 0 + 1 + 0 + 60 + 4 + 34 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + HolowClair + 8 + + + SECOND + 7 + + TRIANGL + 29 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 3 + 2 + 2 + + + 1 + 4 + 7 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W2 + W8 + 0 + 0 + -3 + 2 + + 15 + 14 + 14 + 7 + 8 + 7 + 5 + 6 + 13 + 12 + 11 + 15 + 0 + 1 + 1 + 1 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 69 + 77 + 55 + + 2 + 1 + 3 + 2 + 0 + 27 + 16 + 33 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 22 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 4 + + SynClarnet + 9 + + + + EnglishHorn + 5 + + FIFTH + 2 + + TRIANGL + 29 + 60 + 0 + 36 + off + + + 2 + 1 + on + off + off + off + 6 + 4 + 3 + 0 + 5 + 6 + 6 + 2 + + + 3 + 2 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W3 + 0 + 0 + 0 + 0 + + 18 + 31 + 16 + 20 + 7 + 10 + 10 + 10 + 13 + 12 + 11 + 12 + 6 + 4 + 4 + 4 + 10 + 2 + 10 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 71 + 99 + 75 + + 0 + 0 + 0 + 0 + 10 + 58 + 92 + 82 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + English Hn + 0 + + + + FlugelHorn + 6 + + THIRD + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 1 + 2 + 1 + + + 1 + 1 + 2.82 + 1 + no + no + no + no + 8 + 8 + 48 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 3 + + 14 + 16 + 21 + 14 + 7 + 10 + 17 + 10 + 13 + 0 + 6 + 13 + 1 + 0 + 0 + 0 + 8 + 10 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 61 + 79 + 77 + + 1 + 1 + 1 + 1 + 0 + 13 + 5 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Flugel * + 0 + + + THIRD + 5 + + TRIANGL + 35 + 25 + 4 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 6 + 1 + + + 1 + 1 + 1.73 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + 1 + 1 + 0 + + 16 + 15 + 31 + 12 + 31 + 31 + 15 + 5 + 15 + 15 + 0 + 0 + 0 + 0 + 0 + 0 + 9 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 60 + 55 + 81 + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + FlugelHorn + 1 + + + + Flute + 7 + + FOURTH + 0 + + TRIANGL + 30 + 36 + 7 + 0 + off + + + 5 + 2 + on + on + on + on + 0 + 4 + 5 + 2 + 2 + 3 + 3 + 2 + + + 1.5 + 3 + 2.99 + 8.98 + no + no + no + no + 16 + 8 + 10 + 14 + + W2 + W4 + W4 + W2 + 0 + -3 + 3 + -2 + + 13 + 5 + 4 + 2 + 31 + 6 + 5 + 2 + 15 + 13 + 12 + 15 + 0 + 1 + 1 + 1 + 4 + 2 + 1 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 77 + 60 + + 1 + 0 + 0 + 0 + 0 + 38 + 18 + 0 + + + -7 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 21 + 0 + 8 + 0 + 50 + 14 + 0 + 0 + 0 + 0 + 0 + + AdditivFlt + 0 + + + FOURTH + 5 + + TRIANGL + 35 + 41 + 7 + 54 + off + + + 1 + 1 + off + off + on + off + 0 + 0 + 0 + 0 + 4 + 4 + 5 + 0 + + + 1 + 1 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 13 + 12 + 22 + 15 + 18 + 19 + 31 + 15 + 15 + 15 + 15 + 15 + 4 + 7 + 4 + 5 + 9 + 7 + 1 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 83 + 60 + 61 + 40 + + 0 + 0 + 0 + 0 + 0 + 71 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Alto Flute + 1 + + + FOURTH + 5 + + TRIANGL + 35 + 41 + 7 + 54 + off + + + 1 + 1 + off + off + on + off + 0 + 0 + 0 + 0 + 5 + 4 + 4 + 3 + + + 1 + 0.5 + 0.5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 13 + 12 + 22 + 15 + 18 + 19 + 31 + 15 + 15 + 15 + 15 + 15 + 4 + 7 + 4 + 5 + 9 + 7 + 1 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 60 + 65 + 50 + + 0 + 0 + 0 + 0 + 0 + 71 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bass Flute1 + 2 + + + FOURTH + 5 + + TRIANGL + 35 + 41 + 7 + 54 + off + + + 1 + 1 + off + off + on + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.5 + 0.5 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 13 + 12 + 22 + 15 + 18 + 19 + 31 + 15 + 15 + 15 + 15 + 15 + 4 + 7 + 4 + 5 + 9 + 7 + 1 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 60 + 65 + 50 + + 0 + 0 + 0 + 0 + 0 + 71 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bass Flute2 + 3 + + + THIRD + 0 + + TRIANGL + 29 + 24 + 6 + 25 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 6 + 2 + 3 + + + 1 + 1.76 + 1.12 + 1 + no + no + no + no + 8 + 12 + 10 + 8 + + W1 + W1 + W1 + W1 + -1 + 1 + -3 + 3 + + 15 + 29 + 29 + 16 + 3 + 18 + 10 + 3 + 15 + 14 + 13 + 15 + 1 + 18 + 9 + 2 + 9 + 7 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 71 + 89 + 79 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 25 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 49 + 0 + 41 + 18 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Flute * + 4 + + + FOURTH + 7 + + TRIANGL + 30 + 7 + 7 + 13 + off + + + 5 + 3 + on + on + on + on + 0 + 0 + 0 + 0 + 2 + 3 + 2 + 2 + + + 1 + 1 + 1 + 1.73 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W4 + 0 + 0 + 0 + 0 + + 15 + 25 + 18 + 16 + 31 + 31 + 25 + 22 + 15 + 15 + 15 + 7 + 0 + 0 + 0 + 0 + 9 + 7 + 1 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 71 + 58 + 73 + + 1 + 0 + 0 + 0 + 0 + 11 + 13 + 0 + + + 12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 30 + 64 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Flute + 5 + + + FOURTH + 7 + + TRIANGL + 31 + 8 + 32 + 2 + off + + + 4 + 2 + on + on + on + on + 0 + 0 + 0 + 0 + 3 + 2 + 2 + 7 + + + 2 + 2 + 3 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 3 + 0 + 3 + + 15 + 11 + 17 + 17 + 4 + 4 + 16 + 14 + 15 + 10 + 10 + 9 + 0 + 0 + 2 + 3 + 9 + 5 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 77 + 76 + 57 + + 1 + 2 + 1 + 1 + 0 + 24 + 27 + 14 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Flute 1 + 6 + + + FOURTH + 7 + + TRIANGL + 31 + 8 + 32 + 2 + off + + + 4 + 2 + on + on + on + on + 0 + 0 + 0 + 0 + 3 + 2 + 2 + 7 + + + 2 + 2 + 4 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 3 + 0 + 3 + + 15 + 11 + 17 + 17 + 4 + 4 + 16 + 14 + 15 + 13 + 10 + 9 + 0 + 0 + 2 + 3 + 9 + 5 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 77 + 76 + 57 + + 1 + 2 + 1 + 1 + 0 + 24 + 27 + 14 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Flute 1* + 7 + + + FIFTH + 7 + + TRIANGL + 31 + 8 + 32 + 2 + off + + + 4 + 2 + on + on + on + on + 0 + 0 + 0 + 0 + 3 + 2 + 3 + 1 + + + 2.99 + 2.99 + 3 + 6 + no + no + no + no + 10 + 10 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 3 + -3 + -3 + + 15 + 19 + 15 + 19 + 0 + 4 + 0 + 4 + 15 + 14 + 15 + 14 + 0 + 0 + 0 + 0 + 9 + 5 + 9 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 72 + 99 + 53 + + 1 + 2 + 1 + 2 + 0 + 3 + 0 + 3 + + + -19 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Flute 2 + 8 + + + FOURTH + 5 + + TRIANGL + 30 + 20 + 45 + 99 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 4 + 5 + 4 + + + 2 + 2 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W4 + W1 + W3 + 0 + -1 + 1 + 0 + + 17 + 22 + 11 + 27 + 0 + 21 + 0 + 25 + 13 + 13 + 13 + 13 + 3 + 18 + 3 + 0 + 9 + 1 + 9 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 86 + 53 + 93 + + 0 + 0 + 0 + 0 + 20 + 89 + 70 + 69 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 1 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + Flute....1 + 9 + + + THIRD + 0 + + TRIANGL + 28 + 22 + 42 + 0 + off + + + 3 + 1 + off + on + on + off + 0 + 0 + 0 + 0 + 4 + 4 + 5 + 2 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W5 + W1 + 0 + 0 + 0 + 0 + + 15 + 18 + 31 + 27 + 0 + 21 + 0 + 25 + 13 + 13 + 13 + 13 + 3 + 18 + 3 + 0 + 9 + 1 + 9 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 91 + 88 + 60 + 75 + + 0 + 0 + 0 + 0 + 20 + 89 + 70 + 69 + + + 12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 1 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Flute....2 + 10 + + + THIRD + 1 + + TRIANGL + 32 + 20 + 53 + 0 + off + + + 1 + 1 + off + on + on + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 0 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 13 + 15 + 31 + 27 + 0 + 13 + 0 + 25 + 13 + 15 + 13 + 13 + 3 + 15 + 3 + 0 + 9 + 9 + 9 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 91 + 41 + 51 + 65 + + 0 + 0 + 0 + 0 + 20 + 0 + 70 + 69 + + + 12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 1 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Flute....3 + 11 + + + THIRD + 7 + + TRIANGL + 31 + 9 + 15 + 30 + off + + + 5 + 3 + off + on + on + off + 0 + 0 + 0 + 0 + 4 + 5 + 5 + 3 + + + 1 + 1 + 2.05 + 2 + no + no + no + no + 8 + 8 + 11 + 8 + + W1 + W2 + W1 + W2 + 3 + -3 + 3 + -3 + + 16 + 31 + 25 + 27 + 26 + 18 + 19 + 18 + 15 + 14 + 6 + 13 + 0 + 0 + 0 + 0 + 8 + 5 + 5 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 52 + 83 + 59 + + 1 + 0 + 0 + 1 + 0 + 46 + 0 + 34 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Flute....4 + 12 + + + THIRD + 7 + + TRIANGL + 31 + 9 + 15 + 30 + off + + + 5 + 3 + off + on + on + off + 0 + 0 + 0 + 0 + 0 + 2 + 1 + 1 + + + 1 + 4 + 5.65 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W2 + 3 + -3 + 3 + -3 + + 16 + 31 + 25 + 27 + 26 + 18 + 19 + 18 + 15 + 14 + 6 + 13 + 0 + 0 + 0 + 0 + 8 + 5 + 5 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 52 + 83 + 59 + + 1 + 0 + 0 + 1 + 0 + 46 + 0 + 34 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Flute....4* + 13 + + + FOURTH + 7 + + TRIANGL + 35 + 4 + 7 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 4 + 5 + + + 1 + 2 + 1 + 2.82 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 16 + 21 + 16 + 16 + 31 + 31 + 31 + 23 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 0 + 9 + 7 + 1 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 87 + 69 + 59 + 54 + + 0 + 0 + 0 + 0 + 0 + 71 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + Flute....5 + 14 + + + FOURTH + 7 + + TRIANGL + 32 + 17 + 18 + 51 + off + + + 5 + 1 + off + off + on + off + 0 + 0 + 0 + 0 + 2 + 1 + 1 + 0 + + + 1 + 1 + 2 + 25.95 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 15 + 31 + 31 + 19 + 31 + 20 + 20 + 30 + 15 + 14 + 1 + 14 + 0 + 0 + 0 + 0 + 11 + 5 + 15 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 77 + 99 + + 1 + 0 + 0 + 1 + 0 + 36 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 55 + 14 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Jazz Flute + 15 + + + THIRD + 0 + + TRIANGL + 30 + 13 + 8 + 26 + off + + + 5 + 3 + off + on + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 3 + 2 + + + 1 + 2 + 5.65 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W3 + W1 + 3 + -3 + 3 + -3 + + 16 + 31 + 25 + 27 + 31 + 20 + 20 + 18 + 15 + 14 + 6 + 13 + 0 + 0 + 0 + 0 + 8 + 5 + 6 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 64 + 80 + 66 + + 1 + 2 + 0 + 1 + 0 + 0 + 0 + 20 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 35 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Pan Floot + 16 + + + FIFTH + 7 + + TRIANGL + 46 + 14 + 9 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 6 + 5 + + + 3 + 3 + 0.5 + 6.28 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 1 + -1 + -1 + + 16 + 31 + 18 + 18 + 6 + 6 + 6 + 21 + 14 + 9 + 13 + 15 + 2 + 3 + 3 + 15 + 9 + 7 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 62 + 58 + 70 + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 46 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Pan Flute1 + 17 + + + FOURTH + 7 + + TRIANGL + 31 + 13 + 14 + 30 + off + + + 5 + 3 + off + on + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 1 + + + 1 + 2 + 1 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + 3 + -3 + 3 + -3 + + 16 + 31 + 25 + 27 + 31 + 20 + 20 + 18 + 15 + 14 + 7 + 13 + 0 + 0 + 0 + 0 + 8 + 5 + 6 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 46 + 55 + 70 + + 1 + 0 + 0 + 1 + 0 + 36 + 0 + 34 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Pan Flute2 + 18 + + + FIFTH + 0 + + SHOLD + 99 + 0 + 20 + 55 + off + + + 4 + 1 + off + off + off + on + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W1 + W4 + -1 + 0 + 0 + 0 + + 16 + 17 + 16 + 17 + 4 + 23 + 4 + 23 + 7 + 6 + 7 + 6 + 4 + 1 + 4 + 1 + 10 + 1 + 10 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 53 + 59 + 99 + + 0 + 0 + 3 + 0 + 17 + 0 + 17 + 0 + + + 12 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + Pan Flute3 + 19 + + + FIFTH + 0 + + SHOLD + 99 + 0 + 12 + 19 + off + + + 6 + 3 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 3 + 2 + 0 + + + 1 + 4 + 1 + 8.04 + no + no + no + no + 8 + 8 + 8 + 10 + + W2 + W1 + W1 + W1 + 0 + 0 + -1 + -3 + + 15 + 31 + 12 + 21 + 31 + 31 + 25 + 25 + 15 + 15 + 15 + 15 + 4 + 17 + 10 + 7 + 7 + 15 + 8 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 90 + 89 + 55 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 59 + + + 0 + POLY + 2 + FULL + 0 + POR + 59 + 0 + 0 + 31 + 0 + 0 + 0 + 49 + 0 + 0 + 0 + 0 + 0 + 0 + + PanFlute * + 20 + + + FIFTH + 0 + + TRIANGL + 35 + 41 + 7 + 54 + off + + + 1 + 1 + off + off + on + off + 0 + 0 + 0 + 0 + 5 + 5 + 6 + 7 + + + 1 + 1 + 1 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W5 + W3 + W3 + -2 + 1 + 0 + 2 + + 19 + 31 + 21 + 31 + 21 + 31 + 31 + 18 + 10 + 15 + 15 + 10 + 21 + 29 + 0 + 18 + 9 + 7 + 10 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 72 + 99 + 90 + + 0 + 0 + 0 + 0 + 0 + 71 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Perc Flute1 + 21 + + + FIFTH + 0 + + TRIANGL + 35 + 41 + 7 + 54 + off + + + 1 + 1 + off + off + on + off + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + + + 1 + 1 + 1 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W5 + W1 + W1 + -2 + 1 + 0 + 2 + + 19 + 31 + 21 + 31 + 21 + 31 + 31 + 18 + 10 + 15 + 15 + 10 + 21 + 29 + 0 + 18 + 9 + 7 + 10 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 72 + 99 + 90 + + 0 + 0 + 0 + 0 + 0 + 71 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Perc Flute2 + 22 + + + FOURTH + 0 + + TRIANGL + 28 + 4 + 11 + 0 + on + + + 5 + 2 + on + on + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + + + 1.5 + 3 + 2.99 + 6 + no + no + no + no + 16 + 8 + 10 + 8 + + W1 + W1 + W1 + W1 + 0 + -3 + 3 + -2 + + 16 + 31 + 31 + 31 + 8 + 25 + 20 + 23 + 14 + 13 + 11 + 13 + 0 + 0 + 9 + 17 + 6 + 1 + 9 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 71 + 93 + 85 + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + -19 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Perc Flute3 + 23 + + + FOURTH + 5 + + TRIANGL + 35 + 18 + 10 + 53 + off + + + 1 + 1 + off + off + on + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 3 + + + 2 + 2 + 1 + 2.05 + no + no + no + no + 8 + 8 + 8 + 11 + + W1 + W4 + W1 + W1 + 0 + 0 + 0 + 0 + + 15 + 15 + 16 + 16 + 31 + 31 + 31 + 23 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 0 + 9 + 7 + 1 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 59 + 44 + 52 + + 0 + 0 + 0 + 0 + 0 + 71 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Soft Flute + 24 + + + SEVENTH + 5 + + TRIANGL + 33 + 0 + 5 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 3 + 5 + 3 + + + 1 + 2 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -3 + 0 + 0 + + 18 + 21 + 7 + 24 + 1 + 28 + 1 + 18 + 13 + 13 + 13 + 14 + 3 + 21 + 3 + 21 + 10 + 10 + 10 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 88 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 2 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Song Flute + 25 + + + FIFTH + 2 + + SHOLD + 99 + 0 + 12 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 4 + 3 + + + 1 + 5 + 7 + 10.99 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W5 + 0 + 0 + 0 + 0 + + 13 + 18 + 13 + 18 + 24 + 24 + 14 + 24 + 14 + 13 + 7 + 11 + 3 + 0 + 4 + 1 + 4 + 2 + 4 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 75 + 99 + 88 + + 2 + 2 + 2 + 0 + 0 + 0 + 0 + 22 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SynthFlute + 26 + + + + FrenchHorn + 8 + + FIFTH + 6 + + TRIANGL + 22 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 2 + 1 + 2 + + + 0.5 + 0.5 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 3 + 3 + -3 + + 22 + 10 + 14 + 12 + 13 + 8 + 31 + 8 + 15 + 15 + 15 + 15 + 0 + 5 + 0 + 3 + 6 + 7 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 90 + 99 + 84 + + 0 + 0 + 0 + 0 + 0 + 10 + 29 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Fr.Horn * + 0 + + + SECOND + 7 + + TRIANGL + 26 + 25 + 8 + 10 + off + + + 4 + 2 + on + on + on + on + 0 + 0 + 0 + 0 + 2 + 2 + 3 + 2 + + + 1 + 1 + 3.14 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + -3 + 3 + -3 + + 12 + 14 + 31 + 8 + 31 + 31 + 14 + 5 + 15 + 15 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 6 + 6 + 6 + VOF + V24 + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 67 + 59 + 71 + + 1 + 0 + 0 + 1 + 0 + 0 + 14 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 30 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + FrenchHorn + 1 + + + THIRD + 7 + + TRIANGL + 37 + 0 + 4 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 3 + 5 + 1 + + + 1 + 1 + 3.14 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + 1 + 1 + 0 + + 18 + 15 + 13 + 15 + 31 + 31 + 15 + 5 + 15 + 15 + 0 + 0 + 0 + 0 + 0 + 0 + 9 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 54 + 57 + 75 + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + FrnchHorn1 + 2 + + + FOURTH + 3 + + TRIANGL + 37 + 0 + 10 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 5 + + + 1 + 1 + 4 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W1 + 0 + 0 + 0 + 0 + + 18 + 15 + 13 + 15 + 31 + 31 + 15 + 5 + 15 + 15 + 0 + 0 + 0 + 0 + 0 + 0 + 9 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 72 + 64 + 78 + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + FrnchHorn2 + 3 + + + + Harmonica + 9 + + FIFTH + 4 + + TRIANGL + 41 + 0 + 0 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 3 + + + 1 + 1 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 3 + 0 + 0 + + 29 + 18 + 16 + 16 + 31 + 12 + 31 + 13 + 15 + 15 + 15 + 15 + 0 + 6 + 4 + 1 + 13 + 9 + 12 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 78 + 79 + 99 + 78 + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 10 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Harmonic.1 + 0 + + + FIFTH + 5 + + TRIANGL + 41 + 0 + 0 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 2 + + + 1 + 0.5 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + 0 + 3 + 0 + 0 + + 29 + 18 + 16 + 11 + 31 + 12 + 31 + 13 + 15 + 15 + 15 + 15 + 0 + 6 + 4 + 1 + 13 + 9 + 12 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 86 + 90 + 87 + + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Harmonic.2 + 1 + + + SECOND + 3 + + TRIANGL + 31 + 33 + 0 + 37 + off + + + 3 + 2 + on + off + on + off + 0 + 0 + 4 + 0 + 0 + 0 + 0 + 1 + + + 1 + 0.5 + 5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 3 + 0 + 0 + + 13 + 12 + 14 + 13 + 5 + 8 + 9 + 13 + 15 + 12 + 15 + 13 + 1 + 0 + 1 + 1 + 9 + 9 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 62 + 60 + 66 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 41 + 0 + 0 + 0 + 0 + 0 + + Harmonica* + 2 + + + FIRST + 0 + + TRIANGL + 35 + 15 + 2 + 27 + off + + + 5 + 3 + off + on + on + on + 0 + 0 + 0 + 0 + 3 + 1 + 2 + 1 + + + 3 + 1 + 3 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W6 + W6 + W6 + 1 + -1 + 1 + 2 + + 13 + 12 + 12 + 16 + 11 + 11 + 14 + 9 + 14 + 14 + 13 + 13 + 1 + 2 + 2 + 2 + 9 + 3 + 8 + 6 + VOF + V48 + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 79 + 75 + 62 + + 2 + 2 + 3 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FINGER + 0 + POR + 99 + 0 + 0 + 40 + 80 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Harmonica1 + 3 + + + SEVENTH + 0 + + TRIANGL + 29 + 4 + 1 + 39 + off + + + 5 + 1 + on + on + on + off + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 2 + + + 1 + 1 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W5 + W6 + W4 + W5 + 0 + 0 + 0 + 0 + + 10 + 12 + 12 + 14 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 10 + 9 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 95 + 92 + 75 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Harmonica2 + 4 + + + FIFTH + 0 + + TRIANGL + 31 + 0 + 11 + 0 + off + + + 4 + 1 + on + on + on + on + 7 + 3 + 3 + 7 + 4 + 3 + 5 + 1 + + + 2 + 1 + 1 + 7.07 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W2 + 0 + 0 + 0 + -3 + + 13 + 31 + 15 + 31 + 31 + 31 + 16 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 9 + 0 + 8 + 3 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 59 + 97 + 41 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Harmonica3 + 5 + + + FIFTH + 0 + + SAWUP + 29 + 60 + 4 + 0 + off + + + 0 + 0 + off + off + off + off + 7 + 3 + 3 + 7 + 5 + 4 + 6 + 2 + + + 1 + 1 + 1 + 14.13 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W3 + W2 + 0 + 0 + 0 + -3 + + 13 + 16 + 15 + 31 + 31 + 10 + 16 + 9 + 15 + 6 + 15 + 10 + 0 + 5 + 9 + 31 + 8 + 10 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 75 + 91 + 47 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Harmonica4 + 6 + + + SEVENTH + 0 + + TRIANGL + 31 + 0 + 11 + 0 + off + + + 4 + 1 + on + on + on + on + 7 + 3 + 3 + 7 + 5 + 2 + 5 + 2 + + + 1 + 0.5 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W4 + W1 + W1 + 0 + 0 + 0 + -3 + + 13 + 31 + 15 + 31 + 31 + 31 + 16 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 9 + 0 + 8 + 7 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 59 + 90 + 42 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Harmonica5 + 7 + + + + Oboe + 10 + + THIRD + 4 + + TRIANGL + 35 + 11 + 8 + 10 + off + + + 5 + 1 + on + on + on + on + 7 + 0 + 7 + 0 + 0 + 0 + 0 + 0 + + + 2 + 0.5 + 3 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 9 + 15 + 14 + 11 + 15 + 13 + 24 + 17 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 9 + 8 + 8 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 84 + 64 + 80 + 99 + + 3 + 3 + 3 + 3 + 0 + 18 + 99 + 99 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 24 + 30 + 50 + 99 + 0 + 0 + 0 + 0 + 0 + + BC1 Oboe + 0 + + + FIFTH + 0 + + TRIANGL + 34 + 20 + 25 + 27 + off + + + 3 + 2 + off + on + off + on + 0 + 0 + 0 + 0 + 1 + 2 + 1 + 3 + + + 3 + 2 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 3 + -3 + -3 + + 15 + 31 + 16 + 28 + 7 + 10 + 7 + 10 + 15 + 13 + 15 + 12 + 0 + 0 + 0 + 0 + 10 + 2 + 10 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 58 + 99 + 51 + + 1 + 0 + 1 + 0 + 9 + 34 + 8 + 35 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Oboe * + 1 + + + THIRD + 0 + + TRIANGL + 31 + 17 + 8 + 14 + off + + + 5 + 3 + off + on + off + off + 0 + 0 + 0 + 0 + 3 + 1 + 2 + 1 + + + 2 + 0.5 + 2 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W3 + W3 + 0 + 0 + 0 + 0 + + 15 + 18 + 16 + 16 + 26 + 20 + 10 + 18 + 14 + 14 + 13 + 13 + 0 + 0 + 0 + 0 + 10 + 5 + 6 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 89 + 91 + 75 + 81 + + 1 + 0 + 3 + 0 + 6 + 35 + 48 + 5 + + + 12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 40 + 25 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Oboe1 + 2 + + + FOURTH + 0 + + TRIANGL + 31 + 10 + 15 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 1 + 1 + 2 + + + 3 + 1 + 2 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W4 + W3 + 0 + 0 + 0 + 0 + + 18 + 31 + 21 + 20 + 31 + 31 + 20 + 18 + 15 + 15 + 10 + 10 + 0 + 0 + 0 + 0 + 11 + 3 + 5 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 78 + 60 + 83 + + 1 + 1 + 1 + 1 + 6 + 0 + 9 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Oboe2 + 3 + + + SIXTH + 1 + + TRIANGL + 34 + 7 + 12 + 67 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 4 + 2 + + + 1 + 1 + 5 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -1 + 0 + 1 + 3 + + 16 + 16 + 15 + 27 + 4 + 4 + 4 + 4 + 12 + 12 + 12 + 12 + 6 + 6 + 6 + 6 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 91 + 77 + 80 + 77 + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Oboe.....1 + 4 + + + FIFTH + 6 + + TRIANGL + 34 + 7 + 12 + 67 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 4 + 5 + 1 + + + 2 + 1 + 2 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -1 + 0 + 1 + 3 + + 16 + 16 + 15 + 27 + 4 + 4 + 4 + 4 + 12 + 12 + 12 + 12 + 6 + 6 + 6 + 6 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 69 + 95 + 70 + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Oboe.....2 + 5 + + + FIFTH + 6 + + TRIANGL + 34 + 7 + 12 + 67 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + + + 3 + 1 + 2 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -1 + 0 + 1 + 3 + + 16 + 16 + 15 + 27 + 4 + 4 + 4 + 4 + 12 + 12 + 12 + 12 + 6 + 6 + 6 + 6 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 69 + 95 + 70 + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Oboe.....2* + 6 + + + THIRD + 6 + + TRIANGL + 35 + 37 + 8 + 30 + on + + + 5 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 4 + 3 + 5 + 1 + + + 3 + 0.5 + 3 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W4 + W1 + 0 + 1 + 0 + 1 + + 9 + 15 + 13 + 12 + 15 + 13 + 24 + 17 + 15 + 15 + 0 + 15 + 0 + 0 + 0 + 0 + 9 + 8 + 8 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 80 + 71 + 73 + 85 + + 3 + 3 + 3 + 1 + 0 + 18 + 99 + 99 + + + 0 + POLY + 2 + FINGER + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Oboe.....3 + 7 + + + THIRD + 0 + + TRIANGL + 34 + 10 + 17 + 30 + on + + + 3 + 1 + off + on + on + off + 0 + 0 + 0 + 0 + 4 + 2 + 4 + 4 + + + 3 + 14 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 22 + 20 + 30 + 31 + 6 + 8 + 12 + 16 + 11 + 11 + 11 + 11 + 1 + 7 + 4 + 2 + 9 + 7 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 53 + 80 + 73 + + 0 + 1 + 1 + 1 + 10 + 66 + 66 + 27 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Ornt Oboe + 8 + + + + Ocarina + 11 + + FIFTH + 7 + + TRIANGL + 46 + 39 + 7 + 54 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 5 + 6 + 4 + + + 4 + 4 + 4 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -1 + 0 + 0 + + 18 + 19 + 19 + 31 + 3 + 3 + 29 + 3 + 14 + 3 + 15 + 15 + 31 + 15 + 0 + 24 + 9 + 6 + 10 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 49 + 93 + 99 + + 2 + 2 + 1 + 1 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Ocarina + 0 + + + + Piccolo + 12 + + FIFTH + 7 + + TRIANGL + 33 + 13 + 14 + 33 + off + + + 4 + 2 + off + on + off + on + 0 + 0 + 0 + 0 + 1 + 0 + 2 + 0 + + + 6 + 6 + 5.99 + 11.89 + no + no + no + no + 8 + 8 + 12 + 15 + + W1 + W1 + W1 + W2 + -2 + 3 + -3 + 3 + + 16 + 12 + 14 + 25 + 19 + 18 + 19 + 18 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 9 + 5 + 9 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 60 + 99 + 49 + + 1 + 0 + 1 + 0 + 11 + 19 + 10 + 44 + + + -7 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Piccolo * + 0 + + + SEVENTH + 0 + + TRIANGL + 40 + 41 + 0 + 0 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 6 + 6 + + + 2 + 2 + 2 + 5.65 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W3 + 0 + 0 + 0 + 0 + + 16 + 21 + 15 + 31 + 6 + 3 + 4 + 21 + 9 + 8 + 9 + 9 + 4 + 4 + 5 + 4 + 10 + 10 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 50 + + 0 + 0 + 0 + 0 + 0 + 71 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Piccolo..1 + 1 + + + SEVENTH + 0 + + TRIANGL + 40 + 34 + 7 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 0 + + + 2 + 2 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W3 + W1 + 0 + 0 + 0 + 0 + + 18 + 18 + 18 + 31 + 18 + 4 + 9 + 31 + 14 + 14 + 14 + 14 + 15 + 12 + 9 + 31 + 10 + 10 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 44 + + 0 + 0 + 0 + 0 + 0 + 71 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Piccolo..2 + 2 + + + SEVENTH + 0 + + TRIANGL + 40 + 34 + 7 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 1 + 3 + 0 + + + 1 + 4 + 4 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W3 + W1 + 0 + 0 + 0 + 0 + + 18 + 18 + 18 + 31 + 18 + 4 + 9 + 31 + 14 + 14 + 14 + 14 + 15 + 12 + 9 + 31 + 10 + 10 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 44 + + 0 + 0 + 0 + 0 + 0 + 71 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Piccolo..2* + 3 + + + SEVENTH + 0 + + TRIANGL + 40 + 41 + 0 + 0 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 4 + 4 + 4 + + + 4 + 4 + 4 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W3 + W1 + 0 + 0 + 0 + 0 + + 18 + 18 + 18 + 18 + 5 + 5 + 5 + 5 + 14 + 14 + 14 + 14 + 5 + 5 + 5 + 5 + 10 + 10 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 88 + 80 + 82 + 74 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Piccolo..3 + 4 + + + + Recorder + 13 + + FIFTH + 6 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 3 + + + 1 + 2 + 1 + 7 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 18 + 18 + 18 + 19 + 22 + 22 + 18 + 24 + 6 + 7 + 13 + 12 + 15 + 18 + 0 + 0 + 9 + 10 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 81 + 99 + 78 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntRecord + 0 + + + THIRD + 7 + + TRIANGL + 27 + 4 + 15 + 6 + off + + + 4 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 3 + 2 + 4 + 4 + + + 1 + 3 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -3 + 0 + 3 + + 17 + 20 + 20 + 20 + 8 + 0 + 31 + 10 + 14 + 15 + 15 + 10 + 0 + 0 + 15 + 0 + 11 + 3 + 8 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 45 + 50 + 54 + + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 67 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Recorder1 + 1 + + + THIRD + 7 + + TRIANGL + 27 + 4 + 15 + 6 + off + + + 4 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 3 + 2 + 4 + 4 + + + 1 + 4 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -3 + 0 + 3 + + 17 + 20 + 20 + 20 + 8 + 0 + 31 + 10 + 14 + 15 + 15 + 10 + 0 + 0 + 15 + 0 + 11 + 3 + 8 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 45 + 50 + 54 + + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 67 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Recorder2 + 2 + + + SEVENTH + 5 + + TRIANGL + 37 + 42 + 38 + 54 + off + + + 1 + 1 + off + on + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 1 + + + 1 + 1 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 15 + 15 + 15 + 24 + 0 + 0 + 0 + 31 + 13 + 13 + 13 + 14 + 3 + 3 + 3 + 22 + 10 + 10 + 10 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 97 + 97 + 93 + + 1 + 1 + 1 + 3 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Recorder.1 + 3 + + + SIXTH + 0 + + TRIANGL + 32 + 42 + 21 + 67 + on + + + 2 + 1 + off + off + on + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 3 + + + 2 + 2 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 15 + 13 + 13 + 24 + 18 + 10 + 21 + 31 + 12 + 0 + 12 + 14 + 7 + 6 + 7 + 16 + 9 + 10 + 9 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 99 + 99 + 0 + + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Recorder.2 + 4 + + + SEVENTH + 6 + + TRIANGL + 32 + 42 + 21 + 67 + on + + + 2 + 1 + off + off + on + off + 0 + 0 + 0 + 0 + 5 + 6 + 5 + 1 + + + 2 + 2 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 16 + 19 + 16 + 24 + 3 + 29 + 3 + 28 + 13 + 14 + 13 + 14 + 3 + 21 + 3 + 21 + 10 + 12 + 10 + 12 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 63 + + 1 + 0 + 1 + 3 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Recorder.3 + 5 + + + SEVENTH + 6 + + TRIANGL + 32 + 42 + 21 + 67 + on + + + 2 + 1 + off + off + on + off + 0 + 0 + 0 + 0 + 7 + 5 + 6 + 1 + + + 1 + 2 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 16 + 19 + 16 + 24 + 3 + 29 + 3 + 28 + 13 + 14 + 13 + 14 + 3 + 21 + 3 + 21 + 10 + 12 + 10 + 12 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 63 + + 1 + 0 + 1 + 3 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Recorder.4 + 6 + + + SEVENTH + 5 + + TRIANGL + 33 + 42 + 0 + 0 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + + + 0.5 + 1 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W4 + 0 + 0 + 0 + 0 + + 16 + 16 + 15 + 24 + 31 + 15 + 9 + 29 + 15 + 15 + 4 + 15 + 3 + 10 + 10 + 21 + 9 + 10 + 12 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 98 + 94 + 94 + + 1 + 1 + 1 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Recorder.5 + 7 + + + + Saxophone + 14 + + FIRST + 7 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 3 + 1 + 0 + + + 0.5 + 2 + 5.65 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W2 + W1 + W1 + 0 + 0 + 0 + 0 + + 15 + 12 + 17 + 15 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 8 + 9 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 68 + 55 + 82 + + 0 + 3 + 0 + 3 + 0 + 58 + 0 + 49 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Alto Sax + 0 + + + FIRST + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 4 + 0 + off + off + off + off + 7 + 4 + 3 + 4 + 5 + 5 + 5 + 5 + + + 1 + 0.5 + 5.65 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 1 + 1 + + 15 + 12 + 17 + 15 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 8 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 73 + 53 + 99 + + 0 + 3 + 0 + 3 + 0 + 58 + 0 + 49 + + + 0 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 10 + 86 + 50 + 99 + 0 + 0 + 0 + 0 + 0 + + BC1 AltSax + 1 + + + THIRD + 7 + + TRIANGL + 33 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 7 + 4 + 3 + 4 + 0 + 0 + 0 + 0 + + + 1 + 0.5 + 5.65 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 3 + 0 + + 16 + 16 + 16 + 16 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 9 + 9 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 66 + 48 + 68 + + 0 + 0 + 0 + 0 + 0 + 42 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 99 + 0 + 0 + 0 + 0 + 0 + + <BC1> Sax + 2 + + + THIRD + 7 + + TRIANGL + 30 + 23 + 12 + 0 + off + + + 5 + 0 + off + off + off + off + 7 + 0 + 0 + 0 + 3 + 1 + 1 + 1 + + + 2 + 1 + 12.72 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -3 + 0 + -2 + + 16 + 29 + 29 + 29 + 31 + 31 + 15 + 4 + 15 + 15 + 10 + 14 + 0 + 0 + 0 + 0 + 10 + 3 + 8 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 75 + 70 + 81 + + 1 + 1 + 1 + 1 + 0 + 17 + 0 + 0 + + + 0 + MONO + 2 + FINGER + 15 + POR + 99 + 0 + 0 + 50 + 1 + 0 + 0 + 50 + 99 + 0 + 0 + 0 + 0 + 0 + + BCSexyPhon + 3 + + + THIRD + 7 + + TRIANGL + 30 + 9 + 2 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 3 + 3 + 7 + 2 + 2 + 2 + 1 + + + 0.5 + 0.5 + 5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W4 + W3 + 0 + -3 + 0 + 3 + + 22 + 31 + 31 + 31 + 27 + 11 + 18 + 10 + 15 + 10 + 13 + 14 + 0 + 0 + 0 + 0 + 10 + 10 + 10 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 70 + 76 + 82 + + 1 + 1 + 1 + 1 + 0 + 28 + 9 + 13 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 11 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ElectroSax + 4 + + + FIFTH + 7 + + TRIANGL + 41 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 4 + + + 1 + 1 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W2 + W2 + 0 + 3 + 0 + 0 + + 24 + 18 + 27 + 31 + 31 + 12 + 31 + 13 + 15 + 15 + 15 + 15 + 0 + 6 + 4 + 0 + 12 + 9 + 12 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 92 + 92 + 64 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 12 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + GreatDXled + 5 + + + THIRD + 7 + + TRIANGL + 30 + 17 + 11 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 3 + 1 + + + 2 + 1 + 11 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W4 + W2 + W4 + 0 + 0 + 0 + 0 + + 16 + 15 + 16 + 17 + 31 + 31 + 14 + 4 + 15 + 15 + 12 + 14 + 0 + 0 + 0 + 0 + 10 + 3 + 8 + 6 + VOF + V24 + V24 + V12 + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 68 + 76 + + 1 + 1 + 2 + 1 + 0 + 52 + 99 + 51 + + + -12 + POLY + 4 + FINGER + 0 + POR + 99 + 0 + 0 + 50 + 2 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + MelloTenor + 6 + + + THIRD + 7 + + TRIANGL + 30 + 9 + 9 + 0 + off + + + 5 + 2 + on + on + on + on + 0 + 0 + 0 + 0 + 2 + 3 + 2 + 2 + + + 1 + 0.5 + 7.25 + 0.5 + no + no + no + no + 8 + 8 + 12 + 8 + + W3 + W3 + W6 + W2 + 0 + 0 + 3 + 0 + + 16 + 17 + 17 + 16 + 31 + 31 + 9 + 31 + 15 + 15 + 13 + 15 + 0 + 0 + 0 + 0 + 9 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 43 + 74 + + 1 + 0 + 0 + 0 + 0 + 10 + 0 + 0 + + + 12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 49 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + RaspAlto + 7 + + + THIRD + 6 + + TRIANGL + 32 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 4 + 4 + 3 + + + 1 + 1 + 3 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W7 + W1 + 0 + 0 + 0 + 0 + + 20 + 16 + 18 + 20 + 31 + 12 + 19 + 8 + 15 + 10 + 11 + 10 + 0 + 0 + 0 + 0 + 10 + 9 + 6 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 69 + 80 + 73 + + 1 + 1 + 1 + 1 + 0 + 33 + 27 + 23 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sax 1 + 8 + + + THIRD + 6 + + TRIANGL + 32 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 4 + 4 + 3 + + + 2 + 1 + 4.24 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W6 + W2 + W7 + W1 + 0 + 0 + 0 + 0 + + 18 + 17 + 21 + 16 + 19 + 15 + 19 + 8 + 10 + 10 + 9 + 10 + 0 + 0 + 0 + 0 + 10 + 9 + 6 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 78 + 65 + 73 + + 1 + 1 + 1 + 1 + 0 + 15 + 0 + 44 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sax 2 + 9 + + + FIRST + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 4 + 0 + off + off + off + off + 7 + 4 + 3 + 0 + 6 + 6 + 5 + 3 + + + 1 + 0.5 + 6 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + 0 + 0 + 1 + 1 + + 17 + 10 + 10 + 16 + 31 + 31 + 31 + 6 + 15 + 15 + 15 + 3 + 0 + 0 + 0 + 18 + 8 + 8 + 8 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 89 + 41 + 99 + + 0 + 3 + 0 + 1 + 0 + 58 + 0 + 49 + + + 0 + POLY + 5 + FULL + 1 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sax Synth + 10 + + + SECOND + 7 + + TRIANGL + 30 + 17 + 11 + 0 + off + + + 4 + 2 + off + off + on + on + 0 + 0 + 4 + 4 + 2 + 2 + 3 + 1 + + + 2 + 1 + 11 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W4 + W2 + W4 + 0 + 0 + 0 + 0 + + 24 + 15 + 12 + 10 + 31 + 31 + 14 + 4 + 15 + 15 + 12 + 14 + 0 + 0 + 0 + 0 + 10 + 3 + 8 + 6 + VOF + VOF + V12 + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 84 + 77 + 69 + + 1 + 1 + 1 + 1 + 0 + 54 + 15 + 29 + + + -12 + POLY + 2 + FINGER + 0 + POR + 99 + 0 + 0 + 50 + 4 + 0 + 0 + 50 + 35 + 0 + 0 + 0 + 0 + 0 + + Saxophone* + 11 + + + FOURTH + 7 + + TRIANGL + 34 + 11 + 7 + 0 + on + + + 4 + 0 + off + off + off + off + 7 + 4 + 3 + 0 + 4 + 2 + 5 + 1 + + + 1 + 1 + 5.99 + 0.5 + no + no + no + no + 8 + 8 + 12 + 8 + + W2 + W3 + W5 + W1 + 0 + 0 + 3 + 0 + + 17 + 18 + 16 + 31 + 3 + 7 + 4 + 3 + 15 + 15 + 15 + 15 + 3 + 4 + 2 + 1 + 9 + 9 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 88 + 74 + 61 + 55 + + 0 + 0 + 0 + 0 + 0 + 42 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + Saxophone1 + 12 + + + FOURTH + 7 + + TRIANGL + 33 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 7 + 4 + 3 + 0 + 3 + 2 + 3 + 0 + + + 1 + 1 + 5.99 + 0.87 + no + no + no + no + 8 + 8 + 12 + 8 + + W2 + W5 + W2 + W1 + 0 + 0 + 3 + 0 + + 17 + 14 + 17 + 19 + 5 + 31 + 31 + 30 + 14 + 13 + 14 + 15 + 0 + 0 + 0 + 0 + 8 + 9 + 9 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 75 + 59 + 46 + + 0 + 0 + 0 + 0 + 0 + 42 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Saxophone2 + 13 + + + FOURTH + 7 + + TRIANGL + 33 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 7 + 4 + 3 + 0 + 0 + 2 + 3 + 0 + + + 1 + 0.5 + 5.65 + 0.87 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W5 + W1 + W1 + 0 + 0 + 3 + 0 + + 17 + 14 + 17 + 19 + 5 + 31 + 31 + 30 + 14 + 13 + 14 + 15 + 0 + 0 + 0 + 0 + 8 + 9 + 9 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 75 + 59 + 55 + + 0 + 0 + 0 + 0 + 0 + 42 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Saxophone3 + 14 + + + FOURTH + 7 + + TRIANGL + 33 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 7 + 4 + 3 + 0 + 5 + 3 + 5 + 0 + + + 1 + 1 + 5 + 1 + no + no + no + no + 8 + 8 + 11 + 8 + + W2 + W2 + W5 + W1 + 0 + 0 + 3 + 0 + + 16 + 15 + 31 + 20 + 30 + 31 + 3 + 3 + 14 + 13 + 14 + 15 + 0 + 0 + 0 + 1 + 8 + 9 + 9 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 79 + 61 + 65 + + 0 + 0 + 0 + 0 + 0 + 75 + 61 + 25 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Saxophone4 + 15 + + + FOURTH + 7 + + TRIANGL + 33 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 7 + 4 + 3 + 0 + 1 + 2 + 2 + 0 + + + 1 + 0.5 + 6.92 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W5 + W1 + 0 + 0 + 3 + 0 + + 16 + 15 + 31 + 20 + 30 + 31 + 3 + 3 + 14 + 13 + 14 + 15 + 0 + 0 + 0 + 1 + 8 + 9 + 9 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 79 + 61 + 65 + + 0 + 0 + 0 + 0 + 0 + 75 + 61 + 25 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Saxophone5 + 16 + + + FIRST + 7 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 4 + 0 + off + off + off + off + 7 + 4 + 3 + 0 + 4 + 5 + 4 + 2 + + + 0.5 + 0.5 + 5.99 + 1 + no + no + no + no + 8 + 8 + 12 + 8 + + W1 + W4 + W1 + W1 + 0 + 0 + 1 + 1 + + 15 + 12 + 17 + 15 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 8 + 7 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 66 + 61 + 82 + + 0 + 3 + 0 + 3 + 0 + 58 + 0 + 49 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + Saxophone6 + 17 + + + FIRST + 7 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 4 + 0 + off + off + off + off + 7 + 4 + 3 + 0 + 0 + 2 + 1 + 2 + + + 1 + 1 + 5.65 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W1 + W1 + 0 + 0 + 1 + 1 + + 15 + 12 + 17 + 15 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 8 + 7 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 66 + 61 + 82 + + 0 + 3 + 0 + 3 + 0 + 58 + 0 + 49 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + Saxophone7 + 18 + + + THIRD + 6 + + TRIANGL + 30 + 17 + 10 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 4 + 5 + 3 + + + 1 + 0.5 + 7.22 + 0.5 + no + no + no + no + 8 + 8 + 10 + 8 + + W4 + W4 + W5 + W2 + 0 + 0 + 0 + 0 + + 17 + 17 + 17 + 16 + 31 + 31 + 15 + 15 + 15 + 14 + 14 + 15 + 0 + 0 + 0 + 0 + 9 + 8 + 8 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 78 + 47 + 79 + + 0 + 1 + 0 + 0 + 0 + 20 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + Saxophone8 + 19 + + + FOURTH + 7 + + TRIANGL + 33 + 5 + 9 + 0 + on + + + 5 + 0 + off + off + off + off + 7 + 4 + 3 + 0 + 4 + 4 + 4 + 3 + + + 1 + 1 + 5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W5 + W3 + W5 + 0 + 0 + 0 + 0 + + 17 + 12 + 15 + 19 + 30 + 31 + 31 + 30 + 14 + 13 + 14 + 15 + 0 + 0 + 0 + 0 + 8 + 9 + 9 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 75 + 57 + 70 + + 0 + 0 + 0 + 0 + 0 + 42 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Saxophone9 + 20 + + + FOURTH + 7 + + TRIANGL + 33 + 5 + 9 + 0 + on + + + 5 + 0 + off + off + off + off + 7 + 4 + 3 + 0 + 0 + 1 + 1 + 0 + + + 1 + 0.5 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W3 + W1 + 0 + 0 + 0 + 0 + + 17 + 12 + 15 + 19 + 30 + 31 + 31 + 30 + 14 + 13 + 14 + 15 + 0 + 0 + 0 + 0 + 8 + 9 + 9 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 75 + 57 + 70 + + 0 + 0 + 0 + 0 + 0 + 42 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Saxophone10 + 21 + + + THIRD + 0 + + TRIANGL + 30 + 9 + 9 + 0 + off + + + 5 + 2 + on + on + on + on + 0 + 0 + 0 + 0 + 4 + 2 + 2 + 2 + + + 1 + 0.5 + 7 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W3 + W6 + W1 + 0 + 0 + 3 + 0 + + 17 + 19 + 17 + 16 + 31 + 31 + 9 + 31 + 15 + 15 + 8 + 15 + 0 + 0 + 0 + 0 + 9 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 88 + 30 + 44 + + 1 + 0 + 0 + 0 + 0 + 38 + 45 + 12 + + + 12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 49 + 18 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SopranoSax + 22 + + + + Trombone + 15 + + THIRD + 7 + + TRIANGL + 39 + 0 + 41 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 1 + + + 1 + 0.5 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W2 + W1 + 0 + 0 + 0 + 0 + + 18 + 21 + 22 + 15 + 31 + 31 + 25 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 18 + 0 + 8 + 8 + 9 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 44 + 84 + 74 + + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 0 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Mute Trmbn + 0 + + + THIRD + 7 + + TRIANGL + 29 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 2 + 3 + 3 + + + 1 + 1 + 3.18 + 1 + no + no + no + no + 8 + 8 + 11 + 8 + + W1 + W1 + W1 + W1 + 0 + 3 + 0 + 3 + + 14 + 12 + 31 + 11 + 7 + 10 + 8 + 10 + 13 + 13 + 13 + 13 + 0 + 0 + 0 + 0 + 8 + 6 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 83 + 42 + 78 + + 1 + 1 + 1 + 1 + 0 + 0 + 20 + 0 + + + -12 + POLY + 5 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Trombone * + 1 + + + THIRD + 7 + + TRIANGL + 32 + 9 + 3 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 3 + 2 + + + 0.5 + 0.5 + 1.57 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W2 + W1 + 0 + 0 + 0 + 0 + + 15 + 16 + 16 + 14 + 24 + 12 + 17 + 11 + 15 + 10 + 5 + 14 + 0 + 0 + 0 + 0 + 11 + 10 + 10 + 9 + VOF + VOF + VOF + VOF + + + 99 + 82 + 99 + 50 + 50 + 50 + + 99 + 71 + 71 + 80 + + 1 + 1 + 1 + 1 + 0 + 28 + 9 + 15 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Trombone1 + 2 + + + THIRD + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 1 + 3.14 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + 0 + 0 + 0 + + 19 + 15 + 31 + 15 + 31 + 31 + 14 + 31 + 15 + 15 + 0 + 15 + 0 + 0 + 0 + 0 + 8 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 46 + 82 + 66 + + 0 + 0 + 2 + 0 + 0 + 0 + 1 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Trombone2 + 3 + + + THIRD + 6 + + TRIANGL + 39 + 0 + 41 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 1 + + + 1 + 1 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 18 + 21 + 20 + 15 + 31 + 31 + 14 + 31 + 15 + 15 + 0 + 15 + 0 + 0 + 0 + 0 + 8 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 54 + 87 + 82 + + 0 + 0 + 2 + 0 + 0 + 0 + 1 + 0 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Trombone.1 + 4 + + + THIRD + 7 + + TRIANGL + 39 + 0 + 41 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 4 + 6 + 1 + + + 1 + 1 + 3.14 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W2 + W1 + 0 + 0 + 0 + 0 + + 18 + 21 + 15 + 15 + 31 + 31 + 16 + 31 + 15 + 15 + 6 + 15 + 0 + 0 + 5 + 0 + 8 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 43 + 80 + 79 + + 0 + 0 + 2 + 0 + 0 + 0 + 1 + 0 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Trombone.2 + 5 + + + + Trumpet + 16 + + THIRD + 0 + + TRIANGL + 35 + 25 + 6 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 5 + 4 + 5 + + + 1.5 + 1.49 + 3.12 + 1.5 + no + no + no + no + 16 + 9 + 10 + 16 + + W1 + W4 + W1 + W4 + 0 + 3 + 1 + -3 + + 16 + 16 + 15 + 16 + 31 + 31 + 16 + 5 + 15 + 15 + 0 + 11 + 0 + 0 + 0 + 0 + 7 + 7 + 12 + 8 + VOF + VOF + V24 + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 84 + 45 + 88 + + 1 + 1 + 1 + 1 + 0 + 15 + 26 + 15 + + + -7 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 29 + 0 + 8 + 39 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + 2 Trumpets + 0 + + + THIRD + 7 + + TRIANGL + 35 + 19 + 4 + 0 + off + + + 6 + 0 + off + off + off + off + 4 + 4 + 7 + 7 + 0 + 0 + 0 + 0 + + + 1 + 1 + 3.14 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 18 + 14 + 16 + 16 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 9 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 60 + 36 + 72 + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 99 + 0 + 0 + 0 + 0 + 0 + + BC1Trumpet + 1 + + + THIRD + 5 + + TRIANGL + 35 + 19 + 4 + 0 + off + + + 6 + 0 + off + off + off + off + 4 + 4 + 7 + 7 + 6 + 5 + 5 + 5 + + + 1 + 1 + 3.14 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 18 + 14 + 16 + 16 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 9 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 66 + 32 + 73 + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 3 + 3 + 50 + 99 + 0 + 0 + 0 + 0 + 0 + + BC1 Trumpt + 2 + + + FIFTH + 7 + + TRIANGL + 31 + 0 + 6 + 0 + on + + + 4 + 2 + off + off + off + on + 0 + 0 + 0 + 0 + 3 + 0 + 3 + 0 + + + 1.5 + 1.5 + 1.5 + 1.49 + no + no + no + no + 16 + 16 + 16 + 97 + + W5 + W4 + W1 + W1 + 3 + -3 + 3 + -3 + + 15 + 12 + 15 + 31 + 8 + 8 + 7 + 6 + 15 + 15 + 14 + 15 + 4 + 7 + 3 + 6 + 5 + 5 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 99 + 72 + + 0 + 0 + 0 + 0 + 0 + 5 + 8 + 0 + + + -7 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + FanfarTpts + 3 + + + THIRD + 3 + + TRIANGL + 34 + 35 + 5 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 1 + + + 2 + 2 + 3 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W3 + 1 + 1 + 1 + -3 + + 18 + 21 + 15 + 15 + 7 + 27 + 16 + 10 + 15 + 10 + 9 + 13 + 9 + 7 + 7 + 8 + 9 + 8 + 7 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 67 + 54 + 76 + + 1 + 2 + 2 + 0 + 0 + 0 + 2 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Mute Trmpt + 4 + + + FOURTH + 7 + + TRIANGL + 36 + 0 + 12 + 0 + on + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 5 + 2 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 18 + 18 + 19 + 17 + 16 + 16 + 22 + 5 + 15 + 13 + 9 + 13 + 6 + 6 + 6 + 6 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 74 + 50 + + 1 + 1 + 2 + 0 + 1 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Ornt Trmpt + 5 + + + SIXTH + 7 + + TRIANGL + 99 + 0 + 14 + 0 + off + + + 4 + 2 + off + off + off + on + 2 + 5 + 5 + 2 + 2 + 2 + 2 + 3 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -1 + 0 + 1 + -3 + + 21 + 21 + 21 + 16 + 31 + 31 + 31 + 9 + 15 + 15 + 15 + 14 + 0 + 0 + 0 + 0 + 9 + 9 + 9 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 82 + + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 72 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Trumpet * + 6 + + + THIRD + 0 + + TRIANGL + 28 + 25 + 0 + 0 + off + + + 5 + 3 + on + off + off + off + 0 + 0 + 0 + 0 + 2 + 3 + 2 + 2 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + 0 + 0 + 0 + + 16 + 25 + 18 + 12 + 31 + 31 + 11 + 5 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 9 + 7 + 1 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 71 + 58 + 73 + + 1 + 0 + 0 + 0 + 0 + 11 + 13 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 11 + 0 + 0 + 25 + 50 + 99 + 0 + 0 + 0 + 0 + 5 + + Trumpet + 7 + + + THIRD + 7 + + TRIANGL + 35 + 19 + 4 + 0 + off + + + 6 + 0 + off + off + off + off + 4 + 4 + 7 + 7 + 0 + 0 + 0 + 0 + + + 1 + 1 + 3.14 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 18 + 14 + 16 + 16 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 9 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 60 + 36 + 72 + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Trumpet + 8 + + + THIRD + 7 + + TRIANGL + 31 + 9 + 4 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 3 + 1 + + + 1 + 1 + 1.57 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W6 + W4 + W4 + W1 + 0 + 0 + 0 + 0 + + 20 + 19 + 16 + 18 + 24 + 14 + 15 + 16 + 15 + 10 + 5 + 10 + 0 + 0 + 0 + 0 + 11 + 10 + 10 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 67 + 64 + 78 + + 1 + 1 + 1 + 1 + 0 + 28 + 9 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 19 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Trumpet 1 + 9 + + + THIRD + 7 + + TRIANGL + 32 + 20 + 26 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 1 + 7 + 1 + + + 1 + 1 + 0.87 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 19 + 12 + 12 + 16 + 9 + 14 + 12 + 14 + 15 + 14 + 0 + 14 + 0 + 0 + 0 + 0 + 10 + 3 + 9 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 64 + 51 + 78 + + 0 + 0 + 0 + 0 + 18 + 40 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 60 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Trumpet 2 + 10 + + + THIRD + 7 + + TRIANGL + 32 + 20 + 26 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 1 + 7 + 1 + + + 1 + 1 + 0.87 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 17 + 10 + 10 + 14 + 8 + 13 + 11 + 13 + 15 + 14 + 0 + 14 + 0 + 0 + 0 + 0 + 10 + 3 + 9 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 64 + 51 + 78 + + 0 + 0 + 0 + 0 + 18 + 40 + 0 + 0 + + + 12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Trumpet 3 + 11 + + + THIRD + 7 + + TRIANGL + 29 + 30 + 15 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 6 + 6 + 2 + + + 1 + 2.05 + 1 + 1 + no + no + no + no + 8 + 11 + 8 + 8 + + W3 + W1 + W3 + W1 + 1 + 0 + 0 + -1 + + 18 + 15 + 15 + 15 + 7 + 15 + 7 + 10 + 13 + 0 + 11 + 15 + 5 + 5 + 9 + 7 + 10 + 10 + 7 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 70 + 66 + 80 + + 0 + 2 + 1 + 1 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Trumpet..1 + 12 + + + THIRD + 7 + + TRIANGL + 29 + 30 + 15 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 2 + + + 1 + 1.73 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W1 + W3 + W1 + 1 + 0 + 0 + -1 + + 18 + 15 + 15 + 15 + 7 + 15 + 7 + 10 + 13 + 0 + 11 + 15 + 5 + 5 + 9 + 7 + 10 + 10 + 7 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 70 + 66 + 80 + + 0 + 2 + 1 + 1 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Trumpet..1* + 13 + + + THIRD + 7 + + TRIANGL + 35 + 30 + 23 + 16 + off + + + 3 + 1 + off + off + off + on + 0 + 0 + 0 + 0 + 6 + 4 + 6 + 1 + + + 1 + 1 + 3.14 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W1 + W1 + W1 + 1 + 0 + 0 + -1 + + 18 + 15 + 15 + 15 + 7 + 15 + 16 + 10 + 13 + 0 + 14 + 15 + 5 + 5 + 6 + 7 + 10 + 10 + 7 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 65 + 70 + 78 + + 0 + 2 + 1 + 1 + 0 + 0 + 2 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Trumpet..2 + 14 + + + THIRD + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 6 + 2 + + + 1 + 1 + 4 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W3 + W1 + W1 + 1 + 2 + -2 + -1 + + 19 + 21 + 15 + 15 + 7 + 28 + 16 + 10 + 13 + 12 + 14 + 13 + 6 + 6 + 6 + 6 + 9 + 8 + 9 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 79 + 73 + 89 + + 0 + 2 + 1 + 1 + 0 + 0 + 2 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Trumpet..3 + 15 + + + THIRD + 7 + + TRIANGL + 34 + 0 + 8 + 46 + off + + + 4 + 1 + off + off + off + on + 0 + 0 + 0 + 0 + 7 + 3 + 6 + 2 + + + 1 + 1 + 5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W1 + W1 + 1 + 0 + -1 + -1 + + 19 + 21 + 15 + 15 + 7 + 28 + 3 + 10 + 13 + 12 + 9 + 13 + 6 + 6 + 6 + 6 + 9 + 8 + 7 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 49 + 83 + + 0 + 2 + 1 + 1 + 0 + 0 + 2 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Trumpet..4 + 16 + + + THIRD + 5 + + TRIANGL + 34 + 35 + 5 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 6 + 2 + + + 1 + 1 + 1.73 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W3 + W1 + W1 + 1 + 0 + -1 + -1 + + 21 + 21 + 15 + 12 + 7 + 28 + 3 + 10 + 13 + 12 + 9 + 13 + 6 + 6 + 6 + 6 + 9 + 8 + 7 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 70 + 52 + 77 + + 0 + 2 + 1 + 1 + 0 + 0 + 2 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Trumpet..5 + 17 + + + THIRD + 7 + + TRIANGL + 30 + 25 + 5 + 0 + off + + + 5 + 0 + off + off + off + off + 4 + 4 + 7 + 7 + 2 + 2 + 3 + 2 + + + 1 + 1 + 2.9 + 1 + no + no + no + no + 8 + 8 + 9 + 8 + + W1 + W6 + W6 + W1 + 0 + 0 + 0 + 0 + + 18 + 14 + 15 + 15 + 31 + 31 + 26 + 31 + 15 + 15 + 13 + 15 + 0 + 0 + 11 + 4 + 8 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 75 + 54 + 81 + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Trumpet81Z + 18 + + + FOURTH + 7 + + TRIANGL + 29 + 3 + 15 + 1 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 1 + 0 + 0 + + + 1.5 + 1.49 + 1.51 + 3.23 + no + no + no + no + 16 + 9 + 14 + 9 + + W1 + W2 + W1 + W7 + 0 + -3 + 3 + 3 + + 19 + 15 + 17 + 19 + 31 + 31 + 14 + 0 + 15 + 15 + 9 + 15 + 1 + 3 + 6 + 0 + 8 + 10 + 10 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 93 + 54 + 58 + + 0 + 0 + 0 + 0 + 0 + 5 + 8 + 0 + + + -7 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 7 + + TrumptSolo + 19 + + + THIRD + 7 + + TRIANGL + 30 + 19 + 4 + 0 + off + + + 4 + 0 + off + off + off + off + 4 + 4 + 7 + 7 + 2 + 2 + 3 + 2 + + + 1 + 1 + 3.14 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 18 + 14 + 16 + 15 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 11 + 4 + 9 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 75 + 47 + 82 + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + Trumpet V + 20 + + + + Tuba + 17 + + FOURTH + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 3 + + + 1 + 0.5 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W1 + W3 + W1 + 0 + 0 + 0 + 0 + + 14 + 20 + 15 + 31 + 15 + 13 + 16 + 15 + 15 + 9 + 9 + 13 + 3 + 2 + 3 + 5 + 8 + 7 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 72 + 72 + 76 + + 0 + 0 + 0 + 0 + 20 + 89 + 70 + 69 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 1 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + << Tuba >> + 0 + + + THIRD + 7 + + TRIANGL + 31 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 1 + 1 + 1 + + + 0.5 + 0.5 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W2 + W1 + 0 + 0 + 0 + 0 + + 16 + 16 + 16 + 15 + 10 + 10 + 12 + 15 + 10 + 10 + 11 + 9 + 0 + 0 + 0 + 0 + 11 + 6 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 71 + 69 + 82 + + 0 + 0 + 0 + 0 + 14 + 0 + 0 + 21 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Tuba + 1 + + + + Whistle + 18 + + SIXTH + 0 + + TRIANGL + 32 + 22 + 21 + 67 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 2 + 2 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -1 + -3 + 0 + + 12 + 11 + 10 + 31 + 15 + 16 + 15 + 31 + 14 + 14 + 0 + 15 + 0 + 0 + 28 + 0 + 9 + 9 + 9 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 0 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 12 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Whistle * + 0 + + + SEVENTH + 7 + + TRIANGL + 37 + 11 + 38 + 99 + off + + + 3 + 1 + off + on + on + off + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 3 + + + 2 + 2 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 19 + 19 + 19 + 19 + 6 + 6 + 6 + 28 + 13 + 13 + 13 + 14 + 3 + 3 + 3 + 21 + 10 + 10 + 10 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 0 + 0 + 0 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Whistle..1 + 1 + + + EIGHTH + 2 + + TRIANGL + 34 + 0 + 20 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 4 + 5 + + + 4 + 4 + 4 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -1 + 0 + 2 + + 7 + 8 + 7 + 8 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 2 + 2 + 2 + 7 + 5 + 5 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 62 + 60 + 98 + + 3 + 0 + 1 + 0 + 0 + 0 + 78 + 71 + + + -12 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + Whistle..2 + 2 + + + FIFTH + 7 + + TRIANGL + 35 + 9 + 11 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 6 + 3 + + + 2 + 1 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W3 + W1 + W1 + 0 + 0 + 0 + 0 + + 13 + 25 + 15 + 31 + 8 + 16 + 9 + 15 + 14 + 8 + 15 + 0 + 0 + 0 + 0 + 0 + 9 + 9 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 66 + 93 + 66 + + 0 + 0 + 0 + 0 + 26 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 51 + 0 + 0 + 0 + 0 + 0 + 0 + + Whistle..3 + 3 + + + FIFTH + 7 + + TRIANGL + 35 + 3 + 15 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 2 + 4 + + + 2 + 0.71 + 2 + 1.73 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 13 + 25 + 15 + 31 + 8 + 16 + 9 + 15 + 14 + 8 + 15 + 0 + 0 + 0 + 0 + 0 + 9 + 9 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 56 + 78 + 78 + + 0 + 0 + 0 + 0 + 26 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 51 + 0 + 0 + 0 + 0 + 0 + 0 + + Whistling + 4 + + + + + STRINGS + 2 + + Strings + 0 + + FIFTH + 5 + + TRIANGL + 38 + 33 + 32 + 71 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 0 + 5 + 4 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W2 + W5 + 0 + 1 + -3 + -3 + + 13 + 14 + 12 + 13 + 4 + 5 + 10 + 10 + 12 + 12 + 14 + 14 + 18 + 18 + 0 + 0 + 8 + 8 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 79 + 99 + 81 + + 0 + 0 + 0 + 1 + 20 + 0 + 7 + 40 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgStr..1 + 0 + + + FIFTH + 6 + + TRIANGL + 38 + 33 + 17 + 71 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 1 + 4 + 2 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W4 + W3 + W6 + -1 + 1 + -3 + -3 + + 11 + 13 + 13 + 14 + 9 + 12 + 9 + 10 + 14 + 14 + 15 + 14 + 0 + 1 + 0 + 0 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 77 + 91 + 73 + + 0 + 0 + 0 + 1 + 20 + 0 + 5 + 30 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgStr..2 + 1 + + + FIFTH + 5 + + TRIANGL + 38 + 33 + 22 + 59 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 2 + 4 + 2 + + + 2 + 2 + 2 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W1 + W1 + W3 + 0 + 1 + 0 + 0 + + 11 + 14 + 13 + 13 + 10 + 10 + 10 + 9 + 13 + 14 + 15 + 14 + 1 + 1 + 2 + 3 + 5 + 4 + 5 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 75 + 89 + 57 + + 1 + 0 + 0 + 1 + 20 + 0 + 10 + 40 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgStr..3 + 2 + + + SIXTH + 5 + + TRIANGL + 34 + 10 + 10 + 8 + off + + + 2 + 1 + off + on + off + on + 0 + 0 + 0 + 0 + 3 + 4 + 5 + 2 + + + 1.32 + 2 + 4 + 4 + no + no + no + no + 15 + 8 + 8 + 8 + + W2 + W3 + W1 + W4 + 1 + 1 + 1 + -1 + + 11 + 13 + 12 + 31 + 31 + 7 + 31 + 19 + 15 + 6 + 15 + 14 + 6 + 14 + 0 + 0 + 8 + 6 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 87 + 83 + 68 + + 0 + 0 + 0 + 0 + 10 + 14 + 82 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgStr..4 + 3 + + + FIFTH + 2 + + TRIANGL + 32 + 15 + 10 + 0 + on + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 1 + 3 + 4 + + + 1 + 3 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W5 + W2 + W1 + -1 + 2 + -3 + 3 + + 9 + 12 + 9 + 12 + 31 + 3 + 31 + 3 + 15 + 4 + 15 + 4 + 0 + 30 + 1 + 30 + 5 + 5 + 8 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 91 + 73 + 87 + 72 + + 0 + 1 + 1 + 0 + 37 + 35 + 21 + 86 + + + -12 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgStr..5 + 4 + + + FIFTH + 2 + + TRIANGL + 32 + 15 + 10 + 0 + on + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 2 + 3 + 4 + + + 2 + 4 + 2 + 10 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W3 + W4 + W6 + -2 + 2 + -3 + 3 + + 10 + 13 + 10 + 13 + 31 + 3 + 31 + 3 + 15 + 4 + 15 + 4 + 0 + 30 + 1 + 30 + 5 + 5 + 8 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 72 + 91 + 65 + + 0 + 1 + 1 + 0 + 37 + 35 + 21 + 86 + + + -12 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgStr..6 + 5 + + + FIFTH + 5 + + TRIANGL + 32 + 15 + 10 + 0 + on + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 2 + 4 + 4 + + + 2 + 2 + 2 + 10 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + -2 + 2 + -3 + 3 + + 11 + 14 + 13 + 15 + 4 + 11 + 21 + 15 + 15 + 14 + 15 + 13 + 0 + 1 + 3 + 4 + 5 + 5 + 8 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 91 + 75 + 87 + 58 + + 0 + 0 + 0 + 0 + 37 + 35 + 21 + 86 + + + -12 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgStr..7 + 6 + + + SIXTH + 5 + + TRIANGL + 34 + 14 + 12 + 8 + off + + + 5 + 1 + off + on + off + on + 0 + 0 + 0 + 0 + 4 + 3 + 5 + 2 + + + 2 + 2 + 8 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W4 + W2 + W7 + -3 + -1 + 0 + -2 + + 10 + 13 + 12 + 19 + 3 + 4 + 7 + 11 + 15 + 13 + 15 + 13 + 6 + 2 + 6 + 5 + 8 + 6 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 92 + 86 + 68 + + 0 + 0 + 0 + 2 + 10 + 14 + 82 + 10 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgStr..8 + 7 + + + FIFTH + 4 + + TRIANGL + 30 + 14 + 12 + 8 + off + + + 5 + 1 + off + on + off + on + 0 + 0 + 0 + 0 + 4 + 1 + 4 + 2 + + + 2 + 2 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W6 + W1 + W4 + 1 + 3 + -1 + 0 + + 10 + 13 + 10 + 14 + 3 + 12 + 9 + 11 + 15 + 14 + 15 + 14 + 0 + 0 + 6 + 5 + 6 + 5 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 60 + 94 + 66 + + 0 + 1 + 0 + 0 + 10 + 14 + 82 + 0 + + + -24 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + AnlgStr..9 + 8 + + + FIFTH + 4 + + TRIANGL + 34 + 14 + 12 + 8 + off + + + 5 + 1 + off + on + off + on + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 2 + 6 + 1 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W4 + 1 + 3 + -1 + 0 + + 12 + 13 + 10 + 14 + 3 + 12 + 9 + 11 + 15 + 14 + 15 + 14 + 0 + 0 + 6 + 5 + 6 + 5 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 60 + 94 + 66 + + 0 + 1 + 0 + 0 + 10 + 14 + 82 + 0 + + + -24 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + AnlgStr..9* + 9 + + + FIFTH + 2 + + TRIANGL + 23 + 19 + 41 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 2 + 4 + 3 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W2 + W1 + 3 + 3 + 3 + -3 + + 9 + 12 + 9 + 12 + 31 + 3 + 31 + 3 + 15 + 4 + 15 + 4 + 0 + 30 + 1 + 30 + 5 + 5 + 8 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 72 + 95 + 76 + + 0 + 1 + 1 + 0 + 37 + 35 + 21 + 86 + + + -12 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgStr.10 + 10 + + + FIFTH + 2 + + TRIANGL + 23 + 19 + 41 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.5 + 2 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W2 + W1 + 3 + 3 + 3 + -3 + + 9 + 12 + 9 + 12 + 31 + 3 + 31 + 3 + 15 + 4 + 15 + 4 + 0 + 30 + 1 + 30 + 5 + 5 + 8 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 72 + 95 + 76 + + 0 + 1 + 1 + 0 + 37 + 35 + 21 + 86 + + + -12 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgStr.10* + 11 + + + FIFTH + 4 + + TRIANGL + 33 + 25 + 14 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 5 + 3 + + + 1 + 4 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W4 + W1 + W1 + 0 + -3 + 3 + -3 + + 12 + 16 + 12 + 11 + 31 + 3 + 11 + 11 + 15 + 4 + 14 + 12 + 0 + 30 + 1 + 2 + 5 + 5 + 7 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 72 + 92 + 73 + + 0 + 0 + 0 + 1 + 37 + 88 + 38 + 35 + + + 12 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgStr.11 + 12 + + + FIFTH + 4 + + TRIANGL + 32 + 15 + 10 + 0 + on + + + 5 + 0 + off + off + off + off + 0 + 7 + 0 + 0 + 6 + 4 + 5 + 4 + + + 1 + 2 + 2 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -2 + 2 + -3 + 3 + + 9 + 12 + 9 + 12 + 31 + 3 + 31 + 3 + 15 + 4 + 15 + 4 + 0 + 30 + 1 + 30 + 5 + 5 + 8 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 91 + 82 + 87 + 83 + + 0 + 1 + 1 + 0 + 37 + 35 + 21 + 86 + + + -12 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 5 + 9 + 50 + 99 + 0 + 0 + 0 + 0 + 0 + + BC1 String + 13 + + + FIFTH + 5 + + TRIANGL + 33 + 30 + 15 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 2 + 4 + 2 + + + 2 + 4 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W5 + W2 + W1 + 3 + 1 + 2 + -3 + + 12 + 23 + 12 + 24 + 8 + 12 + 11 + 3 + 11 + 15 + 15 + 8 + 0 + 7 + 4 + 2 + 6 + 1 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 91 + 61 + 97 + 74 + + 0 + 0 + 0 + 1 + 37 + 63 + 18 + 45 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + DualStr..1 + 14 + + + FIFTH + 5 + + TRIANGL + 33 + 30 + 15 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 9 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W5 + W2 + W1 + 3 + 1 + 2 + -3 + + 13 + 31 + 9 + 24 + 8 + 12 + 16 + 3 + 11 + 15 + 15 + 8 + 0 + 7 + 4 + 2 + 6 + 1 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 91 + 61 + 97 + 74 + + 0 + 0 + 0 + 1 + 37 + 63 + 18 + 45 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + DualStr..1* + 15 + + + FIFTH + 6 + + TRIANGL + 33 + 30 + 15 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 2 + 4 + 3 + + + 2 + 1 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W4 + W2 + W1 + 2 + -2 + 2 + 0 + + 10 + 22 + 9 + 24 + 8 + 12 + 16 + 3 + 11 + 15 + 15 + 8 + 0 + 7 + 4 + 2 + 6 + 1 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 73 + 89 + 70 + + 0 + 0 + 0 + 1 + 37 + 63 + 18 + 45 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 4 + + DualStr..2 + 16 + + + FIFTH + 6 + + TRIANGL + 33 + 30 + 15 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 2 + 2 + 1 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W4 + W2 + W1 + 2 + -2 + 2 + 0 + + 10 + 22 + 9 + 24 + 8 + 12 + 16 + 3 + 11 + 15 + 15 + 8 + 0 + 7 + 4 + 2 + 6 + 1 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 73 + 89 + 70 + + 0 + 0 + 0 + 1 + 37 + 63 + 18 + 45 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 4 + + DualStr..2* + 17 + + + FIFTH + 5 + + TRIANGL + 33 + 30 + 15 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 3 + 3 + + + 2 + 6 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W2 + W1 + W2 + 3 + -3 + 0 + 0 + + 10 + 21 + 10 + 21 + 7 + 10 + 16 + 5 + 11 + 15 + 15 + 8 + 1 + 1 + 1 + 1 + 5 + 5 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 91 + 56 + 89 + 80 + + 0 + 0 + 0 + 0 + 37 + 63 + 18 + 45 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + DualStr..3 + 18 + + + FIFTH + 4 + + TRIANGL + 33 + 35 + 15 + 0 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 4 + 4 + 4 + + + 2 + 2 + 4 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W1 + W1 + W1 + 2 + -3 + 3 + -1 + + 9 + 24 + 15 + 22 + 16 + 3 + 4 + 22 + 15 + 8 + 15 + 14 + 3 + 3 + 3 + 3 + 5 + 5 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 91 + 99 + 88 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -24 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ELKA Strg1 + 19 + + + FIFTH + 7 + + TRIANGL + 35 + 25 + 20 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 3 + + + 1 + 1 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W4 + W3 + W1 + 2 + -3 + 3 + -1 + + 11 + 20 + 11 + 21 + 16 + 3 + 4 + 22 + 15 + 8 + 15 + 14 + 3 + 3 + 3 + 3 + 5 + 5 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 99 + 75 + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ELKA Strg2 + 20 + + + FIFTH + 7 + + TRIANGL + 31 + 6 + 9 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 1 + 2 + + + 3 + 3 + 2.99 + 2.99 + no + no + no + no + 8 + 8 + 10 + 10 + + W2 + W4 + W4 + W1 + -3 + -3 + 3 + 3 + + 10 + 10 + 8 + 11 + 31 + 7 + 31 + 4 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 99 + 73 + + 0 + 0 + 0 + 0 + 0 + 20 + 0 + 20 + + + -19 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + HiString 1 + 21 + + + FIFTH + 7 + + TRIANGL + 31 + 6 + 9 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 1 + 2 + + + 3 + 3 + 2.99 + 2.99 + no + no + no + no + 8 + 8 + 10 + 10 + + W2 + W4 + W4 + W1 + -3 + -3 + 3 + 3 + + 20 + 25 + 21 + 23 + 31 + 7 + 31 + 4 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 4 + VOF + V24 + VOF + V12 + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 99 + 73 + + 0 + 0 + 0 + 0 + 0 + 20 + 0 + 20 + + + -19 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + HiString 2 + 22 + + + FIFTH + 0 + + TRIANGL + 28 + 0 + 0 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 0 + + + 19.65 + 2 + 2 + 1 + yes + no + no + no + 31 + 8 + 8 + 8 + + W2 + W1 + W1 + W4 + 0 + 0 + -3 + 3 + + 30 + 26 + 26 + 29 + 18 + 13 + 12 + 0 + 0 + 0 + 0 + 0 + 31 + 31 + 31 + 31 + 9 + 15 + 5 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 50 + 99 + 63 + + 2 + 3 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Kalimba * + 23 + + + FIFTH + 7 + + TRIANGL + 29 + 6 + 10 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 1 + 2 + + + 1.5 + 1.5 + 2.99 + 1.49 + no + no + no + no + 16 + 16 + 10 + 9 + + W2 + W4 + W4 + W1 + -3 + -3 + 3 + 3 + + 8 + 10 + 9 + 11 + 31 + 7 + 31 + 4 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 99 + 73 + + 0 + 0 + 0 + 0 + 0 + 20 + 0 + 20 + + + -19 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + LowString + 24 + + + THIRD + 7 + + TRIANGL + 21 + 0 + 0 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 5 + 2 + + + 1 + 0.5 + 7 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 27 + 31 + 10 + 9 + 21 + 25 + 12 + 12 + 13 + 13 + 4 + 10 + 6 + 22 + 6 + 7 + 12 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 78 + 54 + 82 + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntPluck1 + 25 + + + FIFTH + 7 + + TRIANGL + 21 + 0 + 0 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 6 + 2 + + + 1 + 15 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 22 + 24 + 24 + 24 + 15 + 12 + 12 + 7 + 12 + 12 + 12 + 15 + 22 + 15 + 15 + 25 + 6 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 65 + 99 + 99 + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntPluck2 + 26 + + + SEVENTH + 7 + + TRIANGL + 35 + 0 + 10 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 29 + 28 + 31 + 17 + 29 + 18 + 31 + 9 + 10 + 0 + 10 + 14 + 17 + 0 + 8 + 15 + 15 + 11 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 99 + 99 + 60 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 9 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Pizz. 1 + 27 + + + SECOND + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + + + 1 + 1 + 0.5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W4 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 29 + 19 + 31 + 31 + 16 + 0 + 10 + 0 + 15 + 17 + 22 + 31 + 10 + 15 + 10 + 15 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 74 + 81 + 65 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Pizz. 2 + 28 + + + SECOND + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 1 + 1 + 4 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W4 + W1 + 0 + 3 + -3 + 0 + + 30 + 31 + 31 + 30 + 23 + 31 + 13 + 19 + 11 + 12 + 0 + 0 + 16 + 7 + 0 + 21 + 7 + 10 + 10 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 84 + 91 + 88 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 43 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Pizzicato* + 29 + + + SECOND + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W4 + W1 + 0 + 3 + 0 + 0 + + 31 + 31 + 31 + 27 + 16 + 31 + 13 + 24 + 0 + 12 + 0 + 10 + 0 + 0 + 0 + 21 + 6 + 7 + 8 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 84 + 91 + 97 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + Pizzicato + 30 + + + FIFTH + 7 + + TRIANGL + 29 + 8 + 10 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + + + 3 + 1.5 + 2.99 + 1.49 + no + no + no + no + 8 + 16 + 10 + 9 + + W4 + W3 + W4 + W4 + -3 + -3 + 3 + 3 + + 9 + 10 + 9 + 11 + 31 + 7 + 31 + 4 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 73 + 99 + 73 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -19 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 4 + + ReverbStrg + 31 + + + FIFTH + 7 + + TRIANGL + 33 + 6 + 12 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 1 + 2 + + + 1.5 + 1.5 + 1.51 + 1.51 + no + no + no + no + 16 + 16 + 14 + 14 + + W2 + W4 + W4 + W2 + 1 + 1 + -2 + -2 + + 9 + 10 + 9 + 11 + 31 + 7 + 31 + 4 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 99 + 72 + + 0 + 0 + 0 + 0 + 0 + 20 + 0 + 20 + + + -19 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 12 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + StrgPad A + 32 + + + FIFTH + 7 + + TRIANGL + 31 + 6 + 19 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 1 + 2 + + + 1.51 + 1.51 + 1.5 + 1.49 + no + no + no + no + 14 + 14 + 16 + 9 + + W2 + W4 + W4 + W2 + -3 + -3 + 3 + -1 + + 8 + 10 + 9 + 11 + 31 + 7 + 31 + 4 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 78 + 99 + 71 + + 0 + 0 + 0 + 0 + 0 + 20 + 0 + 20 + + + -19 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 17 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + StrgPad B + 33 + + + FIFTH + 7 + + TRIANGL + 28 + 0 + 11 + 0 + off + + + 4 + 2 + off + on + off + on + 0 + 0 + 0 + 2 + 2 + 0 + 2 + 0 + + + 3 + 3 + 2.99 + 2.99 + no + no + no + no + 8 + 8 + 10 + 10 + + W1 + W1 + W1 + W1 + 3 + -3 + -3 + 3 + + 9 + 31 + 9 + 31 + 7 + 0 + 7 + 0 + 14 + 14 + 14 + 14 + 0 + 0 + 0 + 0 + 6 + 4 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 76 + 99 + 69 + + 2 + 0 + 2 + 0 + 32 + 10 + 0 + 10 + + + -19 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 16 + 0 + 0 + 0 + 0 + 0 + + Stringed * + 34 + + + FIFTH + 4 + + TRIANGL + 33 + 35 + 12 + 0 + off + + + 2 + 0 + off + off + off + off + 3 + 4 + 3 + 2 + 3 + 4 + 3 + 2 + + + 1 + 7 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W3 + W3 + W4 + -1 + -3 + 0 + 0 + + 11 + 10 + 11 + 24 + 7 + 12 + 16 + 3 + 13 + 15 + 15 + 8 + 5 + 7 + 4 + 2 + 5 + 3 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 57 + 97 + 66 + + 0 + 0 + 0 + 1 + 37 + 99 + 18 + 65 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + StringEns1 + 35 + + + FIFTH + 4 + + TRIANGL + 33 + 35 + 12 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 2 + 8 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W3 + -1 + -3 + 0 + 0 + + 11 + 22 + 11 + 24 + 7 + 12 + 16 + 3 + 13 + 15 + 15 + 8 + 5 + 7 + 4 + 2 + 5 + 3 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 63 + 97 + 66 + + 0 + 0 + 0 + 1 + 37 + 99 + 18 + 65 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + StringEns1* + 36 + + + FIFTH + 5 + + TRIANGL + 33 + 35 + 12 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 2 + 3 + 2 + + + 2 + 2 + 4 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W7 + W1 + W3 + -1 + -3 + 0 + 0 + + 11 + 22 + 9 + 24 + 8 + 12 + 16 + 1 + 13 + 15 + 15 + 8 + 5 + 7 + 4 + 2 + 6 + 6 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 59 + 96 + 79 + + 0 + 0 + 0 + 1 + 37 + 99 + 18 + 65 + + + -12 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + StringEns2 + 37 + + + FIFTH + 5 + + TRIANGL + 33 + 35 + 12 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 2 + 6 + 4 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W7 + W1 + W1 + -1 + -3 + 0 + 0 + + 11 + 22 + 9 + 24 + 8 + 12 + 16 + 1 + 13 + 15 + 15 + 8 + 5 + 7 + 4 + 2 + 6 + 6 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 59 + 96 + 79 + + 0 + 0 + 0 + 1 + 37 + 99 + 18 + 65 + + + -12 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + StringEns2* + 38 + + + FIFTH + 5 + + SQUARE + 33 + 46 + 30 + 9 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 2 + 3 + 2 + + + 2 + 2 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W2 + W5 + 3 + 3 + 1 + 3 + + 10 + 10 + 15 + 31 + 6 + 6 + 9 + 21 + 5 + 5 + 15 + 14 + 26 + 26 + 7 + 10 + 8 + 8 + 6 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 52 + 99 + 77 + + 1 + 1 + 0 + 1 + 40 + 40 + 30 + 10 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + StringEns3 + 39 + + + FIFTH + 5 + + TRIANGL + 28 + 0 + 15 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 2 + 4 + 1 + + + 4 + 2 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W4 + W3 + W3 + 2 + 2 + 0 + -3 + + 11 + 19 + 11 + 16 + 16 + 9 + 16 + 16 + 14 + 14 + 14 + 14 + 0 + 0 + 0 + 6 + 7 + 4 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 68 + 99 + 80 + + 0 + 0 + 0 + 0 + 20 + 20 + 20 + 57 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + StringEns4 + 40 + + + FIFTH + 5 + + TRIANGL + 33 + 0 + 15 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 2 + 2 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + 2 + 2 + 0 + -3 + + 15 + 19 + 15 + 16 + 16 + 9 + 16 + 16 + 14 + 14 + 14 + 14 + 0 + 0 + 0 + 6 + 7 + 4 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 68 + 99 + 80 + + 0 + 0 + 0 + 0 + 20 + 20 + 20 + 57 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + StringEns4* + 41 + + + FIFTH + 4 + + TRIANGL + 33 + 10 + 14 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 2 + 4 + 3 + + + 1 + 1 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W2 + W5 + -1 + 0 + 1 + 3 + + 11 + 11 + 11 + 12 + 11 + 9 + 9 + 10 + 14 + 14 + 12 + 13 + 0 + 0 + 6 + 0 + 5 + 5 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 57 + 94 + 68 + + 0 + 1 + 0 + 0 + 10 + 10 + 12 + 57 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + StringEns5 + 42 + + + FIFTH + 4 + + TRIANGL + 33 + 10 + 14 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 2 + 1 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W2 + W5 + -1 + 0 + 1 + 3 + + 12 + 11 + 15 + 19 + 11 + 9 + 9 + 15 + 14 + 14 + 12 + 13 + 0 + 0 + 6 + 0 + 5 + 5 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 57 + 94 + 68 + + 0 + 1 + 0 + 0 + 10 + 10 + 12 + 57 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + StringEns5* + 43 + + + FIFTH + 5 + + TRIANGL + 33 + 10 + 9 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 2 + 1 + + + 4 + 6 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W2 + W2 + W5 + -1 + 0 + 1 + 3 + + 11 + 21 + 11 + 21 + 23 + 15 + 9 + 15 + 14 + 13 + 12 + 13 + 0 + 0 + 6 + 0 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 72 + 98 + 80 + + 0 + 1 + 0 + 0 + 10 + 10 + 12 + 57 + + + -12 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + StringEns6 + 44 + + + FIFTH + 5 + + TRIANGL + 33 + 10 + 9 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 4 + 6 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W2 + W2 + W5 + -1 + 0 + 1 + 3 + + 16 + 21 + 16 + 21 + 23 + 15 + 9 + 15 + 14 + 13 + 12 + 13 + 0 + 0 + 6 + 0 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 72 + 98 + 80 + + 0 + 1 + 0 + 0 + 10 + 10 + 12 + 57 + + + -12 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + StringEns6* + 45 + + + FIFTH + 4 + + TRIANGL + 33 + 10 + 9 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 3 + 1 + + + 0.5 + 0.5 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W3 + W1 + 2 + 1 + -3 + -3 + + 11 + 21 + 12 + 13 + 23 + 15 + 9 + 15 + 14 + 13 + 12 + 13 + 0 + 0 + 6 + 0 + 5 + 5 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 71 + 97 + 83 + + 0 + 0 + 0 + 0 + 5 + 10 + 6 + 40 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + StringEns7 + 46 + + + FIFTH + 4 + + TRIANGL + 33 + 10 + 9 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 5 + 1 + + + 2 + 2 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W3 + 2 + 1 + -3 + -3 + + 11 + 13 + 11 + 15 + 23 + 15 + 9 + 4 + 14 + 13 + 12 + 13 + 0 + 0 + 6 + 9 + 5 + 5 + 6 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 68 + 99 + 62 + + 0 + 0 + 0 + 1 + 5 + 10 + 6 + 40 + + + -24 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + StringEns8 + 47 + + + FIFTH + 6 + + TRIANGL + 38 + 32 + 32 + 0 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 3 + + + 1 + 8 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W4 + W1 + W1 + -3 + -3 + -3 + 0 + + 12 + 10 + 15 + 28 + 21 + 2 + 21 + 13 + 14 + 9 + 15 + 14 + 6 + 0 + 6 + 0 + 8 + 7 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 90 + 98 + 88 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 10 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + StringLead + 48 + + + THIRD + 7 + + TRIANGL + 33 + 14 + 42 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 6 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -2 + 0 + 1 + + 10 + 12 + 7 + 17 + 31 + 31 + 31 + 11 + 15 + 15 + 15 + 10 + 5 + 8 + 4 + 5 + 6 + 4 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 87 + 53 + 70 + 67 + + 1 + 1 + 1 + 1 + 0 + 34 + 20 + 23 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Strings + 49 + + + THIRD + 7 + + TRIANGL + 33 + 14 + 42 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 3 + 6 + 3 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -2 + 0 + 1 + + 12 + 12 + 14 + 10 + 0 + 0 + 0 + 0 + 15 + 15 + 15 + 15 + 6 + 0 + 0 + 5 + 6 + 4 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 76 + 52 + 70 + 67 + + 1 + 1 + 1 + 1 + 0 + 34 + 20 + 23 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Strings* + 50 + + + FIFTH + 7 + + TRIANGL + 31 + 6 + 10 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 1 + 2 + + + 3 + 3 + 2.99 + 2.99 + no + no + no + no + 8 + 8 + 10 + 10 + + W4 + W1 + W4 + W1 + -3 + -3 + 3 + 3 + + 12 + 31 + 12 + 31 + 31 + 4 + 31 + 4 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 70 + 99 + 70 + + 0 + 0 + 0 + 0 + 30 + 30 + 30 + 30 + + + -19 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Strings 1 + 51 + + + FIFTH + 7 + + TRIANGL + 31 + 0 + 26 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 2 + + + 3 + 6 + 2.99 + 9 + no + no + no + no + 8 + 8 + 10 + 8 + + W3 + W3 + W4 + W2 + -3 + -3 + 3 + 3 + + 10 + 10 + 12 + 20 + 4 + 4 + 5 + 5 + 12 + 9 + 12 + 9 + 1 + 2 + 2 + 0 + 5 + 4 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 71 + 99 + 61 + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 20 + + + -19 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Strings 2 + 52 + + + FIFTH + 7 + + TRIANGL + 31 + 6 + 10 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 1 + 2 + + + 3 + 3 + 2.99 + 2.99 + no + no + no + no + 8 + 8 + 10 + 10 + + W8 + W1 + W4 + W1 + -3 + -3 + 3 + 3 + + 18 + 31 + 12 + 31 + 31 + 4 + 31 + 4 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 70 + 99 + 70 + + 0 + 0 + 0 + 0 + 30 + 30 + 30 + 30 + + + -19 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Strings 3 + 53 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 46 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 3 + 2.99 + 3 + 3 + no + no + no + no + 8 + 10 + 8 + 8 + + W4 + W7 + W2 + W4 + 3 + 3 + -3 + -3 + + 11 + 31 + 11 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 86 + 68 + 86 + 70 + + 0 + 0 + 0 + 0 + 30 + 0 + 30 + 0 + + + -19 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Syn.Str 1 + 54 + + + FIFTH + 7 + + TRIANGL + 32 + 0 + 75 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 3 + 2.99 + 3 + 6 + no + no + no + no + 8 + 10 + 8 + 8 + + W5 + W7 + W4 + W8 + 3 + 3 + -3 + -3 + + 12 + 31 + 12 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 83 + 59 + 91 + 49 + + 0 + 0 + 0 + 0 + 30 + 0 + 30 + 0 + + + -19 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Syn.Str 2 + 55 + + + THIRD + 7 + + TRIANGL + 29 + 6 + 15 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 2 + 0 + + + 2 + 2 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W4 + W1 + W1 + 0 + -3 + 3 + 0 + + 26 + 31 + 31 + 31 + 10 + 9 + 0 + 4 + 15 + 15 + 15 + 15 + 0 + 3 + 0 + 0 + 5 + 2 + 11 + 2 + VOF + V12 + V48 + V24 + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 58 + 68 + 68 + + 2 + 0 + 0 + 0 + 5 + 21 + 12 + 15 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SynString + 56 + + + FIFTH + 5 + + TRIANGL + 21 + 0 + 0 + 0 + on + + + 0 + 0 + off + off + off + off + 7 + 3 + 3 + 7 + 5 + 6 + 4 + 2 + + + 1 + 7 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + 0 + 0 + -3 + -1 + + 27 + 27 + 31 + 22 + 9 + 19 + 10 + 13 + 12 + 7 + 12 + 13 + 10 + 0 + 10 + 10 + 7 + 12 + 6 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 99 + 79 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + T Pluck..1 + 57 + + + THIRD + 6 + + TRIANGL + 21 + 0 + 0 + 0 + on + + + 0 + 0 + off + off + off + off + 7 + 3 + 3 + 7 + 5 + 5 + 6 + 3 + + + 1 + 0.5 + 7 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W3 + W1 + 0 + 0 + -3 + -1 + + 30 + 27 + 31 + 22 + 10 + 19 + 10 + 13 + 12 + 7 + 12 + 13 + 9 + 0 + 10 + 10 + 6 + 12 + 6 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 59 + 79 + 83 + + 2 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + T Pluck..2 + 58 + + + FIFTH + 5 + + TRIANGL + 34 + 33 + 0 + 0 + on + + + 1 + 0 + off + off + off + off + 7 + 3 + 3 + 7 + 5 + 5 + 6 + 3 + + + 0.5 + 10 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W1 + W1 + 0 + -2 + -1 + 3 + + 19 + 21 + 28 + 29 + 7 + 13 + 9 + 15 + 14 + 10 + 10 + 12 + 9 + 31 + 15 + 9 + 5 + 3 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 99 + 83 + + 2 + 3 + 1 + 1 + 0 + 18 + 25 + 21 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + T Pluck..3 + 59 + + + FIFTH + 7 + + TRIANGL + 29 + 6 + 16 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 0 + 3 + 0 + + + 1.5 + 1.5 + 2.99 + 1.49 + no + no + no + no + 16 + 16 + 10 + 9 + + W2 + W4 + W4 + W1 + -3 + -3 + 3 + 3 + + 10 + 12 + 11 + 13 + 31 + 8 + 31 + 5 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 73 + 99 + 64 + + 0 + 0 + 0 + 0 + 0 + 20 + 0 + 20 + + + -7 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + WarmString + 60 + + + FIFTH + 7 + + TRIANGL + 41 + 0 + 0 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 3 + + + 2 + 2 + 2 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W1 + W1 + 0 + 0 + 0 + 0 + + 10 + 13 + 6 + 31 + 4 + 4 + 0 + 0 + 15 + 15 + 15 + 15 + 2 + 2 + 0 + 3 + 6 + 4 + 4 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 96 + 61 + 99 + + 1 + 1 + 2 + 0 + 92 + 41 + 76 + 86 + + + -24 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + WindString + 61 + + + FIRST + 5 + + TRIANGL + 20 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 3 + 3 + + + 1 + 1 + 2 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -3 + -3 + -1 + + 11 + 31 + 31 + 8 + 9 + 2 + 12 + 3 + 11 + 14 + 10 + 11 + 4 + 4 + 2 + 6 + 6 + 3 + 4 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 91 + 78 + 88 + + 0 + 2 + 0 + 0 + 0 + 67 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + phantstrng + 62 + + + + Banjo + 1 + + FOURTH + 7 + + SQUARE + 58 + 0 + 0 + 0 + on + + + 0 + 2 + on + off + off + off + 0 + 0 + 0 + 0 + 1 + 0 + 2 + 1 + + + 3 + 1 + 8 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W3 + W1 + 0 + 3 + -3 + 2 + + 28 + 31 + 31 + 30 + 11 + 18 + 10 + 12 + 9 + 15 + 10 + 12 + 10 + 0 + 9 + 0 + 6 + 1 + 1 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 88 + 78 + 81 + + 2 + 2 + 3 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 66 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Banjo * + 0 + + + FOURTH + 7 + + TRIANGL + 29 + 0 + 16 + 0 + off + + + 3 + 0 + off + off + off + off + 1 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + + + 3 + 1 + 2 + 9 + no + no + no + no + 8 + 8 + 8 + 8 + + W5 + W4 + W1 + W8 + -3 + 3 + 3 + 2 + + 31 + 31 + 31 + 31 + 14 + 31 + 7 + 11 + 10 + 15 + 15 + 15 + 10 + 0 + 17 + 8 + 6 + 1 + 1 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 83 + 64 + 72 + + 2 + 2 + 2 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Banjo + 1 + + + THIRD + 5 + + TRIANGL + 6 + 0 + 1 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 6 + 2 + + + 1 + 1 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 3 + 3 + 2 + + 31 + 31 + 31 + 30 + 13 + 2 + 27 + 23 + 9 + 15 + 12 + 12 + 11 + 3 + 8 + 0 + 6 + 1 + 1 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 90 + 66 + 90 + + 2 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Banjo....1 + 2 + + + FIFTH + 5 + + TRIANGL + 6 + 0 + 1 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 4 + 2 + + + 1 + 6 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W4 + W1 + -3 + 3 + 3 + 2 + + 31 + 22 + 31 + 30 + 13 + 9 + 27 + 23 + 9 + 0 + 12 + 12 + 11 + 3 + 8 + 0 + 6 + 5 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 62 + 91 + + 2 + 2 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Banjo....2 + 3 + + + THIRD + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 0 + 2 + 1 + + + 3 + 1 + 8 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + -3 + 3 + 3 + 2 + + 31 + 31 + 31 + 30 + 13 + 11 + 27 + 23 + 9 + 15 + 12 + 12 + 11 + 3 + 8 + 0 + 6 + 1 + 1 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 92 + 69 + 95 + + 2 + 3 + 3 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Old Banjo + 4 + + + + BassGuitar + 2 + + THIRD + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 1 + 1 + 3 + + + 0.5 + 0.5 + 0.5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + 0 + -3 + 3 + -3 + + 31 + 31 + 31 + 31 + 31 + 9 + 12 + 13 + 15 + 10 + 11 + 12 + 0 + 0 + 0 + 0 + 12 + 9 + 10 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 83 + 74 + 81 + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 30 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnalogBass + 0 + + + THIRD + 3 + + TRIANGL + 34 + 53 + 10 + 0 + on + + + 7 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 1 + 6 + 1 + + + 1 + 1 + 5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 21 + 31 + 7 + 15 + 21 + 12 + 13 + 13 + 11 + 10 + 10 + 11 + 8 + 8 + 9 + 3 + 5 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 76 + 54 + 97 + + 2 + 1 + 1 + 2 + 0 + 12 + 46 + 15 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgBass.1 + 1 + + + THIRD + 3 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 5 + 1 + + + 1 + 1 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 28 + 24 + 28 + 15 + 27 + 9 + 27 + 15 + 12 + 13 + 12 + 4 + 17 + 15 + 12 + 9 + 3 + 4 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 74 + 50 + 95 + + 2 + 1 + 1 + 0 + 0 + 12 + 46 + 15 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgBass.2 + 2 + + + THIRD + 1 + + TRIANGL + 38 + 28 + 2 + 80 + off + + + 3 + 1 + off + on + on + off + 0 + 0 + 0 + 0 + 6 + 2 + 5 + 1 + + + 1 + 1 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + -1 + 0 + + 31 + 31 + 31 + 31 + 7 + 21 + 10 + 12 + 15 + 13 + 4 + 12 + 5 + 18 + 10 + 12 + 10 + 5 + 3 + 12 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 87 + 70 + 81 + + 2 + 1 + 1 + 0 + 0 + 12 + 46 + 15 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgBass.3 + 3 + + + THIRD + 3 + + TRIANGL + 38 + 28 + 2 + 80 + off + + + 3 + 1 + off + on + on + off + 0 + 0 + 0 + 0 + 4 + 1 + 5 + 1 + + + 1 + 1 + 2 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + -1 + 0 + + 31 + 31 + 31 + 31 + 7 + 21 + 10 + 12 + 15 + 13 + 4 + 12 + 9 + 18 + 10 + 12 + 10 + 5 + 3 + 12 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 70 + 90 + + 1 + 2 + 2 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgBass.4 + 4 + + + THIRD + 3 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 6 + 2 + + + 0.5 + 0.5 + 9 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 28 + 27 + 30 + 18 + 28 + 12 + 31 + 15 + 9 + 4 + 15 + 6 + 10 + 8 + 8 + 9 + 4 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 70 + 96 + + 0 + 0 + 0 + 0 + 0 + 12 + 46 + 15 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgBass.5 + 6 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 1 + + + 0.5 + 0.5 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 28 + 27 + 30 + 31 + 31 + 31 + 31 + 15 + 15 + 14 + 12 + 6 + 10 + 8 + 8 + 9 + 4 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 76 + 99 + 90 + + 0 + 0 + 0 + 0 + 0 + 12 + 46 + 15 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgBass.6 + 7 + + + FIFTH + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 5 + 1 + + + 1 + 0.5 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -1 + -1 + 3 + 3 + + 31 + 28 + 27 + 30 + 31 + 31 + 31 + 31 + 12 + 12 + 15 + 12 + 9 + 9 + 7 + 8 + 10 + 10 + 9 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 0 + 0 + 0 + 0 + 0 + 12 + 46 + 15 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgBass.7 + 8 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 1 + 6 + 1 + + + 1 + 0.5 + 2 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -1 + -1 + 3 + 3 + + 28 + 28 + 28 + 28 + 7 + 12 + 7 + 7 + 15 + 15 + 15 + 15 + 7 + 8 + 7 + 7 + 9 + 10 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 97 + 99 + 82 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgBass.8 + 9 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 3 + + + 0.5 + 0.5 + 0.5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -1 + -1 + 3 + 3 + + 28 + 28 + 28 + 31 + 31 + 15 + 31 + 18 + 15 + 2 + 15 + 2 + 9 + 31 + 6 + 31 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 94 + 99 + 50 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgBass9 + 10 + + + FIFTH + 6 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 4 + 2 + + + 0.5 + 0.5 + 8 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + 0 + 0 + 0 + 0 + + 29 + 25 + 29 + 29 + 18 + 27 + 12 + 18 + 14 + 12 + 13 + 4 + 6 + 9 + 2 + 7 + 9 + 4 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 66 + 97 + + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 17 + 6 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgCut.BS + 11 + + + SIXTH + 6 + + TRIANGL + 8 + 0 + 11 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 3 + 7 + 3 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W3 + W1 + 0 + 1 + 0 + 0 + + 31 + 31 + 31 + 31 + 6 + 28 + 27 + 8 + 12 + 4 + 15 + 6 + 18 + 15 + 31 + 2 + 7 + 7 + 7 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 95 + 93 + 94 + + 1 + 2 + 1 + 0 + 0 + 25 + 0 + 20 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 17 + 6 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgFunkBS + 12 + + + SIXTH + 4 + + TRIANGL + 8 + 0 + 11 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 2 + + + 1 + 1 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + -2 + 3 + 2 + 3 + + 28 + 24 + 13 + 21 + 15 + 31 + 31 + 12 + 12 + 15 + 15 + 11 + 7 + 31 + 8 + 1 + 9 + 9 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 97 + 98 + 99 + + 0 + 0 + 1 + 0 + 0 + 25 + 0 + 20 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 17 + 6 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgSplat + 13 + + + SECOND + 7 + + TRIANGL + 28 + 26 + 3 + 19 + off + + + 6 + 1 + on + on + on + on + 0 + 0 + 0 + 7 + 7 + 7 + 6 + 3 + + + 1 + 3 + 0.87 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 3 + 0 + 0 + + 31 + 21 + 16 + 31 + 11 + 11 + 8 + 25 + 14 + 9 + 5 + 0 + 6 + 0 + 2 + 0 + 10 + 10 + 10 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 87 + 42 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bass 1 + 14 + + + FOURTH + 7 + + TRIANGL + 28 + 26 + 3 + 19 + off + + + 6 + 1 + on + on + on + on + 0 + 0 + 0 + 7 + 7 + 7 + 2 + 3 + + + 1 + 0.5 + 0.5 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 3 + 0 + 0 + + 31 + 21 + 31 + 31 + 11 + 11 + 8 + 25 + 14 + 9 + 5 + 0 + 6 + 0 + 2 + 0 + 10 + 10 + 10 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 89 + 78 + 78 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bass 2 + 15 + + + FOURTH + 7 + + TRIANGL + 28 + 26 + 3 + 19 + off + + + 6 + 1 + on + on + on + on + 0 + 0 + 0 + 7 + 7 + 7 + 2 + 3 + + + 1 + 3 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 3 + 0 + 0 + + 31 + 21 + 31 + 31 + 11 + 11 + 8 + 25 + 14 + 9 + 5 + 0 + 6 + 0 + 2 + 0 + 10 + 10 + 10 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 87 + 78 + 92 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bass 3 + 16 + + + SECOND + 0 + + TRIANGL + 28 + 26 + 3 + 19 + off + + + 6 + 1 + on + on + on + on + 0 + 0 + 0 + 7 + 7 + 7 + 2 + 3 + + + 1 + 3 + 8 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 3 + 0 + 0 + + 31 + 21 + 4 + 31 + 11 + 11 + 8 + 25 + 14 + 9 + 5 + 0 + 6 + 0 + 2 + 0 + 10 + 10 + 10 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 87 + 88 + 92 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bass 4 + 17 + + + FIFTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 3 + 2 + 7 + + + 0.5 + 0.5 + 0.5 + 7 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 7 + 31 + 7 + 15 + 10 + 15 + 10 + 10 + 5 + 0 + 5 + 7 + 6 + 4 + 6 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 71 + 99 + 78 + + 2 + 0 + 2 + 0 + 0 + 0 + 0 + 15 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bass 5 + 18 + + + FIFTH + 4 + + TRIANGL + 38 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 0 + 4 + 0 + + + 1 + 1 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 21 + 31 + 31 + 13 + 22 + 15 + 15 + 10 + 13 + 31 + 31 + 12 + 6 + 15 + 15 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 99 + 89 + + 3 + 3 + 2 + 3 + 0 + 0 + 99 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bass Pluck + 19 + + + FOURTH + 6 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 0 + 3 + 1 + + + 0.5 + 0.5 + 5 + 9 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 28 + 25 + 27 + 28 + 18 + 28 + 12 + 26 + 14 + 9 + 4 + 4 + 6 + 9 + 2 + 7 + 4 + 4 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 79 + 81 + + 3 + 2 + 2 + 3 + 14 + 0 + 99 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + <<Bass.0>> + 20 + + + FIFTH + 7 + + TRIANGL + 35 + 32 + 0 + 41 + on + + + 2 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 3 + 1 + 3 + 1 + + + 0.5 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 25 + 24 + 21 + 22 + 7 + 31 + 24 + 9 + 0 + 15 + 14 + 0 + 6 + 12 + 6 + 6 + 7 + 6 + 8 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 74 + 99 + 76 + + 2 + 1 + 1 + 2 + 14 + 0 + 99 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + <<Bass.1>> + 21 + + + SECOND + 2 + + TRIANGL + 33 + 19 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 1 + 3 + 1 + + + 1 + 1 + 4 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 25 + 30 + 26 + 25 + 18 + 9 + 9 + 6 + 15 + 0 + 8 + 14 + 6 + 4 + 10 + 2 + 6 + 8 + 8 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 79 + 77 + 74 + + 2 + 2 + 2 + 2 + 99 + 99 + 99 + 99 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + <<Bass.2>> + 22 + + + THIRD + 4 + + TRIANGL + 33 + 19 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 1 + 5 + 1 + + + 1 + 1 + 3 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -3 + -3 + 3 + + 25 + 25 + 24 + 25 + 14 + 14 + 6 + 6 + 15 + 15 + 10 + 14 + 7 + 7 + 8 + 1 + 6 + 6 + 8 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 70 + 65 + 90 + + 2 + 2 + 2 + 2 + 99 + 99 + 99 + 99 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + <<Bass.3>> + 23 + + + THIRD + 5 + + TRIANGL + 99 + 0 + 0 + 15 + off + + + 0 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 1 + 4 + 1 + + + 1 + 4 + 0.5 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 18 + 28 + 12 + 26 + 14 + 9 + 4 + 4 + 6 + 9 + 2 + 7 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 78 + 63 + + 3 + 2 + 2 + 2 + 14 + 0 + 99 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + <<Bass.4>> + 24 + + + FIFTH + 4 + + TRIANGL + 38 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 1 + 3 + 1 + + + 1 + 2 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 25 + 25 + 25 + 21 + 12 + 18 + 15 + 22 + 14 + 12 + 13 + 13 + 4 + 4 + 6 + 6 + 10 + 10 + 9 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 86 + 99 + 95 + + 2 + 2 + 2 + 3 + 14 + 35 + 99 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + <<Bass.5>> + 25 + + + FOURTH + 4 + + TRIANGL + 33 + 19 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 1 + 2 + 1 + + + 1 + 1 + 3 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -3 + -3 + 3 + + 26 + 27 + 30 + 25 + 15 + 13 + 10 + 6 + 14 + 14 + 8 + 14 + 6 + 2 + 12 + 1 + 5 + 5 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 91 + 73 + 69 + + 2 + 2 + 2 + 2 + 99 + 99 + 99 + 99 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + <<Bass.6>> + 26 + + + THIRD + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 1 + 4 + 1 + + + 2 + 1 + 1 + 7 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -2 + 1 + 2 + + 30 + 30 + 29 + 30 + 28 + 27 + 1 + 28 + 12 + 13 + 0 + 12 + 5 + 1 + 1 + 5 + 9 + 9 + 12 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 65 + 85 + 83 + + 2 + 0 + 2 + 3 + 0 + 12 + 46 + 15 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + <<Bass.7>> + 27 + + + FIFTH + 3 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 1 + 3 + 2 + + + 2 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -2 + 1 + 2 + + 30 + 18 + 29 + 30 + 28 + 12 + 1 + 28 + 12 + 10 + 0 + 12 + 5 + 7 + 1 + 10 + 9 + 7 + 12 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 97 + 99 + 99 + + 0 + 0 + 0 + 0 + 0 + 12 + 46 + 15 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + <<Bass.8>> + 28 + + + FOURTH + 3 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 1 + 3 + 1 + + + 1 + 1 + 1 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -2 + 1 + 2 + + 30 + 24 + 29 + 30 + 28 + 23 + 1 + 28 + 12 + 13 + 10 + 12 + 6 + 3 + 3 + 6 + 9 + 9 + 12 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 84 + 77 + 62 + + 2 + 0 + 2 + 2 + 0 + 12 + 46 + 15 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + <<Bass.9>> + 29 + + + FIRST + 5 + + TRIANGL + 35 + 0 + 25 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 2 + + + 1 + 10 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -1 + 1 + 2 + -2 + + 31 + 31 + 31 + 31 + 12 + 18 + 12 + 24 + 15 + 15 + 15 + 15 + 11 + 18 + 2 + 4 + 10 + 8 + 8 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 75 + 84 + 78 + + 1 + 0 + 1 + 3 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bass....FM + 30 + + + THIRD + 7 + + SHOLD + 99 + 0 + 0 + 0 + off + + + 7 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 3 + 3 + 7 + + + 1 + 0.5 + 0.5 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W4 + W5 + 0 + -3 + 3 + -3 + + 31 + 31 + 31 + 31 + 31 + 5 + 6 + 4 + 15 + 14 + 13 + 14 + 2 + 1 + 2 + 7 + 8 + 10 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 99 + 83 + + 0 + 1 + 1 + 1 + 0 + 63 + 50 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BombBass + 31 + + + THIRD + 3 + + TRIANGL + 33 + 19 + 7 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 1 + 4 + 1 + + + 0.5 + 9 + 6 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 0 + 1 + 0 + 0 + + 31 + 24 + 27 + 28 + 18 + 28 + 12 + 18 + 15 + 9 + 13 + 4 + 6 + 9 + 9 + 7 + 7 + 4 + 7 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 87 + 59 + 86 + + 0 + 3 + 2 + 1 + 0 + 99 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + CutupBass + 32 + + + FOURTH + 7 + + TRIANGL + 28 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 6 + 3 + + + 0.5 + 0.5 + 7 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W2 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 19 + 31 + 9 + 8 + 10 + 1 + 4 + 4 + 4 + 4 + 3 + 3 + 5 + 0 + 9 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 60 + 76 + + 1 + 2 + 3 + 3 + 0 + 0 + 43 + 0 + + + -12 + POLY + 2 + FINGER + 0 + POR + 99 + 0 + 0 + 75 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E.Bass 1 + 33 + + + FIRST + 7 + + TRIANGL + 30 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 3 + 3 + + + 1 + 0.5 + 5 + 15 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W1 + W1 + 0 + 0 + 0 + 0 + + 29 + 30 + 31 + 31 + 12 + 8 + 11 + 15 + 15 + 15 + 15 + 15 + 10 + 9 + 10 + 16 + 9 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 65 + 67 + + 0 + 0 + 0 + 0 + 40 + 35 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E.Bass 2 + 34 + + + FIRST + 4 + + TRIANGL + 26 + 16 + 20 + 21 + off + + + 4 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 2 + 1 + 0 + 2 + + + 0.5 + 0.5 + 2 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 3 + 3 + 3 + + 25 + 31 + 31 + 6 + 5 + 5 + 5 + 6 + 0 + 14 + 14 + 10 + 8 + 6 + 6 + 7 + 7 + 1 + 1 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 83 + 51 + 86 + + 2 + 2 + 3 + 3 + 0 + 4 + 4 + 6 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E.Bass 3 + 35 + + + THIRD + 7 + + TRIANGL + 28 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 0 + 7 + 3 + + + 1 + 0.5 + 9 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -3 + 3 + 3 + + 31 + 31 + 31 + 31 + 9 + 1 + 9 + 1 + 9 + 0 + 12 + 4 + 0 + 0 + 6 + 0 + 9 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 67 + 70 + 61 + + 0 + 2 + 3 + 3 + 0 + 0 + 27 + 0 + + + -12 + POLY + 4 + FINGER + 0 + POR + 99 + 0 + 0 + 75 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ElecBass 1 + 36 + + + THIRD + 7 + + TRIANGL + 34 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 3 + 3 + + + 0.5 + 0.5 + 1 + 13 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W2 + -3 + 3 + 3 + 3 + + 31 + 31 + 31 + 31 + 6 + 6 + 10 + 14 + 2 + 2 + 2 + 2 + 0 + 0 + 0 + 0 + 8 + 7 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 82 + 75 + + 0 + 0 + 2 + 2 + 0 + 59 + 59 + 49 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ElecBass 2 + 37 + + + FOURTH + 7 + + TRIANGL + 30 + 5 + 10 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 5 + + + 1 + 2 + 2 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 18 + 18 + 18 + 13 + 31 + 31 + 31 + 10 + 15 + 15 + 15 + 14 + 0 + 0 + 0 + 7 + 10 + 10 + 10 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 62 + 95 + 84 + + 0 + 0 + 0 + 0 + 1 + 0 + 75 + 77 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Fat Lead.1 + 38 + + + THIRD + 4 + + TRIANGL + 36 + 0 + 4 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 4 + + + 0.5 + 0.5 + 2 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + 0 + 2 + 0 + 2 + + 22 + 17 + 22 + 11 + 31 + 31 + 4 + 3 + 15 + 15 + 13 + 13 + 0 + 6 + 0 + 1 + 10 + 5 + 10 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 81 + 73 + 83 + + 0 + 1 + 1 + 1 + 39 + 0 + 17 + 39 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Fat Lead.2 + 39 + + + SECOND + 4 + + TRIANGL + 36 + 0 + 4 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 4 + 5 + 4 + + + 1 + 1 + 2 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W3 + W1 + 0 + 2 + 0 + 2 + + 22 + 17 + 22 + 11 + 31 + 31 + 4 + 3 + 15 + 15 + 13 + 13 + 0 + 6 + 0 + 1 + 10 + 5 + 10 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 86 + 78 + 63 + + 0 + 1 + 1 + 1 + 39 + 0 + 17 + 39 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Fat Lead.3 + 40 + + + FOURTH + 4 + + TRIANGL + 36 + 38 + 52 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 7 + 5 + + + 0.5 + 0.5 + 0.5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + 0 + 2 + 0 + 2 + + 22 + 17 + 22 + 11 + 31 + 31 + 4 + 3 + 15 + 15 + 13 + 13 + 0 + 6 + 0 + 1 + 10 + 5 + 10 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 99 + 77 + 85 + + 0 + 1 + 1 + 1 + 39 + 0 + 17 + 39 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Fat Lead.4 + 41 + + + FIRST + 7 + + TRIANGL + 30 + 9 + 4 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 3 + + + 2 + 1 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 1 + 0 + 0 + + 31 + 31 + 31 + 31 + 28 + 11 + 6 + 2 + 10 + 12 + 1 + 0 + 4 + 0 + 0 + 3 + 9 + 9 + 9 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 78 + 95 + 84 + + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 14 + + + -12 + POLY + 2 + FINGER + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + filtrsweep + 42 + + + THIRD + 2 + + TRIANGL + 33 + 19 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 6 + 1 + + + 1 + 1 + 6 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -1 + 1 + -1 + 1 + + 31 + 31 + 31 + 31 + 18 + 18 + 12 + 6 + 14 + 14 + 14 + 14 + 6 + 6 + 2 + 0 + 9 + 9 + 8 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 69 + 82 + + 3 + 3 + 2 + 0 + 0 + 0 + 0 + 0 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + FlangeBass + 43 + + + SIXTH + 5 + + TRIANGL + 23 + 33 + 9 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 3 + + + 1.51 + 0.75 + 1.49 + 0.75 + no + no + no + no + 14 + 12 + 9 + 12 + + W1 + W1 + W1 + W1 + -3 + 0 + 3 + -3 + + 17 + 17 + 17 + 10 + 6 + 8 + 6 + 8 + 15 + 15 + 15 + 15 + 3 + 3 + 3 + 2 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 83 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 21 + + + -19 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 49 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Fretless * + 44 + + + THIRD + 7 + + TRIANGL + 33 + 19 + 7 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 1 + 4 + 2 + + + 0.5 + 3 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 3 + 0 + 0 + + 25 + 27 + 30 + 8 + 18 + 13 + 13 + 12 + 15 + 14 + 8 + 0 + 5 + 2 + 12 + 12 + 6 + 8 + 8 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 66 + 74 + 66 + + 2 + 2 + 2 + 1 + 99 + 99 + 99 + 99 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Fretless.1 + 45 + + + THIRD + 5 + + TRIANGL + 33 + 19 + 7 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 3 + 5 + 2 + + + 3 + 1 + 5 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 3 + 0 + 0 + + 25 + 27 + 30 + 31 + 18 + 13 + 13 + 6 + 15 + 14 + 8 + 0 + 5 + 2 + 12 + 0 + 6 + 5 + 6 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 70 + 62 + 64 + + 2 + 2 + 2 + 3 + 99 + 99 + 99 + 0 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Fretless.2 + 46 + + + THIRD + 5 + + SAWUP + 21 + 0 + 11 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 5 + 1 + + + 1 + 1 + 3 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + -2 + 3 + 1 + + 31 + 18 + 24 + 30 + 19 + 31 + 0 + 28 + 12 + 15 + 0 + 12 + 9 + 2 + 0 + 10 + 10 + 7 + 7 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 70 + 71 + 75 + + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 15 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + FunkyBass1 + 47 + + + THIRD + 6 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 2 + 5 + 0 + + + 1 + 1 + 4 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + -2 + -1 + 2 + + 31 + 18 + 18 + 30 + 19 + 31 + 31 + 28 + 12 + 15 + 15 + 12 + 9 + 31 + 12 + 10 + 10 + 7 + 7 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 75 + 64 + 80 + + 0 + 2 + 2 + 0 + 0 + 0 + 0 + 15 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + FunkyBass2 + 48 + + + FIRST + 7 + + TRIANGL + 25 + 8 + 6 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 0 + + + 0.5 + 0.5 + 0.5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W7 + 0 + 3 + -3 + 0 + + 17 + 16 + 21 + 7 + 8 + 11 + 11 + 2 + 11 + 12 + 11 + 15 + 0 + 0 + 15 + 0 + 8 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 81 + 67 + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FINGER + 20 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Jaco Bass + 49 + + + SECOND + 1 + + TRIANGL + 25 + 8 + 6 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + + + 0.5 + 0.5 + 0.5 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W2 + W1 + 0 + 3 + -3 + 0 + + 15 + 15 + 18 + 31 + 8 + 10 + 11 + 6 + 11 + 12 + 11 + 2 + 0 + 0 + 15 + 5 + 8 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 81 + 70 + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FINGER + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + Jaco Bass2 + 50 + + + FOURTH + 7 + + TRIANGL + 28 + 0 + 0 + 0 + off + + + 5 + 1 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 0 + 7 + 3 + + + 1 + 0.5 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W2 + W4 + 0 + -3 + 3 + 3 + + 31 + 31 + 31 + 29 + 9 + 1 + 17 + 10 + 9 + 0 + 13 + 4 + 0 + 0 + 6 + 0 + 9 + 8 + 8 + 8 + VOF + V12 + V12 + V24 + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 74 + 65 + 70 + + 0 + 2 + 3 + 3 + 0 + 0 + 27 + 0 + + + -12 + POLY + 4 + FINGER + 0 + POR + 99 + 0 + 0 + 75 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + JazzWalker + 51 + + + FOURTH + 0 + + TRIANGL + 27 + 0 + 0 + 0 + on + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 0 + 7 + 5 + + + 1 + 0.5 + 9 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -3 + 0 + 0 + + 31 + 31 + 28 + 31 + 20 + 31 + 31 + 31 + 13 + 15 + 15 + 15 + 10 + 0 + 13 + 19 + 10 + 11 + 15 + 15 + VOF + VOF + V48 + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 68 + 70 + 99 + + 1 + 2 + 2 + 2 + 13 + 0 + 52 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Kai Bass * + 52 + + + SECOND + 7 + + TRIANGL + 25 + 0 + 7 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 3 + + + 0.5 + 0.5 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 32 + + W1 + W1 + W5 + W1 + 0 + 0 + -3 + 0 + + 31 + 31 + 31 + 31 + 9 + 9 + 17 + 16 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 7 + 8 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 74 + 71 + 79 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + LatelyBass + 53 + + + THIRD + 7 + + TRIANGL + 28 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 0 + 7 + 3 + + + 1 + 0.5 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W6 + W1 + 0 + -3 + 3 + 3 + + 31 + 31 + 31 + 31 + 9 + 1 + 9 + 1 + 15 + 7 + 15 + 10 + 0 + 0 + 6 + 0 + 9 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 70 + 74 + 67 + + 0 + 2 + 3 + 3 + 0 + 0 + 27 + 0 + + + -12 + MONO + 4 + FINGER + 0 + POR + 99 + 0 + 0 + 75 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + MonophBass + 54 + + + FIFTH + 7 + + TRIANGL + 29 + 0 + 7 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 6 + + + 0.5 + 0.5 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 32 + + W2 + W6 + W2 + W8 + 3 + 0 + -3 + 0 + + 31 + 31 + 31 + 15 + 9 + 9 + 16 + 10 + 15 + 13 + 10 + 3 + 0 + 0 + 0 + 7 + 8 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 86 + 96 + 79 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + + + -12 + MONO + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + MoogerBass + 55 + + + THIRD + 0 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 2 + 6 + 1 + + + 1 + 5 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + -2 + 0 + 0 + + 28 + 28 + 28 + 28 + 22 + 16 + 16 + 3 + 14 + 0 + 10 + 13 + 4 + 10 + 10 + 10 + 9 + 9 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 72 + 79 + 85 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 46 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntBass.1 + 56 + + + FIFTH + 0 + + SQUARE + 46 + 0 + 17 + 0 + on + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 2 + + + 1 + 5 + 1 + 7 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + -2 + 0 + 0 + + 28 + 28 + 28 + 28 + 19 + 15 + 21 + 15 + 14 + 0 + 10 + 6 + 10 + 10 + 10 + 10 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 65 + 99 + 77 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 46 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntBass.2 + 57 + + + FOURTH + 0 + + TRIANGL + 29 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 3 + 5 + + + 0.5 + 0.5 + 0.5 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -3 + 0 + 0 + + 15 + 31 + 24 + 23 + 29 + 28 + 21 + 12 + 14 + 13 + 9 + 4 + 4 + 4 + 10 + 9 + 8 + 1 + 4 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 83 + 79 + 88 + + 3 + 3 + 2 + 2 + 20 + 0 + 0 + 24 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 83 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Precision* + 58 + + + SECOND + 7 + + TRIANGL + 25 + 0 + 7 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 3 + + + 0.5 + 0.5 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 32 + + W2 + W2 + W4 + W2 + 0 + 0 + -3 + 0 + + 31 + 31 + 31 + 31 + 9 + 9 + 17 + 14 + 15 + 13 + 11 + 3 + 0 + 0 + 0 + 7 + 8 + 8 + 8 + 8 + VOF + VOF + VOF + V48 + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 82 + 85 + 76 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + + + -12 + MONO + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ResoMonoBs + 59 + + + THIRD + 4 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 1 + 4 + 1 + + + 0.5 + 0.5 + 6 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 18 + 18 + 12 + 18 + 14 + 14 + 3 + 4 + 6 + 6 + 2 + 7 + 9 + 9 + 8 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 73 + 88 + 91 + + 3 + 3 + 2 + 3 + 14 + 0 + 99 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Roto Bass + 60 + + + SECOND + 7 + + TRIANGL + 25 + 0 + 9 + 0 + off + + + 5 + 0 + off + off + on + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.5 + 0.5 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + -3 + 0 + + 31 + 31 + 25 + 31 + 5 + 5 + 9 + 14 + 12 + 12 + 0 + 5 + 5 + 5 + 0 + 5 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 73 + 71 + 65 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SUPER BASS + 61 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 3 + + + 2 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W2 + W1 + 0 + 0 + 1 + -1 + + 25 + 19 + 20 + 18 + 3 + 9 + 2 + 8 + 14 + 12 + 13 + 10 + 15 + 6 + 15 + 8 + 10 + 6 + 9 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 87 + 99 + 83 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Science.BS + 62 + + + FIRST + 0 + + TRIANGL + 28 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 0 + 6 + 7 + + + 1 + 0.5 + 9 + 7.85 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -3 + 3 + 3 + + 31 + 31 + 31 + 31 + 9 + 1 + 9 + 15 + 9 + 0 + 12 + 6 + 0 + 0 + 6 + 10 + 9 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 72 + 75 + 90 + + 0 + 2 + 3 + 3 + 0 + 0 + 27 + 0 + + + -12 + POLY + 4 + FINGER + 0 + POR + 99 + 0 + 0 + 80 + 0 + 60 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SlapBass + 63 + + + FOURTH + 7 + + TRIANGL + 25 + 0 + 9 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 1 + 4 + 1 + + + 1 + 10 + 3 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + -3 + 0 + + 30 + 24 + 30 + 31 + 16 + 12 + 16 + 8 + 12 + 0 + 12 + 8 + 7 + 31 + 7 + 0 + 9 + 9 + 9 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 73 + 76 + 70 + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SlapBass.1 + 64 + + + THIRD + 5 + + TRIANGL + 25 + 0 + 9 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 1 + 3 + 1 + + + 1 + 1 + 1 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + -3 + 0 + + 30 + 22 + 20 + 24 + 16 + 0 + 10 + 28 + 12 + 9 + 15 + 12 + 7 + 0 + 5 + 9 + 9 + 10 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 75 + 82 + 68 + + 1 + 2 + 2 + 1 + 0 + 0 + 0 + 0 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SlapBass.2 + 65 + + + FOURTH + 7 + + TRIANGL + 31 + 0 + 0 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 3 + 3 + + + 1 + 0.5 + 0.5 + 12.11 + no + no + no + no + 8 + 8 + 8 + 48 + + W1 + W8 + W1 + W7 + 3 + 0 + -3 + 3 + + 31 + 31 + 31 + 31 + 19 + 15 + 19 + 15 + 14 + 14 + 11 + 8 + 6 + 5 + 6 + 15 + 8 + 11 + 8 + 14 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 93 + 96 + 75 + + 1 + 1 + 2 + 0 + 0 + 78 + 28 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SqncrBass + 66 + + + FOURTH + 7 + + TRIANGL + 31 + 0 + 0 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 3 + 3 + + + 1 + 0.5 + 0.5 + 12.11 + no + no + no + no + 8 + 8 + 8 + 48 + + W1 + W4 + W2 + W4 + 3 + 0 + -3 + 3 + + 31 + 31 + 31 + 31 + 19 + 15 + 19 + 15 + 15 + 15 + 11 + 8 + 6 + 5 + 6 + 15 + 8 + 11 + 8 + 14 + VOF + V48 + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 97 + 82 + 66 + + 1 + 1 + 2 + 0 + 0 + 57 + 28 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SqncrBass2 + 67 + + + THIRD + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 4 + 1 + 1 + + + 1 + 3 + 7 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W2 + W1 + 0 + 0 + -3 + 2 + + 31 + 31 + 20 + 31 + 30 + 0 + 31 + 3 + 15 + 15 + 11 + 0 + 0 + 18 + 23 + 16 + 7 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 99 + 87 + 73 + + 2 + 1 + 3 + 2 + 0 + 94 + 61 + 52 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Bass 1 + 68 + + + SIXTH + 7 + + TRIANGL + 27 + 66 + 25 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 2 + + + 0.5 + 0.5 + 0.5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W6 + W3 + W2 + -3 + -2 + 3 + 3 + + 31 + 31 + 31 + 29 + 10 + 10 + 10 + 14 + 0 + 0 + 0 + 9 + 0 + 0 + 0 + 0 + 10 + 10 + 10 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 97 + 97 + 81 + + 2 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Bass 2 + 69 + + + FIRST + 0 + + TRIANGL + 31 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + + + 0.5 + 0.5 + 0.5 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W6 + W2 + 0 + 0 + 3 + 0 + + 30 + 30 + 31 + 31 + 9 + 4 + 12 + 18 + 0 + 9 + 5 + 7 + 3 + 2 + 3 + 12 + 7 + 7 + 7 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 87 + 85 + 70 + 89 + + 2 + 2 + 2 + 2 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Bass 3 + 70 + + + THIRD + 7 + + TRIANGL + 28 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 5 + 3 + + + 0.5 + 0.5 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W2 + W1 + 0 + 0 + 0 + 0 + + 24 + 26 + 21 + 26 + 9 + 9 + 11 + 11 + 4 + 4 + 4 + 4 + 3 + 3 + 5 + 0 + 9 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 88 + 78 + + 1 + 2 + 3 + 2 + 0 + 0 + 10 + 0 + + + -12 + POLY + 2 + FINGER + 0 + POR + 99 + 0 + 0 + 75 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Bass 4 + 71 + + + THIRD + 0 + + TRIANGL + 32 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 4 + 5 + 2 + + + 0.5 + 0.5 + 0.5 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W6 + W2 + W6 + W2 + 0 + 0 + 3 + 0 + + 30 + 30 + 31 + 31 + 5 + 6 + 12 + 18 + 9 + 9 + 5 + 11 + 3 + 2 + 3 + 8 + 7 + 7 + 7 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 86 + 70 + 89 + + 2 + 2 + 2 + 2 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Bass 5 + 72 + + + THIRD + 0 + + TRIANGL + 32 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 4 + 5 + 2 + + + 0.5 + 0.5 + 0.5 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W6 + W2 + W6 + W2 + 0 + 0 + 3 + 0 + + 30 + 30 + 31 + 31 + 5 + 6 + 12 + 18 + 9 + 9 + 5 + 11 + 3 + 2 + 3 + 8 + 5 + 4 + 5 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 86 + 70 + 89 + + 2 + 2 + 2 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Bass 6 + 73 + + + THIRD + 0 + + TRIANGL + 32 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 4 + 5 + 2 + + + 0.5 + 0.5 + 0.5 + 10 + no + no + no + no + 8 + 8 + 8 + 8 + + W6 + W2 + W6 + W2 + 0 + 0 + 3 + 0 + + 30 + 30 + 31 + 31 + 5 + 6 + 12 + 18 + 9 + 9 + 5 + 11 + 3 + 2 + 3 + 8 + 5 + 4 + 5 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 86 + 70 + 70 + + 2 + 2 + 2 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Bass 7 + 74 + + + FOURTH + 7 + + TRIANGL + 31 + 0 + 0 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 3 + 3 + + + 1 + 0.5 + 0.5 + 10.59 + no + no + no + yes + 8 + 8 + 8 + 92 + + W1 + W1 + W8 + W7 + 3 + 0 + -3 + 3 + + 31 + 31 + 31 + 31 + 19 + 15 + 19 + 15 + 15 + 14 + 13 + 9 + 6 + 5 + 6 + 15 + 8 + 14 + 5 + 14 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 70 + + 0 + 1 + 0 + 2 + 0 + 13 + 28 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SynFunkBas + 75 + + + FOURTH + 7 + + TRIANGL + 31 + 0 + 0 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 3 + 3 + + + 1 + 0.5 + 0.5 + 10.59 + no + no + no + yes + 8 + 8 + 8 + 76 + + W1 + W2 + W4 + W2 + 3 + 0 + -3 + 3 + + 31 + 31 + 31 + 31 + 19 + 15 + 19 + 13 + 15 + 14 + 13 + 6 + 6 + 5 + 6 + 25 + 8 + 7 + 5 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 84 + 60 + + 0 + 1 + 1 + 2 + 0 + 26 + 42 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SynFunkBs2 + 76 + + + THIRD + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 0 + 3 + + + 0.5 + 0.5 + 2 + 16 + no + no + no + no + 8 + 8 + 8 + 12 + + W1 + W1 + W2 + W1 + 0 + 3 + -3 + -3 + + 21 + 21 + 25 + 25 + 2 + 11 + 30 + 30 + 14 + 14 + 14 + 14 + 7 + 9 + 9 + 19 + 6 + 5 + 8 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 74 + 83 + + 1 + 0 + 0 + 0 + 16 + 10 + 23 + 45 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + TeknoBass* + 77 + + + FIRST + 2 + + TRIANGL + 31 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 2 + + + 1 + 1 + 3 + 1 + no + no + no + no + 8 + 8 + 8 + 32 + + W1 + W1 + W1 + W4 + 0 + 0 + 0 + 0 + + 26 + 31 + 28 + 23 + 21 + 17 + 17 + 21 + 15 + 15 + 15 + 11 + 10 + 11 + 11 + 12 + 8 + 4 + 2 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 71 + 75 + 99 + + 1 + 1 + 1 + 1 + 0 + 39 + 49 + 44 + + + -24 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Wood Bass + 78 + + + FIRST + 2 + + TRIANGL + 31 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 2 + + + 1 + 1 + 3 + 1 + no + no + no + no + 8 + 8 + 8 + 32 + + W1 + W1 + W1 + W4 + 0 + 0 + 0 + 0 + + 26 + 31 + 28 + 23 + 21 + 17 + 17 + 21 + 15 + 15 + 15 + 11 + 10 + 11 + 11 + 12 + 5 + 4 + 2 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 71 + 75 + 99 + + 1 + 1 + 1 + 1 + 0 + 39 + 49 + 44 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + WoodBass2 + 79 + + + + Cello + 3 + + THIRD + 5 + + TRIANGL + 26 + 7 + 19 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 2 + 0 + + + 1 + 1 + 5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W2 + W1 + 0 + -2 + 3 + -3 + + 12 + 13 + 18 + 28 + 10 + 10 + 11 + 9 + 15 + 14 + 9 + 14 + 0 + 0 + 0 + 0 + 6 + 6 + 8 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 73 + 80 + + 1 + 1 + 1 + 0 + 0 + 9 + 44 + 53 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + BowCello + 0 + + + THIRD + 6 + + TRIANGL + 29 + 6 + 15 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 2 + 0 + + + 2 + 2 + 7 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W5 + W1 + W2 + 0 + -3 + 3 + 3 + + 11 + 21 + 17 + 28 + 10 + 9 + 16 + 4 + 15 + 13 + 9 + 14 + 0 + 3 + 0 + 0 + 5 + 4 + 11 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 58 + 81 + 72 + + 2 + 0 + 0 + 0 + 5 + 21 + 12 + 15 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + BoxCello* + 1 + + + THIRD + 6 + + TRIANGL + 29 + 6 + 15 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 2 + 0 + + + 2 + 2 + 7 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W5 + W1 + W2 + 0 + -3 + 3 + 3 + + 11 + 15 + 17 + 28 + 10 + 18 + 16 + 4 + 15 + 13 + 9 + 14 + 0 + 1 + 0 + 0 + 5 + 4 + 11 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 58 + 81 + 72 + + 2 + 0 + 0 + 0 + 5 + 21 + 12 + 15 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + BoxCello2 + 2 + + + FIFTH + 7 + + TRIANGL + 31 + 25 + 21 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 0 + + + 6 + 2 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W2 + -1 + 0 + 2 + 0 + + 12 + 16 + 12 + 31 + 5 + 25 + 9 + 0 + 14 + 14 + 13 + 15 + 0 + 0 + 0 + 0 + 6 + 3 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 97 + 99 + 72 + + 2 + 1 + 2 + 1 + 77 + 43 + 0 + 77 + + + -24 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Cello * + 3 + + + THIRD + 7 + + TRIANGL + 31 + 18 + 16 + 0 + off + + + 5 + 0 + off + off + off + on + 0 + 0 + 0 + 0 + 2 + 2 + 5 + 1 + + + 0.5 + 0.5 + 2 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W4 + W4 + 1 + 0 + 1 + 0 + + 14 + 21 + 25 + 22 + 11 + 11 + 8 + 7 + 14 + 14 + 12 + 15 + 0 + 0 + 0 + 0 + 7 + 3 + 8 + 6 + VOF + VOF + VOF + VOF + + + 99 + 86 + 99 + 50 + 50 + 50 + + 99 + 53 + 95 + 76 + + 1 + 1 + 2 + 1 + 0 + 0 + 16 + 0 + + + 0 + POLY + 2 + FINGER + 0 + POR + 99 + 0 + 0 + 40 + 80 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Cello 1 + 4 + + + THIRD + 6 + + TRIANGL + 29 + 22 + 44 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 1 + 1 + + + 1 + 1 + 5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W3 + 3 + -3 + -3 + 3 + + 10 + 23 + 30 + 29 + 6 + 12 + 14 + 8 + 15 + 15 + 15 + 10 + 0 + 0 + 0 + 0 + 7 + 5 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 66 + 62 + 78 + + 0 + 0 + 0 + 0 + 0 + 0 + 37 + 18 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Cello 2 + 5 + + + THIRD + 6 + + TRIANGL + 29 + 22 + 44 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 1 + 1 + + + 1 + 1 + 5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W3 + 3 + -3 + -3 + 3 + + 13 + 23 + 30 + 29 + 6 + 12 + 14 + 8 + 15 + 15 + 15 + 13 + 0 + 0 + 0 + 0 + 7 + 5 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 66 + 62 + 78 + + 0 + 0 + 0 + 0 + 0 + 0 + 37 + 18 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Cello 2* + 6 + + + FOURTH + 3 + + TRIANGL + 27 + 27 + 32 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 1 + 4 + 2 + + + 1 + 1 + 3 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -1 + 0 + 0 + 1 + + 12 + 21 + 17 + 16 + 9 + 16 + 21 + 21 + 12 + 12 + 15 + 13 + 4 + 7 + 6 + 10 + 6 + 7 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 93 + 80 + 76 + + 1 + 0 + 1 + 1 + 0 + 25 + 60 + 25 + + + -24 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 4 + + Cello....1 + 7 + + + THIRD + 6 + + TRIANGL + 28 + 46 + 30 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 1 + 5 + 1 + + + 0.5 + 0.5 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W5 + W2 + 1 + -1 + 1 + -1 + + 11 + 30 + 20 + 19 + 3 + 4 + 31 + 9 + 2 + 8 + 3 + 14 + 31 + 16 + 11 + 4 + 6 + 5 + 5 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 73 + 99 + 83 + + 1 + 1 + 1 + 2 + 16 + 82 + 82 + 2 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Cello....2 + 8 + + + + DoubleBass + 4 + + FIFTH + 7 + + TRIANGL + 30 + 23 + 15 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 1 + 1 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + -3 + 3 + 3 + -3 + + 13 + 30 + 15 + 27 + 8 + 5 + 9 + 21 + 14 + 14 + 15 + 13 + 0 + 0 + 0 + 0 + 5 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 86 + + 1 + 1 + 0 + 1 + 0 + 51 + 0 + 19 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ArcoBass * + 0 + + + THIRD + 4 + + TRIANGL + 28 + 6 + 4 + 6 + on + + + 4 + 3 + off + off + on + off + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + + + 0.5 + 2 + 4 + 0.5 + no + no + no + no + 16 + 16 + 8 + 112 + + W2 + W6 + W4 + W1 + -2 + -1 + 3 + 1 + + 16 + 11 + 3 + 9 + 5 + 5 + 8 + 9 + 13 + 15 + 8 + 10 + 3 + 4 + 3 + 3 + 6 + 3 + 5 + 5 + VOF + V48 + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 74 + 90 + 99 + + 0 + 0 + 1 + 0 + 0 + 0 + 56 + 34 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BassBeast + 1 + + + FIFTH + 2 + + TRIANGL + 38 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 1 + 6 + 1 + + + 0.5 + 0.5 + 0.5 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 21 + 31 + 21 + 13 + 22 + 13 + 22 + 10 + 13 + 10 + 13 + 12 + 6 + 12 + 6 + 8 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 99 + 64 + + 2 + 3 + 2 + 3 + 99 + 0 + 99 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BassPluck2 + 2 + + + THIRD + 6 + + TRIANGL + 26 + 8 + 13 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 2 + 0 + + + 1 + 3 + 8.97 + 1 + no + no + no + no + 8 + 8 + 11 + 8 + + W1 + W1 + W1 + W2 + 0 + -3 + 3 + 0 + + 10 + 13 + 18 + 28 + 10 + 5 + 7 + 2 + 15 + 14 + 9 + 14 + 0 + 0 + 0 + 0 + 5 + 6 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 86 + 71 + 78 + + 1 + 1 + 1 + 0 + 0 + 99 + 99 + 99 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + DoubleBass + 3 + + + + Guitar + 5 + + FIFTH + 1 + + TRIANGL + 34 + 33 + 0 + 0 + off + + + 3 + 1 + on + on + on + off + 0 + 0 + 0 + 0 + 6 + 3 + 5 + 2 + + + 2 + 4 + 2 + 11 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -1 + -3 + 1 + + 28 + 13 + 22 + 27 + 7 + 15 + 31 + 15 + 12 + 12 + 15 + 12 + 6 + 9 + 7 + 9 + 6 + 2 + 6 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 60 + 88 + 79 + + 1 + 1 + 1 + 3 + 0 + 0 + 10 + 57 + + + -12 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + 12 String1 + 0 + + + FIFTH + 2 + + TRIANGL + 35 + 70 + 0 + 1 + off + + + 3 + 2 + on + on + on + on + 0 + 0 + 0 + 0 + 4 + 2 + 5 + 2 + + + 1 + 1 + 1 + 12 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W1 + 3 + -1 + -3 + 1 + + 28 + 26 + 27 + 27 + 7 + 4 + 9 + 9 + 14 + 11 + 12 + 12 + 3 + 1 + 6 + 4 + 7 + 13 + 14 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 83 + 78 + 81 + + 2 + 3 + 2 + 3 + 0 + 0 + 10 + 43 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + 12 String2 + 1 + + + FIFTH + 5 + + TRIANGL + 30 + 23 + 0 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 3 + + + 3 + 3 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + -1 + 2 + 0 + -1 + + 31 + 25 + 25 + 25 + 21 + 9 + 12 + 6 + 13 + 6 + 6 + 6 + 7 + 7 + 7 + 7 + 9 + 9 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 97 + 99 + 88 + + 0 + 1 + 0 + 1 + 0 + 12 + 46 + 15 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + 5th Lead.1 + 2 + + + FIFTH + 5 + + TRIANGL + 30 + 23 + 0 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 3 + + + 3 + 3 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W2 + W1 + -1 + 2 + 0 + -1 + + 31 + 31 + 31 + 31 + 9 + 9 + 31 + 19 + 12 + 12 + 15 + 12 + 9 + 9 + 0 + 0 + 9 + 9 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 99 + 76 + + 0 + 0 + 0 + 1 + 0 + 0 + 64 + 32 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + 5th Lead.2 + 3 + + + SECOND + 6 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 5 + 5 + 3 + + + 2 + 1 + 3 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 27 + 31 + 31 + 23 + 21 + 12 + 8 + 5 + 14 + 15 + 15 + 14 + 6 + 8 + 17 + 4 + 6 + 5 + 6 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 66 + 64 + 69 + + 2 + 0 + 0 + 2 + 35 + 67 + 0 + 35 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AC Guitar1 + 4 + + + FIRST + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 4 + 2 + + + 1 + 1 + 3 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 31 + 21 + 14 + 14 + 15 + 15 + 14 + 6 + 8 + 17 + 4 + 10 + 5 + 6 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 66 + 53 + 75 + + 1 + 0 + 0 + 2 + 0 + 67 + 0 + 35 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AC Guitar2 + 5 + + + FIFTH + 4 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 4 + 3 + + + 2 + 3 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 31 + 26 + 14 + 15 + 15 + 13 + 15 + 8 + 0 + 6 + 0 + 14 + 11 + 13 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 87 + 81 + 99 + 76 + + 1 + 2 + 0 + 3 + 0 + 67 + 0 + 35 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AC Guitar3 + 6 + + + FIFTH + 6 + + TRIANGL + 34 + 51 + 0 + 1 + off + + + 3 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 1 + 5 + 1 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 28 + 26 + 29 + 27 + 4 + 21 + 10 + 15 + 15 + 15 + 15 + 15 + 4 + 6 + 9 + 12 + 14 + 11 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 79 + 99 + 83 + + 1 + 2 + 2 + 2 + 0 + 43 + 0 + 35 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AC Guitar4 + 7 + + + FIRST + 7 + + TRIANGL + 31 + 0 + 3 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 1 + 0 + 4 + + + 1 + 3 + 3 + 9 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W4 + W4 + 0 + -3 + 3 + 0 + + 31 + 28 + 31 + 31 + 18 + 6 + 10 + 9 + 15 + 7 + 6 + 12 + 8 + 0 + 0 + 0 + 8 + 4 + 2 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 67 + 69 + 72 + + 1 + 0 + 1 + 1 + 0 + 55 + 61 + 39 + + + -12 + POLY + 3 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 1 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AllThatJaz + 8 + + + THIRD + 7 + + TRIANGL + 30 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 3 + + + 1 + 3 + 10 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W5 + W3 + W5 + W1 + 1 + -1 + 0 + -1 + + 27 + 28 + 31 + 31 + 12 + 10 + 11 + 31 + 10 + 10 + 11 + 10 + 8 + 7 + 7 + 6 + 9 + 7 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 61 + 69 + 75 + + 1 + 1 + 1 + 1 + 0 + 40 + 40 + 40 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + A.Guitar + 9 + + + THIRD + 7 + + TRIANGL + 35 + 28 + 8 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 1 + 1 + + + 1 + 1 + 0.5 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W3 + W7 + W1 + -3 + -1 + 1 + 3 + + 24 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 5 + 3 + 4 + 4 + 11 + 3 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 85 + 86 + 83 + 70 + + 0 + 1 + 0 + 2 + 0 + 8 + 8 + 12 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E.Guitar + 10 + + + THIRD + 7 + + TRIANGL + 35 + 28 + 8 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 1 + 1 + + + 1 + 1 + 0.5 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W3 + W7 + W1 + -3 + -1 + 1 + 3 + + 24 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 5 + 3 + 4 + 4 + 11 + 3 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 85 + 86 + 83 + 70 + + 0 + 1 + 0 + 2 + 0 + 8 + 8 + 12 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E.Guitar* + 11 + + + SIXTH + 6 + + TRIANGL + 37 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 6 + + + 1 + 1 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W1 + 0 + 0 + 0 + 3 + + 31 + 31 + 31 + 31 + 22 + 22 + 22 + 15 + 14 + 14 + 14 + 13 + 0 + 0 + 0 + 9 + 5 + 5 + 8 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 87 + + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 4 + + Echo Lead + 12 + + + THIRD + 7 + + TRIANGL + 30 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 3 + + + 1 + 3 + 10 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W8 + W1 + 1 + -1 + 0 + -1 + + 26 + 26 + 31 + 31 + 12 + 9 + 11 + 31 + 10 + 10 + 11 + 15 + 6 + 7 + 4 + 5 + 8 + 7 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 73 + 69 + 79 + + 1 + 1 + 1 + 1 + 0 + 40 + 40 + 40 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + F.Guitar + 13 + + + THIRD + 7 + + TRIANGL + 30 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 3 + + + 1 + 4 + 10 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W8 + W1 + 1 + -1 + 0 + -1 + + 26 + 26 + 31 + 31 + 12 + 9 + 11 + 31 + 13 + 13 + 11 + 15 + 6 + 7 + 4 + 5 + 8 + 7 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 73 + 69 + 79 + + 1 + 1 + 1 + 1 + 0 + 40 + 40 + 40 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + F.Guitar* + 14 + + + SECOND + 6 + + TRIANGL + 30 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 6 + 2 + + + 1 + 1 + 3 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W2 + W4 + 0 + 0 + 0 + 0 + + 23 + 31 + 23 + 24 + 19 + 18 + 15 + 11 + 14 + 15 + 9 + 10 + 9 + 0 + 14 + 10 + 8 + 5 + 6 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 64 + 82 + 82 + + 1 + 1 + 1 + 1 + 0 + 7 + 17 + 40 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Flamenco + 15 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1.5 + 1.5 + 1 + 1 + no + no + no + no + 16 + 16 + 8 + 8 + + W1 + W8 + W1 + W1 + -3 + 3 + 3 + -3 + + 27 + 31 + 27 + 31 + 30 + 10 + 31 + 8 + 15 + 11 + 15 + 12 + 0 + 0 + 0 + 0 + 9 + 2 + 9 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 84 + 88 + 99 + 74 + + 0 + 0 + 0 + 0 + 17 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Funkfifth* + 16 + + + THIRD + 7 + + TRIANGL + 20 + 0 + 0 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 3 + 3 + + + 1 + 0.5 + 3 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W4 + 0 + 0 + 3 + -3 + + 31 + 31 + 31 + 31 + 15 + 12 + 25 + 25 + 7 + 5 + 5 + 3 + 17 + 5 + 6 + 8 + 9 + 11 + 11 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 99 + 99 + + 0 + 1 + 2 + 3 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 7 + + Funky Pick + 17 + + + FIFTH + 5 + + TRIANGL + 35 + 0 + 0 + 1 + off + + + 0 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 3 + + + 1 + 1 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 3 + -3 + 3 + -3 + + 29 + 28 + 31 + 31 + 10 + 10 + 12 + 5 + 13 + 12 + 13 + 13 + 6 + 4 + 2 + 6 + 7 + 3 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 88 + 98 + 99 + + 2 + 2 + 2 + 1 + 21 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + FuzzyLead + 18 + + + THIRD + 6 + + TRIANGL + 25 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 1 + 1 + 3 + + + 1 + 3 + 10 + 2 + no + no + no + no + 8 + 8 + 14 + 8 + + W1 + W4 + W3 + W1 + 1 + -1 + -3 + -1 + + 31 + 26 + 26 + 31 + 11 + 11 + 11 + 31 + 11 + 7 + 7 + 10 + 11 + 4 + 4 + 11 + 6 + 5 + 5 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 67 + 50 + 55 + + 1 + 1 + 1 + 1 + 30 + 60 + 0 + 99 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Guitar + 19 + + + FOURTH + 7 + + TRIANGL + 20 + 0 + 0 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 3 + 3 + + + 1 + 0.5 + 0.5 + 15 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -3 + -3 + 3 + + 31 + 31 + 31 + 31 + 19 + 15 + 18 + 14 + 14 + 15 + 14 + 15 + 7 + 4 + 6 + 14 + 8 + 15 + 12 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 91 + 85 + 72 + + 1 + 0 + 2 + 0 + 6 + 37 + 28 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Guitar #1 + 20 + + + FIFTH + 0 + + TRIANGL + 34 + 33 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 7 + 3 + 3 + 7 + 7 + 7 + 4 + 4 + + + 1 + 12 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W2 + W1 + 0 + 0 + 0 + 0 + + 28 + 28 + 28 + 28 + 7 + 21 + 4 + 4 + 11 + 12 + 12 + 0 + 7 + 6 + 0 + 12 + 8 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 99 + 75 + + 1 + 2 + 1 + 1 + 0 + 0 + 30 + 47 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + HardHabits + 21 + + + THIRD + 6 + + TRIANGL + 31 + 0 + 3 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 2 + 2 + 2 + + + 1 + 3 + 3 + 11 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W3 + W2 + 0 + 0 + 3 + 0 + + 19 + 19 + 19 + 31 + 18 + 6 + 10 + 9 + 15 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 8 + 8 + 9 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 59 + 69 + 56 + + 1 + 0 + 1 + 1 + 0 + 55 + 61 + 39 + + + -12 + POLY + 3 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 1 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + HawaiiGitr + 22 + + + FIRST + 6 + + TRIANGL + 32 + 39 + 6 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.5 + 0.5 + 0.5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W5 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 17 + 31 + 31 + 12 + 6 + 15 + 15 + 13 + 10 + 0 + 0 + 0 + 8 + 15 + 15 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 80 + 78 + 77 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 47 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + HeavyLead + 23 + + + THIRD + 7 + + TRIANGL + 31 + 22 + 5 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + + + 1 + 4 + 3 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W2 + W1 + 0 + -1 + 2 + 3 + + 31 + 31 + 21 + 31 + 15 + 3 + 5 + 8 + 15 + 15 + 15 + 15 + 0 + 0 + 4 + 0 + 8 + 2 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 76 + 91 + 88 + + 0 + 0 + 0 + 0 + 0 + 27 + 27 + 32 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + HeavyMetal + 24 + + + FIFTH + 6 + + TRIANGL + 41 + 0 + 0 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 4 + + + 1 + 1 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + 0 + 3 + 3 + 3 + + 24 + 18 + 20 + 27 + 31 + 12 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 6 + 0 + 0 + 13 + 9 + 9 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 86 + 90 + 98 + 71 + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + HollowLead + 25 + + + FIFTH + 0 + + TRIANGL + 25 + 0 + 1 + 3 + off + + + 1 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 3 + + + 1 + 3 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W1 + 0 + 0 + 0 + 0 + + 22 + 27 + 24 + 25 + 9 + 9 + 9 + 9 + 9 + 11 + 13 + 11 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 91 + 99 + 95 + + 0 + 1 + 3 + 2 + 10 + 99 + 99 + 85 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Jazz Guit1 + 26 + + + FIFTH + 0 + + TRIANGL + 35 + 0 + 5 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 5 + 3 + + + 1 + 2 + 1 + 16.96 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 0 + 0 + -3 + 0 + + 22 + 28 + 23 + 31 + 26 + 7 + 26 + 17 + 14 + 14 + 13 + 0 + 9 + 12 + 7 + 31 + 9 + 9 + 7 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 74 + 81 + 96 + + 1 + 1 + 0 + 0 + 0 + 0 + 79 + 46 + + + -12 + POLY + 3 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Jazz Guit2 + 27 + + + FIFTH + 0 + + TRIANGL + 35 + 0 + 5 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 3 + 4 + 4 + + + 1 + 2 + 1 + 14 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W1 + 0 + 0 + -3 + 0 + + 22 + 27 + 24 + 25 + 25 + 17 + 25 + 25 + 14 + 12 + 13 + 13 + 9 + 12 + 7 + 8 + 9 + 9 + 7 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 72 + 81 + 94 + + 1 + 1 + 0 + 3 + 0 + 0 + 79 + 46 + + + -12 + POLY + 3 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Jazz Guit3 + 28 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 1 + 4 + off + + + 3 + 2 + on + on + on + on + 0 + 0 + 0 + 0 + 6 + 5 + 4 + 4 + + + 1 + 3 + 3 + 14 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 22 + 27 + 24 + 31 + 9 + 9 + 9 + 18 + 9 + 11 + 13 + 0 + 7 + 7 + 7 + 31 + 7 + 7 + 7 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 92 + 99 + 91 + + 0 + 1 + 3 + 0 + 10 + 73 + 45 + 99 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Jazz Guit4 + 29 + + + FIFTH + 7 + + TRIANGL + 45 + 0 + 0 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 3 + + + 1 + 5 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W5 + W1 + W1 + 0 + 0 + -1 + 0 + + 27 + 27 + 27 + 27 + 24 + 10 + 24 + 10 + 15 + 12 + 15 + 15 + 6 + 4 + 6 + 4 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 75 + 98 + 83 + + 2 + 2 + 2 + 2 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + JonesLead + 30 + + + FIFTH + 7 + + TRIANGL + 15 + 29 + 35 + 61 + off + + + 2 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 6 + 6 + 5 + 4 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + 3 + -3 + -3 + -3 + + 14 + 13 + 31 + 21 + 3 + 1 + 21 + 15 + 14 + 12 + 14 + 14 + 2 + 6 + 7 + 7 + 6 + 8 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 88 + 99 + 82 + + 1 + 2 + 1 + 2 + 0 + 25 + 0 + 25 + + + -12 + POLY + 4 + FINGER + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + KickLead + 31 + + + FIFTH + 7 + + TRIANGL + 28 + 0 + 22 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 2 + + + 1 + 1 + 1 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W6 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 17 + 22 + 16 + 20 + 14 + 14 + 14 + 14 + 9 + 10 + 9 + 31 + 8 + 8 + 9 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 99 + 78 + + 3 + 3 + 3 + 1 + 0 + 30 + 0 + 10 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Mute Gtr + 32 + + + FIFTH + 5 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 4 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W5 + W5 + W1 + 3 + -2 + -3 + -3 + + 15 + 15 + 31 + 21 + 21 + 4 + 21 + 13 + 12 + 12 + 15 + 15 + 6 + 17 + 8 + 9 + 8 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 95 + 99 + 97 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + NastyLead1 + 33 + + + FIFTH + 5 + + TRIANGL + 38 + 0 + 3 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 4 + + + 5 + 1 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -2 + -3 + -3 + + 15 + 15 + 31 + 21 + 22 + 14 + 21 + 13 + 14 + 7 + 15 + 15 + 6 + 5 + 8 + 9 + 8 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 98 + 99 + 98 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + NastyLead2 + 34 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 27 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 1 + + + 1 + 4 + 4 + 10 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W2 + W1 + 0 + 1 + 0 + 0 + + 21 + 25 + 29 + 28 + 3 + 30 + 10 + 10 + 15 + 9 + 3 + 9 + 6 + 9 + 4 + 4 + 9 + 9 + 12 + 12 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 81 + 93 + 72 + + 1 + 3 + 3 + 1 + 10 + 0 + 0 + 99 + + + -24 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Nuln Guit3 + 37 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 27 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 2 + 4 + 2 + + + 1 + 1 + 7 + 9 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 0 + 0 + 0 + 0 + + 24 + 20 + 21 + 28 + 4 + 21 + 10 + 15 + 14 + 15 + 15 + 11 + 4 + 3 + 9 + 12 + 6 + 7 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 74 + 67 + 74 + + 1 + 2 + 0 + 2 + 0 + 39 + 0 + 35 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Nyln Guit1 + 35 + + + SECOND + 4 + + TRIANGL + 35 + 0 + 27 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 5 + 5 + 2 + + + 1 + 25.95 + 1 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 0 + 1 + 0 + 0 + + 24 + 28 + 31 + 28 + 4 + 30 + 25 + 15 + 4 + 4 + 4 + 5 + 3 + 3 + 3 + 12 + 7 + 7 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 66 + 96 + 79 + + 1 + 2 + 3 + 2 + 0 + 0 + 0 + 35 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Nyln Guit2 + 36 + + + FOURTH + 7 + + TRIANGL + 31 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 2 + 4 + 3 + + + 1.5 + 1.51 + 4.5 + 4.5 + no + no + no + no + 16 + 14 + 16 + 16 + + W1 + W1 + W1 + W1 + -1 + -2 + 3 + 0 + + 21 + 28 + 27 + 31 + 19 + 31 + 5 + 13 + 14 + 15 + 10 + 11 + 8 + 3 + 7 + 8 + 5 + 5 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 54 + 76 + 77 + + 1 + 1 + 2 + 2 + 17 + 44 + 41 + 47 + + + -7 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Nylon * + 38 + + + FIRST + 5 + + TRIANGL + 31 + 0 + 3 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 2 + 2 + 2 + + + 1 + 3 + 3 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 3 + 0 + + 31 + 28 + 31 + 31 + 18 + 6 + 10 + 9 + 15 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 8 + 8 + 9 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 71 + 77 + 81 + + 1 + 0 + 1 + 1 + 0 + 55 + 61 + 39 + + + -12 + POLY + 3 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 1 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + NylonGuit + 39 + + + FIFTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 5 + 2 + + + 2 + 0.5 + 10 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 2 + 0 + 0 + 0 + + 27 + 27 + 27 + 27 + 18 + 12 + 18 + 12 + 13 + 13 + 13 + 13 + 7 + 7 + 7 + 7 + 10 + 10 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 79 + 91 + 80 + + 2 + 3 + 2 + 3 + 0 + 99 + 0 + 99 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntGuitar + 40 + + + SEVENTH + 6 + + TRIANGL + 34 + 0 + 0 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 1 + 2 + + + 1 + 3 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + -1 + -2 + 2 + 3 + + 24 + 28 + 31 + 19 + 12 + 9 + 9 + 15 + 15 + 14 + 15 + 14 + 9 + 10 + 9 + 9 + 7 + 8 + 8 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 89 + 99 + 81 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 57 + + + 0 + POLY + 3 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Ped Stl..1 + 41 + + + SEVENTH + 6 + + TRIANGL + 34 + 0 + 0 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 2 + 5 + 3 + + + 1 + 2 + 1 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W1 + W1 + -1 + -2 + 2 + 3 + + 14 + 28 + 31 + 19 + 12 + 9 + 9 + 15 + 15 + 14 + 15 + 14 + 7 + 10 + 9 + 9 + 8 + 8 + 8 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 69 + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 57 + + + 0 + POLY + 3 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Ped Stl..2 + 42 + + + SIXTH + 7 + + TRIANGL + 34 + 0 + 0 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 3 + 3 + 2 + + + 1 + 2 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -1 + -2 + 2 + 3 + + 14 + 28 + 31 + 19 + 12 + 9 + 9 + 15 + 15 + 14 + 15 + 14 + 7 + 10 + 9 + 9 + 8 + 8 + 8 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 60 + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 57 + + + 0 + POLY + 3 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Ped Stl..3 + 43 + + + FOURTH + 0 + + TRIANGL + 29 + 22 + 9 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 2 + 2 + 2 + + + 1 + 1 + 3 + 12 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W4 + W1 + W5 + 0 + 1 + 0 + 0 + + 27 + 31 + 27 + 31 + 9 + 16 + 6 + 16 + 13 + 14 + 13 + 0 + 6 + 2 + 5 + 0 + 11 + 10 + 11 + 12 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 93 + 90 + 60 + + 1 + 1 + 1 + 1 + 0 + 55 + 61 + 39 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 25 + 0 + 10 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + PedalSteel + 44 + + + SECOND + 2 + + TRIANGL + 35 + 53 + 0 + 16 + off + + + 4 + 1 + on + off + off + on + 0 + 0 + 0 + 0 + 5 + 6 + 6 + 4 + + + 1 + 0.5 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W1 + W2 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 26 + 31 + 8 + 31 + 13 + 15 + 12 + 15 + 11 + 0 + 0 + 0 + 0 + 13 + 13 + 13 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 64 + 83 + 85 + + 0 + 1 + 3 + 3 + 0 + 5 + 13 + 6 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + PercLead.1 + 45 + + + SIXTH + 4 + + TRIANGL + 35 + 53 + 0 + 16 + off + + + 4 + 1 + on + off + off + on + 0 + 0 + 0 + 0 + 4 + 4 + 6 + 6 + + + 1 + 3 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W3 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 26 + 31 + 8 + 31 + 13 + 15 + 12 + 15 + 11 + 0 + 0 + 0 + 0 + 13 + 13 + 13 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 87 + 94 + 82 + 99 + + 0 + 1 + 3 + 3 + 0 + 5 + 13 + 6 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + PercLead.2 + 46 + + + FOURTH + 7 + + TRIANGL + 29 + 0 + 0 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 3 + 3 + + + 1 + 0.5 + 0.5 + 15 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W2 + W4 + 3 + -3 + -3 + 3 + + 31 + 22 + 28 + 26 + 19 + 15 + 18 + 14 + 14 + 15 + 14 + 15 + 7 + 4 + 6 + 14 + 8 + 15 + 12 + 15 + VOF + VOF + VOF + V48 + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 96 + 90 + 66 + + 1 + 0 + 1 + 0 + 6 + 32 + 20 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + PhasedGuit + 47 + + + THIRD + 0 + + TRIANGL + 30 + 10 + 9 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 2 + 2 + 3 + + + 1 + 3 + 3 + 13 + no + no + no + yes + 8 + 8 + 8 + 32 + + W1 + W1 + W1 + W1 + 1 + -3 + 2 + 0 + + 29 + 29 + 29 + 26 + 10 + 8 + 13 + 30 + 10 + 10 + 12 + 0 + 12 + 31 + 8 + 31 + 5 + 5 + 2 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 67 + 83 + 90 + + 0 + 1 + 2 + 0 + 0 + 33 + 24 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Piknylon * + 48 + + + THIRD + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 5 + 3 + + + 1 + 0.5 + 9 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W2 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 18 + 12 + 13 + 7 + 14 + 15 + 4 + 0 + 6 + 6 + 3 + 0 + 9 + 9 + 9 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 81 + 92 + + 1 + 2 + 1 + 2 + 14 + 75 + 70 + 46 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Power Lead + 49 + + + THIRD + 7 + + TRIANGL + 30 + 22 + 2 + 50 + off + + + 4 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + + + 1 + 0.5 + 3 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W6 + W6 + W1 + 0 + -1 + 2 + 3 + + 23 + 28 + 21 + 26 + 15 + 3 + 5 + 8 + 15 + 10 + 10 + 7 + 0 + 0 + 4 + 0 + 8 + 2 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 80 + 76 + 70 + 82 + + 0 + 0 + 0 + 0 + 0 + 27 + 27 + 32 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + PowerChord + 50 + + + FIFTH + 1 + + TRIANGL + 0 + 2 + 0 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 1 + 5 + 1 + + + 4 + 4 + 4 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W3 + W1 + W1 + 0 + 3 + 0 + 0 + + 18 + 22 + 21 + 19 + 9 + 2 + 9 + 31 + 13 + 13 + 13 + 15 + 9 + 6 + 9 + 0 + 8 + 3 + 12 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 92 + 99 + 72 + + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 92 + + + -24 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + RecLead + 51 + + + FOURTH + 0 + + TRIANGL + 35 + 32 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 2 + + + 1 + 9 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W1 + W1 + W1 + 2 + 1 + 0 + 3 + + 28 + 28 + 28 + 28 + 5 + 10 + 7 + 9 + 11 + 11 + 14 + 14 + 2 + 2 + 1 + 3 + 10 + 12 + 7 + 13 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 65 + 93 + 84 + + 1 + 3 + 3 + 1 + 10 + 0 + 0 + 99 + + + -24 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Rock Guit1 + 52 + + + FOURTH + 3 + + TRIANGL + 35 + 1 + 10 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 2 + + + 2 + 2 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W2 + 0 + -1 + 0 + 0 + + 18 + 18 + 18 + 27 + 31 + 31 + 31 + 3 + 15 + 15 + 15 + 14 + 0 + 0 + 0 + 0 + 10 + 10 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 70 + 96 + 65 + + 0 + 0 + 0 + 0 + 1 + 0 + 69 + 19 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Rock Guit2 + 53 + + + SECOND + 5 + + TRIANGL + 35 + 32 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 3 + + + 1 + 1 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 2 + 1 + 0 + 3 + + 28 + 28 + 28 + 28 + 7 + 31 + 9 + 15 + 11 + 15 + 15 + 14 + 7 + 6 + 3 + 1 + 9 + 15 + 15 + 12 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 86 + 84 + 78 + 78 + + 1 + 1 + 0 + 3 + 10 + 0 + 0 + 7 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Rock Guit3 + 54 + + + FIFTH + 5 + + TRIANGL + 35 + 32 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 3 + + + 1 + 0.5 + 1 + 9 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 2 + 1 + 0 + 3 + + 28 + 28 + 28 + 28 + 7 + 31 + 9 + 15 + 11 + 15 + 15 + 14 + 7 + 6 + 3 + 10 + 9 + 15 + 15 + 12 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 91 + 78 + 65 + + 1 + 1 + 0 + 2 + 10 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Rock Guit4 + 55 + + + FIFTH + 5 + + TRIANGL + 35 + 32 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 3 + + + 1 + 2 + 3 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W3 + 2 + 1 + -1 + 0 + + 28 + 28 + 28 + 21 + 7 + 31 + 9 + 15 + 11 + 15 + 12 + 12 + 7 + 6 + 7 + 6 + 9 + 15 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 85 + 95 + 87 + + 1 + 1 + 1 + 2 + 10 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Rock Guit5 + 56 + + + FIFTH + 4 + + TRIANGL + 35 + 32 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 2 + + + 1 + 0.5 + 3 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 2 + 1 + -1 + 0 + + 24 + 16 + 16 + 16 + 4 + 21 + 31 + 31 + 11 + 13 + 15 + 15 + 3 + 4 + 4 + 4 + 9 + 15 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 86 + 99 + 80 + + 2 + 1 + 1 + 2 + 10 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Rock Guit6 + 57 + + + THIRD + 7 + + TRIANGL + 31 + 22 + 5 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + + + 1 + 4 + 14 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W2 + W1 + 0 + -1 + 2 + 3 + + 30 + 31 + 31 + 31 + 15 + 3 + 5 + 8 + 15 + 15 + 15 + 15 + 0 + 0 + 4 + 0 + 9 + 2 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 72 + 60 + 78 + + 0 + 0 + 0 + 0 + 0 + 27 + 27 + 32 + + + 0 + MONO + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + StadiumSol + 58 + + + FOURTH + 7 + + TRIANGL + 32 + 20 + 10 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 0 + 0 + 0 + + + 1 + 1 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W4 + W7 + -3 + 3 + 3 + 3 + + 24 + 24 + 22 + 23 + 5 + 14 + 0 + 15 + 10 + 12 + 15 + 12 + 1 + 0 + 0 + 0 + 10 + 10 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 63 + 83 + 53 + + 0 + 0 + 0 + 0 + 0 + 0 + 5 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 70 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Solo 1 + 59 + + + SIXTH + 7 + + TRIANGL + 38 + 40 + 20 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 0 + + + 1 + 2 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W6 + W5 + W3 + 3 + -3 + 3 + 3 + + 31 + 27 + 27 + 31 + 4 + 10 + 4 + 25 + 14 + 12 + 10 + 11 + 0 + 0 + 0 + 0 + 12 + 12 + 12 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 73 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 75 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Solo 2 + 60 + + + THIRD + 7 + + TRIANGL + 32 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W4 + W4 + 0 + 0 + 0 + 0 + + 22 + 31 + 31 + 31 + 31 + 10 + 11 + 10 + 15 + 11 + 11 + 10 + 0 + 0 + 0 + 0 + 10 + 7 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 45 + 77 + 79 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 7 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Solo 3 + 61 + + + THIRD + 7 + + TRIANGL + 32 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + + + 1 + 2 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W4 + W4 + 0 + 0 + 0 + 0 + + 23 + 31 + 31 + 31 + 31 + 10 + 11 + 10 + 15 + 11 + 11 + 10 + 0 + 0 + 0 + 0 + 10 + 7 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 53 + 69 + 77 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 7 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Solo 4 + 62 + + + THIRD + 7 + + TRIANGL + 34 + 17 + 14 + 30 + off + + + 5 + 3 + off + on + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 3 + 0.5 + 2.99 + 0.5 + no + no + no + no + 8 + 8 + 10 + 8 + + W1 + W5 + W1 + W8 + 3 + 0 + -3 + 0 + + 16 + 31 + 31 + 19 + 31 + 20 + 17 + 18 + 15 + 8 + 12 + 13 + 0 + 0 + 0 + 0 + 11 + 5 + 6 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 92 + 83 + 81 + + 1 + 0 + 0 + 1 + 0 + 36 + 44 + 34 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sync Lead + 63 + + + THIRD + 6 + + TRIANGL + 30 + 9 + 2 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 2 + 4 + + + 5 + 1 + 19.03 + 16 + no + no + no + no + 8 + 80 + 10 + 12 + + W1 + W6 + W5 + W6 + 0 + -3 + -3 + 3 + + 31 + 31 + 31 + 31 + 9 + 5 + 15 + 26 + 13 + 0 + 10 + 1 + 7 + 0 + 6 + 0 + 9 + 8 + 9 + 3 + VOF + V48 + V48 + V48 + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 62 + 82 + + 1 + 2 + 2 + 2 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 25 + 0 + 16 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + TwangGuitr + 64 + + + FOURTH + 7 + + TRIANGL + 20 + 0 + 0 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 3 + 3 + + + 1 + 2.48 + 0.5 + 12 + no + no + no + no + 8 + 15 + 8 + 8 + + W1 + W4 + W1 + W1 + 3 + 3 + -3 + 3 + + 31 + 31 + 31 + 31 + 19 + 31 + 15 + 13 + 14 + 11 + 15 + 8 + 7 + 5 + 6 + 8 + 9 + 11 + 11 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 66 + + 1 + 1 + 2 + 0 + 0 + 54 + 19 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + TwelveStrg + 65 + + + FOURTH + 6 + + TRIANGL + 20 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 5 + + + 1 + 0.5 + 0.5 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -3 + -3 + -1 + + 22 + 31 + 31 + 31 + 4 + 2 + 18 + 10 + 12 + 14 + 14 + 2 + 8 + 3 + 6 + 6 + 8 + 11 + 8 + 11 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 95 + 95 + 95 + + 0 + 2 + 0 + 0 + 0 + 67 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + slowtacky + 66 + + + FOURTH + 6 + + TRIANGL + 20 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 5 + + + 1 + 0.5 + 0.5 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -3 + -3 + -1 + + 22 + 31 + 31 + 31 + 4 + 2 + 18 + 10 + 12 + 14 + 14 + 2 + 8 + 3 + 6 + 6 + 6 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 95 + 95 + 95 + + 0 + 2 + 0 + 0 + 0 + 67 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + slowtacky+ + 67 + + + + Harp + 6 + + FIFTH + 5 + + TRIANGL + 34 + 33 + 0 + 0 + on + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 4 + 4 + + + 1 + 2 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W3 + 2 + -1 + -2 + 1 + + 17 + 28 + 28 + 27 + 31 + 15 + 10 + 15 + 12 + 0 + 10 + 11 + 4 + 2 + 9 + 9 + 3 + 1 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 90 + 99 + 95 + + 3 + 0 + 0 + 0 + 0 + 45 + 29 + 39 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 1 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Dbl Harp.1 + 0 + + + FIRST + 7 + + TRIANGL + 27 + 41 + 1 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 4 + 5 + + + 1 + 4 + 2 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W1 + W2 + 2 + -1 + -2 + 1 + + 24 + 31 + 28 + 28 + 18 + 18 + 10 + 27 + 15 + 15 + 0 + 0 + 9 + 12 + 7 + 7 + 5 + 4 + 5 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 83 + 76 + 93 + + 1 + 1 + 0 + 1 + 0 + 90 + 0 + 99 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 1 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Dbl Harp.2 + 1 + + + FIFTH + 6 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 3 + 2 + + + 1 + 3 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W5 + W1 + W4 + 3 + -3 + -3 + 3 + + 27 + 31 + 30 + 31 + 8 + 18 + 8 + 9 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + 5 + 4 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 99 + 80 + + 2 + 2 + 2 + 1 + 16 + 0 + 11 + 7 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 98 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Harp * + 2 + + + THIRD + 7 + + TRIANGL + 27 + 0 + 0 + 0 + off + + + 5 + 0 + on + off + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 3 + + + 1.5 + 1.49 + 6 + 6.28 + no + no + no + yes + 16 + 9 + 8 + 8 + + W1 + W3 + W1 + W1 + -3 + 3 + -3 + 1 + + 31 + 31 + 24 + 16 + 17 + 14 + 19 + 19 + 15 + 9 + 12 + 10 + 7 + 8 + 13 + 15 + 4 + 7 + 9 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 66 + 60 + 59 + + 2 + 1 + 1 + 2 + 0 + 0 + 0 + 0 + + + 5 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Harp + 3 + + + FIFTH + 0 + + TRIANGL + 27 + 21 + 10 + 1 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 4 + 3 + 4 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W1 + W4 + 3 + 3 + -3 + -3 + + 31 + 23 + 31 + 23 + 12 + 14 + 12 + 14 + 14 + 14 + 14 + 14 + 7 + 10 + 7 + 10 + 5 + 3 + 5 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 86 + 99 + 86 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Harp 1 + 4 + + + THIRD + 7 + + TRIANGL + 20 + 0 + 6 + 8 + off + + + 4 + 2 + on + on + on + on + 0 + 0 + 0 + 0 + 3 + 1 + 2 + 2 + + + 1 + 2 + 7 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W3 + W1 + -3 + 3 + 3 + -3 + + 25 + 28 + 31 + 23 + 15 + 19 + 19 + 11 + 14 + 0 + 0 + 6 + 11 + 0 + 0 + 11 + 5 + 1 + 1 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 73 + 67 + 59 + + 1 + 0 + 0 + 0 + 0 + 10 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 85 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Harp 2 + 5 + + + FOURTH + 7 + + TRIANGL + 27 + 0 + 2 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 2 + 5 + 2 + + + 1 + 2 + 5 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W5 + W1 + 3 + 0 + 0 + 1 + + 25 + 31 + 31 + 7 + 7 + 9 + 19 + 5 + 0 + 0 + 0 + 14 + 0 + 5 + 7 + 10 + 4 + 3 + 6 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 83 + 75 + 86 + + 1 + 1 + 0 + 1 + 29 + 82 + 54 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 1 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Harp.....1 + 6 + + + FIRST + 3 + + TRIANGL + 34 + 33 + 0 + 0 + on + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 4 + 4 + 3 + + + 1 + 1 + 3 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W3 + W5 + 2 + -1 + -2 + 1 + + 28 + 28 + 28 + 27 + 9 + 13 + 10 + 15 + 10 + 10 + 10 + 11 + 13 + 13 + 10 + 9 + 4 + 3 + 4 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 77 + 71 + 83 + + 1 + 1 + 1 + 3 + 0 + 45 + 50 + 45 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 1 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Harp.....2 + 7 + + + SIXTH + 4 + + TRIANGL + 27 + 35 + 11 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 4 + 4 + 1 + + + 1 + 1 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W2 + W2 + -1 + -3 + 2 + 0 + + 19 + 26 + 28 + 28 + 6 + 24 + 31 + 16 + 15 + 15 + 15 + 0 + 0 + 6 + 31 + 6 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 91 + 76 + 90 + + 0 + 0 + 1 + 1 + 0 + 90 + 0 + 99 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 1 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Harp....FM + 8 + + + + Koto + 7 + + THIRD + 7 + + TRIANGL + 32 + 1 + 20 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 1 + 0 + 1 + + + 2 + 8 + 23.55 + 2 + no + no + yes + no + 8 + 8 + 48 + 8 + + W1 + W1 + W6 + W1 + 3 + -3 + 0 + -3 + + 22 + 25 + 31 + 22 + 13 + 14 + 18 + 2 + 2 + 0 + 7 + 6 + 6 + 1 + 16 + 0 + 6 + 4 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 67 + 84 + 79 + + 1 + 0 + 0 + 0 + 30 + 32 + 0 + 9 + + + -12 + POLY + 2 + FULL + 2 + POR + 99 + 0 + 0 + 99 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + Fuzzy Koto + 0 + + + THIRD + 0 + + TRIANGL + 26 + 8 + 29 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 1 + 1 + 2 + + + 1 + 1 + 4 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 3 + -3 + 0 + + 26 + 28 + 28 + 29 + 20 + 4 + 7 + 21 + 13 + 11 + 13 + 0 + 8 + 3 + 9 + 0 + 4 + 3 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 79 + 83 + 86 + + 2 + 3 + 3 + 2 + 0 + 13 + 35 + 15 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 54 + 0 + 0 + 0 + 0 + 0 + 0 + + Koto * + 1 + + + FIRST + 0 + + TRIANGL + 30 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 1 + 1 + 3 + + + 2 + 1 + 3 + 7 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 25 + 31 + 31 + 31 + 31 + 31 + 31 + 18 + 15 + 15 + 15 + 11 + 10 + 8 + 6 + 12 + 6 + 1 + 4 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 71 + 75 + 87 + + 1 + 1 + 1 + 1 + 0 + 11 + 37 + 28 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Koto + 2 + + + FIFTH + 3 + + TRIANGL + 31 + 0 + 0 + 0 + off + + + 6 + 0 + on + off + off + off + 0 + 0 + 0 + 0 + 6 + 2 + 5 + 2 + + + 0.5 + 1 + 1 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + -3 + 3 + 3 + + 31 + 27 + 28 + 31 + 17 + 31 + 13 + 10 + 15 + 13 + 12 + 12 + 8 + 29 + 5 + 9 + 5 + 5 + 5 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 99 + 99 + 82 + + 2 + 2 + 2 + 2 + 0 + 0 + 25 + 17 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Koto.....1 + 3 + + + FIFTH + 3 + + TRIANGL + 30 + 0 + 17 + 20 + on + + + 2 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 1 + + + 1 + 3 + 1 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 27 + 28 + 31 + 17 + 31 + 13 + 10 + 15 + 13 + 12 + 12 + 8 + 29 + 5 + 9 + 5 + 5 + 5 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 99 + 99 + 71 + + 2 + 2 + 2 + 2 + 0 + 0 + 25 + 17 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Koto.....2 + 4 + + + FIFTH + 3 + + TRIANGL + 30 + 0 + 17 + 20 + on + + + 2 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 7 + 3 + 5 + 2 + + + 1 + 4 + 1 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 28 + 31 + 28 + 31 + 13 + 10 + 13 + 10 + 12 + 12 + 12 + 12 + 5 + 9 + 5 + 9 + 5 + 7 + 5 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 74 + 99 + 71 + + 2 + 2 + 2 + 2 + 25 + 17 + 25 + 17 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Koto.....3 + 5 + + + + Lute + 8 + + FIFTH + 6 + + TRIANGL + 52 + 0 + 0 + 10 + on + + + 0 + 1 + on + on + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 4 + 4 + + + 1 + 0.5 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 1 + 1 + 0 + + 24 + 12 + 25 + 31 + 7 + 7 + 7 + 7 + 14 + 7 + 7 + 8 + 9 + 31 + 31 + 4 + 5 + 4 + 4 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 62 + 99 + 82 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntLute.1 + 0 + + + FIFTH + 5 + + TRIANGL + 52 + 0 + 0 + 10 + on + + + 0 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 6 + 3 + 4 + 2 + + + 1 + 0.5 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -1 + 1 + 0 + + 21 + 31 + 12 + 24 + 12 + 12 + 12 + 3 + 12 + 8 + 7 + 15 + 9 + 31 + 31 + 0 + 5 + 5 + 4 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 70 + 99 + 89 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntLute.2 + 1 + + + + Mandolin + 9 + + FIFTH + 6 + + TRIANGL + 44 + 99 + 4 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 4 + + + 1 + 3 + 1 + 15 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W4 + W1 + W1 + 1 + 0 + -1 + 0 + + 22 + 31 + 23 + 31 + 12 + 9 + 12 + 25 + 11 + 11 + 0 + 12 + 9 + 6 + 9 + 13 + 7 + 2 + 7 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 69 + 99 + 98 + + 3 + 1 + 1 + 3 + 0 + 0 + 0 + 2 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Mandolin.1 + 0 + + + FIFTH + 7 + + SAWUP + 70 + 16 + 1 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 2 + + + 1 + 3 + 1 + 15 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W5 + 1 + 0 + -1 + 0 + + 22 + 31 + 31 + 31 + 12 + 12 + 13 + 24 + 11 + 11 + 15 + 12 + 9 + 6 + 7 + 13 + 5 + 4 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 55 + 95 + 63 + + 3 + 1 + 1 + 3 + 0 + 0 + 0 + 2 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Mandolin.2 + 1 + + + + Sitar + 10 + + FOURTH + 0 + + TRIANGL + 29 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 3 + 0 + + + 1 + 7 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 0 + -2 + -3 + 0 + + 31 + 30 + 17 + 31 + 24 + 12 + 21 + 31 + 15 + 15 + 15 + 15 + 6 + 11 + 0 + 0 + 4 + 1 + 2 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 91 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 40 + 0 + 0 + 13 + 0 + 0 + 0 + 51 + 0 + 0 + 0 + 0 + 0 + 0 + + Sitar * + 0 + + + FOURTH + 7 + + TRIANGL + 33 + 0 + 5 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + + + 2 + 2 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + -3 + 3 + 3 + 0 + + 31 + 31 + 31 + 23 + 5 + 6 + 6 + 14 + 7 + 5 + 7 + 14 + 8 + 3 + 4 + 9 + 1 + 1 + 1 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 75 + 94 + 71 + + 3 + 2 + 2 + 3 + 0 + 0 + 0 + 2 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sitar + 1 + + + FIFTH + 0 + + TRIANGL + 28 + 0 + 0 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 6 + 3 + + + 19.78 + 1 + 1 + 7 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + -1 + + 31 + 31 + 31 + 31 + 24 + 12 + 6 + 7 + 14 + 14 + 14 + 13 + 9 + 9 + 6 + 6 + 4 + 1 + 4 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 73 + 88 + 91 + 81 + + 1 + 1 + 2 + 1 + 0 + 39 + 17 + 82 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sitar....1 + 2 + + + FOURTH + 2 + + TRIANGL + 33 + 0 + 5 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 5 + 1 + + + 0.5 + 9 + 1 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 3 + 3 + 0 + + 31 + 31 + 31 + 23 + 5 + 6 + 6 + 14 + 7 + 5 + 7 + 14 + 8 + 3 + 4 + 9 + 1 + 3 + 2 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 59 + 82 + 67 + + 3 + 2 + 2 + 2 + 0 + 0 + 0 + 2 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sitar....2 + 3 + + + THIRD + 3 + + TRIANGL + 44 + 99 + 4 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 5 + 2 + + + 0.5 + 9 + 6 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -1 + 1 + 1 + + 31 + 27 + 15 + 29 + 18 + 28 + 12 + 18 + 15 + 8 + 14 + 5 + 6 + 10 + 10 + 7 + 5 + 4 + 2 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 91 + 82 + 67 + + 1 + 0 + 3 + 1 + 0 + 0 + 0 + 2 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sitar....3 + 4 + + + FOURTH + 2 + + TRIANGL + 33 + 0 + 5 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 2 + 5 + 3 + + + 0.5 + 9 + 1 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 3 + 3 + 0 + + 31 + 27 + 15 + 29 + 18 + 29 + 12 + 18 + 15 + 9 + 12 + 4 + 5 + 9 + 9 + 7 + 5 + 3 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 59 + 82 + 67 + + 0 + 0 + 3 + 1 + 0 + 0 + 0 + 2 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sitar.Vib + 5 + + + THIRD + 7 + + TRIANGL + 23 + 0 + 3 + 0 + off + + + 5 + 2 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 1 + 0 + + + 5 + 0.5 + 1.37 + 22.49 + no + no + no + no + 8 + 8 + 14 + 8 + + W1 + W1 + W8 + W2 + 0 + 0 + 0 + 0 + + 30 + 29 + 30 + 30 + 31 + 15 + 15 + 18 + 15 + 15 + 15 + 9 + 12 + 2 + 31 + 31 + 4 + 1 + 2 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 91 + 87 + 65 + + 0 + 0 + 0 + 0 + 0 + 0 + 59 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Sitar + 6 + + + + Viola + 11 + + FIFTH + 6 + + TRIANGL + 34 + 35 + 11 + 0 + on + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 4 + 6 + 1 + + + 2 + 2 + 6 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W3 + W3 + W5 + 0 + 0 + 1 + 2 + + 13 + 15 + 11 + 25 + 6 + 7 + 7 + 6 + 13 + 14 + 15 + 15 + 6 + 0 + 6 + 0 + 8 + 6 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 78 + 87 + 76 + + 0 + 1 + 1 + 2 + 0 + 50 + 10 + 10 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Viola 5th + 0 + + + FIFTH + 6 + + TRIANGL + 34 + 35 + 11 + 0 + on + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + + + 1 + 4 + 3 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W2 + W1 + W1 + 0 + 0 + 1 + 2 + + 13 + 16 + 10 + 29 + 6 + 7 + 7 + 6 + 13 + 14 + 15 + 15 + 6 + 0 + 6 + 0 + 8 + 6 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 78 + 96 + 84 + + 0 + 1 + 1 + 2 + 0 + 50 + 10 + 10 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Viola 5th* + 1 + + + FIFTH + 7 + + TRIANGL + 32 + 56 + 50 + 0 + on + + + 2 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 1 + + + 2 + 8 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W5 + W1 + W1 + 1 + 1 + 0 + 2 + + 15 + 27 + 13 + 21 + 6 + 13 + 6 + 6 + 13 + 13 + 15 + 14 + 9 + 7 + 1 + 3 + 9 + 7 + 7 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 67 + 96 + 76 + + 0 + 0 + 0 + 1 + 0 + 10 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Viola....1 + 2 + + + SIXTH + 6 + + TRIANGL + 30 + 46 + 38 + 0 + off + + + 3 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 3 + 5 + 6 + 2 + + + 1 + 2 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W5 + W2 + 1 + 1 + 0 + 0 + + 13 + 14 + 12 + 28 + 6 + 9 + 7 + 4 + 13 + 3 + 4 + 13 + 6 + 13 + 5 + 6 + 5 + 7 + 6 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 79 + 92 + 78 + + 0 + 2 + 0 + 0 + 0 + 10 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + Viola....2 + 3 + + + FIFTH + 6 + + TRIANGL + 28 + 46 + 30 + 0 + off + + + 3 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 2 + + + 1 + 4 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W2 + W1 + 1 + 1 + 0 + 0 + + 15 + 14 + 15 + 31 + 6 + 9 + 21 + 4 + 13 + 3 + 13 + 13 + 6 + 13 + 7 + 6 + 5 + 7 + 6 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 79 + 99 + 83 + + 0 + 2 + 0 + 0 + 0 + 10 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + Viola....2* + 4 + + + SIXTH + 7 + + TRIANGL + 35 + 15 + 11 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 6 + 3 + + + 1 + 0.5 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W2 + W1 + 0 + 0 + 0 + 0 + + 15 + 15 + 14 + 27 + 7 + 7 + 9 + 6 + 7 + 7 + 7 + 15 + 9 + 9 + 16 + 2 + 7 + 7 + 13 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 92 + 74 + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ViolaSynth + 5 + + + + Violin + 12 + + THIRD + 7 + + TRIANGL + 30 + 6 + 6 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 3 + 1 + + + 2 + 4 + 18.84 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W6 + W1 + W1 + 0 + 0 + 0 + 1 + + 11 + 25 + 28 + 27 + 10 + 11 + 17 + 5 + 15 + 15 + 7 + 14 + 0 + 6 + 16 + 0 + 6 + 6 + 13 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 59 + 75 + 78 + + 2 + 0 + 0 + 0 + 2 + 73 + 0 + 12 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SoloViolin + 0 + + + FIRST + 0 + + TRIANGL + 32 + 0 + 14 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 0 + 2 + 5 + + + 2 + 2 + 8 + 10.38 + no + no + no + yes + 8 + 8 + 8 + 64 + + W1 + W1 + W1 + W1 + -1 + 0 + -3 + 2 + + 14 + 18 + 31 + 31 + 5 + 9 + 14 + 13 + 14 + 15 + 10 + 15 + 5 + 2 + 7 + 15 + 9 + 6 + 3 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 77 + 49 + + 1 + 1 + 1 + 0 + 0 + 16 + 20 + 42 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 49 + 0 + 0 + 0 + 0 + 0 + 0 + + Sradiv. * + 1 + + + THIRD + 7 + + TRIANGL + 32 + 10 + 8 + 0 + off + + + 6 + 0 + off + off + off + on + 0 + 0 + 0 + 0 + 2 + 2 + 5 + 1 + + + 2 + 1 + 3 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W4 + W1 + 0 + 0 + 1 + 0 + + 14 + 21 + 25 + 22 + 14 + 8 + 8 + 7 + 10 + 11 + 12 + 14 + 0 + 0 + 0 + 0 + 8 + 3 + 8 + 6 + VOF + VOF + VOF + VOF + + + 99 + 98 + 99 + 50 + 50 + 50 + + 96 + 58 + 95 + 78 + + 1 + 1 + 2 + 1 + 0 + 0 + 16 + 0 + + + 0 + POLY + 2 + FINGER + 0 + POR + 99 + 0 + 0 + 10 + 80 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violin 1 + 2 + + + FIFTH + 7 + + TRIANGL + 31 + 19 + 61 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 0 + + + 3 + 1 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 0 + 0 + 0 + 0 + + 12 + 15 + 10 + 31 + 9 + 10 + 4 + 2 + 10 + 10 + 15 + 14 + 0 + 0 + 0 + 0 + 8 + 4 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 84 + 99 + 50 + 50 + 50 + + 88 + 98 + 92 + 69 + + 1 + 1 + 1 + 1 + 8 + 0 + 9 + 15 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violin 2 + 3 + + + FIFTH + 7 + + TRIANGL + 31 + 19 + 61 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 0 + + + 4 + 1 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 0 + 0 + 0 + 0 + + 12 + 15 + 13 + 31 + 9 + 10 + 4 + 2 + 13 + 13 + 15 + 14 + 0 + 0 + 0 + 0 + 8 + 4 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 84 + 99 + 50 + 50 + 50 + + 88 + 98 + 92 + 69 + + 1 + 1 + 1 + 1 + 8 + 0 + 9 + 15 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violin 2* + 4 + + + FIFTH + 5 + + TRIANGL + 30 + 20 + 24 + 0 + on + + + 3 + 1 + on + on + on + on + 7 + 7 + 0 + 0 + 7 + 4 + 5 + 2 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W1 + W4 + W1 + 3 + 1 + 2 + -3 + + 12 + 12 + 11 + 11 + 0 + 0 + 3 + 6 + 14 + 14 + 14 + 15 + 0 + 0 + 6 + 3 + 7 + 7 + 5 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 75 + 97 + 78 + + 0 + 0 + 1 + 2 + 0 + 0 + 10 + 10 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violin...1 + 5 + + + FIFTH + 5 + + TRIANGL + 28 + 0 + 24 + 0 + on + + + 3 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 0 + 3 + 0 + 0 + + + 2 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 0 + 2 + 0 + 3 + + 15 + 21 + 14 + 18 + 0 + 0 + 5 + 6 + 14 + 15 + 14 + 15 + 0 + 0 + 6 + 3 + 6 + 6 + 5 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 99 + 76 + + 0 + 0 + 1 + 2 + 0 + 10 + 10 + 10 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violin...1* + 6 + + + FIFTH + 4 + + TRIANGL + 28 + 21 + 14 + 0 + off + + + 4 + 0 + off + off + off + off + 7 + 7 + 6 + 5 + 7 + 5 + 4 + 0 + + + 1 + 3 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W3 + -2 + 1 + 0 + 2 + + 10 + 11 + 10 + 21 + 12 + 13 + 8 + 3 + 15 + 14 + 15 + 14 + 3 + 0 + 3 + 0 + 6 + 3 + 7 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 73 + 99 + 80 + + 1 + 2 + 1 + 0 + 19 + 0 + 19 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 21 + 39 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violin...2 + 7 + + + FIFTH + 5 + + TRIANGL + 37 + 44 + 14 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0 + + + 0.5 + 8 + 2 + 2 + yes + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W1 + 0 + 1 + -3 + 3 + + 10 + 15 + 12 + 15 + 1 + 2 + 4 + 5 + 15 + 14 + 15 + 14 + 3 + 0 + 3 + 0 + 6 + 3 + 7 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 59 + 99 + 80 + + 1 + 2 + 1 + 0 + 19 + 0 + 19 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 21 + 39 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violin...2* + 8 + + + FIFTH + 5 + + TRIANGL + 31 + 28 + 19 + 18 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 7 + 3 + 1 + + + 1 + 1 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W3 + W2 + W3 + 0 + 1 + -1 + 2 + + 12 + 13 + 11 + 14 + 3 + 8 + 8 + 6 + 15 + 8 + 6 + 10 + 3 + 5 + 8 + 7 + 4 + 2 + 4 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 68 + 96 + 78 + + 1 + 3 + 1 + 2 + 10 + 20 + 10 + 20 + + + 0 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violin...3 + 9 + + + FIFTH + 4 + + TRIANGL + 35 + 0 + 7 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 1 + 0 + 2 + + + 2 + 8 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W6 + W1 + W1 + 0 + 1 + -1 + 2 + + 16 + 31 + 13 + 31 + 5 + 15 + 6 + 4 + 14 + 13 + 13 + 14 + 3 + 8 + 3 + 2 + 8 + 2 + 2 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 66 + 96 + 92 + + 1 + 0 + 1 + 0 + 10 + 20 + 10 + 20 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + Violin...3* + 10 + + + FIFTH + 5 + + TRIANGL + 31 + 25 + 46 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 7 + 2 + + + 1 + 2 + 1 + 1 + no + no + no + no + 96 + 32 + 8 + 8 + + W6 + W2 + W1 + W3 + -1 + 2 + 0 + -3 + + 10 + 10 + 8 + 18 + 6 + 4 + 4 + 4 + 14 + 13 + 6 + 7 + 6 + 16 + 9 + 5 + 7 + 5 + 5 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 55 + 99 + 88 + + 1 + 1 + 2 + 1 + 10 + 20 + 0 + 42 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violin...4 + 11 + + + FIFTH + 5 + + TRIANGL + 35 + 0 + 11 + 0 + on + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + + + 1 + 8 + 2 + 2 + no + no + no + no + 96 + 32 + 8 + 8 + + W2 + W2 + W1 + W1 + -1 + 2 + 0 + -3 + + 13 + 16 + 12 + 17 + 6 + 4 + 7 + 0 + 14 + 13 + 15 + 14 + 6 + 16 + 6 + 0 + 7 + 5 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 55 + 99 + 83 + + 1 + 1 + 2 + 1 + 10 + 20 + 0 + 42 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 3 + + Violin...4* + 12 + + + FIFTH + 5 + + TRIANGL + 34 + 39 + 52 + 50 + on + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 4 + 4 + 5 + + + 2 + 2 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W2 + W2 + W1 + 0 + 1 + 1 + -3 + + 12 + 17 + 10 + 16 + 7 + 12 + 4 + 5 + 15 + 10 + 15 + 15 + 4 + 7 + 4 + 4 + 7 + 6 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 99 + 80 + + 2 + 2 + 2 + 0 + 0 + 20 + 0 + 20 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violin...5 + 13 + + + FIFTH + 6 + + TRIANGL + 36 + 39 + 0 + 0 + on + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 2 + 1 + 2 + + + 6 + 2 + 6 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + 0 + 1 + 1 + -3 + + 12 + 31 + 12 + 31 + 4 + 13 + 4 + 5 + 15 + 15 + 15 + 15 + 4 + 7 + 4 + 4 + 7 + 6 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 99 + 83 + + 2 + 2 + 2 + 0 + 0 + 20 + 0 + 20 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violin...5* + 14 + + + FIFTH + 5 + + TRIANGL + 26 + 39 + 25 + 25 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 4 + 4 + + + 2 + 2 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W4 + W4 + 3 + 1 + -1 + -3 + + 10 + 17 + 10 + 18 + 10 + 13 + 11 + 5 + 15 + 15 + 11 + 15 + 3 + 5 + 4 + 4 + 7 + 6 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 83 + 99 + 83 + + 2 + 2 + 2 + 0 + 0 + 20 + 0 + 20 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violin...6 + 15 + + + FIFTH + 6 + + TRIANGL + 36 + 39 + 0 + 0 + on + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 2 + + + 4 + 6 + 6 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W4 + W1 + 0 + 1 + 1 + -3 + + 12 + 31 + 12 + 31 + 4 + 13 + 4 + 5 + 15 + 15 + 15 + 15 + 4 + 7 + 4 + 4 + 7 + 6 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 83 + 99 + 83 + + 2 + 2 + 2 + 0 + 0 + 20 + 0 + 20 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violin...6* + 16 + + + FIFTH + 5 + + TRIANGL + 36 + 39 + 0 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 4 + 1 + + + 2 + 2 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W4 + W4 + 1 + -1 + 1 + 0 + + 10 + 14 + 12 + 31 + 8 + 4 + 7 + 0 + 10 + 8 + 15 + 14 + 9 + 4 + 6 + 0 + 8 + 5 + 7 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 98 + 80 + + 0 + 1 + 1 + 1 + 10 + 20 + 0 + 42 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violin...7 + 17 + + + FIFTH + 4 + + TRIANGL + 35 + 39 + 0 + 0 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 1 + + + 2 + 2 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W4 + W3 + -1 + 0 + 2 + 3 + + 10 + 21 + 12 + 20 + 5 + 7 + 6 + 5 + 7 + 5 + 10 + 7 + 10 + 7 + 8 + 4 + 8 + 5 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 99 + 82 + + 0 + 0 + 1 + 1 + 10 + 20 + 10 + 42 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violin...8 + 18 + + + FIFTH + 4 + + TRIANGL + 35 + 39 + 0 + 0 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 1 + + + 2 + 8 + 4 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -1 + 0 + 0 + 3 + + 15 + 31 + 12 + 31 + 5 + 13 + 6 + 5 + 12 + 14 + 14 + 15 + 6 + 16 + 6 + 4 + 8 + 6 + 8 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 99 + 91 + + 0 + 0 + 1 + 1 + 10 + 20 + 10 + 42 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violin...8* + 19 + + + FIFTH + 5 + + TRIANGL + 29 + 23 + 64 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 3 + 0 + 2 + + + 2 + 4 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W3 + W1 + W4 + 1 + 2 + 1 + 3 + + 12 + 31 + 12 + 31 + 6 + 12 + 6 + 5 + 14 + 14 + 14 + 15 + 6 + 12 + 6 + 0 + 8 + 10 + 8 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 73 + 96 + 87 + + 0 + 0 + 0 + 1 + 10 + 20 + 10 + 50 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violin...9 + 20 + + + FIFTH + 5 + + TRIANGL + 36 + 39 + 0 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 2 + + + 8 + 6 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W4 + 1 + 2 + 1 + 3 + + 12 + 31 + 12 + 31 + 6 + 12 + 6 + 5 + 14 + 14 + 14 + 15 + 6 + 12 + 6 + 0 + 8 + 10 + 8 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 91 + 74 + 96 + 94 + + 0 + 0 + 0 + 1 + 10 + 20 + 10 + 50 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violin...9* + 21 + + + FIFTH + 7 + + TRIANGL + 27 + 8 + 31 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 1 + 6 + 1 + + + 2 + 2 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W1 + W1 + 0 + 2 + 0 + 1 + + 11 + 17 + 11 + 18 + 5 + 2 + 9 + 3 + 6 + 8 + 15 + 12 + 6 + 25 + 6 + 0 + 8 + 5 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 87 + 81 + 80 + + 1 + 1 + 1 + 1 + 10 + 20 + 0 + 42 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + Violin..10 + 22 + + + FIFTH + 7 + + TRIANGL + 32 + 8 + 12 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + + + 2 + 2 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 2 + 0 + 1 + + 14 + 16 + 10 + 10 + 5 + 2 + 9 + 3 + 6 + 8 + 15 + 12 + 6 + 25 + 6 + 0 + 8 + 5 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 87 + 95 + 80 + + 1 + 1 + 1 + 1 + 10 + 20 + 0 + 42 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + Violin..10* + 23 + + + FIFTH + 7 + + TRIANGL + 32 + 44 + 5 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 6 + 0 + 1 + + + 2 + 4 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W5 + W1 + W1 + 1 + 2 + -1 + 2 + + 11 + 14 + 10 + 24 + 5 + 6 + 6 + 5 + 13 + 1 + 14 + 14 + 0 + 0 + 6 + 0 + 8 + 5 + 7 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 50 + 97 + 79 + + 0 + 0 + 1 + 1 + 10 + 20 + 0 + 50 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violin..11 + 24 + + + FIFTH + 5 + + TRIANGL + 33 + 39 + 56 + 2 + on + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 2 + 4 + 2 + + + 2 + 2 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W5 + W6 + W2 + W3 + 2 + 0 + 1 + 0 + + 15 + 22 + 10 + 17 + 8 + 10 + 6 + 5 + 14 + 14 + 14 + 14 + 2 + 6 + 5 + 4 + 8 + 8 + 9 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 65 + 99 + 74 + + 0 + 0 + 1 + 1 + 10 + 10 + 0 + 50 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + Violin..12 + 26 + + + FIFTH + 5 + + TRIANGL + 36 + 39 + 0 + 0 + on + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 2 + + + 2 + 2 + 6 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W1 + W1 + W1 + 2 + 0 + 1 + 0 + + 16 + 24 + 15 + 31 + 8 + 10 + 6 + 5 + 14 + 14 + 14 + 14 + 2 + 6 + 5 + 4 + 8 + 8 + 9 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 99 + 82 + + 0 + 0 + 1 + 1 + 10 + 10 + 0 + 50 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + Violin..12* + 27 + + + THIRD + 7 + + TRIANGL + 33 + 39 + 7 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 3 + 2 + + + 2 + 2 + 8 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W6 + W1 + W1 + -2 + 2 + 0 + 2 + + 11 + 22 + 17 + 22 + 13 + 7 + 17 + 6 + 15 + 15 + 7 + 14 + 0 + 8 + 14 + 2 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 76 + 60 + 66 + + 2 + 1 + 1 + 1 + 2 + 73 + 0 + 12 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violin..13 + 28 + + + THIRD + 4 + + TRIANGL + 33 + 39 + 7 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + + + 2 + 4 + 10 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W6 + W1 + W1 + 0 + 0 + 0 + 1 + + 12 + 22 + 26 + 29 + 13 + 7 + 17 + 6 + 15 + 15 + 7 + 14 + 0 + 8 + 14 + 2 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 76 + 91 + 83 + + 2 + 1 + 1 + 1 + 2 + 73 + 0 + 12 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violin..13* + 29 + + + FIFTH + 3 + + TRIANGL + 35 + 39 + 5 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 1 + 4 + 1 + + + 2 + 2 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W7 + 0 + 1 + -1 + 2 + + 11 + 19 + 13 + 15 + 5 + 13 + 6 + 6 + 12 + 14 + 14 + 14 + 6 + 16 + 3 + 4 + 8 + 7 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 83 + 88 + + 0 + 0 + 1 + 0 + 10 + 20 + 10 + 1 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + Violin..14 + 30 + + + FIFTH + 5 + + TRIANGL + 35 + 39 + 5 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + + + 2 + 2 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W5 + 0 + 1 + -1 + 2 + + 15 + 31 + 14 + 31 + 5 + 13 + 6 + 6 + 12 + 14 + 14 + 14 + 6 + 16 + 3 + 4 + 8 + 7 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 74 + 99 + 89 + + 0 + 0 + 1 + 0 + 10 + 20 + 10 + 1 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + Violin..14* + 31 + + + FIFTH + 5 + + TRIANGL + 33 + 18 + 15 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 4 + 4 + 1 + + + 4 + 8 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W3 + W1 + W3 + 0 + 1 + -1 + 3 + + 11 + 18 + 13 + 26 + 4 + 17 + 6 + 6 + 13 + 14 + 14 + 14 + 5 + 16 + 3 + 4 + 7 + 6 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 78 + 96 + 78 + + 0 + 0 + 1 + 0 + 10 + 20 + 10 + 1 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + Violin..15 + 32 + + + FIFTH + 5 + + TRIANGL + 35 + 0 + 9 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 1 + + + 4 + 8 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W1 + W1 + W1 + 0 + 1 + -1 + 3 + + 16 + 29 + 14 + 31 + 4 + 17 + 6 + 6 + 13 + 14 + 14 + 14 + 5 + 16 + 3 + 4 + 7 + 6 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 78 + 96 + 78 + + 0 + 0 + 1 + 0 + 10 + 20 + 10 + 1 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + Violin..15* + 33 + + + THIRD + 5 + + TRIANGL + 33 + 39 + 7 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 5 + 1 + + + 2 + 10.5 + 2 + 2 + no + yes + no + no + 8 + 40 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + 3 + 0 + 1 + + 11 + 22 + 26 + 28 + 10 + 7 + 17 + 6 + 14 + 15 + 7 + 14 + 3 + 8 + 14 + 2 + 5 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 86 + 46 + 70 + 84 + + 1 + 0 + 0 + 0 + 0 + 73 + 0 + 12 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violin..16 + 34 + + + FIFTH + 4 + + TRIANGL + 44 + 10 + 8 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 1 + 5 + 1 + + + 2 + 2 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W4 + W2 + W2 + 0 + 3 + 0 + 3 + + 12 + 13 + 10 + 24 + 4 + 5 + 8 + 6 + 15 + 14 + 15 + 14 + 3 + 0 + 3 + 0 + 7 + 3 + 7 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 68 + 91 + 72 + + 1 + 1 + 1 + 1 + 19 + 0 + 19 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 21 + 39 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violin..17 + 35 + + + FIFTH + 4 + + TRIANGL + 44 + 10 + 8 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + + + 2 + 3 + 4 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W4 + W1 + W2 + 0 + 3 + 0 + 3 + + 12 + 13 + 10 + 24 + 4 + 5 + 4 + 6 + 15 + 14 + 15 + 14 + 3 + 0 + 3 + 0 + 7 + 3 + 7 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 68 + 91 + 72 + + 1 + 1 + 1 + 1 + 19 + 0 + 19 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 21 + 39 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violin..17* + 36 + + + FIFTH + 6 + + SQUARE + 32 + 26 + 27 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 1 + 4 + 4 + + + 2 + 2 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W2 + W2 + 1 + 0 + 0 + 1 + + 14 + 25 + 13 + 29 + 6 + 15 + 7 + 0 + 14 + 13 + 15 + 14 + 6 + 16 + 6 + 0 + 8 + 6 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 78 + 94 + 79 + + 0 + 1 + 1 + 1 + 10 + 10 + 0 + 42 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violin..18 + 37 + + + FIFTH + 6 + + TRIANGL + 35 + 0 + 11 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 1 + + + 2 + 2 + 4 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W2 + W2 + 1 + 0 + 0 + 1 + + 16 + 31 + 13 + 31 + 6 + 15 + 7 + 0 + 14 + 13 + 15 + 14 + 6 + 16 + 6 + 0 + 8 + 6 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 78 + 94 + 79 + + 0 + 1 + 1 + 1 + 10 + 10 + 0 + 42 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violin..18* + 38 + + + THIRD + 2 + + SQUARE + 33 + 39 + 33 + 0 + on + + + 2 + 0 + off + off + off + off + 1 + 0 + 0 + 0 + 4 + 3 + 4 + 2 + + + 2 + 2 + 6 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W3 + W4 + 0 + 1 + 0 + 1 + + 12 + 24 + 15 + 21 + 5 + 3 + 6 + 6 + 12 + 8 + 15 + 14 + 6 + 7 + 6 + 5 + 8 + 6 + 9 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 81 + 71 + 81 + + 0 + 0 + 1 + 2 + 10 + 20 + 10 + 30 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + Violin..19 + 39 + + + THIRD + 2 + + TRIANGL + 36 + 39 + 1 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 2 + + + 2 + 2 + 6 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W2 + W1 + 0 + 1 + 0 + 1 + + 15 + 31 + 15 + 31 + 5 + 13 + 6 + 6 + 12 + 14 + 15 + 14 + 6 + 16 + 6 + 5 + 8 + 6 + 9 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 81 + 71 + 81 + + 0 + 0 + 1 + 2 + 10 + 20 + 10 + 30 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + Violin..19* + 40 + + + FIRST + 5 + + TRIANGL + 32 + 25 + 46 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 4 + 2 + + + 2 + 2 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W3 + W4 + W5 + -1 + 0 + 3 + -3 + + 11 + 22 + 15 + 27 + 3 + 8 + 8 + 0 + 15 + 13 + 11 + 14 + 2 + 5 + 16 + 0 + 8 + 7 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 73 + 77 + 68 + + 1 + 1 + 1 + 0 + 19 + 25 + 1 + 66 + + + -12 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + VIOLINS + 41 + + + FIRST + 5 + + TRIANGL + 35 + 0 + 11 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 4 + 0 + + + 2 + 2 + 8 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W5 + W1 + -1 + 0 + 3 + -3 + + 15 + 30 + 31 + 31 + 3 + 8 + 15 + 0 + 15 + 13 + 14 + 14 + 2 + 5 + 16 + 0 + 8 + 7 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 81 + 83 + 73 + 71 + + 1 + 1 + 1 + 0 + 19 + 25 + 1 + 66 + + + -12 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + VIOLINS * + 42 + + + FIFTH + 5 + + TRIANGL + 30 + 24 + 59 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 2 + 4 + 1 + + + 2 + 4 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W5 + W2 + W2 + 0 + 1 + -1 + -2 + + 11 + 18 + 11 + 19 + 9 + 15 + 7 + 0 + 6 + 6 + 6 + 6 + 0 + 6 + 6 + 0 + 5 + 6 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 64 + 99 + 76 + + 0 + 0 + 0 + 0 + 40 + 9 + 20 + 60 + + + -12 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violins..1 + 43 + + + FIFTH + 5 + + TRIANGL + 33 + 10 + 15 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 2 + 8 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W5 + W2 + W2 + 0 + 1 + -1 + -2 + + 18 + 15 + 12 + 16 + 9 + 15 + 7 + 0 + 6 + 6 + 6 + 6 + 0 + 6 + 6 + 0 + 5 + 6 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 64 + 99 + 76 + + 0 + 0 + 0 + 0 + 40 + 9 + 20 + 60 + + + -24 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violins..1* + 44 + + + FIFTH + 5 + + TRIANGL + 32 + 44 + 20 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 3 + 2 + + + 2 + 4 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W5 + W2 + W2 + 1 + 1 + 1 + 2 + + 11 + 19 + 11 + 16 + 7 + 12 + 6 + 6 + 13 + 13 + 14 + 13 + 0 + 12 + 6 + 0 + 7 + 5 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 69 + 93 + 78 + + 0 + 0 + 0 + 0 + 30 + 50 + 20 + 33 + + + -12 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violins..2 + 45 + + + FIFTH + 5 + + TRIANGL + 32 + 44 + 20 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 2 + 8 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W3 + W2 + W3 + 1 + 1 + 1 + 2 + + 14 + 19 + 15 + 16 + 7 + 12 + 6 + 6 + 13 + 13 + 14 + 13 + 0 + 12 + 6 + 0 + 7 + 5 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 69 + 93 + 78 + + 0 + 0 + 0 + 0 + 30 + 50 + 20 + 33 + + + -12 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violins..2* + 46 + + + FIFTH + 5 + + TRIANGL + 30 + 39 + 52 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 2 + 5 + 1 + + + 2 + 4 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W5 + W3 + W1 + 1 + 1 + 0 + 2 + + 11 + 18 + 11 + 18 + 7 + 12 + 6 + 6 + 13 + 13 + 14 + 13 + 0 + 12 + 6 + 0 + 7 + 5 + 6 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 67 + 89 + 70 + + 0 + 0 + 0 + 0 + 30 + 50 + 40 + 33 + + + -12 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violins..3 + 47 + + + FIFTH + 5 + + TRIANGL + 35 + 39 + 12 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 2 + 6 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W5 + W5 + W3 + W1 + 1 + 1 + 0 + 2 + + 16 + 31 + 12 + 24 + 7 + 12 + 6 + 6 + 13 + 13 + 14 + 13 + 0 + 12 + 6 + 0 + 7 + 5 + 6 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 67 + 89 + 70 + + 0 + 0 + 0 + 0 + 30 + 50 + 40 + 33 + + + -12 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Violins..3* + 48 + + + FIFTH + 5 + + TRIANGL + 31 + 28 + 37 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 2 + 4 + 1 + + + 2 + 8 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W4 + W1 + W5 + -3 + 2 + -2 + 2 + + 11 + 15 + 10 + 21 + 5 + 12 + 6 + 7 + 14 + 12 + 14 + 14 + 1 + 12 + 0 + 5 + 7 + 4 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 82 + 87 + 91 + 80 + + 0 + 0 + 0 + 0 + 17 + 51 + 20 + 65 + + + -12 + POLY + 3 + FULL + 1 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + Violins..4 + 49 + + + FIFTH + 5 + + TRIANGL + 37 + 20 + 15 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 1 + + + 2 + 8 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W4 + W1 + W4 + -3 + 2 + -2 + 2 + + 13 + 15 + 10 + 15 + 5 + 12 + 6 + 4 + 14 + 12 + 14 + 14 + 1 + 12 + 0 + 0 + 7 + 4 + 6 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 82 + 87 + 91 + 87 + + 0 + 0 + 0 + 0 + 17 + 51 + 20 + 65 + + + -12 + POLY + 3 + FULL + 1 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + Violins..4* + 50 + + + + Other + 13 + + THIRD + 4 + + TRIANGL + 33 + 19 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 2 + 5 + 1 + + + 1 + 3 + 9 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 5 + 12 + 12 + 6 + 14 + 14 + 14 + 14 + 6 + 6 + 2 + 0 + 9 + 9 + 8 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 86 + 65 + 63 + + 2 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + 8 Stringer + 0 + + + SIXTH + 1 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 4 + 3 + + + 4 + 6 + 2 + 12 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + 1 + -1 + -1 + + 13 + 28 + 28 + 28 + 28 + 15 + 10 + 15 + 12 + 12 + 12 + 12 + 6 + 9 + 6 + 9 + 6 + 6 + 4 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 76 + 89 + 99 + + 2 + 1 + 1 + 3 + 0 + 0 + 0 + 46 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntInst.1 + 1 + + + SIXTH + 6 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 3 + 5 + 3 + + + 1 + 1 + 4 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + -2 + 3 + 0 + + 28 + 28 + 28 + 28 + 13 + 9 + 9 + 24 + 13 + 13 + 13 + 13 + 15 + 9 + 9 + 21 + 5 + 4 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 85 + 83 + 87 + + 1 + 1 + 1 + 3 + 0 + 0 + 0 + 46 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntInst.2 + 2 + + + SIXTH + 4 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 4 + + + 1 + 1 + 1 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + 0 + 3 + 0 + + 28 + 28 + 28 + 28 + 31 + 28 + 9 + 9 + 15 + 15 + 12 + 12 + 9 + 9 + 3 + 3 + 5 + 4 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 82 + 83 + 58 + + 2 + 1 + 2 + 3 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntInst.3 + 3 + + + THIRD + 1 + + TRIANGL + 31 + 0 + 0 + 0 + on + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 6 + 3 + + + 1 + 1 + 7 + 4.71 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 27 + 31 + 10 + 10 + 19 + 27 + 13 + 14 + 7 + 13 + 6 + 10 + 6 + 22 + 6 + 7 + 12 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 62 + 71 + 99 + + 1 + 1 + 1 + 2 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntInst.4 + 4 + + + FIFTH + 3 + + TRIANGL + 21 + 33 + 17 + 39 + off + + + 2 + 1 + off + off + on + off + 0 + 0 + 0 + 0 + 6 + 3 + 6 + 4 + + + 1 + 2 + 6 + 10 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -1 + -3 + -3 + + 31 + 16 + 31 + 16 + 21 + 12 + 21 + 12 + 13 + 12 + 13 + 12 + 6 + 3 + 6 + 9 + 5 + 9 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 62 + 99 + 61 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntInst.5 + 5 + + + FIFTH + 3 + + TRIANGL + 35 + 60 + 64 + 96 + on + + + 1 + 1 + off + on + off + off + 0 + 0 + 0 + 0 + 7 + 4 + 5 + 4 + + + 2 + 4 + 2 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -1 + -3 + -3 + + 28 + 15 + 28 + 15 + 5 + 15 + 5 + 16 + 13 + 10 + 13 + 10 + 3 + 13 + 3 + 13 + 7 + 3 + 7 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 60 + 71 + 59 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntInst.6 + 6 + + + SIXTH + 4 + + TRIANGL + 35 + 90 + 1 + 2 + off + + + 4 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 3 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -1 + -3 + -3 + + 16 + 19 + 21 + 31 + 5 + 12 + 18 + 9 + 14 + 15 + 15 + 13 + 6 + 18 + 31 + 4 + 9 + 9 + 9 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 60 + 99 + 76 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntInst.7 + 7 + + + THIRD + 7 + + TRIANGL + 31 + 0 + 0 + 0 + on + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 3 + + + 2 + 1 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 28 + 28 + 27 + 31 + 25 + 30 + 21 + 31 + 8 + 8 + 8 + 8 + 9 + 0 + 9 + 9 + 5 + 7 + 4 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 84 + 93 + 99 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntInst.8 + 8 + + + FIFTH + 5 + + TRIANGL + 25 + 46 + 66 + 15 + on + + + 3 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 7 + 4 + 5 + 3 + + + 2 + 1 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -2 + 0 + 2 + + 28 + 28 + 31 + 31 + 19 + 9 + 9 + 22 + 11 + 11 + 14 + 11 + 9 + 6 + 4 + 9 + 6 + 3 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 84 + 90 + 99 + + 1 + 2 + 2 + 2 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntInst.9 + 9 + + + THIRD + 3 + + TRIANGL + 25 + 46 + 66 + 15 + on + + + 3 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 6 + 4 + 4 + 1 + + + 1 + 4 + 0.5 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 28 + 15 + 13 + 24 + 18 + 15 + 12 + 22 + 14 + 11 + 13 + 11 + 7 + 13 + 7 + 24 + 7 + 6 + 4 + 12 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 60 + 72 + 71 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntInst10 + 10 + + + FIFTH + 5 + + TRIANGL + 40 + 0 + 0 + 63 + off + + + 2 + 1 + off + on + on + off + 0 + 0 + 0 + 0 + 5 + 2 + 4 + 2 + + + 1 + 2 + 1 + 9 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 0 + -3 + 0 + + 28 + 28 + 31 + 31 + 10 + 12 + 6 + 24 + 10 + 10 + 15 + 6 + 9 + 31 + 15 + 15 + 9 + 9 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 79 + 92 + 99 + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntInst11 + 11 + + + FOURTH + 3 + + TRIANGL + 24 + 2 + 32 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 4 + 2 + 4 + + + 2 + 5 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W4 + W8 + W3 + 0 + 0 + 0 + 0 + + 23 + 23 + 24 + 26 + 15 + 18 + 6 + 14 + 10 + 12 + 14 + 6 + 9 + 18 + 0 + 15 + 6 + 7 + 4 + 6 + VOF + VOF + VOF + VOF + + + 99 + 97 + 99 + 50 + 50 + 50 + + 99 + 89 + 64 + 84 + + 2 + 2 + 2 + 2 + 0 + 10 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Syamisen + 12 + + + FIRST + 6 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 1 + 1 + 1 + + + 1 + 1 + 2 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W4 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 24 + 31 + 12 + 11 + 15 + 15 + 10 + 13 + 6 + 0 + 3 + 6 + 8 + 3 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 54 + 87 + + 0 + 0 + 0 + 1 + 0 + 34 + 20 + 30 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Zither + 13 + + + + + KEYBOARDS + 3 + + Clavichord + 0 + + THIRD + 7 + + TRIANGL + 35 + 0 + 8 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 5 + 4 + 3 + + + 0.5 + 0.5 + 0.5 + 12 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W5 + W2 + W1 + 2 + -2 + 1 + 2 + + 30 + 30 + 29 + 30 + 28 + 27 + 1 + 28 + 12 + 13 + 0 + 12 + 0 + 0 + 0 + 0 + 9 + 9 + 12 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 86 + 83 + 75 + + 2 + 0 + 2 + 2 + 0 + 12 + 46 + 15 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Clav Lead + 0 + + + THIRD + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 3 + + + 1 + 0.5 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W2 + W1 + -3 + 0 + 3 + -1 + + 25 + 26 + 31 + 26 + 15 + 15 + 10 + 15 + 12 + 13 + 0 + 12 + 5 + 4 + 4 + 4 + 9 + 9 + 12 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 88 + 91 + + 2 + 2 + 1 + 1 + 0 + 12 + 46 + 15 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Clav Perc + 1 + + + THIRD + 7 + + TRIANGL + 35 + 26 + 15 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 4 + 3 + + + 4 + 0.5 + 0.5 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + 0 + 0 + 0 + 3 + + 30 + 30 + 30 + 30 + 21 + 4 + 3 + 28 + 12 + 13 + 0 + 12 + 5 + 4 + 4 + 4 + 9 + 9 + 12 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 95 + 85 + 94 + + 2 + 0 + 2 + 2 + 0 + 12 + 46 + 15 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Clav Synth + 2 + + + FIRST + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 4 + 4 + 1 + + + 1 + 0.5 + 0.5 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W2 + 0 + 0 + 0 + 0 + + 28 + 31 + 31 + 31 + 20 + 12 + 16 + 11 + 14 + 15 + 15 + 9 + 8 + 8 + 5 + 8 + 12 + 5 + 6 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 92 + 82 + 66 + + 1 + 0 + 2 + 1 + 0 + 0 + 94 + 16 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Clav.....1 + 3 + + + FOURTH + 3 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 4 + 1 + + + 0.5 + 0.5 + 7 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W3 + W1 + 0 + -2 + 1 + 2 + + 30 + 30 + 29 + 30 + 28 + 27 + 1 + 28 + 12 + 13 + 0 + 12 + 5 + 1 + 1 + 5 + 9 + 9 + 12 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 95 + 81 + 67 + + 2 + 0 + 2 + 2 + 0 + 12 + 46 + 15 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Clav.....2 + 4 + + + THIRD + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 3 + 1 + + + 2 + 1 + 10 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W2 + 0 + 1 + 1 + 2 + + 24 + 23 + 29 + 30 + 27 + 26 + 1 + 28 + 12 + 13 + 0 + 12 + 5 + 1 + 1 + 5 + 7 + 1 + 1 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 84 + 68 + 84 + + 2 + 0 + 1 + 2 + 2 + 9 + 50 + 32 + + + 0 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Clav.....3 + 5 + + + THIRD + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 4 + 3 + 1 + + + 2 + 0.5 + 10 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -2 + -1 + 3 + 2 + + 25 + 23 + 29 + 30 + 27 + 9 + 1 + 21 + 14 + 0 + 0 + 0 + 6 + 15 + 11 + 10 + 9 + 1 + 1 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 83 + 62 + 97 + + 1 + 0 + 2 + 2 + 2 + 9 + 50 + 32 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Clav.....4 + 6 + + + FIFTH + 7 + + TRIANGL + 30 + 0 + 0 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 3 + 1 + + + 2 + 0.5 + 0.5 + 7 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W3 + W1 + -2 + -1 + 0 + 2 + + 25 + 25 + 28 + 28 + 25 + 25 + 16 + 16 + 14 + 14 + 12 + 12 + 6 + 6 + 7 + 7 + 9 + 9 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 87 + 99 + 81 + + 1 + 1 + 3 + 3 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Clav.....5 + 7 + + + FIFTH + 7 + + TRIANGL + 30 + 0 + 0 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 3 + 3 + 1 + + + 2 + 0.5 + 4 + 20.76 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + -2 + -1 + 0 + 2 + + 25 + 25 + 28 + 28 + 25 + 25 + 5 + 16 + 14 + 14 + 12 + 12 + 6 + 6 + 7 + 7 + 9 + 9 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 90 + 93 + 78 + + 1 + 1 + 3 + 3 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Clav.....6 + 8 + + + THIRD + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 4 + 0 + + + 0.5 + 0.5 + 2 + 12 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W5 + W1 + W1 + -2 + -1 + 3 + 2 + + 25 + 23 + 29 + 28 + 27 + 9 + 1 + 1 + 14 + 0 + 0 + 7 + 6 + 15 + 11 + 2 + 9 + 1 + 1 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 83 + 57 + 53 + + 1 + 0 + 2 + 1 + 2 + 9 + 50 + 53 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Clav.....7 + 9 + + + THIRD + 3 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 1 + + + 2 + 0.5 + 0.5 + 7 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + 0 + -2 + 1 + 2 + + 30 + 30 + 29 + 30 + 28 + 27 + 1 + 28 + 12 + 13 + 0 + 12 + 5 + 1 + 1 + 5 + 9 + 9 + 12 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 83 + 89 + 76 + + 2 + 0 + 2 + 2 + 0 + 12 + 46 + 15 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Clav.....8 + 10 + + + FIFTH + 3 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 4 + 3 + + + 1 + 1 + 1 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W5 + W5 + W1 + 0 + -2 + 1 + 2 + + 30 + 30 + 29 + 30 + 28 + 27 + 1 + 28 + 12 + 13 + 0 + 12 + 5 + 1 + 1 + 5 + 9 + 9 + 12 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 98 + 82 + + 2 + 0 + 2 + 2 + 0 + 12 + 46 + 15 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Clav.....9 + 11 + + + THIRD + 7 + + TRIANGL + 28 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 2 + 3 + 4 + + + 2 + 0.5 + 5 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W5 + W3 + -1 + -2 + 3 + -3 + + 31 + 31 + 31 + 31 + 0 + 12 + 6 + 1 + 15 + 10 + 14 + 0 + 10 + 1 + 1 + 0 + 15 + 1 + 1 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 88 + 84 + 79 + 77 + + 1 + 1 + 1 + 2 + 0 + 0 + 35 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Clavi + 12 + + + FIRST + 6 + + TRIANGL + 27 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 3 + 4 + + + 1 + 0.5 + 5 + 15 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 20 + 9 + 18 + 11 + 14 + 15 + 15 + 9 + 8 + 8 + 5 + 8 + 12 + 5 + 6 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 73 + 70 + 66 + + 1 + 0 + 0 + 2 + 0 + 0 + 16 + 16 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + EZ Clav + 13 + + + FOURTH + 6 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 4 + 2 + 1 + + + 3 + 0.5 + 4 + 12 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -2 + 1 + 2 + + 30 + 30 + 29 + 30 + 28 + 27 + 1 + 28 + 12 + 13 + 0 + 12 + 5 + 1 + 1 + 5 + 9 + 9 + 12 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 97 + 77 + 86 + + 2 + 0 + 2 + 2 + 0 + 12 + 46 + 15 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Fuzz Clavi + 14 + + + THIRD + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 4 + 2 + 0 + + + 2 + 1 + 10 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W4 + W4 + 0 + -3 + 3 + 3 + + 27 + 29 + 29 + 29 + 10 + 7 + 9 + 6 + 14 + 14 + 14 + 14 + 7 + 9 + 6 + 6 + 10 + 7 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 80 + 82 + + 1 + 0 + 2 + 1 + 0 + 0 + 16 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Klavinet * + 15 + + + THIRD + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 4 + 2 + + + 2 + 1 + 1 + 14 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 1 + 1 + 2 + + 24 + 23 + 29 + 30 + 27 + 26 + 1 + 28 + 12 + 13 + 0 + 12 + 5 + 1 + 1 + 5 + 7 + 1 + 1 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 75 + 57 + 78 + + 2 + 0 + 1 + 2 + 2 + 9 + 50 + 32 + + + 0 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Ornt Clav + 16 + + + FOURTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 7 + 7 + 13 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 7 + 18 + 13 + 16 + 8 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 67 + 69 + 76 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Rimbaclav + 17 + + + THIRD + 7 + + TRIANGL + 85 + 0 + 57 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + + + 1 + 9 + 13 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 27 + 16 + 28 + 19 + 14 + 2 + 11 + 24 + 12 + 12 + 12 + 12 + 16 + 1 + 4 + 20 + 10 + 10 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 92 + 65 + 97 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SplashClav + 18 + + + FIFTH + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 2 + + + 8 + 5 + 1 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W4 + W5 + 3 + 3 + -3 + 0 + + 31 + 31 + 23 + 26 + 9 + 12 + 6 + 9 + 0 + 0 + 13 + 15 + 15 + 6 + 5 + 7 + 6 + 2 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 87 + 99 + 81 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 4 + + Synclav. * + 19 + + + THIRD + 0 + + TRIANGL + 28 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 3 + 4 + + + 2 + 0.5 + 5 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W2 + W8 + 0 + 1 + -1 + 0 + + 31 + 31 + 31 + 31 + 7 + 8 + 6 + 11 + 13 + 14 + 15 + 9 + 8 + 7 + 4 + 7 + 12 + 5 + 6 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 88 + 70 + 73 + + 1 + 1 + 1 + 2 + 0 + 0 + 35 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Thin Clav + 20 + + + + Harpsichord + 1 + + FIFTH + 3 + + TRIANGL + 31 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 4 + 0.5 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W1 + W1 + W5 + 1 + 2 + 3 + -2 + + 23 + 15 + 23 + 26 + 8 + 16 + 8 + 19 + 12 + 13 + 12 + 13 + 6 + 0 + 6 + 0 + 5 + 1 + 4 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 88 + 93 + 76 + 91 + + 2 + 3 + 2 + 2 + 0 + 0 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Harpschrd1 + 0 + + + FIFTH + 3 + + TRIANGL + 31 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 4 + 0.5 + 0.5 + 1.49 + no + no + no + no + 8 + 8 + 8 + 9 + + W4 + W1 + W1 + W5 + 1 + 2 + 3 + -2 + + 23 + 15 + 23 + 26 + 8 + 16 + 8 + 19 + 12 + 13 + 12 + 13 + 6 + 0 + 6 + 0 + 5 + 1 + 4 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 88 + 93 + 76 + 91 + + 2 + 3 + 2 + 2 + 0 + 0 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Harpschrd2 + 1 + + + FIFTH + 3 + + TRIANGL + 31 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 3 + 0.5 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W1 + W1 + W5 + 1 + 2 + 3 + -2 + + 23 + 15 + 23 + 26 + 8 + 16 + 8 + 19 + 12 + 10 + 12 + 10 + 6 + 0 + 6 + 0 + 7 + 1 + 7 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 88 + 93 + 76 + 91 + + 2 + 3 + 2 + 2 + 0 + 0 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Harpschrd3 + 2 + + + FIFTH + 3 + + TRIANGL + 31 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 4 + 0.5 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W1 + W1 + W5 + 1 + 2 + 3 + -2 + + 23 + 15 + 23 + 26 + 8 + 16 + 8 + 19 + 12 + 13 + 12 + 13 + 6 + 0 + 6 + 0 + 7 + 1 + 7 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 88 + 93 + 76 + 91 + + 2 + 3 + 2 + 2 + 0 + 0 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Harpschrd4 + 3 + + + THIRD + 6 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 6 + 0 + + + 4 + 1 + 4 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W1 + W3 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 26 + 25 + 31 + 29 + 13 + 13 + 13 + 12 + 1 + 3 + 5 + 1 + 7 + 4 + 9 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 91 + 63 + 87 + + 3 + 0 + 2 + 3 + 0 + 0 + 0 + 41 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Hrpsicord1 + 4 + + + FIFTH + 1 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 0 + 5 + 0 + + + 4 + 0.5 + 0.5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -1 + 1 + -2 + 1 + + 28 + 28 + 23 + 29 + 24 + 24 + 8 + 17 + 13 + 13 + 12 + 13 + 5 + 0 + 5 + 0 + 6 + 1 + 6 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 91 + 96 + 91 + + 2 + 1 + 2 + 3 + 0 + 0 + 0 + 0 + + + 12 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Hrpsicord2 + 5 + + + THIRD + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 2 + 5 + 2 + + + 4 + 1 + 6 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 28 + 23 + 28 + 29 + 13 + 13 + 13 + 13 + 1 + 3 + 5 + 1 + 5 + 1 + 9 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 87 + 66 + 90 + + 3 + 0 + 1 + 3 + 0 + 0 + 0 + 15 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Hrpsicord3 + 6 + + + THIRD + 6 + + TRIANGL + 28 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + + + 4 + 1 + 8 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W1 + W2 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 30 + 19 + 31 + 29 + 13 + 15 + 15 + 12 + 6 + 1 + 1 + 0 + 7 + 1 + 9 + 1 + VOF + V12 + V12 + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 76 + 77 + 84 + + 2 + 0 + 2 + 3 + 0 + 0 + 33 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + LiteHarpsi + 7 + + + FIFTH + 3 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 4 + 0.5 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + 2 + 3 + -2 + + 23 + 15 + 23 + 26 + 8 + 16 + 8 + 19 + 12 + 13 + 12 + 13 + 6 + 0 + 6 + 0 + 5 + 1 + 5 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 86 + 93 + 94 + 91 + + 2 + 3 + 2 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + RichHarpsi + 8 + + + + Organ + 2 + + EIGHTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 2 + 4 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 0 + 1 + 3 + + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 15 + 15 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 90 + 90 + 90 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + 16 8 4 2 F + 0 + + + SEVENTH + 7 + + TRIANGL + 35 + 0 + 39 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 2 + 4 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 0 + 0 + 0 + 0 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 10 + 10 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 94 + 63 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 27 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 99 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + <6 Tease> + 1 + + + FIFTH + 0 + + TRIANGL + 28 + 21 + 7 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1.5 + 1.5 + 1.49 + 1.49 + no + no + no + no + 16 + 16 + 9 + 9 + + W1 + W1 + W1 + W1 + -2 + -2 + 3 + 3 + + 30 + 31 + 30 + 31 + 1 + 28 + 1 + 27 + 13 + 13 + 13 + 13 + 0 + 0 + 0 + 0 + 15 + 15 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 87 + 95 + 87 + + 0 + 0 + 0 + 0 + 10 + 9 + 10 + 9 + + + -19 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnalogOrgn + 2 + + + EIGHTH + 0 + + TRIANGL + 40 + 0 + 10 + 44 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 4 + 3 + + + 0.5 + 2 + 4 + 14 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W3 + W1 + W1 + 1 + 1 + 1 + 1 + + 31 + 31 + 31 + 31 + 6 + 19 + 24 + 15 + 15 + 15 + 15 + 15 + 6 + 6 + 6 + 6 + 13 + 13 + 13 + 13 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 98 + 85 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + B3 Organ.1 + 3 + + + FIFTH + 0 + + TRIANGL + 40 + 0 + 10 + 44 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 4 + 5 + 2 + + + 2 + 4 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W3 + W1 + 1 + 1 + 1 + 1 + + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 22 + 15 + 15 + 15 + 15 + 7 + 31 + 2 + 5 + 13 + 13 + 13 + 13 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 62 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + B3 Organ.2 + 4 + + + SEVENTH + 0 + + TRIANGL + 33 + 0 + 0 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 4 + 3 + 2 + + + 1 + 2 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W4 + W1 + W1 + 1 + 1 + 1 + 1 + + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 16 + 15 + 15 + 15 + 15 + 3 + 4 + 3 + 4 + 13 + 13 + 13 + 13 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 82 + + 0 + 0 + 2 + 0 + 0 + 0 + 10 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + B3 Organ.3 + 5 + + + FIFTH + 7 + + TRIANGL + 29 + 0 + 0 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 1 + + + 0.5 + 0.5 + 2 + 10 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W8 + W4 + W1 + 3 + -3 + -3 + 0 + + 12 + 24 + 15 + 22 + 0 + 0 + 0 + 0 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 5 + 8 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 97 + 99 + 71 + + 2 + 2 + 2 + 0 + 0 + 91 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Big Church + 6 + + + SEVENTH + 7 + + TRIANGL + 12 + 15 + 0 + 0 + off + + + 3 + 2 + on + on + on + on + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 2 + + + 1 + 4 + 2 + 10 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + -3 + 3 + -3 + 3 + + 11 + 16 + 16 + 22 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 8 + 7 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 96 + 99 + 71 + + 2 + 1 + 1 + 1 + 20 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 0 + 27 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ChurchOrg* + 7 + + + EIGHTH + 0 + + TRIANGL + 35 + 1 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 7 + 5 + 3 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W2 + 0 + 0 + 0 + 0 + + 14 + 16 + 23 + 18 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 6 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 32 + 67 + 90 + 89 + + 0 + 0 + 0 + 0 + 25 + 25 + 25 + 25 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ClosedFlut + 8 + + + EIGHTH + 0 + + SQUARE + 35 + 1 + 6 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W5 + W7 + W1 + 0 + 0 + 0 + 0 + + 14 + 16 + 23 + 18 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 6 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 90 + 90 + 88 + + 0 + 0 + 0 + 0 + 25 + 25 + 25 + 25 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Cornopean + 9 + + + FOURTH + 7 + + TRIANGL + 35 + 0 + 1 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 3 + 4 + 2 + 0 + 3 + 7 + + + 1.49 + 2.25 + 1.5 + 1.51 + no + no + no + no + 9 + 12 + 16 + 14 + + W2 + W1 + W8 + W3 + -3 + -3 + 3 + -1 + + 18 + 16 + 21 + 31 + 27 + 27 + 10 + 10 + 14 + 6 + 15 + 15 + 0 + 0 + 0 + 0 + 11 + 8 + 8 + 8 + VOF + V48 + V48 + V24 + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 82 + 66 + + 0 + 2 + 3 + 3 + 0 + 15 + 27 + 0 + + + -7 + POLY + 2 + FINGER + 0 + POR + 99 + 0 + 0 + 50 + 0 + 5 + 0 + 50 + 60 + 0 + 0 + 0 + 0 + 0 + + DistortOrg + 10 + + + EIGHTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 1 + 2 + on + on + on + on + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.5 + 3 + 4 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 23 + 23 + 23 + 23 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 9 + 9 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 99 + 81 + 90 + + 0 + 0 + 0 + 0 + 20 + 30 + 40 + 50 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 48 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Drawbar1 * + 11 + + + EIGHTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 1 + 2 + on + on + on + on + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 2 + 5 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 23 + 23 + 23 + 23 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 9 + 9 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 83 + 81 + 75 + + 0 + 0 + 0 + 0 + 10 + 25 + 44 + 47 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 48 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Drawbar2 * + 12 + + + FIFTH + 6 + + TRIANGL + 20 + 0 + 1 + 2 + off + + + 4 + 3 + off + on + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 5 + + + 1 + 0.5 + 0.5 + 14.1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W8 + -3 + 3 + 3 + -3 + + 31 + 31 + 31 + 31 + 18 + 15 + 18 + 14 + 15 + 15 + 13 + 9 + 6 + 5 + 6 + 15 + 8 + 7 + 8 + 14 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 90 + 99 + 73 + + 0 + 0 + 0 + 1 + 0 + 24 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Dyno * + 13 + + + FIFTH + 7 + + TRIANGL + 24 + 3 + 16 + 12 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 3 + 2 + 3 + + + 1 + 4 + 24.11 + 12.11 + no + no + yes + yes + 8 + 8 + 31 + 48 + + W1 + W1 + W1 + W8 + 0 + -3 + 3 + 3 + + 31 + 22 + 31 + 31 + 4 + 7 + 19 + 28 + 14 + 11 + 8 + 10 + 3 + 3 + 8 + 4 + 7 + 7 + 6 + 7 + VOF + VOF + VOF + V48 + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 92 + 78 + + 2 + 2 + 1 + 3 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 4 + + DynoWurlie + 14 + + + SEVENTH + 6 + + TRIANGL + 35 + 14 + 22 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 5 + 5 + 5 + + + 0.5 + 2 + 3 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W1 + W1 + W3 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 21 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 3 + 3 + 3 + 3 + 15 + 15 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 91 + 90 + 89 + 73 + + 0 + 0 + 0 + 0 + 25 + 20 + 80 + 38 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Organ..1 + 15 + + + SIXTH + 6 + + TRIANGL + 28 + 0 + 25 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 5 + + + 4 + 4 + 4 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W3 + W1 + W1 + -1 + 1 + -2 + -1 + + 31 + 31 + 31 + 21 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 3 + 3 + 3 + 3 + 15 + 15 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 90 + 89 + 42 + + 0 + 0 + 0 + 0 + 25 + 20 + 80 + 38 + + + -24 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Organ..2 + 16 + + + SEVENTH + 0 + + TRIANGL + 35 + 0 + 14 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 6 + + + 1 + 4 + 1 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W4 + W1 + -1 + 1 + -2 + -1 + + 31 + 31 + 31 + 24 + 31 + 31 + 31 + 22 + 15 + 15 + 15 + 15 + 2 + 3 + 31 + 3 + 12 + 12 + 12 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 92 + 99 + 76 + + 0 + 0 + 0 + 0 + 25 + 20 + 0 + 0 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Organ..3 + 17 + + + SEVENTH + 0 + + TRIANGL + 14 + 0 + 71 + 78 + on + + + 1 + 1 + off + off + off + on + 0 + 0 + 0 + 0 + 5 + 3 + 6 + 4 + + + 0.5 + 3 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W3 + W1 + W1 + 3 + -3 + 3 + 0 + + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 22 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 12 + 12 + 12 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 92 + 80 + 85 + + 0 + 0 + 0 + 0 + 25 + 20 + 0 + 0 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Organ..4 + 18 + + + EIGHTH + 0 + + TRIANGL + 14 + 0 + 71 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 6 + 5 + + + 0.5 + 2 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W4 + W1 + W1 + 3 + -3 + 0 + 3 + + 23 + 27 + 31 + 30 + 31 + 31 + 31 + 22 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 12 + 12 + 12 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 86 + 87 + 90 + + 0 + 0 + 0 + 1 + 25 + 20 + 0 + 0 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Organ..5 + 19 + + + SIXTH + 0 + + TRIANGL + 0 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 4 + + + 0.5 + 2 + 4 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 28 + 31 + 27 + 31 + 31 + 31 + 18 + 31 + 15 + 15 + 15 + 15 + 0 + 7 + 31 + 0 + 12 + 12 + 12 + 12 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 92 + 80 + 65 + + 0 + 0 + 0 + 1 + 25 + 20 + 0 + 0 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Organ..6 + 20 + + + EIGHTH + 0 + + TRIANGL + 33 + 0 + 13 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 6 + 3 + + + 1 + 1 + 2 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W3 + W1 + W1 + 3 + 2 + 3 + -3 + + 28 + 31 + 27 + 31 + 31 + 24 + 18 + 31 + 15 + 15 + 15 + 15 + 6 + 21 + 6 + 3 + 12 + 10 + 12 + 13 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 81 + + 0 + 0 + 0 + 1 + 25 + 20 + 0 + 0 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Organ..7 + 21 + + + EIGHTH + 0 + + TRIANGL + 39 + 0 + 13 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 4 + 5 + + + 0.5 + 1 + 1 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W1 + W3 + W1 + 0 + 0 + 0 + 0 + + 28 + 31 + 27 + 31 + 31 + 24 + 18 + 31 + 15 + 15 + 15 + 15 + 6 + 21 + 6 + 3 + 12 + 10 + 12 + 13 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 0 + 0 + 0 + 1 + 25 + 20 + 0 + 99 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Organ..8 + 22 + + + FIRST + 0 + + TRIANGL + 35 + 0 + 6 + 0 + on + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 3 + + + 1 + 1 + 3 + 7 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 12 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 9 + 10 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 71 + 20 + 65 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Organ..9 + 23 + + + SIXTH + 5 + + TRIANGL + 46 + 0 + 34 + 0 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 3 + + + 1 + 2 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W3 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 1 + 4 + 3 + 4 + 13 + 12 + 13 + 13 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 70 + + 0 + 0 + 0 + 0 + 0 + 0 + 99 + 99 + + + -12 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Organ.10 + 24 + + + FOURTH + 0 + + TRIANGL + 35 + 0 + 6 + 0 + on + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 5 + 3 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W3 + 1 + -1 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 12 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 9 + 10 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 65 + 53 + 77 + + 0 + 0 + 0 + 0 + 1 + 16 + 0 + 99 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Organ.11 + 25 + + + FIFTH + 0 + + TRIANGL + 29 + 0 + 13 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 4 + + + 1 + 0.5 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W5 + W1 + 1 + 0 + 0 + 0 + + 25 + 4 + 27 + 31 + 21 + 21 + 18 + 31 + 15 + 15 + 15 + 15 + 10 + 3 + 6 + 3 + 9 + 7 + 12 + 13 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 99 + 99 + 68 + + 0 + 0 + 0 + 1 + 25 + 20 + 0 + 99 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Organ.12 + 26 + + + THIRD + 0 + + TRIANGL + 35 + 0 + 6 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 4 + + + 1 + 0.5 + 3 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 0 + 0 + 0 + 0 + + 26 + 31 + 26 + 31 + 31 + 31 + 31 + 12 + 15 + 15 + 15 + 15 + 2 + 0 + 2 + 0 + 9 + 10 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 71 + 42 + 45 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Organ.13 + 27 + + + EIGHTH + 3 + + TRIANGL + 32 + 0 + 3 + 0 + off + + + 5 + 2 + on + on + on + on + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.5 + 1 + 1.49 + 3 + no + no + no + no + 8 + 8 + 9 + 8 + + W1 + W1 + W1 + W1 + -3 + 3 + -3 + 3 + + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 11 + 15 + 15 + 15 + 8 + 0 + 0 + 0 + 1 + 14 + 14 + 14 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 95 + 99 + 95 + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 24 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E.Organ 1 + 28 + + + SEVENTH + 4 + + TRIANGL + 35 + 0 + 1 + 42 + off + + + 4 + 0 + off + off + off + on + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 3 + 2 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 3 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 31 + 9 + 10 + 15 + 15 + 15 + 10 + 0 + 0 + 0 + 0 + 12 + 12 + 12 + 11 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 95 + 93 + 67 + + 0 + 0 + 0 + 0 + 0 + 26 + 8 + 32 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E.Organ 2 + 29 + + + EIGHTH + 5 + + TRIANGL + 33 + 0 + 0 + 21 + off + + + 4 + 2 + on + on + on + on + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 1 + 2 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W1 + W2 + W1 + 3 + -3 + 2 + -2 + + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 20 + 10 + 10 + 10 + 10 + 0 + 0 + 0 + 0 + 15 + 15 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 92 + 99 + 94 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E.Organ 3 + 30 + + + EIGHTH + 7 + + TRIANGL + 35 + 0 + 25 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 2 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W5 + W2 + W1 + 3 + 3 + -3 + -3 + + 23 + 21 + 24 + 20 + 1 + 0 + 1 + 0 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 6 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 86 + 92 + 85 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 27 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 99 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E.Organ 4 + 31 + + + EIGHTH + 7 + + TRIANGL + 35 + 0 + 18 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 2 + 4 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W6 + W6 + W5 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 0 + 0 + 0 + 0 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 11 + 11 + 11 + 11 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 90 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 27 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 99 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Farcheeza + 32 + + + EIGHTH + 5 + + TRIANGL + 37 + 0 + 3 + 11 + off + + + 3 + 2 + on + on + on + on + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.75 + 1.5 + 2.25 + 4.49 + no + no + no + no + 12 + 16 + 12 + 11 + + W1 + W1 + W1 + W1 + 0 + 3 + -3 + 0 + + 28 + 28 + 28 + 31 + 6 + 25 + 16 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 0 + 12 + 11 + 12 + 12 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 97 + + 0 + 0 + 0 + 0 + 20 + 20 + 21 + 28 + + + -7 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 11 + 64 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Hammond * + 33 + + + SECOND + 0 + + TRIANGL + 35 + 14 + 16 + 16 + on + + + 4 + 1 + on + off + on + off + 7 + 4 + 3 + 4 + 4 + 6 + 5 + 2 + + + 1 + 4 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W1 + 0 + 0 + 0 + 0 + + 22 + 31 + 4 + 2 + 31 + 8 + 31 + 4 + 15 + 12 + 15 + 5 + 0 + 0 + 0 + 16 + 13 + 13 + 13 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 61 + 70 + 82 + + 0 + 0 + 3 + 2 + 0 + 18 + 13 + 0 + + + 0 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Hammond..1 + 34 + + + FOURTH + 0 + + SQUARE + 37 + 0 + 7 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 6 + 3 + + + 2 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W1 + W3 + 0 + -1 + -1 + 0 + + 27 + 31 + 31 + 27 + 30 + 26 + 31 + 31 + 15 + 12 + 15 + 11 + 0 + 0 + 0 + 0 + 9 + 13 + 13 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 91 + 70 + 70 + 74 + + 0 + 3 + 2 + 0 + 99 + 82 + 25 + 25 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 1 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Hammond..2 + 35 + + + SIXTH + 1 + + TRIANGL + 14 + 0 + 20 + 24 + off + + + 3 + 2 + on + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 3 + + + 1 + 2 + 3 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + -2 + 2 + 0 + + 31 + 31 + 25 + 31 + 31 + 31 + 31 + 14 + 14 + 14 + 15 + 6 + 0 + 4 + 0 + 5 + 7 + 7 + 7 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 91 + 78 + 71 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Hammond..3 + 36 + + + EIGHTH + 7 + + TRIANGL + 35 + 0 + 35 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 3 + + + 1 + 1 + 8 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W5 + W1 + 0 + 0 + 0 + 0 + + 28 + 31 + 31 + 31 + 6 + 5 + 8 + 5 + 7 + 11 + 12 + 13 + 4 + 0 + 0 + 1 + 4 + 5 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 71 + 92 + 83 + + 2 + 2 + 3 + 2 + 0 + 45 + 67 + 45 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Hammond..4 + 37 + + + FIFTH + 1 + + TRIANGL + 29 + 0 + 71 + 85 + off + + + 3 + 1 + off + on + off + on + 0 + 0 + 0 + 0 + 4 + 5 + 5 + 5 + + + 2 + 1 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 30 + 29 + 26 + 10 + 18 + 12 + 23 + 0 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 16 + 15 + 15 + 15 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 64 + 86 + 50 + + 1 + 0 + 1 + 0 + 16 + 1 + 81 + 0 + + + -12 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Hammond..5 + 38 + + + FOURTH + 1 + + TRIANGL + 31 + 0 + 15 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 3 + + + 1 + 1 + 3 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W4 + 0 + -1 + -1 + 0 + + 27 + 31 + 31 + 27 + 30 + 26 + 31 + 31 + 15 + 12 + 15 + 11 + 0 + 0 + 0 + 0 + 9 + 13 + 13 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 67 + 84 + + 0 + 1 + 3 + 2 + 99 + 82 + 25 + 25 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 1 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Hammond..6 + 39 + + + FIFTH + 0 + + TRIANGL + 33 + 0 + 21 + 35 + off + + + 2 + 1 + off + on + off + on + 0 + 0 + 0 + 0 + 5 + 5 + 4 + 5 + + + 1 + 2 + 4 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 30 + 29 + 26 + 23 + 18 + 12 + 23 + 13 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 16 + 15 + 15 + 15 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 64 + 85 + 70 + + 1 + 0 + 1 + 0 + 16 + 1 + 81 + 0 + + + -12 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Hammond..7 + 40 + + + SEVENTH + 0 + + TRIANGL + 36 + 15 + 53 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 5 + 6 + 4 + + + 0.5 + 0.5 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + 0 + -3 + 3 + -3 + + 18 + 18 + 18 + 31 + 21 + 21 + 21 + 22 + 15 + 15 + 15 + 15 + 4 + 4 + 4 + 4 + 10 + 10 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 88 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + HamondLead + 41 + + + EIGHTH + 5 + + TRIANGL + 48 + 0 + 52 + 99 + off + + + 1 + 1 + off + on + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 3 + 3 + + + 1 + 2 + 2 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W5 + W1 + W1 + -1 + -2 + 2 + 2 + + 28 + 27 + 28 + 28 + 24 + 24 + 24 + 9 + 15 + 15 + 15 + 15 + 7 + 16 + 7 + 7 + 15 + 15 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 10 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Hmnd LS f1 + 42 + + + EIGHTH + 0 + + TRIANGL + 27 + 0 + 15 + 99 + off + + + 3 + 1 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 4 + 3 + + + 0.5 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W4 + W1 + W1 + -1 + -2 + 2 + 2 + + 28 + 27 + 28 + 28 + 24 + 7 + 24 + 24 + 15 + 15 + 15 + 15 + 7 + 7 + 7 + 7 + 13 + 13 + 13 + 13 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 96 + 95 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 10 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Hmnd LS f2 + 43 + + + EIGHTH + 4 + + TRIANGL + 48 + 0 + 14 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 5 + + + 1 + 2 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W4 + W3 + -1 + -2 + 2 + 2 + + 28 + 27 + 28 + 28 + 24 + 7 + 24 + 7 + 15 + 15 + 15 + 15 + 7 + 7 + 7 + 1 + 13 + 13 + 13 + 13 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 95 + 95 + 92 + + 0 + 0 + 0 + 0 + 0 + 0 + 10 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Hmnd LS s1 + 44 + + + SIXTH + 0 + + TRIANGL + 0 + 1 + 4 + 0 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W8 + W7 + W1 + 0 + 0 + 0 + 0 + + 14 + 16 + 23 + 18 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 6 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 90 + 90 + 88 + + 0 + 0 + 0 + 0 + 25 + 25 + 25 + 25 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Hornopean + 45 + + + EIGHTH + 3 + + TRIANGL + 35 + 0 + 2 + 0 + off + + + 4 + 3 + on + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 1 + 6 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -3 + 3 + 3 + + 31 + 31 + 31 + 31 + 31 + 31 + 18 + 10 + 15 + 15 + 15 + 15 + 0 + 0 + 14 + 0 + 10 + 10 + 10 + 11 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 79 + 91 + 88 + 82 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Jazz Organ + 46 + + + EIGHTH + 3 + + TRIANGL + 34 + 0 + 5 + 23 + off + + + 6 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1.5 + 3 + 9 + 18.05 + no + no + no + no + 16 + 8 + 8 + 15 + + W1 + W2 + W1 + W1 + 3 + -3 + 3 + 0 + + 27 + 27 + 27 + 27 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 7 + 11 + 11 + 11 + 12 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 99 + 86 + 89 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 66 + + + -19 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 0 + 55 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Leslie * + 47 + + + EIGHTH + 3 + + TRIANGL + 39 + 0 + 20 + 28 + off + + + 3 + 1 + on + on + on + on + 7 + 7 + 7 + 7 + 6 + 7 + 7 + 5 + + + 1 + 2 + 3 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -3 + 3 + 3 + + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 10 + 15 + 15 + 15 + 0 + 1 + 1 + 1 + 1 + 10 + 10 + 10 + 11 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 95 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Organ 1 + 48 + + + FIFTH + 0 + + TRIANGL + 0 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 1 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W5 + W2 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 9 + 9 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 70 + 90 + 64 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Organ 2 + 49 + + + FIFTH + 0 + + TRIANGL + 0 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 1 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W5 + W2 + W2 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 9 + 9 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 70 + 90 + 80 + + 0 + 0 + 0 + 0 + 0 + 54 + 0 + 78 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Organ 3 + 50 + + + SEVENTH + 5 + + SAWUP + 99 + 33 + 0 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 2 + 5 + 3 + + + 1 + 1 + 1 + 23.55 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 3 + 0 + + 29 + 29 + 29 + 24 + 7 + 7 + 7 + 24 + 11 + 11 + 11 + 0 + 7 + 7 + 7 + 6 + 8 + 8 + 8 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 99 + 99 + 79 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Ornt Organ + 51 + + + EIGHTH + 5 + + TRIANGL + 33 + 25 + 29 + 0 + off + + + 5 + 0 + off + off + off + off + 1 + 1 + 1 + 1 + 5 + 5 + 5 + 5 + + + 1 + 2 + 3 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W3 + W1 + 0 + 0 + 0 + 0 + + 26 + 26 + 26 + 26 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + P Organ..1 + 52 + + + FIFTH + 6 + + TRIANGL + 33 + 25 + 29 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 5 + 4 + + + 0.5 + 1 + 1 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W3 + W3 + W1 + 0 + 0 + 0 + 0 + + 26 + 26 + 26 + 26 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 99 + 69 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + P Organ..2 + 53 + + + FIFTH + 6 + + TRIANGL + 33 + 25 + 29 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 3 + + + 2 + 1 + 2 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W3 + W4 + 0 + 0 + 0 + 0 + + 26 + 26 + 16 + 20 + 31 + 31 + 7 + 31 + 15 + 15 + 15 + 14 + 0 + 0 + 7 + 19 + 6 + 6 + 9 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 68 + 99 + 67 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + P Organ..3 + 54 + + + FIFTH + 0 + + TRIANGL + 35 + 65 + 0 + 0 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 6 + 5 + + + 1 + 1 + 4 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W2 + W7 + 0 + 0 + 0 + 0 + + 21 + 22 + 13 + 21 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 7 + 7 + 6 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 79 + 99 + 80 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + P Organ..4 + 55 + + + FIFTH + 0 + + TRIANGL + 35 + 65 + 0 + 0 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 2 + + + 2 + 1 + 2 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W2 + W1 + W5 + 1 + -1 + 0 + 0 + + 24 + 29 + 19 + 31 + 7 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 6 + 5 + 7 + 5 + 10 + 8 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 90 + 99 + 76 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + P Organ..5 + 56 + + + SEVENTH + 5 + + TRIANGL + 35 + 65 + 0 + 0 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 5 + + + 1 + 2 + 2 + 10 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W1 + W1 + W2 + 1 + -1 + 0 + 0 + + 22 + 18 + 18 + 22 + 3 + 3 + 7 + 6 + 15 + 15 + 15 + 15 + 4 + 3 + 4 + 3 + 10 + 8 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 76 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + P Organ..6 + 57 + + + FIFTH + 0 + + TRIANGL + 35 + 65 + 0 + 0 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 6 + 5 + + + 0.5 + 0.5 + 2 + 10 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W1 + 1 + -1 + 0 + 0 + + 13 + 31 + 18 + 22 + 5 + 5 + 5 + 7 + 15 + 15 + 15 + 15 + 4 + 3 + 4 + 3 + 10 + 9 + 8 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 84 + 99 + 74 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + P Organ..7 + 58 + + + FIFTH + 4 + + TRIANGL + 33 + 25 + 22 + 35 + off + + + 4 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 5 + 6 + + + 0.5 + 0.5 + 2 + 14 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W2 + W2 + 1 + 1 + 0 + 0 + + 16 + 26 + 19 + 26 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 6 + 10 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 91 + 99 + 76 + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + P Organ..8 + 59 + + + FIFTH + 5 + + TRIANGL + 35 + 65 + 0 + 0 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 5 + 6 + + + 1 + 2 + 4 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W3 + W1 + W1 + 1 + -1 + 0 + 0 + + 16 + 18 + 18 + 22 + 3 + 3 + 7 + 6 + 15 + 15 + 15 + 15 + 4 + 3 + 4 + 3 + 10 + 8 + 9 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 87 + 99 + 68 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + P Organ..9 + 60 + + + SEVENTH + 0 + + TRIANGL + 35 + 0 + 0 + 56 + off + + + 1 + 1 + off + off + off + on + 0 + 0 + 0 + 0 + 5 + 5 + 6 + 6 + + + 1 + 2 + 2 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W7 + W1 + -2 + 3 + 3 + 3 + + 21 + 16 + 24 + 25 + 0 + 0 + 0 + 0 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 10 + 10 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 78 + + 0 + 0 + 0 + 0 + 0 + 99 + 0 + 62 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + P Organ.10 + 61 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 3 + + + 0.5 + 0.5 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W8 + W1 + W1 + 3 + -3 + -3 + -1 + + 14 + 24 + 15 + 22 + 0 + 0 + 0 + 0 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 5 + 8 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 71 + + 2 + 0 + 2 + 0 + 0 + 91 + 0 + 0 + + + -12 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + P Organ.11 + 62 + + + FIFTH + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 3 + 3 + + + 0.5 + 1 + 2 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + -1 + -1 + 2 + + 13 + 27 + 18 + 22 + 7 + 7 + 7 + 7 + 15 + 15 + 15 + 15 + 7 + 1 + 1 + 1 + 5 + 7 + 9 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 79 + 97 + 86 + + 2 + 0 + 2 + 0 + 0 + 91 + 0 + 0 + + + -12 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + P Organ.12 + 63 + + + FIFTH + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 3 + + + 0.5 + 1 + 2 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + 1 + -1 + -1 + 2 + + 13 + 31 + 18 + 21 + 7 + 7 + 7 + 7 + 15 + 3 + 15 + 15 + 0 + 0 + 1 + 0 + 5 + 7 + 9 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 95 + 79 + + 0 + 0 + 0 + 0 + 0 + 91 + 46 + 67 + + + -12 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + P Organ.13 + 64 + + + FIFTH + 5 + + TRIANGL + 35 + 0 + 22 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 4 + 4 + + + 0.5 + 0.5 + 1 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W6 + W1 + W1 + 1 + -1 + -1 + 2 + + 17 + 21 + 18 + 21 + 3 + 4 + 7 + 7 + 15 + 15 + 15 + 15 + 0 + 0 + 1 + 0 + 6 + 8 + 8 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 87 + 98 + 89 + + 0 + 0 + 0 + 0 + 0 + 21 + 46 + 67 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + P Organ.14 + 65 + + + FIFTH + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 3 + + + 0.5 + 1 + 2 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W4 + W3 + W4 + 0 + -1 + -1 + 1 + + 15 + 18 + 15 + 19 + 4 + 4 + 4 + 4 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 8 + 8 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 92 + 99 + 88 + + 0 + 1 + 0 + 1 + 0 + 91 + 46 + 67 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + P Organ.15 + 66 + + + SEVENTH + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 6 + 4 + + + 0.5 + 1 + 4 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -1 + -1 + 1 + + 15 + 18 + 15 + 19 + 4 + 4 + 4 + 4 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 8 + 8 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 99 + 71 + + 0 + 1 + 0 + 1 + 0 + 91 + 46 + 67 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + P Organ.16 + 67 + + + SECOND + 5 + + TRIANGL + 33 + 25 + 29 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 7 + 6 + + + 1 + 2 + 3 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W5 + W1 + 0 + 0 + 0 + 0 + + 26 + 26 + 26 + 26 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 69 + 80 + 81 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + P Organ.17 + 68 + + + SEVENTH + 2 + + TRIANGL + 70 + 0 + 0 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 3 + 5 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W3 + W1 + W3 + -3 + 3 + 0 + 0 + + 19 + 10 + 20 + 30 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 10 + 10 + 10 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 76 + 76 + 90 + 76 + + 1 + 1 + 1 + 1 + 25 + 25 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + P.Organ 1 + 69 + + + EIGHTH + 6 + + TRIANGL + 35 + 1 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.5 + 2 + 3 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W5 + W4 + W3 + W3 + -3 + 2 + 3 + 0 + + 14 + 16 + 23 + 18 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 8 + 8 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 96 + 95 + 94 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + P.Organ 2 + 70 + + + SEVENTH + 2 + + TRIANGL + 70 + 0 + 0 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 3 + 5 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W3 + W1 + W3 + -3 + 3 + 0 + 0 + + 19 + 10 + 20 + 30 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 6 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 76 + 76 + 90 + 76 + + 1 + 1 + 1 + 1 + 25 + 25 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + P.Organ 1* + 71 + + + EIGHTH + 6 + + TRIANGL + 35 + 1 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.5 + 2 + 4 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W5 + W4 + W3 + W3 + -3 + 2 + 3 + 0 + + 14 + 16 + 23 + 18 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 6 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 96 + 95 + 94 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + P.Organ 2* + 72 + + + EIGHTH + 6 + + TRIANGL + 35 + 1 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.5 + 2 + 3 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W6 + W5 + W1 + W4 + -3 + 2 + 3 + 0 + + 14 + 16 + 23 + 18 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 5 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 96 + 95 + 94 + + 2 + 2 + 1 + 0 + 0 + 9 + 64 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + P.Organ 3 + 73 + + + EIGHTH + 5 + + TRIANGL + 35 + 1 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.5 + 1 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W5 + W2 + W3 + W2 + -3 + 0 + 3 + 0 + + 14 + 16 + 23 + 18 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 6 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 85 + 99 + 85 + 84 + + 0 + 0 + 0 + 0 + 0 + 99 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + P.Organ 4 + 74 + + + EIGHTH + 6 + + TRIANGL + 35 + 1 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.5 + 1 + 2 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W5 + W5 + W5 + W1 + -3 + 2 + 3 + 0 + + 14 + 16 + 23 + 18 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 6 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 96 + 95 + 94 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + P.Organ 5 + 75 + + + EIGHTH + 3 + + TRIANGL + 32 + 0 + 3 + 0 + off + + + 5 + 2 + on + on + on + on + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.5 + 1 + 1.49 + 3 + no + no + no + no + 8 + 8 + 9 + 8 + + W1 + W1 + W1 + W1 + -3 + -3 + 3 + 3 + + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 11 + 15 + 15 + 15 + 8 + 0 + 0 + 0 + 1 + 10 + 10 + 10 + 11 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 95 + 99 + 95 + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 24 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + PercOrgan + 76 + + + EIGHTH + 0 + + TRIANGL + 30 + 0 + 0 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.5 + 4 + 1 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W6 + W8 + W5 + W8 + 0 + 0 + 0 + 0 + + 23 + 17 + 23 + 22 + 0 + 0 + 0 + 0 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 10 + 10 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + Pipe Organ + 77 + + + FIRST + 7 + + TRIANGL + 20 + 0 + 0 + 14 + off + + + 3 + 3 + on + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1.5 + 1.49 + 1.5 + 7.49 + no + no + no + no + 16 + 9 + 16 + 13 + + W2 + W4 + W2 + W3 + 0 + 1 + 3 + 0 + + 13 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 9 + 5 + 5 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 80 + 35 + 77 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 30 + + + -7 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 10 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + PumpOrgan + 78 + + + FIFTH + 0 + + TRIANGL + 25 + 6 + 4 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 3 + 1 + 3 + + + 1.5 + 1.5 + 1.49 + 1.49 + no + no + no + no + 16 + 16 + 9 + 9 + + W1 + W1 + W1 + W1 + -1 + 0 + 3 + 2 + + 12 + 14 + 11 + 13 + 31 + 3 + 31 + 3 + 15 + 14 + 15 + 14 + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 78 + 99 + 78 + + 0 + 0 + 0 + 0 + 0 + 35 + 0 + 35 + + + -19 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 15 + 0 + 12 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + RevrbOrgan + 79 + + + EIGHTH + 0 + + TRIANGL + 30 + 0 + 0 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.5 + 4 + 1 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -2 + 3 + 3 + 3 + + 23 + 17 + 23 + 22 + 0 + 0 + 0 + 0 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 10 + 10 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 87 + 88 + 75 + + 0 + 0 + 0 + 0 + 0 + 99 + 0 + 62 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Small Pipe + 80 + + + SEVENTH + 0 + + TRIANGL + 30 + 10 + 17 + 26 + off + + + 5 + 3 + off + on + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 3 + 2 + + + 1 + 2 + 3 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W5 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 20 + 20 + 18 + 15 + 14 + 6 + 10 + 0 + 0 + 0 + 0 + 8 + 9 + 9 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 99 + 80 + + 1 + 2 + 0 + 1 + 0 + 0 + 0 + 20 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 35 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Organ 1 + 81 + + + SEVENTH + 0 + + TRIANGL + 30 + 13 + 17 + 26 + off + + + 5 + 3 + off + on + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 3 + 2 + + + 1 + 2 + 4 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W5 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 20 + 20 + 18 + 15 + 14 + 6 + 13 + 0 + 0 + 0 + 0 + 8 + 9 + 9 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 99 + 80 + + 1 + 2 + 0 + 1 + 0 + 0 + 0 + 20 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 35 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Organ 1* + 82 + + + THIRD + 7 + + TRIANGL + 35 + 0 + 39 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 2 + 3 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W3 + W5 + W1 + 1 + -1 + 1 + 0 + + 31 + 30 + 31 + 27 + 6 + 28 + 0 + 0 + 15 + 1 + 11 + 15 + 0 + 0 + 0 + 0 + 9 + 4 + 10 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 83 + 68 + 73 + 36 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 27 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 99 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Organ 2 + 83 + + + EIGHTH + 6 + + TRIANGL + 35 + 1 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.5 + 2 + 4 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W5 + W4 + W3 + W3 + -3 + 2 + 3 + 0 + + 14 + 16 + 23 + 18 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 6 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 96 + 95 + 94 + + 0 + 0 + 0 + 0 + 60 + 50 + 50 + 60 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Tocc Organ + 84 + + + FOURTH + 0 + + TRIANGL + 29 + 21 + 5 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 7 + 7 + 7 + + + 1.5 + 5.99 + 1.49 + 6.05 + no + no + no + no + 16 + 12 + 9 + 16 + + W1 + W1 + W2 + W1 + -2 + 1 + 3 + -3 + + 28 + 28 + 25 + 30 + 31 + 8 + 8 + 7 + 14 + 13 + 13 + 13 + 0 + 0 + 0 + 0 + 10 + 15 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 73 + 93 + 43 + + 1 + 0 + 0 + 0 + 0 + 65 + 65 + 50 + + + -19 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 35 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + VelocOrgan + 85 + + + FIFTH + 6 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 6 + 0 + 6 + + + 1 + 0.5 + 0.5 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 0 + 3 + -3 + + 29 + 29 + 29 + 27 + 6 + 7 + 6 + 7 + 14 + 14 + 14 + 14 + 6 + 6 + 6 + 6 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 84 + 99 + 74 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 18 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Wirlitzer* + 86 + + + + Piano + 3 + + FIFTH + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 4 + 6 + 6 + + + 1 + 1 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W1 + 0 + 0 + 0 + 0 + + 22 + 22 + 27 + 27 + 9 + 9 + 6 + 3 + 13 + 13 + 4 + 4 + 6 + 6 + 1 + 2 + 6 + 6 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 77 + 99 + 88 + + 1 + 1 + 1 + 2 + 0 + 0 + 99 + 99 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AC Piano.1 + 0 + + + THIRD + 4 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 4 + + + 1 + 1 + 5 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 0 + 0 + 0 + 0 + + 21 + 20 + 20 + 18 + 7 + 5 + 2 + 5 + 12 + 13 + 13 + 4 + 6 + 4 + 2 + 2 + 6 + 6 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 61 + 59 + + 1 + 3 + 1 + 2 + 0 + 0 + 0 + 99 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AC Piano.2 + 1 + + + THIRD + 3 + + TRIANGL + 35 + 10 + 0 + 6 + off + + + 5 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 6 + 6 + 5 + 5 + + + 1 + 1 + 5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -1 + 2 + -2 + 2 + + 24 + 20 + 18 + 21 + 6 + 6 + 6 + 1 + 9 + 9 + 0 + 0 + 5 + 5 + 11 + 1 + 5 + 4 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 83 + 68 + 73 + + 1 + 1 + 1 + 1 + 1 + 66 + 66 + 27 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AC Piano.3 + 2 + + + FIFTH + 5 + + TRIANGL + 25 + 0 + 0 + 0 + off + + + 6 + 1 + on + off + on + on + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 4 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W1 + W1 + -3 + 3 + -2 + 2 + + 25 + 25 + 24 + 21 + 9 + 9 + 6 + 1 + 15 + 15 + 9 + 0 + 9 + 9 + 5 + 1 + 5 + 5 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 83 + 98 + 76 + + 0 + 0 + 1 + 1 + 1 + 1 + 22 + 50 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AC Piano.4 + 3 + + + FOURTH + 0 + + TRIANGL + 0 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 4 + + + 1 + 0.5 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 3 + -3 + -3 + + 26 + 25 + 24 + 25 + 5 + 31 + 9 + 7 + 10 + 15 + 0 + 0 + 6 + 0 + 0 + 0 + 5 + 6 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 75 + 67 + 73 + + 1 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AC Piano.5 + 4 + + + THIRD + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 5 + + + 1 + 3 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 28 + 31 + 31 + 31 + 30 + 5 + 4 + 8 + 15 + 15 + 14 + 13 + 6 + 1 + 2 + 3 + 6 + 5 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 76 + 71 + 73 + + 2 + 0 + 1 + 0 + 0 + 99 + 99 + 45 + + + -12 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AC Piano.6 + 5 + + + THIRD + 7 + + TRIANGL + 33 + 60 + 10 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 6 + 4 + + + 1 + 1 + 3 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 2 + -1 + 1 + + 24 + 20 + 20 + 22 + 8 + 6 + 7 + 8 + 9 + 9 + 0 + 0 + 6 + 7 + 0 + 0 + 5 + 4 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 72 + 54 + 58 + + 1 + 2 + 0 + 1 + 15 + 35 + 0 + 0 + + + 0 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AC Piano.7 + 6 + + + FIFTH + 4 + + TRIANGL + 25 + 0 + 0 + 0 + off + + + 6 + 1 + on + off + on + on + 6 + 3 + 0 + 0 + 5 + 5 + 5 + 3 + + + 1 + 1 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 3 + 0 + -2 + + 24 + 22 + 24 + 22 + 7 + 9 + 7 + 9 + 13 + 14 + 13 + 14 + 5 + 1 + 5 + 1 + 5 + 3 + 5 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 93 + 99 + 79 + + 1 + 2 + 1 + 2 + 0 + 50 + 0 + 50 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AC Piano.8 + 7 + + + FOURTH + 4 + + TRIANGL + 25 + 0 + 0 + 0 + off + + + 6 + 1 + on + off + on + on + 0 + 0 + 0 + 0 + 5 + 5 + 3 + 5 + + + 1 + 3 + 1 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W1 + W3 + 0 + 1 + -1 + 0 + + 28 + 28 + 28 + 28 + 9 + 9 + 9 + 9 + 13 + 13 + 13 + 13 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 74 + 75 + 58 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AC Piano.9 + 8 + + + THIRD + 6 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 4 + + + 1 + 0.5 + 7 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + -3 + 2 + + 20 + 22 + 24 + 24 + 8 + 1 + 5 + 1 + 12 + 12 + 0 + 0 + 1 + 1 + 1 + 1 + 6 + 4 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 69 + 75 + + 2 + 1 + 2 + 1 + 0 + 66 + 99 + 52 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AC Piano10 + 9 + + + THIRD + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 4 + + + 1 + 3 + 5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W2 + W1 + 0 + -2 + 1 + 2 + + 28 + 31 + 31 + 31 + 30 + 4 + 5 + 8 + 15 + 14 + 13 + 13 + 4 + 2 + 4 + 3 + 6 + 5 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 74 + 80 + 73 + + 2 + 0 + 0 + 1 + 0 + 99 + 99 + 0 + + + -12 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AC Piano11 + 10 + + + FOURTH + 3 + + TRIANGL + 25 + 0 + 0 + 0 + off + + + 6 + 1 + on + off + on + on + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 5 + + + 1 + 1 + 1 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 28 + 27 + 28 + 24 + 7 + 5 + 6 + 12 + 9 + 7 + 12 + 6 + 7 + 6 + 6 + 9 + 7 + 9 + 7 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 65 + 78 + 70 + + 1 + 2 + 1 + 0 + 0 + 39 + 17 + 82 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AC Piano12 + 11 + + + THIRD + 5 + + TRIANGL + 0 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 4 + + + 1 + 1 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W3 + 0 + 1 + 0 + 0 + + 26 + 25 + 24 + 25 + 9 + 9 + 9 + 9 + 13 + 13 + 13 + 13 + 9 + 0 + 0 + 0 + 7 + 6 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 73 + 76 + 70 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AC Piano13 + 12 + + + THIRD + 5 + + TRIANGL + 0 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 2 + + + 1 + 5 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W1 + 0 + 1 + 0 + 0 + + 27 + 27 + 27 + 27 + 9 + 9 + 9 + 9 + 13 + 13 + 13 + 13 + 6 + 6 + 6 + 6 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 70 + 76 + 56 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AC Piano14 + 13 + + + THIRD + 5 + + TRIANGL + 0 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 7 + 5 + + + 1 + 1 + 4 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -1 + 1 + 3 + + 21 + 19 + 19 + 28 + 7 + 4 + 4 + 6 + 12 + 13 + 13 + 14 + 6 + 4 + 4 + 0 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 67 + 62 + 47 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AC Piano15 + 14 + + + THIRD + 5 + + TRIANGL + 0 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 4 + + + 1 + 1 + 9 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + -1 + 0 + 1 + + 21 + 19 + 19 + 24 + 7 + 4 + 4 + 13 + 12 + 13 + 13 + 13 + 6 + 3 + 4 + 5 + 6 + 6 + 6 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 78 + 45 + 76 + + 1 + 1 + 1 + 1 + 0 + 19 + 43 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AC Piano16 + 15 + + + FIRST + 5 + + TRIANGL + 0 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 6 + 5 + + + 1 + 1 + 1 + 7 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W4 + W1 + 0 + 0 + 1 + -1 + + 23 + 31 + 31 + 28 + 7 + 12 + 12 + 24 + 13 + 13 + 13 + 10 + 6 + 1 + 1 + 5 + 8 + 4 + 4 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 78 + 80 + 71 + + 1 + 1 + 1 + 1 + 0 + 19 + 19 + 1 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AC Piano17 + 16 + + + THIRD + 0 + + TRIANGL + 0 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 6 + 2 + + + 1 + 1 + 5 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 1 + -1 + 1 + 2 + + 25 + 25 + 25 + 31 + 7 + 6 + 8 + 9 + 9 + 10 + 9 + 12 + 5 + 21 + 5 + 5 + 5 + 9 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 65 + 70 + 81 + + 1 + 1 + 1 + 1 + 0 + 19 + 0 + 1 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AC Piano18 + 17 + + + THIRD + 4 + + TRIANGL + 0 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 6 + 5 + 5 + + + 1 + 1 + 1 + 7 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -1 + 1 + -1 + 2 + + 25 + 25 + 25 + 31 + 9 + 6 + 6 + 10 + 13 + 10 + 10 + 12 + 6 + 6 + 6 + 9 + 7 + 9 + 9 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 80 + 78 + 67 + + 1 + 0 + 0 + 0 + 0 + 19 + 19 + 1 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AC Piano19 + 18 + + + THIRD + 5 + + TRIANGL + 0 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 5 + + + 1 + 3 + 5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 1 + 0 + 0 + + 25 + 25 + 25 + 25 + 9 + 9 + 9 + 9 + 13 + 13 + 13 + 13 + 6 + 9 + 9 + 9 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 75 + 65 + 61 + + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AC Piano20 + 19 + + + THIRD + 3 + + TRIANGL + 35 + 10 + 0 + 6 + off + + + 5 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 4 + 5 + 5 + 5 + + + 1 + 6 + 4 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -1 + 2 + -2 + 2 + + 24 + 20 + 18 + 21 + 6 + 6 + 6 + 1 + 9 + 9 + 0 + 0 + 5 + 5 + 11 + 1 + 5 + 4 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 72 + 75 + 71 + + 1 + 1 + 1 + 1 + 10 + 66 + 66 + 27 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AC Piano21 + 20 + + + THIRD + 3 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 3 + 1 + + + 1 + 1 + 5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W3 + -3 + 1 + -2 + 1 + + 28 + 30 + 30 + 30 + 10 + 12 + 9 + 16 + 14 + 14 + 14 + 14 + 6 + 6 + 7 + 6 + 7 + 3 + 6 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 76 + 79 + 68 + + 1 + 1 + 1 + 1 + 0 + 43 + 17 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BabyGrand* + 21 + + + FIFTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 3 + on + off + on + off + 0 + 0 + 0 + 0 + 3 + 5 + 5 + 2 + + + 1 + 1 + 1 + 10.57 + no + no + no + no + 8 + 8 + 8 + 16 + + W1 + W2 + W1 + W2 + -3 + 3 + 3 + 0 + + 23 + 23 + 24 + 20 + 6 + 6 + 7 + 15 + 15 + 15 + 3 + 2 + 6 + 6 + 13 + 24 + 7 + 10 + 10 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 87 + 99 + 56 + + 1 + 1 + 0 + 0 + 0 + 12 + 14 + 17 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 0 + 25 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bad Road * + 22 + + + FIFTH + 0 + + TRIANGL + 23 + 0 + 8 + 12 + off + + + 3 + 2 + on + off + on + off + 0 + 0 + 0 + 0 + 3 + 5 + 2 + 2 + + + 0.75 + 1.49 + 1.5 + 2.99 + no + no + no + no + 12 + 9 + 16 + 10 + + W1 + W1 + W1 + W4 + -3 + 3 + 0 + 2 + + 28 + 28 + 28 + 31 + 9 + 9 + 9 + 9 + 0 + 0 + 0 + 0 + 31 + 31 + 31 + 31 + 4 + 4 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 87 + 99 + 88 + + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + + + -7 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bel/Piano* + 23 + + + FIFTH + 7 + + TRIANGL + 24 + 82 + 0 + 81 + off + + + 2 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 3 + + + 1 + 2 + 2 + 15 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W2 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 9 + 27 + 9 + 27 + 15 + 15 + 15 + 10 + 12 + 10 + 7 + 10 + 4 + 6 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 81 + 99 + 99 + + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BellPiano1 + 24 + + + SEVENTH + 7 + + TRIANGL + 24 + 82 + 0 + 81 + off + + + 2 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 7 + 4 + 5 + 4 + + + 2 + 8 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W2 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 9 + 27 + 9 + 27 + 15 + 15 + 15 + 10 + 12 + 10 + 7 + 10 + 4 + 6 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 99 + 99 + 99 + + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BellPiano2 + 25 + + + THIRD + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 3 + 3 + 1 + + + 1 + 4 + 7 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W2 + W1 + 0 + 0 + -3 + 2 + + 31 + 31 + 24 + 29 + 8 + 7 + 5 + 4 + 13 + 12 + 0 + 0 + 3 + 3 + 3 + 12 + 4 + 4 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 78 + 77 + + 2 + 1 + 3 + 1 + 0 + 94 + 61 + 52 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BritePiano + 26 + + + THIRD + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 4 + 1 + 1 + + + 1 + 4 + 7 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W2 + W2 + 0 + 0 + -3 + 2 + + 31 + 31 + 24 + 29 + 8 + 7 + 5 + 4 + 13 + 12 + 0 + 0 + 3 + 3 + 3 + 12 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 71 + 79 + + 2 + 2 + 3 + 1 + 0 + 94 + 61 + 52 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Buz'dPiano + 27 + + + THIRD + 7 + + TRIANGL + 29 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 4 + 2 + 2 + + + 1 + 4 + 7 + 7 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W2 + W8 + 0 + 0 + -3 + 2 + + 31 + 31 + 24 + 29 + 8 + 7 + 5 + 21 + 13 + 12 + 0 + 0 + 3 + 3 + 3 + 12 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 71 + 74 + 73 + + 2 + 1 + 3 + 2 + 0 + 27 + 16 + 33 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ChibyPiano + 28 + + + FIFTH + 6 + + TRIANGL + 20 + 0 + 1 + 2 + off + + + 2 + 1 + off + on + off + off + 0 + 0 + 0 + 0 + 2 + 3 + 3 + 3 + + + 1 + 0.5 + 1 + 14 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W8 + 3 + -3 + -3 + 3 + + 28 + 31 + 31 + 30 + 4 + 0 + 18 + 14 + 10 + 10 + 13 + 9 + 0 + 0 + 6 + 15 + 7 + 7 + 8 + 14 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 83 + 83 + + 2 + 1 + 0 + 1 + 0 + 48 + 0 + 0 + + + 0 + POLY + 2 + FINGER + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 7 + + ChorusMeEP + 29 + + + FIFTH + 0 + + TRIANGL + 26 + 18 + 0 + 0 + off + + + 4 + 2 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 3 + + + 1.49 + 1.49 + 1.5 + 1.5 + no + no + no + no + 9 + 65 + 16 + 104 + + W6 + W5 + W6 + W5 + 3 + 3 + -3 + -3 + + 31 + 31 + 31 + 31 + 25 + 31 + 25 + 31 + 15 + 11 + 15 + 11 + 5 + 8 + 5 + 8 + 6 + 8 + 6 + 8 + VOF + V48 + VOF + V48 + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 79 + 99 + 79 + + 2 + 2 + 2 + 2 + 0 + 99 + 0 + 99 + + + -19 + POLY + 2 + FULL + 0 + POR + 98 + 0 + 0 + 50 + 0 + 37 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + CrsPopPno + 30 + + + FIFTH + 3 + + TRIANGL + 22 + 0 + 4 + 10 + off + + + 4 + 3 + on + on + on + on + 0 + 0 + 0 + 0 + 2 + 3 + 3 + 4 + + + 1 + 1 + 1 + 15 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -3 + 0 + 3 + + 30 + 30 + 27 + 31 + 7 + 6 + 7 + 15 + 0 + 0 + 7 + 7 + 0 + 0 + 10 + 0 + 9 + 6 + 9 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 89 + 79 + 73 + + 0 + 0 + 0 + 0 + 20 + 16 + 20 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + DX7 EP + 31 + + + THIRD + 6 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 4 + 3 + + + 1 + 0.5 + 5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + -3 + 2 + + 20 + 22 + 24 + 24 + 8 + 1 + 5 + 1 + 12 + 12 + 0 + 0 + 1 + 1 + 1 + 1 + 5 + 5 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 91 + 54 + 71 + + 2 + 2 + 1 + 1 + 1 + 70 + 74 + 21 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Deep Grd + 32 + + + FIFTH + 0 + + TRIANGL + 29 + 17 + 5 + 0 + off + + + 4 + 3 + off + on + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 4 + 4 + + + 8 + 16.97 + 0.5 + 6 + no + no + no + yes + 8 + 77 + 8 + 96 + + W5 + W3 + W7 + W8 + -3 + 0 + 0 + 0 + + 31 + 31 + 22 + 31 + 9 + 6 + 23 + 12 + 15 + 14 + 13 + 12 + 9 + 1 + 8 + 12 + 5 + 5 + 4 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 73 + 85 + 99 + 78 + + 1 + 1 + 1 + 2 + 0 + 0 + 0 + 28 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 51 + 30 + 51 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + DirtoyPno + 33 + + + FIFTH + 6 + + TRIANGL + 20 + 0 + 1 + 2 + off + + + 4 + 3 + off + on + off + off + 0 + 0 + 0 + 0 + 2 + 3 + 3 + 3 + + + 1 + 0.5 + 1 + 15 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W8 + 3 + -3 + -3 + 3 + + 31 + 31 + 31 + 31 + 18 + 15 + 18 + 14 + 15 + 15 + 13 + 9 + 6 + 5 + 6 + 15 + 8 + 7 + 8 + 14 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 90 + 99 + 67 + + 0 + 0 + 0 + 1 + 0 + 22 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + DynomiteEP + 34 + + + FIFTH + 5 + + TRIANGL + 25 + 0 + 3 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 6 + 4 + 2 + + + 1 + 3 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 0 + -3 + 0 + + 25 + 31 + 25 + 31 + 5 + 8 + 7 + 9 + 0 + 0 + 0 + 0 + 21 + 0 + 0 + 0 + 8 + 7 + 15 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 78 + 95 + 83 + + 2 + 0 + 1 + 1 + 0 + 0 + 0 + 40 + + + -12 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Piano..1 + 35 + + + FIFTH + 5 + + TRIANGL + 20 + 0 + 5 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 6 + 3 + + + 1 + 9 + 1 + 7 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W2 + 3 + -1 + -3 + 1 + + 27 + 31 + 31 + 31 + 6 + 7 + 6 + 12 + 0 + 0 + 0 + 0 + 10 + 10 + 0 + 18 + 6 + 6 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 61 + 95 + 78 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + -12 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Piano..2 + 36 + + + FIFTH + 6 + + TRIANGL + 20 + 0 + 3 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 4 + 4 + 5 + + + 1 + 2 + 2 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W1 + W3 + 0 + 0 + 0 + 0 + + 29 + 26 + 31 + 29 + 8 + 8 + 11 + 9 + 15 + 12 + 15 + 15 + 6 + 2 + 9 + 3 + 8 + 5 + 6 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 85 + 93 + 89 + + 1 + 1 + 2 + 0 + 1 + 41 + 0 + 99 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Piano..3 + 37 + + + FIFTH + 5 + + TRIANGL + 20 + 0 + 3 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 6 + 4 + + + 2 + 3 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W3 + W3 + 0 + 0 + 0 + 0 + + 29 + 26 + 31 + 29 + 8 + 8 + 11 + 9 + 15 + 12 + 15 + 15 + 6 + 2 + 9 + 3 + 6 + 3 + 4 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 87 + 91 + 86 + + 1 + 1 + 2 + 0 + 1 + 41 + 0 + 99 + + + -12 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Piano..4 + 38 + + + FIFTH + 1 + + TRIANGL + 15 + 0 + 0 + 32 + off + + + 6 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 4 + + + 0.5 + 3 + 0.5 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W2 + -1 + 3 + -3 + 0 + + 29 + 25 + 31 + 28 + 8 + 7 + 8 + 9 + 15 + 0 + 0 + 14 + 1 + 4 + 5 + 5 + 6 + 9 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 75 + 96 + 74 + + 0 + 0 + 0 + 2 + 25 + 0 + 25 + 99 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Piano..5 + 39 + + + FIFTH + 5 + + TRIANGL + 34 + 33 + 0 + 0 + off + + + 3 + 1 + on + on + on + off + 0 + 0 + 0 + 0 + 6 + 6 + 5 + 4 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + 3 + -1 + -3 + 3 + + 28 + 28 + 28 + 28 + 7 + 15 + 6 + 9 + 12 + 12 + 13 + 13 + 7 + 6 + 6 + 6 + 11 + 12 + 15 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 93 + 96 + 86 + + 0 + 3 + 0 + 1 + 11 + 35 + 30 + 57 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Piano..6 + 40 + + + FIFTH + 4 + + TRIANGL + 23 + 0 + 0 + 39 + off + + + 0 + 2 + off + off + on + off + 0 + 0 + 0 + 0 + 6 + 4 + 6 + 4 + + + 1 + 3 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W4 + W2 + W1 + 1 + 2 + -2 + 2 + + 31 + 24 + 31 + 27 + 10 + 12 + 6 + 15 + 15 + 12 + 15 + 15 + 6 + 13 + 6 + 7 + 7 + 7 + 6 + 12 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 77 + 99 + 85 + + 1 + 1 + 1 + 1 + 1 + 48 + 0 + 99 + + + -12 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Piano..7 + 41 + + + SIXTH + 1 + + TRIANGL + 31 + 0 + 0 + 32 + off + + + 0 + 2 + off + off + on + off + 0 + 0 + 0 + 0 + 6 + 4 + 6 + 4 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W4 + 0 + 1 + 0 + 0 + + 31 + 31 + 31 + 31 + 4 + 10 + 6 + 10 + 9 + 10 + 7 + 7 + 15 + 7 + 13 + 7 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 91 + + 1 + 1 + 1 + 0 + 10 + 12 + 14 + 24 + + + -12 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Piano..8 + 42 + + + FIFTH + 5 + + TRIANGL + 99 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 4 + 5 + 6 + + + 1 + 1 + 1 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W3 + W1 + W1 + 2 + 3 + 0 + 1 + + 28 + 31 + 24 + 28 + 15 + 15 + 9 + 6 + 15 + 15 + 14 + 14 + 6 + 6 + 6 + 6 + 6 + 3 + 6 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 76 + 99 + 70 + + 0 + 1 + 0 + 0 + 10 + 40 + 0 + 99 + + + -12 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Piano..9 + 43 + + + FIFTH + 5 + + TRIANGL + 99 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 6 + 4 + + + 1 + 11 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 2 + 3 + 0 + 1 + + 28 + 24 + 24 + 31 + 15 + 22 + 9 + 19 + 15 + 14 + 14 + 13 + 6 + 13 + 6 + 9 + 6 + 8 + 7 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 60 + 99 + 88 + + 0 + 0 + 0 + 0 + 10 + 40 + 0 + 30 + + + -12 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Piano.10 + 44 + + + FIFTH + 7 + + TRIANGL + 99 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 6 + 5 + 5 + + + 1 + 14 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 28 + 27 + 22 + 22 + 15 + 25 + 9 + 6 + 15 + 13 + 14 + 11 + 4 + 6 + 6 + 3 + 6 + 6 + 6 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 81 + 97 + 79 + + 0 + 3 + 0 + 3 + 10 + 99 + 0 + 75 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Piano.11 + 45 + + + FIFTH + 4 + + TRIANGL + 0 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 5 + + + 0.5 + 2 + 1 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W3 + 0 + 0 + 2 + 1 + + 28 + 28 + 27 + 27 + 15 + 24 + 20 + 1 + 15 + 10 + 14 + 3 + 6 + 6 + 9 + 9 + 6 + 2 + 4 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 99 + 90 + 82 + + 0 + 2 + 0 + 3 + 10 + 99 + 0 + 75 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Piano.12 + 46 + + + FIFTH + 7 + + TRIANGL + 34 + 0 + 0 + 26 + off + + + 0 + 2 + off + on + on + on + 0 + 0 + 0 + 0 + 5 + 5 + 4 + 6 + + + 1 + 12 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -1 + -3 + 3 + + 28 + 30 + 28 + 22 + 7 + 22 + 6 + 7 + 12 + 11 + 13 + 13 + 7 + 10 + 6 + 3 + 11 + 5 + 15 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 88 + 92 + 82 + + 0 + 1 + 1 + 3 + 11 + 99 + 30 + 99 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Piano.13 + 47 + + + FIFTH + 1 + + TRIANGL + 34 + 0 + 0 + 26 + off + + + 0 + 2 + off + on + on + on + 0 + 0 + 0 + 0 + 6 + 6 + 4 + 4 + + + 1 + 14 + 1 + 10 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 27 + 30 + 24 + 24 + 9 + 9 + 9 + 9 + 9 + 11 + 13 + 11 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 90 + 97 + 65 + + 1 + 2 + 0 + 1 + 10 + 99 + 0 + 44 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Piano.14 + 48 + + + THIRD + 6 + + TRIANGL + 34 + 0 + 0 + 26 + off + + + 0 + 2 + off + on + on + on + 0 + 0 + 0 + 0 + 6 + 5 + 4 + 5 + + + 1 + 10 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 0 + 0 + 0 + 0 + + 27 + 30 + 31 + 24 + 9 + 9 + 24 + 9 + 9 + 11 + 13 + 11 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 71 + 79 + 57 + + 0 + 2 + 3 + 2 + 10 + 99 + 99 + 85 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Piano.15 + 49 + + + FIRST + 6 + + TRIANGL + 34 + 0 + 0 + 39 + on + + + 0 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 4 + 4 + + + 1 + 2 + 2 + 7 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W3 + W2 + 0 + 0 + 0 + 0 + + 27 + 30 + 31 + 26 + 7 + 9 + 9 + 17 + 11 + 11 + 13 + 11 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 53 + 50 + 52 + + 0 + 2 + 2 + 2 + 10 + 99 + 99 + 85 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Piano.16 + 50 + + + FIFTH + 5 + + TRIANGL + 34 + 33 + 0 + 0 + off + + + 3 + 1 + on + on + on + off + 0 + 0 + 0 + 0 + 5 + 6 + 6 + 6 + + + 1 + 1 + 1 + 7 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 2 + -2 + -2 + 2 + + 28 + 28 + 28 + 31 + 4 + 15 + 6 + 6 + 2 + 12 + 13 + 13 + 4 + 6 + 6 + 6 + 11 + 12 + 15 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 90 + 99 + 87 + + 0 + 1 + 0 + 2 + 11 + 35 + 30 + 20 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Piano.17 + 51 + + + FIFTH + 1 + + TRIANGL + 34 + 33 + 0 + 0 + off + + + 3 + 1 + on + on + on + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 4 + + + 1 + 1 + 2 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W2 + W1 + W1 + 2 + -2 + -2 + 2 + + 25 + 22 + 24 + 22 + 7 + 15 + 6 + 6 + 12 + 12 + 13 + 11 + 7 + 6 + 6 + 4 + 11 + 12 + 15 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 68 + 99 + 80 + + 0 + 0 + 0 + 3 + 11 + 45 + 30 + 20 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Piano.18 + 52 + + + FIFTH + 0 + + TRIANGL + 34 + 33 + 0 + 0 + off + + + 3 + 1 + on + on + on + off + 0 + 0 + 0 + 0 + 6 + 6 + 6 + 4 + + + 0.5 + 1 + 1 + 14 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W1 + W4 + 0 + 2 + 2 + 2 + + 31 + 24 + 31 + 31 + 12 + 9 + 9 + 12 + 15 + 15 + 15 + 15 + 6 + 6 + 6 + 6 + 7 + 10 + 9 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 88 + 99 + 55 + + 0 + 2 + 0 + 2 + 11 + 36 + 30 + 50 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Piano.19 + 53 + + + SEVENTH + 1 + + TRIANGL + 34 + 33 + 0 + 0 + off + + + 3 + 1 + on + on + on + off + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 7 + + + 1 + 1 + 2 + 10 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W2 + W1 + 0 + 2 + 2 + 2 + + 31 + 24 + 31 + 31 + 12 + 9 + 9 + 12 + 15 + 15 + 15 + 15 + 6 + 6 + 6 + 6 + 7 + 10 + 9 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 81 + 95 + 57 + + 0 + 2 + 0 + 2 + 11 + 36 + 30 + 50 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Piano.20 + 54 + + + FIFTH + 4 + + TRIANGL + 24 + 0 + 4 + 0 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + + + 1 + 1 + 1 + 14 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W2 + -3 + 0 + -3 + 0 + + 31 + 31 + 31 + 31 + 8 + 8 + 8 + 8 + 0 + 0 + 0 + 0 + 17 + 0 + 0 + 0 + 7 + 7 + 10 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 89 + 96 + 59 + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 13 + + + -12 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Piano.21 + 55 + + + FIFTH + 3 + + TRIANGL + 27 + 0 + 4 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 1 + 4 + 1 + + + 1 + 1 + 2 + 7 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + -3 + 0 + -3 + 0 + + 31 + 31 + 31 + 31 + 8 + 8 + 17 + 18 + 1 + 0 + 0 + 0 + 21 + 0 + 0 + 0 + 8 + 7 + 15 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 90 + 99 + 70 + + 1 + 1 + 0 + 1 + 0 + 45 + 0 + 13 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E Piano.22 + 56 + + + FOURTH + 0 + + TRIANGL + 16 + 0 + 8 + 25 + off + + + 5 + 2 + on + on + on + on + 0 + 0 + 0 + 0 + 3 + 2 + 4 + 6 + + + 1 + 13 + 1 + 16.96 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W3 + 3 + -1 + 1 + -3 + + 29 + 29 + 29 + 31 + 12 + 11 + 4 + 31 + 14 + 14 + 14 + 15 + 4 + 18 + 1 + 17 + 8 + 6 + 6 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 42 + 69 + 67 + + 2 + 2 + 1 + 2 + 20 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E.Piano 1 + 57 + + + THIRD + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 1 + 2 + 6 + + + 0.5 + 0.5 + 1 + 4.71 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W2 + 0 + 0 + 0 + 0 + + 24 + 31 + 31 + 31 + 31 + 31 + 10 + 19 + 15 + 15 + 12 + 4 + 9 + 0 + 8 + 10 + 9 + 7 + 7 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 73 + 49 + 73 + + 0 + 0 + 0 + 0 + 6 + 11 + 12 + 0 + + + 12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E.Piano 2 + 58 + + + SECOND + 3 + + TRIANGL + 30 + 0 + 6 + 2 + off + + + 4 + 0 + on + on + on + on + 0 + 0 + 0 + 0 + 2 + 3 + 5 + 2 + + + 1 + 1 + 8 + 7 + no + no + no + no + 8 + 8 + 8 + 48 + + W1 + W2 + W1 + W1 + 0 + 3 + -3 + 1 + + 25 + 28 + 27 + 22 + 7 + 14 + 19 + 29 + 5 + 15 + 15 + 12 + 4 + 3 + 1 + 18 + 5 + 3 + 1 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 79 + 57 + 66 + + 2 + 2 + 2 + 0 + 10 + 20 + 77 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + E. Piano 3 + 59 + + + FIFTH + 0 + + TRIANGL + 21 + 0 + 10 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 3 + 2 + 3 + + + 1.5 + 15.5 + 1.51 + 1.5 + no + no + no + no + 16 + 16 + 14 + 16 + + W1 + W1 + W1 + W2 + 0 + 0 + -3 + 3 + + 31 + 31 + 31 + 31 + 7 + 15 + 30 + 8 + 11 + 11 + 14 + 14 + 7 + 10 + 6 + 6 + 10 + 11 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 66 + 99 + 80 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 20 + + + -19 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + El.Piano * + 60 + + + THIRD + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 2 + 2 + 2 + + + 1 + 3 + 5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -3 + 2 + 3 + + 28 + 31 + 31 + 31 + 30 + 4 + 5 + 8 + 15 + 14 + 13 + 13 + 6 + 2 + 4 + 3 + 6 + 5 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 66 + 68 + + 2 + 0 + 0 + 1 + 0 + 99 + 99 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Elec Grand + 61 + + + THIRD + 0 + + TRIANGL + 30 + 0 + 6 + 2 + off + + + 4 + 0 + on + on + on + on + 0 + 0 + 0 + 0 + 2 + 3 + 5 + 2 + + + 1 + 1 + 8 + 11 + no + no + no + no + 8 + 8 + 8 + 48 + + W1 + W2 + W1 + W6 + 0 + 3 + -3 + 1 + + 25 + 28 + 27 + 22 + 7 + 31 + 19 + 13 + 5 + 15 + 15 + 0 + 4 + 3 + 1 + 18 + 6 + 5 + 2 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 59 + 37 + + 2 + 2 + 3 + 0 + 13 + 20 + 99 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ElecPiano4 + 62 + + + FIFTH + 7 + + TRIANGL + 23 + 0 + 0 + 29 + off + + + 3 + 2 + on + on + on + on + 0 + 0 + 0 + 0 + 2 + 0 + 2 + 1 + + + 2.99 + 1 + 1 + 15 + no + no + no + no + 10 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -3 + 0 + 3 + + 30 + 15 + 27 + 31 + 7 + 6 + 7 + 15 + 0 + 0 + 7 + 7 + 0 + 0 + 10 + 0 + 8 + 5 + 8 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 62 + 99 + 71 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + ElecPiano5 + 63 + + + FIFTH + 7 + + TRIANGL + 23 + 0 + 0 + 29 + off + + + 3 + 2 + on + on + on + on + 0 + 0 + 0 + 0 + 2 + 0 + 2 + 1 + + + 0.98 + 12 + 0.97 + 15 + no + no + no + no + 10 + 8 + 9 + 8 + + W1 + W1 + W1 + W1 + 3 + 3 + -3 + -3 + + 27 + 31 + 27 + 31 + 7 + 15 + 7 + 15 + 7 + 7 + 7 + 7 + 10 + 0 + 10 + 0 + 8 + 9 + 8 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 55 + 99 + 82 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + ElecPiano6 + 64 + + + SEVENTH + 6 + + TRIANGL + 30 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 2 + + + 1 + 1 + 3 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W8 + W4 + 0 + 0 + 0 + 0 + + 27 + 26 + 23 + 24 + 19 + 18 + 15 + 11 + 14 + 15 + 9 + 13 + 9 + 0 + 14 + 10 + 6 + 10 + 5 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 78 + 78 + 74 + + 1 + 1 + 1 + 1 + 0 + 7 + 17 + 40 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + Electracou + 65 + + + FIFTH + 0 + + TRIANGL + 20 + 8 + 2 + 27 + off + + + 6 + 2 + on + off + on + off + 0 + 0 + 0 + 0 + 3 + 3 + 4 + 4 + + + 1 + 1 + 1 + 14 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 3 + 3 + -3 + + 24 + 31 + 31 + 31 + 4 + 4 + 13 + 6 + 13 + 13 + 12 + 12 + 3 + 3 + 8 + 4 + 6 + 4 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 84 + 99 + 54 + + 2 + 2 + 1 + 2 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ElectroPno + 66 + + + THIRD + 7 + + TRIANGL + 31 + 8 + 32 + 2 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 2 + 2 + 7 + + + 1 + 2.99 + 9 + 1 + no + no + no + no + 8 + 10 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 3 + 2 + -3 + + 23 + 22 + 31 + 31 + 4 + 4 + 16 + 14 + 15 + 13 + 10 + 9 + 1 + 2 + 3 + 4 + 5 + 3 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 76 + 74 + 76 + + 2 + 2 + 2 + 0 + 0 + 99 + 99 + 41 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + FadePiano + 67 + + + THIRD + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 4 + 2 + 1 + + + 1 + 4 + 9 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W4 + W1 + 0 + 0 + -3 + 2 + + 26 + 22 + 24 + 29 + 6 + 7 + 5 + 1 + 11 + 11 + 0 + 0 + 3 + 3 + 3 + 4 + 6 + 4 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 82 + 71 + 72 + + 2 + 2 + 3 + 3 + 0 + 76 + 65 + 26 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + FingersGo! + 68 + + + FIRST + 0 + + TRIANGL + 20 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 2 + 4 + 7 + + + 1 + 2 + 3 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 3 + + 31 + 31 + 31 + 31 + 31 + 17 + 2 + 14 + 10 + 10 + 14 + 9 + 8 + 3 + 5 + 15 + 8 + 11 + 8 + 14 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 83 + 99 + 87 + + 0 + 2 + 0 + 0 + 0 + 67 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + FlatFlange + 69 + + + THIRD + 3 + + TRIANGL + 27 + 50 + 2 + 0 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 7 + 7 + 4 + + + 1 + 1 + 14 + 6.92 + no + no + no + yes + 8 + 8 + 8 + 8 + + W7 + W6 + W5 + W8 + -3 + 3 + 2 + 3 + + 31 + 31 + 31 + 31 + 7 + 11 + 9 + 17 + 13 + 15 + 10 + 0 + 4 + 0 + 4 + 11 + 10 + 11 + 9 + 15 + VOF + V12 + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 71 + 99 + + 0 + 0 + 0 + 2 + 0 + 88 + 95 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 22 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Fuzz Piano + 70 + + + SECOND + 6 + + TRIANGL + 20 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 3 + 3 + + + 1 + 2 + 3 + 12 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 3 + + 31 + 31 + 31 + 31 + 18 + 17 + 9 + 14 + 10 + 14 + 14 + 9 + 8 + 3 + 5 + 15 + 8 + 11 + 8 + 14 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 81 + 89 + 75 + + 0 + 2 + 0 + 0 + 0 + 67 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + FuzzPiano + 71 + + + FOURTH + 0 + + TRIANGL + 29 + 0 + 3 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 6 + 5 + + + 0.5 + 1.51 + 1.49 + 11.01 + no + no + no + yes + 8 + 14 + 9 + 21 + + W1 + W6 + W6 + W1 + 0 + 3 + -3 + 0 + + 31 + 31 + 31 + 31 + 31 + 9 + 4 + 21 + 15 + 12 + 12 + 11 + 10 + 4 + 9 + 31 + 6 + 4 + 4 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 71 + 71 + 83 + + 1 + 2 + 2 + 0 + 0 + 15 + 15 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 30 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + GaragePno + 72 + + + FIFTH + 5 + + SHOLD + 38 + 86 + 0 + 18 + on + + + 1 + 1 + off + off + on + off + 0 + 0 + 0 + 0 + 6 + 5 + 3 + 3 + + + 14 + 12 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + 3 + 0 + -1 + + 12 + 31 + 12 + 31 + 15 + 31 + 9 + 31 + 7 + 15 + 15 + 15 + 8 + 0 + 5 + 0 + 7 + 15 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 88 + 66 + 99 + 75 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + GlassPiano + 73 + + + THIRD + 7 + + TRIANGL + 31 + 0 + 4 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 2 + 2 + 3 + + + 1 + 2.99 + 9 + 1 + no + no + no + no + 8 + 10 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 3 + 2 + -3 + + 23 + 22 + 31 + 31 + 22 + 3 + 7 + 7 + 14 + 12 + 10 + 14 + 6 + 2 + 3 + 1 + 4 + 4 + 4 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 76 + 74 + 76 + + 2 + 2 + 2 + 1 + 0 + 99 + 99 + 43 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Grand 2 + 74 + + + THIRD + 7 + + TRIANGL + 31 + 0 + 4 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 2 + 2 + 3 + + + 1 + 2.99 + 9 + 1 + no + no + no + no + 8 + 10 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 3 + 2 + -3 + + 23 + 22 + 31 + 31 + 22 + 3 + 7 + 7 + 14 + 12 + 10 + 14 + 6 + 2 + 3 + 1 + 4 + 4 + 4 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 76 + 74 + 76 + + 2 + 2 + 2 + 1 + 0 + 70 + 70 + 33 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Grand 3 + 75 + + + THIRD + 7 + + TRIANGL + 31 + 0 + 4 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 2 + 2 + 3 + + + 1 + 2.99 + 9 + 1 + no + no + no + no + 8 + 10 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 3 + 2 + -3 + + 23 + 22 + 31 + 31 + 22 + 3 + 7 + 7 + 14 + 12 + 10 + 14 + 6 + 2 + 3 + 1 + 4 + 4 + 4 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 76 + 74 + 76 + + 2 + 2 + 2 + 1 + 0 + 99 + 99 + 43 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Grand Low + 76 + + + THIRD + 7 + + TRIANGL + 31 + 0 + 4 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 2 + 2 + 3 + + + 1 + 2.99 + 9 + 1 + no + no + no + no + 8 + 10 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 3 + 2 + -3 + + 23 + 22 + 31 + 31 + 22 + 3 + 7 + 7 + 14 + 12 + 10 + 14 + 6 + 2 + 3 + 1 + 8 + 6 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 76 + 74 + 76 + + 2 + 2 + 2 + 1 + 0 + 99 + 99 + 43 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Grand PF + 77 + + + THIRD + 7 + + TRIANGL + 31 + 0 + 4 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 2 + 2 + 3 + + + 1 + 2.99 + 9 + 1 + no + no + no + no + 8 + 10 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 3 + 2 + -3 + + 23 + 22 + 31 + 31 + 6 + 3 + 7 + 7 + 14 + 12 + 10 + 14 + 3 + 2 + 3 + 1 + 4 + 4 + 4 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 76 + 74 + 76 + + 2 + 2 + 2 + 1 + 0 + 99 + 99 + 43 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + GrandLow2 + 78 + + + THIRD + 7 + + TRIANGL + 31 + 0 + 4 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 2 + 2 + 3 + + + 1.5 + 4.49 + 13.5 + 1.5 + no + no + no + no + 16 + 11 + 16 + 16 + + W1 + W1 + W1 + W1 + 3 + 3 + 2 + -3 + + 23 + 22 + 31 + 31 + 22 + 3 + 7 + 7 + 14 + 12 + 10 + 14 + 6 + 2 + 3 + 1 + 4 + 4 + 4 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 76 + 74 + 76 + + 2 + 2 + 2 + 1 + 0 + 99 + 99 + 43 + + + -19 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + GrandLow3 + 79 + + + THIRD + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 4 + 1 + 1 + + + 1 + 4 + 7 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W2 + W1 + 0 + 0 + -3 + 2 + + 31 + 31 + 24 + 29 + 8 + 7 + 5 + 4 + 13 + 12 + 0 + 0 + 3 + 3 + 3 + 12 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 74 + 77 + + 2 + 1 + 3 + 1 + 0 + 94 + 61 + 52 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + GrandPiano + 80 + + + FIFTH + 6 + + TRIANGL + 20 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 3 + 3 + + + 1 + 2 + 3 + 12 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 3 + + 31 + 31 + 31 + 31 + 18 + 17 + 18 + 14 + 10 + 14 + 14 + 9 + 8 + 3 + 5 + 15 + 8 + 11 + 8 + 14 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 81 + 89 + 75 + + 0 + 2 + 0 + 0 + 0 + 67 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + HappyPiano + 81 + + + THIRD + 4 + + TRIANGL + 32 + 0 + 0 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 4 + 2 + 2 + + + 1 + 10 + 7 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W6 + W2 + W7 + 0 + 0 + 0 + 0 + + 31 + 31 + 20 + 31 + 30 + 0 + 31 + 3 + 15 + 15 + 11 + 0 + 0 + 12 + 31 + 25 + 7 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 61 + 67 + + 2 + 1 + 3 + 2 + 0 + 37 + 33 + 19 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 14 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + HarpsPiano + 82 + + + FIFTH + 7 + + TRIANGL + 28 + 29 + 16 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 3 + 3 + + + 0.5 + 1 + 2 + 10 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 3 + + 31 + 31 + 31 + 31 + 18 + 9 + 9 + 27 + 10 + 0 + 14 + 10 + 8 + 0 + 5 + 15 + 8 + 11 + 8 + 14 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 77 + 89 + 78 + + 0 + 2 + 0 + 0 + 0 + 67 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Hi-LowBell + 83 + + + FIFTH + 0 + + TRIANGL + 28 + 20 + 6 + 84 + off + + + 6 + 1 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 2 + 3 + + + 1 + 1 + 1 + 12 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 3 + + 31 + 31 + 31 + 31 + 18 + 14 + 18 + 10 + 10 + 14 + 14 + 9 + 5 + 3 + 6 + 0 + 8 + 11 + 8 + 14 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 85 + 75 + 88 + + 0 + 2 + 0 + 0 + 0 + 67 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + High&Long$ + 84 + + + FIRST + 4 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 2 + 3 + 2 + + + 1.51 + 1.49 + 10.49 + 7.22 + no + no + no + no + 14 + 9 + 19 + 10 + + W1 + W1 + W1 + W5 + -3 + 3 + 2 + 3 + + 20 + 22 + 24 + 24 + 8 + 3 + 27 + 1 + 12 + 12 + 13 + 0 + 1 + 1 + 4 + 1 + 5 + 4 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 78 + 61 + 48 + + 2 + 2 + 1 + 1 + 0 + 58 + 0 + 0 + + + -7 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + HonkeyTonk + 85 + + + THIRD + 0 + + TRIANGL + 25 + 0 + 0 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 5 + 2 + 2 + + + 1 + 3 + 5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -3 + 2 + 3 + + 22 + 31 + 31 + 31 + 30 + 4 + 5 + 8 + 15 + 14 + 13 + 13 + 6 + 2 + 4 + 3 + 6 + 5 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 71 + 72 + 72 + + 2 + 1 + 1 + 2 + 0 + 66 + 81 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + Ivory * + 86 + + + THIRD + 7 + + TRIANGL + 31 + 0 + 4 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 2 + 1 + 3 + + + 1 + 2.99 + 8 + 1 + no + no + no + no + 8 + 10 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 3 + 2 + -3 + + 23 + 22 + 31 + 31 + 22 + 3 + 7 + 7 + 14 + 12 + 10 + 14 + 6 + 2 + 3 + 1 + 8 + 6 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 89 + 77 + 53 + + 2 + 2 + 2 + 1 + 0 + 75 + 91 + 43 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + JazzyPiano + 87 + + + SECOND + 6 + + TRIANGL + 20 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 3 + 3 + + + 1 + 2 + 3 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 3 + + 31 + 31 + 31 + 31 + 18 + 17 + 9 + 14 + 10 + 14 + 14 + 9 + 8 + 3 + 5 + 15 + 8 + 11 + 8 + 14 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 81 + 89 + 98 + + 0 + 2 + 0 + 0 + 0 + 67 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + MetalWhip + 88 + + + FIFTH + 6 + + TRIANGL + 20 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 2 + 3 + 3 + + + 1 + 1 + 1 + 15 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 3 + + 31 + 31 + 31 + 31 + 18 + 15 + 18 + 14 + 14 + 14 + 14 + 9 + 6 + 5 + 6 + 15 + 8 + 11 + 8 + 14 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 90 + 96 + 41 + + 1 + 1 + 0 + 0 + 0 + 78 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + NewElectro + 89 + + + FIFTH + 6 + + TRIANGL + 20 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 2 + 4 + 6 + + + 1 + 1 + 1 + 12 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 3 + + 31 + 31 + 31 + 31 + 18 + 14 + 18 + 14 + 10 + 14 + 14 + 9 + 8 + 3 + 6 + 15 + 8 + 11 + 8 + 14 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 85 + 78 + 75 + + 0 + 2 + 0 + 0 + 0 + 67 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + NewElectro* + 90 + + + THIRD + 6 + + TRIANGL + 25 + 0 + 0 + 0 + off + + + 5 + 3 + on + off + off + on + 0 + 0 + 0 + 0 + 3 + 4 + 5 + 1 + + + 1 + 2 + 0.78 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W6 + W3 + W4 + -2 + 0 + 0 + 2 + + 26 + 25 + 31 + 25 + 31 + 10 + 19 + 18 + 15 + 12 + 3 + 10 + 5 + 10 + 0 + 5 + 9 + 9 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 69 + 86 + 84 + + 1 + 2 + 0 + 0 + 0 + 37 + 0 + 37 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 9 + 15 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Old Rose + 91 + + + FIFTH + 7 + + TRIANGL + 28 + 29 + 16 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + + + 1 + 1 + 2 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 3 + + 31 + 31 + 31 + 31 + 18 + 9 + 9 + 27 + 10 + 0 + 14 + 10 + 8 + 0 + 5 + 15 + 8 + 11 + 8 + 14 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 77 + 89 + 78 + + 0 + 2 + 0 + 0 + 0 + 67 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrganPiano + 92 + + + FIFTH + 5 + + TRIANGL + 30 + 23 + 0 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 5 + 2 + + + 24.22 + 4 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -1 + 0 + 1 + 2 + + 30 + 25 + 30 + 22 + 21 + 9 + 22 + 9 + 13 + 6 + 15 + 10 + 8 + 4 + 2 + 0 + 5 + 7 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 59 + 99 + 71 + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Ornt Piano + 93 + + + SECOND + 0 + + TRIANGL + 28 + 8 + 4 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 7 + + + 0.5 + 0.5 + 0.5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W2 + W1 + 2 + -2 + -3 + 2 + + 19 + 19 + 29 + 29 + 5 + 6 + 8 + 8 + 3 + 10 + 10 + 6 + 7 + 7 + 7 + 7 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 59 + 87 + 67 + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 87 + + + 12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + PetalPiano + 94 + + + FOURTH + 6 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 3 + 0 + + + 1 + 1 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 3 + -3 + 3 + + 19 + 21 + 22 + 29 + 29 + 3 + 15 + 23 + 10 + 14 + 15 + 10 + 1 + 0 + 0 + 2 + 3 + 7 + 2 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 78 + 86 + 71 + + 3 + 2 + 2 + 2 + 12 + 53 + 79 + 82 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + PhaseGrand + 95 + + + THIRD + 0 + + TRIANGL + 32 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 4 + 5 + 2 + + + 1 + 2.99 + 9 + 1 + no + no + no + no + 8 + 10 + 8 + 8 + + W2 + W1 + W1 + W1 + 0 + 0 + 3 + 0 + + 30 + 30 + 31 + 31 + 5 + 6 + 12 + 18 + 9 + 9 + 5 + 11 + 3 + 2 + 3 + 8 + 5 + 4 + 5 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 86 + 70 + 78 + + 2 + 2 + 2 + 1 + 0 + 34 + 39 + 57 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + PianGuitar + 96 + + + THIRD + 1 + + TRIANGL + 31 + 0 + 4 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 2 + 2 + 3 + + + 1.31 + 3.87 + 11.72 + 1.31 + no + no + no + no + 13 + 20 + 13 + 13 + + W1 + W1 + W1 + W1 + 3 + 3 + 2 + -3 + + 23 + 22 + 31 + 31 + 22 + 3 + 7 + 7 + 14 + 12 + 10 + 14 + 6 + 2 + 3 + 1 + 4 + 4 + 4 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 51 + 50 + 50 + + 99 + 76 + 74 + 76 + + 2 + 2 + 2 + 1 + 25 + 99 + 99 + 43 + + + -5 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Rag Piano + 97 + + + FOURTH + 7 + + TRIANGL + 23 + 0 + 0 + 17 + off + + + 5 + 3 + off + on + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 3 + 4 + + + 1 + 1 + 2 + 2.18 + no + no + no + no + 8 + 8 + 8 + 11 + + W1 + W1 + W4 + W1 + 0 + 3 + -3 + 0 + + 31 + 31 + 31 + 31 + 9 + 31 + 6 + 13 + 14 + 15 + 13 + 12 + 2 + 0 + 7 + 16 + 7 + 9 + 10 + 13 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 66 + 87 + 39 + + 2 + 2 + 2 + 2 + 0 + 36 + 23 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Reed Piano + 98 + + + THIRD + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 4 + 1 + 1 + + + 1 + 4 + 7 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + -3 + 2 + + 26 + 22 + 24 + 29 + 7 + 1 + 4 + 1 + 13 + 12 + 0 + 0 + 3 + 3 + 3 + 4 + 6 + 4 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 78 + 68 + 72 + + 2 + 2 + 3 + 1 + 0 + 99 + 86 + 26 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SkoolPiano + 99 + + + FIFTH + 5 + + TRIANGL + 25 + 0 + 0 + 81 + off + + + 6 + 1 + on + on + on + off + 0 + 0 + 0 + 0 + 5 + 5 + 4 + 5 + + + 1 + 14.1 + 1 + 21.2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W1 + 0 + 0 + 0 + 0 + + 21 + 27 + 22 + 21 + 9 + 25 + 6 + 6 + 0 + 11 + 13 + 13 + 4 + 3 + 4 + 2 + 7 + 8 + 12 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 99 + 98 + 58 + + 2 + 2 + 1 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SpacePiano + 100 + + + FIFTH + 6 + + TRIANGL + 20 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 3 + 3 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + -3 + 3 + + 31 + 31 + 31 + 31 + 18 + 14 + 18 + 31 + 10 + 14 + 14 + 15 + 8 + 3 + 6 + 0 + 8 + 11 + 8 + 14 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 88 + 92 + + 0 + 2 + 0 + 0 + 0 + 67 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SquareFlat + 101 + + + THIRD + 7 + + TRIANGL + 31 + 8 + 32 + 2 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 2 + 2 + 7 + + + 1 + 2.99 + 9 + 1 + no + no + no + no + 8 + 10 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 3 + 2 + -3 + + 23 + 22 + 31 + 31 + 4 + 4 + 16 + 14 + 15 + 13 + 10 + 9 + 0 + 1 + 2 + 3 + 5 + 3 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 76 + 74 + 76 + + 2 + 2 + 2 + 0 + 0 + 99 + 99 + 41 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sus Piano + 102 + + + THIRD + 2 + + TRIANGL + 29 + 19 + 0 + 0 + on + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 2 + 2 + 3 + + + 1 + 1 + 5 + 1.41 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + -3 + 3 + 2 + 3 + + 31 + 31 + 31 + 31 + 9 + 11 + 9 + 17 + 12 + 15 + 14 + 0 + 7 + 4 + 4 + 11 + 7 + 4 + 9 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 69 + 65 + + 1 + 2 + 2 + 2 + 0 + 85 + 63 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 22 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Thump Pno + 103 + + + FIFTH + 2 + + TRIANGL + 26 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 5 + 2 + + + 2 + 7.67 + 5.5 + 3.43 + no + no + no + no + 8 + 15 + 16 + 15 + + W1 + W1 + W1 + W1 + 3 + 3 + -3 + -3 + + 29 + 31 + 29 + 31 + 16 + 14 + 16 + 15 + 10 + 10 + 14 + 12 + 10 + 10 + 14 + 10 + 8 + 9 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 79 + 84 + 80 + + 1 + 0 + 1 + 0 + 0 + 26 + 0 + 39 + + + 12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Toy Piano + 104 + + + FIFTH + 2 + + TRIANGL + 26 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 5 + 2 + + + 2 + 7.67 + 5.5 + 3.43 + no + no + no + no + 8 + 15 + 16 + 15 + + W1 + W1 + W1 + W1 + 3 + 3 + -3 + -3 + + 29 + 31 + 29 + 31 + 16 + 14 + 16 + 15 + 13 + 13 + 14 + 12 + 13 + 10 + 14 + 13 + 8 + 9 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 79 + 84 + 80 + + 1 + 0 + 1 + 0 + 0 + 26 + 0 + 39 + + + 12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Toy Piano* + 105 + + + FOURTH + 0 + + TRIANGL + 25 + 25 + 60 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 3 + 1 + 2 + + + 1.49 + 3 + 0.75 + 4.64 + no + no + no + yes + 9 + 8 + 12 + 19 + + W1 + W1 + W2 + W8 + 0 + 1 + 0 + 0 + + 22 + 23 + 27 + 31 + 8 + 11 + 10 + 20 + 0 + 0 + 0 + 0 + 10 + 10 + 16 + 10 + 6 + 11 + 1 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 78 + 80 + 94 + + 2 + 3 + 1 + 3 + 31 + 88 + 94 + 0 + + + -19 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Upright * + 106 + + + THIRD + 3 + + TRIANGL + 30 + 0 + 6 + 2 + off + + + 4 + 0 + on + on + on + on + 0 + 0 + 0 + 0 + 2 + 3 + 5 + 2 + + + 1 + 1 + 8 + 1.94 + no + no + no + yes + 8 + 8 + 8 + 50 + + W1 + W2 + W1 + W1 + 0 + 3 + -3 + 1 + + 25 + 28 + 27 + 22 + 7 + 14 + 19 + 29 + 5 + 15 + 15 + 12 + 4 + 3 + 1 + 18 + 6 + 5 + 2 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 79 + 57 + 66 + + 2 + 2 + 3 + 0 + 10 + 20 + 99 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Upright + 107 + + + THIRD + 7 + + TRIANGL + 27 + 15 + 10 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 2 + 2 + + + 0.5 + 0.5 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 3 + -3 + -3 + + 31 + 31 + 31 + 7 + 14 + 8 + 28 + 1 + 13 + 13 + 14 + 13 + 5 + 5 + 3 + 0 + 6 + 7 + 7 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 80 + 76 + + 1 + 1 + 2 + 2 + 0 + 0 + 19 + 22 + + + -12 + POLY + 4 + FINGER + 0 + POR + 99 + 0 + 0 + 75 + 0 + 18 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + UprightBas + 108 + + + THIRD + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 3 + 4 + + + 1 + 1 + 5 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -3 + 2 + -2 + + 19 + 19 + 19 + 19 + 2 + 2 + 2 + 2 + 12 + 12 + 12 + 12 + 1 + 1 + 1 + 1 + 4 + 4 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 89 + 74 + 65 + + 3 + 2 + 3 + 3 + 0 + 69 + 72 + 72 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Uprt piano + 109 + + + THIRD + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 4 + 2 + 1 + + + 1 + 4 + 11 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W3 + W1 + 0 + 0 + -3 + 2 + + 26 + 23 + 25 + 31 + 6 + 7 + 5 + 0 + 11 + 11 + 10 + 9 + 3 + 3 + 3 + 4 + 6 + 4 + 3 + 3 + VOF + VOF + V24 + V48 + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 69 + 70 + 74 + + 2 + 2 + 3 + 3 + 0 + 10 + 65 + 26 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + WiredPiano + 110 + + + FIFTH + 6 + + TRIANGL + 25 + 0 + 7 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 4 + 4 + 4 + + + 0.5 + 1 + 0.5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + -3 + 0 + + 31 + 31 + 31 + 31 + 9 + 5 + 9 + 12 + 0 + 15 + 0 + 3 + 0 + 7 + 0 + 7 + 8 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 99 + 77 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + + + 12 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Wood Piano + 111 + + + FOURTH + 6 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 3 + 0 + + + 1 + 1 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 3 + -3 + 3 + + 19 + 21 + 22 + 29 + 29 + 3 + 15 + 23 + 10 + 14 + 15 + 10 + 1 + 0 + 0 + 2 + 3 + 7 + 2 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 78 + 86 + 78 + + 3 + 2 + 2 + 2 + 12 + 53 + 79 + 7 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + britegrand + 112 + + + FIFTH + 2 + + TRIANGL + 28 + 29 + 7 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 3 + 3 + + + 1 + 1 + 3 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 3 + + 31 + 31 + 31 + 31 + 18 + 1 + 3 + 17 + 10 + 0 + 15 + 10 + 8 + 0 + 5 + 15 + 8 + 11 + 8 + 14 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 90 + 90 + 82 + + 0 + 2 + 0 + 0 + 0 + 67 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + callipiano + 113 + + + FIRST + 2 + + TRIANGL + 28 + 29 + 16 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 4 + 4 + 4 + + + 1 + 1 + 0.5 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 3 + + 31 + 31 + 31 + 31 + 18 + 1 + 5 + 17 + 10 + 0 + 14 + 10 + 8 + 0 + 5 + 15 + 8 + 11 + 8 + 14 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 90 + 90 + 82 + + 0 + 2 + 0 + 0 + 0 + 67 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + flatfunk + 114 + + + FIFTH + 7 + + TRIANGL + 28 + 29 + 16 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 3 + 3 + + + 1 + 1 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 3 + + 31 + 31 + 31 + 31 + 18 + 9 + 9 + 5 + 10 + 0 + 14 + 10 + 8 + 0 + 5 + 0 + 8 + 11 + 8 + 14 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 77 + 92 + 89 + + 0 + 2 + 0 + 0 + 0 + 67 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + fuzzbass + 115 + + + FIFTH + 7 + + TRIANGL + 28 + 29 + 6 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 3 + 3 + + + 0.5 + 1 + 2 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 3 + + 31 + 31 + 31 + 31 + 18 + 9 + 9 + 14 + 10 + 0 + 14 + 12 + 8 + 0 + 5 + 1 + 8 + 11 + 8 + 14 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 77 + 89 + 90 + + 0 + 2 + 0 + 0 + 0 + 67 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + metlmarimb + 116 + + + FIRST + 7 + + TRIANGL + 30 + 9 + 4 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 3 + + + 2 + 1 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 1 + 0 + 0 + + 31 + 31 + 31 + 31 + 28 + 11 + 6 + 2 + 10 + 12 + 1 + 0 + 4 + 0 + 0 + 3 + 9 + 9 + 9 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 60 + 75 + 84 + + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 14 + + + -12 + POLY + 2 + FINGER + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + mildfilter + 117 + + + FIFTH + 7 + + TRIANGL + 28 + 29 + 16 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 7 + 1 + 7 + + + 1 + 1 + 2 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 3 + + 31 + 31 + 31 + 31 + 18 + 9 + 9 + 7 + 10 + 0 + 14 + 10 + 8 + 0 + 5 + 0 + 8 + 11 + 8 + 14 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 77 + 89 + 98 + + 0 + 2 + 0 + 0 + 0 + 67 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + phaseharp + 118 + + + FIFTH + 7 + + TRIANGL + 28 + 29 + 16 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 3 + 3 + + + 1 + 1 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 3 + + 31 + 31 + 31 + 19 + 18 + 9 + 9 + 16 + 10 + 0 + 14 + 10 + 8 + 0 + 5 + 0 + 8 + 11 + 8 + 14 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 77 + 89 + 84 + + 0 + 2 + 0 + 0 + 0 + 67 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + pizzapiano + 119 + + + FIFTH + 7 + + TRIANGL + 28 + 29 + 16 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 3 + 3 + + + 1 + 3 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 3 + + 31 + 25 + 31 + 6 + 18 + 2 + 9 + 5 + 10 + 0 + 14 + 10 + 8 + 0 + 5 + 0 + 8 + 11 + 8 + 14 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 87 + 89 + 82 + + 0 + 2 + 0 + 0 + 0 + 67 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + stringback + 120 + + + + Rhodes + 4 + + FIRST + 7 + + TRIANGL + 20 + 0 + 0 + 16 + off + + + 6 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 5 + 1 + + + 1 + 1 + 2 + 25.95 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 0 + 0 + 0 + 3 + + 31 + 31 + 31 + 31 + 18 + 18 + 18 + 31 + 14 + 14 + 14 + 15 + 6 + 5 + 6 + 15 + 8 + 7 + 8 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 88 + 74 + 43 + + 1 + 1 + 1 + 0 + 0 + 78 + 82 + 0 + + + -12 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Rhodes...1 + 0 + + + FIFTH + 0 + + TRIANGL + 34 + 33 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 1 + 5 + 1 + + + 1 + 14 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 28 + 28 + 28 + 28 + 7 + 9 + 4 + 4 + 11 + 12 + 12 + 12 + 7 + 6 + 0 + 0 + 8 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 55 + 96 + 87 + + 0 + 1 + 2 + 3 + 0 + 78 + 82 + 0 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Rhodes...2 + 1 + + + FIFTH + 6 + + TRIANGL + 20 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 2 + + + 1 + 16.96 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 28 + 28 + 28 + 28 + 31 + 21 + 4 + 4 + 11 + 12 + 12 + 12 + 7 + 12 + 0 + 0 + 4 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 99 + 95 + 71 + + 1 + 1 + 0 + 0 + 0 + 78 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Rhodes...3 + 2 + + + SEVENTH + 6 + + TRIANGL + 20 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 5 + 3 + + + 2 + 16.96 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + 0 + 0 + 0 + 0 + + 28 + 28 + 28 + 28 + 31 + 21 + 4 + 4 + 11 + 12 + 12 + 12 + 7 + 12 + 0 + 0 + 4 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 88 + 90 + 72 + + 1 + 1 + 0 + 0 + 0 + 78 + 0 + 0 + + + -12 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Rhodes...4 + 3 + + + FIFTH + 6 + + TRIANGL + 19 + 0 + 0 + 36 + off + + + 6 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 5 + 4 + 3 + + + 1 + 14 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 0 + -3 + 3 + + 28 + 28 + 28 + 28 + 7 + 9 + 6 + 9 + 11 + 10 + 12 + 5 + 7 + 5 + 6 + 6 + 7 + 11 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 97 + 95 + 82 + + 1 + 1 + 1 + 1 + 0 + 78 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Rhodes...5 + 4 + + + SEVENTH + 4 + + TRIANGL + 19 + 0 + 0 + 36 + off + + + 6 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 3 + + + 1 + 12 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 15 + 13 + 6 + 3 + 13 + 13 + 13 + 13 + 9 + 10 + 8 + 3 + 7 + 6 + 7 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 85 + 90 + 81 + + 1 + 1 + 0 + 3 + 0 + 78 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Rhodes...6 + 5 + + + SEVENTH + 7 + + TRIANGL + 20 + 10 + 0 + 57 + on + + + 0 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 4 + 2 + 4 + 1 + + + 1 + 0.5 + 4 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 1 + 3 + 3 + + 25 + 25 + 25 + 25 + 7 + 10 + 7 + 10 + 7 + 2 + 7 + 1 + 9 + 9 + 9 + 9 + 5 + 5 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 61 + + 1 + 1 + 1 + 2 + 19 + 0 + 19 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 21 + 39 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Rhodes...7 + 6 + + + SEVENTH + 7 + + TRIANGL + 20 + 10 + 0 + 57 + on + + + 0 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 2 + + + 1 + 12 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 1 + 3 + 3 + + 28 + 28 + 28 + 28 + 15 + 15 + 6 + 9 + 11 + 11 + 13 + 13 + 9 + 10 + 6 + 0 + 7 + 5 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 95 + 91 + 76 + + 0 + 2 + 0 + 3 + 19 + 92 + 19 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 21 + 39 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Rhodes...8 + 7 + + + SEVENTH + 0 + + TRIANGL + 25 + 33 + 0 + 44 + off + + + 0 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 6 + 3 + 6 + 1 + + + 1 + 14 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 28 + 28 + 28 + 28 + 7 + 9 + 4 + 4 + 11 + 12 + 12 + 12 + 7 + 6 + 0 + 0 + 8 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 66 + 99 + 84 + + 0 + 1 + 2 + 3 + 0 + 78 + 82 + 0 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Rhodes...9 + 8 + + + EIGHTH + 0 + + TRIANGL + 25 + 33 + 0 + 44 + off + + + 0 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 4 + 2 + + + 1 + 12 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W3 + 0 + 0 + 0 + 0 + + 28 + 28 + 28 + 28 + 7 + 9 + 4 + 4 + 11 + 12 + 12 + 12 + 7 + 6 + 0 + 0 + 8 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 87 + 99 + 91 + + 0 + 3 + 2 + 3 + 0 + 78 + 82 + 0 + + + 0 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Rhodes..10 + 9 + + + FIFTH + 7 + + TRIANGL + 34 + 33 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 4 + 3 + + + 1 + 8 + 1 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 3 + + 31 + 31 + 31 + 31 + 18 + 18 + 18 + 31 + 14 + 14 + 14 + 15 + 6 + 5 + 6 + 15 + 8 + 11 + 8 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 69 + 69 + 52 + + 0 + 0 + 0 + 1 + 0 + 78 + 82 + 0 + + + -12 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Rhodes..11 + 10 + + + EIGHTH + 6 + + TRIANGL + 19 + 0 + 0 + 36 + off + + + 6 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 6 + 5 + 4 + 4 + + + 1 + 12 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + -3 + 3 + + 26 + 26 + 26 + 26 + 31 + 21 + 4 + 4 + 11 + 12 + 12 + 12 + 7 + 12 + 0 + 0 + 4 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 98 + 99 + 89 + + 1 + 1 + 0 + 0 + 0 + 78 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Rhodes..12 + 11 + + + FOURTH + 0 + + TRIANGL + 19 + 0 + 0 + 36 + off + + + 6 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 6 + 5 + 4 + + + 1 + 10 + 1 + 11 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 15 + 13 + 6 + 3 + 13 + 13 + 13 + 13 + 5 + 7 + 4 + 2 + 7 + 6 + 7 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 69 + 54 + 61 + + 0 + 2 + 0 + 3 + 0 + 50 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Rhodes..13 + 12 + + + FIFTH + 0 + + TRIANGL + 20 + 22 + 7 + 12 + off + + + 4 + 2 + off + off + on + on + 0 + 0 + 0 + 0 + 7 + 1 + 6 + 7 + + + 5.49 + 14.91 + 0.5 + 0.5 + no + yes + no + no + 16 + 72 + 8 + 8 + + W5 + W6 + W1 + W4 + -3 + 0 + 0 + 3 + + 31 + 31 + 31 + 31 + 21 + 24 + 25 + 9 + 13 + 12 + 15 + 10 + 10 + 2 + 4 + 8 + 5 + 6 + 5 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 87 + 89 + 99 + 99 + + 2 + 1 + 2 + 0 + 7 + 0 + 4 + 43 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 51 + 47 + 39 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + RatRhodes + 13 + + + + Synthesizer1 + 5 + + FIFTH + 6 + + TRIANGL + 42 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 4 + + + 1 + 5 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -1 + 1 + 2 + 0 + + 6 + 6 + 18 + 5 + 6 + 3 + 1 + 6 + 11 + 13 + 14 + 10 + 9 + 12 + 6 + 7 + 6 + 6 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 68 + 99 + 82 + + 0 + 1 + 0 + 1 + 0 + 0 + 0 + 35 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgSynt.1 + 0 + + + FIFTH + 7 + + TRIANGL + 42 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 6 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W3 + 0 + 3 + 0 + 0 + + 31 + 15 + 31 + 31 + 18 + 3 + 31 + 2 + 14 + 14 + 15 + 4 + 1 + 3 + 0 + 7 + 9 + 8 + 15 + 12 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 95 + 95 + 86 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 92 + + + -24 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgSynt.2 + 1 + + + FIFTH + 6 + + TRIANGL + 42 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 7 + 3 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W2 + W3 + W2 + 0 + 3 + 0 + 0 + + 31 + 15 + 31 + 31 + 18 + 3 + 31 + 2 + 14 + 14 + 15 + 4 + 1 + 3 + 0 + 7 + 9 + 8 + 15 + 12 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 99 + 99 + 89 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 92 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgSynt.3 + 2 + + + FIFTH + 7 + + TRIANGL + 42 + 0 + 0 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 4 + + + 1 + 2 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W2 + -3 + -3 + 2 + 2 + + 27 + 18 + 31 + 18 + 9 + 4 + 18 + 9 + 10 + 12 + 14 + 10 + 12 + 3 + 7 + 7 + 9 + 9 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 84 + 81 + 99 + 81 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 92 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgSynt.4 + 3 + + + FIFTH + 6 + + TRIANGL + 35 + 0 + 2 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 6 + 5 + 4 + + + 1 + 3 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W3 + W1 + 0 + 0 + 1 + -1 + + 30 + 30 + 31 + 27 + 9 + 4 + 9 + 15 + 14 + 9 + 14 + 13 + 7 + 6 + 7 + 15 + 10 + 12 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 77 + 97 + 82 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgSynt.5 + 4 + + + FIFTH + 5 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 5 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W3 + W3 + W1 + -2 + 2 + 0 + 0 + + 31 + 31 + 31 + 31 + 9 + 15 + 31 + 2 + 9 + 15 + 15 + 4 + 1 + 3 + 0 + 7 + 9 + 8 + 15 + 12 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 84 + 99 + 83 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 92 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgSynt.6 + 5 + + + FIFTH + 5 + + TRIANGL + 32 + 0 + 0 + 71 + off + + + 3 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 5 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W3 + W1 + -3 + 3 + -3 + -3 + + 31 + 31 + 24 + 31 + 21 + 10 + 7 + 6 + 14 + 7 + 5 + 5 + 6 + 6 + 4 + 3 + 8 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 82 + 99 + 93 + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 92 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgSynt.7 + 6 + + + FIFTH + 5 + + TRIANGL + 32 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 6 + 6 + 4 + + + 2 + 1 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + 0 + 0 + 3 + 3 + + 31 + 18 + 31 + 18 + 22 + 12 + 22 + 12 + 13 + 10 + 13 + 7 + 0 + 7 + 0 + 7 + 9 + 9 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 91 + 86 + 88 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgSynt.8 + 7 + + + FIFTH + 5 + + TRIANGL + 38 + 33 + 17 + 0 + off + + + 2 + 0 + on + off + off + off + 0 + 0 + 0 + 0 + 7 + 4 + 5 + 3 + + + 1 + 1 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W3 + W2 + W5 + 3 + -1 + 3 + 3 + + 31 + 15 + 31 + 15 + 21 + 12 + 21 + 12 + 13 + 12 + 13 + 12 + 5 + 9 + 5 + 9 + 5 + 4 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 89 + 86 + 90 + + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgSynt.9 + 8 + + + FIFTH + 7 + + TRIANGL + 38 + 33 + 32 + 0 + off + + + 5 + 0 + on + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 5 + 3 + + + 1 + 5 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W2 + W1 + 3 + -1 + -3 + -3 + + 31 + 15 + 15 + 15 + 21 + 4 + 21 + 13 + 13 + 12 + 14 + 6 + 6 + 18 + 6 + 18 + 5 + 9 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 74 + 99 + 82 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgSynt10 + 9 + + + FIFTH + 7 + + TRIANGL + 38 + 28 + 32 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 6 + 4 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W5 + W1 + W1 + 3 + -1 + -3 + -3 + + 16 + 16 + 17 + 19 + 21 + 13 + 6 + 3 + 14 + 6 + 14 + 6 + 6 + 18 + 6 + 18 + 8 + 7 + 8 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 86 + 99 + 80 + + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgSynt11 + 10 + + + FIFTH + 5 + + TRIANGL + 38 + 33 + 32 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 7 + 4 + + + 1 + 4 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + -1 + -3 + -3 + + 25 + 7 + 16 + 16 + 4 + 4 + 5 + 3 + 15 + 13 + 14 + 6 + 3 + 4 + 6 + 18 + 7 + 7 + 8 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 86 + 99 + 87 + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgSynt12 + 11 + + + SIXTH + 5 + + TRIANGL + 37 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 4 + 3 + + + 0.5 + 0.5 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W2 + W1 + -1 + -1 + 1 + 0 + + 31 + 31 + 31 + 31 + 22 + 12 + 12 + 9 + 15 + 11 + 11 + 15 + 2 + 6 + 5 + 6 + 10 + 10 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 99 + 99 + 89 + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgSynt13 + 12 + + + FIFTH + 5 + + TRIANGL + 28 + 0 + 5 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 3 + + + 1 + 4 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + 2 + 2 + -2 + -2 + + 31 + 31 + 31 + 31 + 6 + 6 + 7 + 6 + 9 + 9 + 7 + 7 + 0 + 0 + 0 + 0 + 4 + 4 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 84 + 99 + 88 + + 1 + 1 + 1 + 1 + 0 + 19 + 11 + 27 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgSynt14 + 13 + + + FIFTH + 5 + + TRIANGL + 28 + 0 + 5 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 4 + 3 + + + 0.5 + 1 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + -2 + -2 + -2 + -2 + + 31 + 31 + 31 + 31 + 21 + 21 + 21 + 9 + 15 + 15 + 15 + 3 + 6 + 6 + 6 + 1 + 9 + 9 + 9 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 87 + 99 + 99 + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 27 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AnlgSynt15 + 14 + + + SIXTH + 5 + + TRIANGL + 33 + 0 + 56 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 3 + + + 2 + 4 + 6 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 28 + 31 + 31 + 31 + 6 + 3 + 8 + 8 + 7 + 6 + 12 + 9 + 4 + 0 + 0 + 1 + 4 + 5 + 4 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 89 + 99 + 85 + + 1 + 1 + 1 + 0 + 0 + 45 + 67 + 0 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Ariesynth1 + 15 + + + THIRD + 7 + + TRIANGL + 33 + 0 + 56 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 5 + 5 + 3 + + + 1 + 0.5 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W2 + W1 + 0 + 0 + 0 + 0 + + 28 + 31 + 31 + 31 + 6 + 3 + 8 + 8 + 7 + 6 + 12 + 9 + 4 + 0 + 0 + 1 + 5 + 5 + 4 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 85 + 83 + + 1 + 2 + 1 + 0 + 0 + 45 + 67 + 0 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Ariesynth2 + 16 + + + THIRD + 7 + + TRIANGL + 33 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 26 + 31 + 31 + 31 + 12 + 7 + 4 + 13 + 14 + 12 + 13 + 13 + 0 + 0 + 0 + 8 + 8 + 4 + 2 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 66 + 66 + 76 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + MONO + 2 + FINGER + 31 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + A.R.P. * + 17 + + + SIXTH + 5 + + TRIANGL + 20 + 0 + 54 + 0 + on + + + 2 + 0 + off + off + off + off + 1 + 0 + 0 + 0 + 5 + 5 + 4 + 4 + + + 1 + 5 + 4 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W1 + 1 + -1 + 2 + -2 + + 16 + 31 + 31 + 29 + 31 + 13 + 13 + 22 + 15 + 0 + 0 + 14 + 0 + 16 + 16 + 0 + 11 + 5 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 63 + 58 + 98 + + 0 + 2 + 2 + 0 + 0 + 14 + 12 + 10 + + + 0 + POLY + 4 + FULL + 1 + POR + 99 + 0 + 0 + 25 + 51 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ARP 2500 + 18 + + + SIXTH + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 4 + 0 + off + off + off + off + 7 + 4 + 3 + 0 + 5 + 5 + 5 + 5 + + + 2 + 3 + 3 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W2 + W1 + 0 + 0 + 1 + 1 + + 16 + 16 + 16 + 22 + 5 + 5 + 5 + 8 + 3 + 3 + 3 + 3 + 5 + 6 + 5 + 2 + 8 + 8 + 8 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 96 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 5 + FULL + 1 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ARP 2600.1 + 19 + + + EIGHTH + 7 + + TRIANGL + 20 + 0 + 54 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 3 + + + 1 + 5 + 6 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W6 + 1 + -1 + 2 + -2 + + 16 + 31 + 31 + 29 + 31 + 13 + 13 + 22 + 15 + 0 + 0 + 14 + 0 + 16 + 16 + 0 + 11 + 5 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 60 + 53 + 99 + + 0 + 2 + 2 + 0 + 0 + 14 + 12 + 10 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 25 + 51 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ARP 2600.2 + 20 + + + FIFTH + 5 + + TRIANGL + 34 + 0 + 11 + 0 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 6 + 4 + + + 1 + 1 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W2 + 2 + -2 + 2 + -2 + + 24 + 24 + 24 + 24 + 8 + 8 + 8 + 8 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 92 + 97 + 92 + + 2 + 2 + 2 + 2 + 20 + 20 + 20 + 20 + + + -12 + MONO + 7 + FINGER + 1 + POR + 99 + 0 + 0 + 99 + 99 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ARP Axxe.1 + 21 + + + FIFTH + 4 + + TRIANGL + 26 + 0 + 0 + 0 + on + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 5 + + + 1 + 2 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W4 + W1 + 3 + -2 + 3 + 0 + + 15 + 21 + 24 + 25 + 4 + 18 + 7 + 5 + 13 + 13 + 13 + 9 + 3 + 3 + 5 + 2 + 7 + 4 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 84 + 99 + 89 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + MONO + 6 + FINGER + 2 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ARP Axxe.2 + 22 + + + SIXTH + 6 + + TRIANGL + 35 + 8 + 16 + 6 + off + + + 5 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 6 + 5 + 6 + 4 + + + 2 + 4 + 8 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + 0 + 1 + 1 + -1 + + 11 + 13 + 12 + 31 + 31 + 7 + 31 + 19 + 15 + 6 + 15 + 14 + 6 + 14 + 0 + 0 + 8 + 6 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 78 + + 0 + 0 + 0 + 0 + 10 + 14 + 82 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ARP Omni.1 + 23 + + + FIFTH + 2 + + TRIANGL + 34 + 5 + 12 + 0 + on + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 3 + 5 + 5 + + + 2 + 2 + 2 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + -2 + 2 + -3 + 3 + + 10 + 11 + 10 + 11 + 31 + 3 + 31 + 3 + 15 + 4 + 15 + 4 + 0 + 30 + 1 + 30 + 5 + 5 + 8 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 91 + 75 + 87 + 80 + + 0 + 1 + 1 + 0 + 37 + 35 + 21 + 86 + + + -12 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ARP Omni.2 + 24 + + + THIRD + 7 + + TRIANGL + 31 + 0 + 4 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 1 + 0 + + + 1 + 2 + 9 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W7 + W5 + W1 + W1 + 0 + 0 + 1 + 0 + + 17 + 17 + 25 + 25 + 19 + 1 + 4 + 5 + 15 + 12 + 10 + 3 + 5 + 5 + 5 + 1 + 4 + 4 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 66 + 72 + 72 + + 2 + 1 + 1 + 1 + 0 + 60 + 32 + 44 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Axel F + 25 + + + FIFTH + 6 + + TRIANGL + 38 + 33 + 32 + 71 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 4 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 3 + -1 + -3 + -3 + + 21 + 21 + 19 + 21 + 21 + 4 + 21 + 13 + 13 + 12 + 14 + 14 + 6 + 20 + 3 + 2 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 95 + 99 + 88 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Axel F...1 + 26 + + + FIFTH + 5 + + TRIANGL + 38 + 33 + 32 + 43 + off + + + 1 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 6 + 3 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W3 + W4 + W2 + 3 + -1 + -3 + -3 + + 21 + 21 + 21 + 24 + 21 + 4 + 21 + 21 + 13 + 12 + 14 + 14 + 6 + 20 + 3 + 2 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 95 + 99 + 90 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + -12 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Axel F...2 + 27 + + + FIRST + 0 + + SHOLD + 99 + 0 + 23 + 99 + off + + + 7 + 3 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + + + 1 + 3 + 6 + 23.55 + no + no + no + yes + 8 + 8 + 8 + 16 + + W5 + W1 + W1 + W5 + 0 + -3 + 3 + -3 + + 20 + 20 + 31 + 31 + 27 + 31 + 11 + 21 + 15 + 13 + 0 + 0 + 11 + 0 + 0 + 0 + 7 + 1 + 1 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 74 + 70 + 67 + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BadSample* + 28 + + + THIRD + 7 + + TRIANGL + 35 + 0 + 5 + 48 + off + + + 6 + 0 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 6 + 6 + 5 + + + 2 + 0.5 + 8 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + 1 + -1 + 1 + -1 + + 16 + 13 + 28 + 5 + 5 + 8 + 0 + 9 + 15 + 13 + 15 + 13 + 0 + 1 + 0 + 0 + 5 + 5 + 4 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 84 + 78 + 47 + 84 + + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 32 + + + -24 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Beta.....1 + 29 + + + FOURTH + 5 + + TRIANGL + 35 + 0 + 5 + 48 + off + + + 6 + 0 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 3 + + + 2 + 1 + 4 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + 1 + -1 + 1 + -1 + + 16 + 13 + 28 + 9 + 4 + 3 + 0 + 9 + 7 + 7 + 15 + 13 + 0 + 0 + 0 + 0 + 5 + 5 + 4 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 86 + 86 + 69 + 88 + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 32 + + + -24 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Beta.....2 + 30 + + + THIRD + 0 + + TRIANGL + 26 + 22 + 3 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 4 + 2 + + + 4 + 6 + 12 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W4 + W4 + W3 + 0 + 1 + -2 + -3 + + 31 + 31 + 31 + 31 + 16 + 25 + 5 + 0 + 14 + 12 + 0 + 0 + 8 + 8 + 0 + 14 + 7 + 10 + 2 + 5 + VOF + V24 + V48 + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 92 + 82 + 84 + + 1 + 1 + 2 + 2 + 0 + 0 + 94 + 24 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 40 + 0 + 30 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BigWash + 31 + + + FIFTH + 4 + + TRIANGL + 26 + 0 + 0 + 0 + on + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 3 + 3 + + + 1 + 4 + 1 + 14 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 3 + -2 + 3 + 0 + + 15 + 21 + 24 + 31 + 4 + 22 + 25 + 15 + 13 + 13 + 13 + 9 + 3 + 3 + 7 + 31 + 7 + 4 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 99 + 68 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Chroma...1 + 32 + + + FIFTH + 5 + + TRIANGL + 33 + 23 + 2 + 13 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 6 + 2 + + + 1 + 5 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + 0 + 0 + 0 + 1 + + 31 + 31 + 19 + 31 + 9 + 19 + 21 + 19 + 12 + 7 + 13 + 10 + 11 + 31 + 6 + 0 + 6 + 1 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 89 + 92 + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Chroma...2 + 33 + + + FIFTH + 6 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 4 + 4 + + + 1 + 14 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 21 + 27 + 10 + 10 + 6 + 6 + 13 + 7 + 15 + 15 + 0 + 0 + 3 + 3 + 9 + 9 + 9 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 65 + 92 + 84 + + 1 + 3 + 2 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Chroma...3 + 34 + + + SIXTH + 0 + + SHOLD + 44 + 0 + 99 + 99 + off + + + 3 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 3 + + + 1 + 4 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 3 + -3 + -3 + + 15 + 16 + 16 + 16 + 3 + 9 + 9 + 9 + 15 + 15 + 15 + 15 + 1 + 4 + 4 + 4 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 72 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Crazy 6502 + 35 + + + SECOND + 7 + + TRIANGL + 29 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 1 + 2 + + + 1 + 1 + 10 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -3 + 3 + -3 + + 31 + 31 + 31 + 31 + 31 + 17 + 19 + 12 + 15 + 13 + 13 + 12 + 8 + 2 + 14 + 5 + 6 + 5 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 69 + 63 + 83 + + 2 + 0 + 0 + 1 + 0 + 30 + 50 + 23 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + DigiAnnie + 36 + + + FIFTH + 6 + + TRIANGL + 0 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 6 + 5 + + + 0.5 + 4 + 0.5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W4 + W1 + W1 + 0 + 0 + 3 + 3 + + 18 + 23 + 25 + 13 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 1 + 0 + 0 + 1 + 2 + 3 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 73 + 99 + 88 + + 3 + 0 + 2 + 3 + 20 + 10 + 8 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + <> DS 1 <> + 37 + + + FIFTH + 6 + + TRIANGL + 32 + 0 + 10 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 4 + 4 + 4 + + + 5 + 1 + 0.5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 3 + 3 + + 18 + 23 + 25 + 13 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 1 + 0 + 0 + 1 + 2 + 3 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 59 + 99 + 79 + + 3 + 0 + 2 + 3 + 20 + 10 + 8 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + < DS 11 > + 38 + + + FIFTH + 7 + + TRIANGL + 25 + 0 + 12 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 6 + 4 + 5 + + + 1 + 1 + 0.5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W3 + W1 + 0 + -3 + 0 + 3 + + 19 + 15 + 19 + 21 + 5 + 7 + 7 + 0 + 14 + 11 + 14 + 7 + 0 + 1 + 0 + 1 + 6 + 5 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 82 + 96 + 86 + + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + EML Synth1 + 39 + + + FIFTH + 7 + + TRIANGL + 25 + 0 + 12 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 5 + 3 + + + 2 + 2 + 0.5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 0 + -3 + 0 + 3 + + 19 + 15 + 19 + 21 + 5 + 7 + 7 + 0 + 14 + 11 + 14 + 7 + 0 + 1 + 0 + 1 + 6 + 5 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 91 + 96 + 84 + + 1 + 2 + 0 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + EML Synth2 + 40 + + + SEVENTH + 7 + + TRIANGL + 35 + 48 + 0 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 3 + 7 + 2 + + + 2 + 1 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + -2 + 2 + -1 + -2 + + 15 + 15 + 21 + 21 + 0 + 0 + 9 + 9 + 13 + 13 + 13 + 13 + 3 + 3 + 7 + 7 + 6 + 6 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 90 + + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Explorer.1 + 41 + + + EIGHTH + 6 + + TRIANGL + 23 + 0 + 11 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 5 + + + 1 + 2 + 0.5 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W3 + W1 + 0 + -3 + 3 + -2 + + 19 + 15 + 21 + 21 + 0 + 0 + 9 + 9 + 13 + 13 + 13 + 13 + 3 + 3 + 7 + 7 + 6 + 6 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 65 + 99 + + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Explorer.2 + 42 + + + SEVENTH + 7 + + TRIANGL + 23 + 0 + 11 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 4 + 2 + + + 4 + 2 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + -3 + -1 + 2 + 1 + + 15 + 15 + 21 + 21 + 0 + 0 + 9 + 9 + 13 + 13 + 13 + 13 + 4 + 4 + 7 + 7 + 6 + 6 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 81 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Explorer.3 + 43 + + + FIFTH + 0 + + TRIANGL + 33 + 21 + 3 + 5 + on + + + 5 + 3 + on + on + on + on + 0 + 0 + 0 + 0 + 3 + 4 + 3 + 4 + + + 1.5 + 3 + 1.5 + 3 + no + no + no + no + 16 + 8 + 16 + 8 + + W3 + W5 + W3 + W5 + 0 + 0 + -2 + -2 + + 17 + 17 + 17 + 15 + 5 + 12 + 5 + 12 + 15 + 13 + 15 + 13 + 0 + 0 + 0 + 0 + 9 + 10 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 99 + 80 + + 1 + 0 + 0 + 1 + 0 + 32 + 0 + 32 + + + -7 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 30 + 85 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + FMMelodica + 44 + + + THIRD + 6 + + TRIANGL + 33 + 29 + 14 + 26 + on + + + 5 + 1 + off + on + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 4 + 3 + + + 2 + 2 + 4 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 0 + 0 + 0 + 3 + + 16 + 8 + 6 + 9 + 6 + 31 + 31 + 6 + 14 + 15 + 15 + 14 + 0 + 0 + 0 + 0 + 5 + 2 + 4 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 71 + 60 + 92 + + 1 + 2 + 0 + 0 + 0 + 0 + 78 + 20 + + + -12 + POLY + 8 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Gamma....1 + 45 + + + THIRD + 5 + + TRIANGL + 33 + 29 + 14 + 26 + on + + + 5 + 1 + off + on + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 5 + + + 1 + 2 + 5 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W3 + 0 + 0 + 0 + 3 + + 16 + 12 + 10 + 9 + 6 + 31 + 31 + 6 + 14 + 15 + 15 + 14 + 0 + 0 + 0 + 0 + 5 + 2 + 4 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 59 + 76 + 82 + + 1 + 2 + 0 + 0 + 0 + 0 + 78 + 20 + + + -12 + POLY + 8 + FULL + 1 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Gamma....2 + 46 + + + FIFTH + 5 + + TRIANGL + 38 + 33 + 8 + 71 + off + + + 2 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 3 + + + 8 + 8 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W2 + W2 + -3 + -3 + 3 + 1 + + 11 + 12 + 21 + 13 + 21 + 4 + 4 + 3 + 15 + 12 + 14 + 14 + 12 + 7 + 2 + 9 + 6 + 6 + 5 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 66 + 99 + 82 + + 1 + 1 + 0 + 2 + 0 + 0 + 0 + 10 + + + -24 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + GleeSynth + 47 + + + THIRD + 6 + + TRIANGL + 29 + 8 + 0 + 0 + on + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 2 + 0 + + + 1.5 + 3 + 10.48 + 1.49 + no + no + no + no + 16 + 8 + 9 + 9 + + W5 + W6 + W8 + W6 + 0 + -1 + -2 + 3 + + 21 + 27 + 24 + 17 + 10 + 5 + 7 + 0 + 15 + 14 + 14 + 12 + 0 + 0 + 0 + 0 + 11 + 10 + 8 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 79 + 67 + 68 + + 1 + 1 + 1 + 0 + 0 + 0 + 59 + 0 + + + -19 + POLY + 4 + FULL + 1 + POR + 99 + 0 + 0 + 65 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + HardSync + 48 + + + SIXTH + 6 + + TRIANGL + 34 + 0 + 20 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 4 + 5 + 4 + + + 0.5 + 1 + 4 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 0 + -1 + 1 + 0 + + 8 + 8 + 7 + 8 + 31 + 14 + 4 + 31 + 15 + 1 + 7 + 15 + 1 + 0 + 12 + 0 + 5 + 5 + 6 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 99 + 97 + 88 + + 2 + 0 + 1 + 0 + 0 + 0 + 60 + 99 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Helix....1 + 49 + + + FIFTH + 5 + + TRIANGL + 34 + 0 + 20 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 6 + 5 + 5 + + + 1 + 0.5 + 4 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W2 + W1 + 0 + -1 + 1 + 0 + + 8 + 8 + 7 + 8 + 31 + 7 + 4 + 31 + 15 + 8 + 7 + 15 + 1 + 0 + 12 + 0 + 5 + 5 + 6 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 83 + 97 + 95 + + 2 + 0 + 1 + 0 + 0 + 0 + 60 + 99 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Helix....2 + 50 + + + FIFTH + 5 + + TRIANGL + 27 + 0 + 60 + 99 + off + + + 2 + 1 + off + off + on + on + 0 + 0 + 0 + 0 + 6 + 3 + 5 + 2 + + + 1 + 2 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 16 + 15 + 15 + 24 + 0 + 0 + 0 + 23 + 13 + 13 + 13 + 14 + 3 + 3 + 3 + 27 + 5 + 5 + 5 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 46 + 99 + 57 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 1 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + \ ISAO \ + 51 + + + FIFTH + 7 + + TRIANGL + 33 + 0 + 56 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 4 + + + 1 + 0.5 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + 0 + 0 + 0 + 0 + + 24 + 24 + 20 + 23 + 8 + 9 + 8 + 5 + 7 + 11 + 12 + 8 + 4 + 0 + 0 + 1 + 4 + 5 + 3 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 96 + 99 + 81 + + 2 + 2 + 3 + 0 + 0 + 45 + 67 + 0 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + JP 4.....1 + 52 + + + FIFTH + 7 + + TRIANGL + 37 + 73 + 15 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 5 + 7 + 3 + + + 0.5 + 4 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W3 + W1 + 2 + 0 + -3 + 3 + + 22 + 22 + 22 + 22 + 21 + 10 + 9 + 8 + 13 + 13 + 15 + 15 + 1 + 10 + 1 + 3 + 6 + 5 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 89 + 84 + 99 + 84 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + JP 4.....2 + 53 + + + FIFTH + 7 + + TRIANGL + 32 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 1 + 2 + 2 + + + 1.49 + 1.49 + 1.51 + 1.51 + no + no + no + no + 9 + 9 + 14 + 14 + + W2 + W4 + W6 + W1 + 3 + -2 + -2 + -1 + + 22 + 31 + 21 + 6 + 14 + 14 + 14 + 10 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 5 + 7 + 3 + 7 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 99 + 78 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -19 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + Juno Juice + 54 + + + FIFTH + 7 + + TRIANGL + 32 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 1 + 2 + 1 + + + 1.49 + 1.49 + 1.51 + 1.51 + no + no + no + no + 9 + 9 + 14 + 14 + + W2 + W4 + W6 + W3 + 3 + -2 + -2 + -1 + + 22 + 31 + 21 + 31 + 14 + 14 + 14 + 10 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 7 + 3 + 7 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 99 + 74 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -19 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + Juno Who? + 55 + + + SECOND + 0 + + TRIANGL + 30 + 12 + 15 + 5 + off + + + 5 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 4 + 4 + 7.94 + 11.93 + no + no + no + no + 8 + 8 + 9 + 23 + + W1 + W1 + W1 + W1 + 1 + 2 + 3 + -1 + + 12 + 31 + 31 + 31 + 10 + 0 + 0 + 0 + 14 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 4 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 65 + 65 + 61 + + 1 + 0 + 0 + 0 + 0 + 25 + 59 + 53 + + + -24 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Jupiter * + 56 + + + FIFTH + 7 + + TRIANGL + 41 + 0 + 5 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 1 + 6 + 2 + + + 1 + 0.5 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W4 + W4 + W1 + 0 + 3 + 3 + 3 + + 24 + 23 + 20 + 27 + 31 + 12 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 6 + 4 + 4 + 13 + 9 + 9 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 86 + 90 + 99 + 79 + + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + \ Kitaro.1 + 57 + + + FIFTH + 4 + + TRIANGL + 31 + 28 + 20 + 0 + on + + + 3 + 0 + off + off + off + off + 7 + 3 + 3 + 7 + 6 + 5 + 5 + 4 + + + 1 + 1 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + -1 + 1 + -1 + + 31 + 8 + 31 + 31 + 15 + 4 + 15 + 15 + 15 + 15 + 15 + 15 + 9 + 3 + 9 + 9 + 9 + 9 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 99 + 82 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + \ Kitaro.2 + 58 + + + FOURTH + 4 + + TRIANGL + 33 + 29 + 14 + 26 + on + + + 5 + 1 + off + on + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 4 + + + 2 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -1 + 1 + 2 + + 10 + 10 + 10 + 15 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 2 + 2 + 2 + 7 + 5 + 2 + 4 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 67 + 85 + 53 + + 3 + 0 + 1 + 0 + 0 + 0 + 78 + 71 + + + -12 + POLY + 8 + FULL + 10 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Korg 770.1 + 59 + + + SIXTH + 7 + + TRIANGL + 33 + 29 + 14 + 26 + on + + + 5 + 1 + off + on + off + off + 0 + 0 + 0 + 0 + 4 + 6 + 5 + 3 + + + 2 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -1 + 1 + 2 + + 15 + 15 + 15 + 15 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 7 + 8 + 8 + 8 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 98 + 99 + 72 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 71 + + + -12 + MONO + 6 + FINGER + 2 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Korg 770.2 + 60 + + + FOURTH + 7 + + TRIANGL + 30 + 5 + 10 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 5 + 5 + 3 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 18 + 18 + 18 + 13 + 31 + 31 + 31 + 10 + 15 + 15 + 15 + 14 + 0 + 0 + 0 + 7 + 10 + 10 + 10 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 57 + 56 + 79 + + 0 + 0 + 0 + 0 + 1 + 0 + 75 + 77 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Korg 770.3 + 61 + + + FIFTH + 0 + + TRIANGL + 35 + 47 + 25 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 7 + 6 + 4 + + + 1 + 6 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W3 + W1 + -3 + 1 + 3 + -2 + + 31 + 31 + 9 + 11 + 17 + 14 + 6 + 6 + 15 + 9 + 15 + 15 + 8 + 5 + 0 + 4 + 5 + 5 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 74 + 95 + 65 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Lambda...1 + 62 + + + FIFTH + 6 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 6 + 3 + + + 0.5 + 1 + 1 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W2 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 11 + 11 + 4 + 11 + 12 + 12 + 15 + 12 + 13 + 13 + 9 + 10 + 9 + 9 + 8 + 8 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 84 + 95 + 69 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Lambda...2 + 63 + + + FIFTH + 0 + + TRIANGL + 35 + 47 + 25 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 5 + + + 1 + 6 + 4 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W3 + W5 + -1 + 3 + 0 + -3 + + 31 + 31 + 7 + 7 + 20 + 20 + 16 + 16 + 15 + 9 + 15 + 15 + 8 + 5 + 3 + 3 + 5 + 5 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 92 + 71 + + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Lambda...3 + 64 + + + FIFTH + 0 + + TRIANGL + 35 + 47 + 25 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 6 + 3 + + + 2 + 4 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W3 + W1 + -1 + 3 + 0 + -3 + + 31 + 31 + 7 + 7 + 20 + 20 + 16 + 16 + 15 + 9 + 15 + 15 + 8 + 5 + 3 + 3 + 4 + 4 + 14 + 13 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 92 + 76 + + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Lambda...4 + 65 + + + FIFTH + 4 + + TRIANGL + 33 + 35 + 15 + 0 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 7 + 3 + + + 1 + 1 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W3 + W3 + 0 + 3 + 0 + -3 + + 24 + 24 + 5 + 5 + 6 + 6 + 16 + 3 + 9 + 9 + 15 + 8 + 9 + 9 + 3 + 3 + 5 + 5 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 99 + 85 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Lambda...5 + 66 + + + FIFTH + 6 + + TRIANGL + 35 + 21 + 5 + 99 + off + + + 2 + 1 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 3 + + + 3 + 3 + 3 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W1 + W1 + 0 + 0 + 0 + 0 + + 15 + 7 + 31 + 31 + 13 + 13 + 3 + 31 + 15 + 15 + 12 + 15 + 5 + 4 + 3 + 0 + 15 + 10 + 9 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 89 + 98 + 84 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + LeadSynth1 + 67 + + + FIFTH + 5 + + TRIANGL + 35 + 21 + 5 + 99 + off + + + 2 + 1 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 4 + + + 1 + 1 + 2 + 13 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W6 + W3 + W1 + 0 + 0 + 0 + 0 + + 24 + 27 + 31 + 18 + 9 + 10 + 3 + 21 + 14 + 14 + 12 + 14 + 6 + 9 + 10 + 6 + 10 + 15 + 9 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 92 + 98 + 75 + + 0 + 1 + 2 + 1 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + LeadSynth2 + 68 + + + FIFTH + 5 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 3 + + + 1 + 0.5 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + 2 + 1 + 0 + 3 + + 31 + 31 + 31 + 31 + 31 + 31 + 4 + 3 + 15 + 15 + 15 + 15 + 0 + 10 + 0 + 7 + 15 + 15 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 91 + 95 + 69 + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + LeadSynth3 + 69 + + + FIFTH + 5 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 3 + + + 1 + 0.5 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 2 + 1 + 0 + 3 + + 22 + 28 + 31 + 31 + 31 + 31 + 4 + 3 + 15 + 15 + 15 + 15 + 0 + 3 + 0 + 7 + 15 + 15 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 91 + 95 + 90 + + 0 + 1 + 0 + 0 + 0 + 44 + 0 + 46 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + LeadSynth4 + 70 + + + FIFTH + 5 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 6 + 3 + + + 4 + 1 + 1 + 11 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + -1 + 1 + 0 + 3 + + 24 + 27 + 24 + 22 + 9 + 9 + 9 + 21 + 14 + 13 + 14 + 14 + 6 + 9 + 4 + 6 + 10 + 15 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 99 + 99 + 74 + + 2 + 1 + 0 + 0 + 1 + 58 + 0 + 42 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + LeadSynth5 + 71 + + + FIFTH + 5 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 5 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 21 + 24 + 21 + 25 + 6 + 16 + 31 + 9 + 12 + 11 + 0 + 7 + 6 + 6 + 28 + 3 + 10 + 7 + 15 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 98 + + 0 + 1 + 0 + 0 + 1 + 58 + 0 + 42 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + LeadSynth6 + 72 + + + FIFTH + 3 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 5 + 3 + + + 1 + 1 + 1 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W4 + W1 + W1 + 0 + 0 + 2 + -1 + + 31 + 24 + 24 + 24 + 6 + 11 + 31 + 15 + 12 + 11 + 15 + 9 + 6 + 9 + 0 + 7 + 10 + 7 + 15 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 87 + + 0 + 0 + 0 + 0 + 1 + 50 + 0 + 66 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + LeadSynth7 + 73 + + + SIXTH + 5 + + TRIANGL + 37 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 4 + 3 + + + 1 + 1 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W7 + W3 + W1 + W3 + 0 + 0 + 0 + 3 + + 31 + 31 + 31 + 30 + 22 + 22 + 22 + 7 + 14 + 14 + 14 + 15 + 0 + 0 + 0 + 5 + 8 + 8 + 8 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 86 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 66 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + LeadSynth8 + 74 + + + FIFTH + 6 + + TRIANGL + 34 + 14 + 19 + 8 + off + + + 5 + 1 + off + on + off + on + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 4 + + + 2 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W2 + W2 + 3 + 3 + -3 + -3 + + 12 + 5 + 12 + 5 + 31 + 7 + 31 + 7 + 15 + 14 + 15 + 14 + 0 + 0 + 0 + 0 + 7 + 5 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 99 + 76 + + 0 + 0 + 0 + 0 + 10 + 14 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Luna.....1 + 75 + + + FIFTH + 5 + + TRIANGL + 34 + 0 + 15 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 4 + + + 0.5 + 6 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W2 + 3 + 3 + -3 + -3 + + 12 + 12 + 12 + 8 + 31 + 3 + 31 + 7 + 15 + 8 + 15 + 14 + 0 + 0 + 0 + 0 + 7 + 5 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 64 + 96 + 81 + + 0 + 0 + 0 + 0 + 10 + 14 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Luna.....2 + 76 + + + FIFTH + 6 + + TRIANGL + 34 + 14 + 19 + 8 + off + + + 5 + 1 + off + on + off + on + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 4 + + + 3 + 3 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 3 + 3 + -3 + -3 + + 12 + 12 + 5 + 5 + 31 + 7 + 31 + 7 + 15 + 14 + 15 + 14 + 0 + 0 + 0 + 0 + 7 + 5 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 75 + 82 + 99 + 75 + + 0 + 0 + 0 + 0 + 10 + 14 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Luna.....3 + 77 + + + FIRST + 6 + + TRIANGL + 30 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 1 + 1 + 1 + + + 1 + 1 + 2 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W2 + 0 + -1 + 0 + 1 + + 16 + 31 + 31 + 16 + 31 + 4 + 11 + 6 + 15 + 15 + 15 + 14 + 0 + 0 + 0 + 0 + 10 + 5 + 10 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 53 + 80 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Lyrisyn + 78 + + + SIXTH + 6 + + TRIANGL + 34 + 0 + 20 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 0.5 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -1 + 1 + 3 + + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 99 + 97 + 83 + + 0 + 0 + 0 + 0 + 0 + 0 + 60 + 99 + + + -12 + MONO + 6 + FINGER + 1 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + MaxiKorg.1 + 79 + + + FIFTH + 6 + + TRIANGL + 30 + 0 + 14 + 53 + on + + + 5 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 4 + 3 + + + 2 + 1 + 2 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -1 + 1 + 3 + + 21 + 23 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 8 + 7 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 75 + 97 + 84 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 6 + FINGER + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + MaxiKorg.2 + 80 + + + SECOND + 4 + + TRIANGL + 36 + 0 + 4 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 6 + 5 + + + 2 + 1 + 2 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 2 + 1 + -2 + 2 + + 23 + 20 + 21 + 20 + 5 + 5 + 4 + 3 + 2 + 15 + 13 + 13 + 0 + 1 + 0 + 1 + 10 + 5 + 10 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 86 + 80 + 75 + + 0 + 1 + 1 + 1 + 39 + 0 + 17 + 39 + + + -12 + MONO + 2 + FINGER + 17 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + MicroMoog1 + 81 + + + FIRST + 7 + + TRIANGL + 36 + 0 + 4 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 4 + 5 + 2 + + + 2 + 0.5 + 2 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W2 + W1 + W1 + 0 + 0 + 0 + 0 + + 23 + 20 + 21 + 20 + 2 + 2 + 1 + 1 + 2 + 15 + 13 + 13 + 0 + 1 + 0 + 1 + 5 + 5 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 78 + 88 + 77 + + 0 + 0 + 0 + 0 + 39 + 0 + 17 + 39 + + + -12 + MONO + 2 + FULL + 17 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + MicroMoog2 + 82 + + + THIRD + 7 + + TRIANGL + 33 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1.5 + 1.5 + 1.5 + 1.5 + no + no + no + no + 16 + 16 + 16 + 16 + + W1 + W1 + W1 + W1 + 0 + -3 + 0 + 3 + + 15 + 15 + 11 + 14 + 12 + 13 + 4 + 9 + 14 + 11 + 13 + 13 + 0 + 0 + 0 + 0 + 7 + 1 + 1 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 69 + 68 + 77 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -7 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + MiniMoog * + 83 + + + FIFTH + 5 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 6 + 1 + + + 1 + 1 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W2 + W1 + 0 + 1 + 1 + -1 + + 28 + 31 + 31 + 27 + 16 + 10 + 9 + 27 + 14 + 14 + 15 + 15 + 4 + 3 + 4 + 6 + 12 + 15 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 65 + 98 + 92 + + 1 + 1 + 2 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + MiniMoog.1 + 84 + + + FIFTH + 6 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 7 + 6 + + + 1 + 2 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + 3 + 0 + 1 + + 31 + 28 + 28 + 27 + 9 + 27 + 16 + 10 + 15 + 15 + 15 + 14 + 9 + 6 + 4 + 3 + 15 + 15 + 12 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 92 + 98 + 88 + + 2 + 1 + 1 + 2 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + MiniMoog.2 + 85 + + + FIFTH + 5 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 3 + + + 1 + 0.5 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W3 + 1 + 3 + 0 + 1 + + 28 + 27 + 28 + 27 + 16 + 10 + 16 + 10 + 15 + 7 + 15 + 14 + 4 + 3 + 4 + 3 + 12 + 15 + 12 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 96 + 98 + 94 + + 1 + 0 + 1 + 2 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 4 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + MiniMoog.3 + 86 + + + FOURTH + 0 + + TRIANGL + 30 + 0 + 10 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 7 + 1 + + + 2 + 2 + 6 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W8 + W4 + W3 + 0 + -3 + 3 + 0 + + 16 + 31 + 17 + 19 + 10 + 0 + 8 + 8 + 15 + 15 + 15 + 15 + 8 + 0 + 3 + 0 + 6 + 4 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 91 + 69 + + 1 + 0 + 2 + 1 + 0 + 48 + 38 + 69 + + + -24 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Mirage * + 87 + + + THIRD + 7 + + TRIANGL + 33 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 1.51 + 1 + 1.49 + no + no + no + no + 8 + 14 + 8 + 9 + + W1 + W1 + W1 + W2 + 0 + -3 + 3 + 3 + + 23 + 31 + 31 + 31 + 12 + 24 + 4 + 9 + 14 + 12 + 13 + 12 + 0 + 0 + 0 + 0 + 8 + 4 + 2 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 72 + 78 + + 0 + 0 + 0 + 0 + 25 + 15 + 35 + 0 + + + -12 + MONO + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + MoogBass * + 88 + + + FOURTH + 6 + + TRIANGL + 34 + 0 + 15 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 7 + 4 + + + 0.5 + 6 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W3 + W1 + W1 + 3 + 3 + -3 + -3 + + 31 + 31 + 31 + 26 + 31 + 3 + 31 + 7 + 15 + 8 + 15 + 14 + 0 + 0 + 0 + 0 + 7 + 5 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 66 + 86 + 86 + + 0 + 0 + 0 + 0 + 10 + 14 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + MultiMoog1 + 89 + + + THIRD + 6 + + TRIANGL + 34 + 14 + 19 + 8 + off + + + 5 + 1 + off + on + off + on + 0 + 0 + 0 + 0 + 6 + 6 + 4 + 5 + + + 3 + 3 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W4 + W1 + W1 + 3 + 3 + -3 + -3 + + 31 + 31 + 31 + 31 + 31 + 7 + 31 + 7 + 15 + 14 + 15 + 14 + 0 + 0 + 0 + 0 + 7 + 5 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 68 + 84 + 83 + + 0 + 0 + 0 + 0 + 10 + 14 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + MultiMoog2 + 90 + + + FIFTH + 7 + + TRIANGL + 32 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 1 + 2 + 0 + + + 1.49 + 1.49 + 1.51 + 1.51 + no + no + no + no + 9 + 9 + 14 + 14 + + W2 + W4 + W5 + W6 + 3 + -2 + 1 + -1 + + 19 + 15 + 29 + 22 + 14 + 14 + 14 + 10 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 7 + 3 + 7 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 95 + 99 + 68 + + 0 + 0 + 0 + 0 + 0 + 66 + 0 + 41 + + + -19 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + No!NotJump + 91 + + + THIRD + 5 + + TRIANGL + 0 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 4 + + + 1 + 1 + 2 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W1 + W1 + W4 + 0 + 0 + 3 + 3 + + 18 + 23 + 25 + 13 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 1 + 0 + 0 + 1 + 2 + 3 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 91 + 69 + 88 + 86 + + 3 + 0 + 2 + 3 + 20 + 10 + 8 + 0 + + + -12 + MONO + 7 + FULL + 1 + POR + 99 + 0 + 0 + 99 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + <> OB 1 <> + 92 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 5 + 2 + off + off + off + on + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1.5 + 1.5 + 1.51 + 1.51 + no + no + no + no + 16 + 16 + 14 + 14 + + W1 + W1 + W1 + W1 + 0 + 0 + 3 + 3 + + 12 + 18 + 17 + 19 + 31 + 8 + 31 + 8 + 15 + 14 + 15 + 14 + 0 + 0 + 0 + 0 + 7 + 3 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 99 + 73 + + 1 + 0 + 1 + 0 + 0 + 0 + 10 + 12 + + + -19 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 99 + 0 + 0 + 0 + 0 + 0 + + OB-8 * + 93 + + + FIFTH + 5 + + TRIANGL + 0 + 0 + 19 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 4 + + + 1 + 0.5 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W1 + 0 + -1 + 1 + 3 + + 31 + 29 + 31 + 31 + 12 + 12 + 12 + 0 + 14 + 14 + 14 + 15 + 4 + 4 + 4 + 0 + 15 + 15 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 94 + 99 + 92 + + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Oberheim.1 + 94 + + + FIFTH + 5 + + TRIANGL + 35 + 0 + 19 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 3 + + + 0.5 + 0.5 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -3 + 0 + 3 + + 17 + 18 + 11 + 11 + 11 + 9 + 12 + 2 + 15 + 15 + 14 + 14 + 3 + 4 + 4 + 4 + 6 + 4 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 76 + 99 + 88 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 5 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Oberheim.2 + 95 + + + FIFTH + 7 + + TRIANGL + 23 + 0 + 32 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 3 + + + 0.5 + 0.5 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 3 + 3 + 3 + -3 + + 10 + 12 + 10 + 13 + 31 + 12 + 12 + 12 + 15 + 14 + 14 + 14 + 0 + 4 + 4 + 4 + 5 + 4 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 99 + 87 + + 0 + 0 + 0 + 0 + 0 + 5 + 0 + 5 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Oberheim.3 + 96 + + + + Synthesizer2 + 6 + + FIFTH + 5 + + TRIANGL + 30 + 0 + 10 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 4 + 4 + + + 0.5 + 0.5 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W3 + W2 + W1 + 0 + 1 + -1 + 2 + + 25 + 25 + 31 + 22 + 6 + 3 + 22 + 31 + 6 + 0 + 13 + 15 + 6 + 1 + 3 + 4 + 9 + 9 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 83 + 99 + 92 + + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Odyssey..1 + 0 + + + FIFTH + 5 + + TRIANGL + 0 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 7 + 3 + 3 + 7 + 6 + 5 + 5 + 3 + + + 0.5 + 0.5 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W2 + 0 + 0 + -3 + -3 + + 31 + 27 + 31 + 31 + 4 + 19 + 5 + 2 + 15 + 10 + 15 + 15 + 3 + 1 + 6 + 1 + 12 + 13 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 91 + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Odyssey..2 + 1 + + + FIFTH + 5 + + TRIANGL + 29 + 0 + 0 + 0 + off + + + 4 + 0 + off + off + off + off + 7 + 3 + 3 + 7 + 5 + 5 + 5 + 5 + + + 0.5 + 0.5 + 0.5 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W3 + W3 + W3 + 1 + 2 + 0 + 2 + + 31 + 31 + 27 + 27 + 0 + 9 + 2 + 5 + 15 + 0 + 14 + 14 + 0 + 0 + 4 + 4 + 7 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 93 + 99 + 86 + + 1 + 0 + 1 + 1 + 0 + 0 + 30 + 30 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Odyssey..3 + 2 + + + FIFTH + 3 + + TRIANGL + 37 + 0 + 75 + 0 + on + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 7 + 4 + + + 2 + 0.5 + 2 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + -1 + 0 + + 18 + 16 + 18 + 16 + 13 + 31 + 13 + 31 + 14 + 15 + 14 + 15 + 9 + 0 + 9 + 0 + 10 + 10 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 98 + 85 + + 1 + 1 + 1 + 1 + 21 + 0 + 21 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OhB1Kanobe + 3 + + + THIRD + 7 + + TRIANGL + 33 + 0 + 56 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 6 + 3 + + + 1 + 2 + 5 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W1 + 0 + 0 + 0 + 0 + + 28 + 31 + 31 + 8 + 6 + 5 + 8 + 9 + 7 + 11 + 12 + 8 + 4 + 0 + 0 + 16 + 4 + 5 + 3 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 78 + 71 + 82 + + 2 + 2 + 3 + 0 + 0 + 45 + 67 + 0 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Omega....1 + 4 + + + SIXTH + 2 + + TRIANGL + 70 + 40 + 10 + 26 + off + + + 5 + 1 + off + on + off + off + 0 + 0 + 0 + 0 + 6 + 6 + 5 + 4 + + + 1 + 2 + 4 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + 3 + -2 + -1 + 1 + + 31 + 31 + 24 + 31 + 31 + 31 + 4 + 3 + 15 + 15 + 10 + 9 + 0 + 13 + 28 + 0 + 10 + 10 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 99 + 99 + 90 + + 0 + 0 + 0 + 1 + 0 + 57 + 99 + 55 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 25 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Omega....2 + 5 + + + FOURTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 7 + 0 + + + 1 + 0.5 + 9 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 2 + -3 + -3 + + 28 + 13 + 11 + 14 + 20 + 31 + 6 + 7 + 14 + 15 + 14 + 13 + 8 + 0 + 3 + 0 + 13 + 6 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 87 + 70 + 92 + + 0 + 2 + 2 + 1 + 0 + 22 + 14 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + PCM Duck * + 6 + + + FOURTH + 7 + + TRIANGL + 35 + 15 + 14 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 1 + 5 + 4 + 5 + 2 + + + 2 + 1 + 3 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W3 + 2 + 0 + 0 + -1 + + 20 + 18 + 3 + 6 + 5 + 31 + 6 + 2 + 3 + 15 + 3 + 12 + 18 + 0 + 22 + 7 + 3 + 3 + 3 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 97 + 90 + 70 + + 1 + 2 + 2 + 1 + 0 + 99 + 99 + 31 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + PianoSynth + 7 + + + SIXTH + 7 + + TRIANGL + 31 + 14 + 0 + 0 + off + + + 4 + 1 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 4 + 3 + 6 + + + 1.5 + 1.51 + 1.49 + 3 + no + no + no + no + 120 + 14 + 9 + 64 + + W5 + W6 + W4 + W4 + 0 + -3 + 3 + 3 + + 26 + 16 + 11 + 31 + 31 + 31 + 31 + 20 + 15 + 15 + 15 + 6 + 0 + 2 + 0 + 2 + 5 + 5 + 8 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 99 + 99 + 81 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + -7 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 18 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + PlkAnalog + 8 + + + SIXTH + 6 + + TRIANGL + 31 + 11 + 17 + 27 + off + + + 2 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 4 + + + 2 + 2 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W5 + W1 + 0 + 0 + -2 + 0 + + 18 + 31 + 18 + 19 + 18 + 3 + 16 + 7 + 14 + 0 + 14 + 7 + 12 + 12 + 12 + 3 + 6 + 6 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 96 + 97 + 90 + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Poly 61 + 9 + + + FIFTH + 6 + + TRIANGL + 34 + 14 + 19 + 8 + off + + + 5 + 1 + off + on + off + on + 0 + 0 + 0 + 0 + 6 + 4 + 4 + 4 + + + 2 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 3 + -3 + -3 + + 12 + 8 + 14 + 10 + 31 + 7 + 31 + 7 + 15 + 14 + 15 + 14 + 0 + 0 + 0 + 0 + 7 + 5 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 99 + 86 + + 0 + 0 + 0 + 0 + 10 + 14 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + PolyFusion + 10 + + + FIFTH + 5 + + TRIANGL + 31 + 11 + 17 + 27 + off + + + 2 + 1 + on + on + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 5 + + + 2 + 8 + 4 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W3 + W1 + W3 + 0 + 0 + -2 + 0 + + 18 + 31 + 16 + 31 + 3 + 10 + 3 + 3 + 15 + 0 + 14 + 1 + 1 + 12 + 3 + 2 + 6 + 6 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 99 + 89 + + 1 + 2 + 0 + 1 + 0 + 0 + 0 + 10 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + PolyMoog.1 + 11 + + + SIXTH + 6 + + TRIANGL + 34 + 0 + 20 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 3 + + + 1 + 2 + 4 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W2 + W3 + -1 + 1 + -1 + 3 + + 14 + 14 + 10 + 12 + 31 + 31 + 4 + 31 + 15 + 15 + 7 + 15 + 1 + 1 + 12 + 0 + 5 + 5 + 6 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 89 + + 1 + 1 + 2 + 1 + 0 + 0 + 60 + 99 + + + -24 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + PolyMoog.2 + 12 + + + THIRD + 0 + + TRIANGL + 41 + 0 + 31 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 3 + + + 1 + 0.5 + 25.02 + 2.48 + no + no + no + no + 8 + 8 + 23 + 15 + + W1 + W1 + W4 + W1 + 0 + 2 + 3 + -1 + + 31 + 18 + 29 + 31 + 10 + 4 + 16 + 10 + 15 + 13 + 13 + 15 + 0 + 2 + 6 + 5 + 7 + 4 + 1 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 89 + 47 + 76 + + 0 + 0 + 0 + 0 + 9 + 8 + 12 + 34 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + P.P.G * + 13 + + + FIFTH + 6 + + TRIANGL + 31 + 0 + 6 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1.49 + 1.51 + 1.51 + 1.51 + no + no + no + no + 9 + 14 + 14 + 14 + + W1 + W1 + W1 + W1 + -3 + 2 + 3 + -3 + + 28 + 31 + 27 + 18 + 22 + 11 + 22 + 10 + 13 + 10 + 13 + 11 + 0 + 0 + 0 + 0 + 6 + 1 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 74 + 99 + 79 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -19 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Prophet * + 14 + + + FOURTH + 5 + + TRIANGL + 34 + 33 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 4 + + + 1 + 1 + 7 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + 0 + 3 + 0 + -3 + + 23 + 19 + 22 + 19 + 7 + 7 + 7 + 3 + 12 + 12 + 12 + 6 + 4 + 4 + 4 + 4 + 10 + 10 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 70 + 34 + 75 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FINGER + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Prophet..1 + 15 + + + FIFTH + 6 + + TRIANGL + 35 + 0 + 18 + 0 + on + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 6 + 5 + 4 + + + 1 + 4 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W2 + 2 + 0 + 0 + -3 + + 27 + 27 + 27 + 27 + 3 + 12 + 6 + 3 + 13 + 15 + 13 + 15 + 3 + 15 + 4 + 2 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 73 + 99 + 78 + + 2 + 0 + 1 + 0 + 0 + 25 + 0 + 0 + + + 0 + POLY + 4 + FINGER + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Prophet..2 + 16 + + + FIFTH + 7 + + TRIANGL + 38 + 29 + 35 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 6 + 6 + 5 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W3 + W1 + W1 + 2 + 0 + 0 + -3 + + 16 + 14 + 16 + 16 + 3 + 4 + 3 + 4 + 14 + 12 + 14 + 12 + 4 + 18 + 6 + 18 + 8 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 76 + 99 + 79 + + 1 + 0 + 1 + 0 + 0 + 25 + 0 + 25 + + + 0 + POLY + 4 + FINGER + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Prophet..3 + 17 + + + FOURTH + 4 + + TRIANGL + 33 + 29 + 14 + 26 + on + + + 5 + 1 + off + on + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 4 + + + 2 + 2 + 0.5 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W3 + W3 + W1 + 0 + -1 + 1 + 2 + + 7 + 8 + 7 + 8 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 2 + 2 + 2 + 7 + 5 + 2 + 4 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 83 + 74 + 84 + + 3 + 0 + 1 + 0 + 0 + 0 + 78 + 71 + + + -12 + POLY + 8 + FULL + 10 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + PS 3100..1 + 18 + + + SECOND + 4 + + TRIANGL + 33 + 29 + 14 + 26 + on + + + 5 + 1 + off + on + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 4 + + + 1 + 1 + 4 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + -2 + 1 + -1 + 3 + + 7 + 7 + 13 + 13 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 2 + 2 + 2 + 7 + 5 + 2 + 4 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 78 + 72 + 83 + + 3 + 0 + 1 + 0 + 0 + 0 + 78 + 71 + + + -12 + POLY + 8 + FULL + 15 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + PS 3100..2 + 19 + + + FOURTH + 4 + + TRIANGL + 33 + 29 + 14 + 26 + on + + + 5 + 1 + off + on + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 6 + 3 + + + 2 + 2 + 0.5 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W1 + 0 + -1 + 1 + 2 + + 12 + 12 + 11 + 13 + 6 + 8 + 7 + 7 + 15 + 15 + 15 + 15 + 2 + 1 + 1 + 1 + 5 + 2 + 4 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 80 + 79 + 84 + + 1 + 0 + 1 + 0 + 0 + 0 + 78 + 71 + + + -12 + POLY + 8 + FULL + 10 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + PS 3300..1 + 20 + + + SECOND + 4 + + TRIANGL + 33 + 29 + 14 + 26 + on + + + 5 + 1 + off + on + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 4 + 3 + + + 0.5 + 1 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W4 + W1 + W1 + -2 + 1 + -1 + 3 + + 7 + 15 + 7 + 13 + 4 + 5 + 6 + 5 + 13 + 15 + 15 + 13 + 1 + 0 + 1 + 1 + 5 + 2 + 4 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 74 + 78 + 77 + + 1 + 0 + 0 + 0 + 0 + 0 + 78 + 71 + + + -12 + POLY + 8 + FULL + 15 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + PS 3300..2 + 21 + + + FIFTH + 5 + + TRIANGL + 23 + 0 + 14 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 5 + + + 0.5 + 2 + 0.5 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + 0 + -3 + 3 + 3 + + 19 + 21 + 19 + 15 + 12 + 9 + 31 + 7 + 15 + 15 + 15 + 15 + 7 + 4 + 0 + 3 + 6 + 4 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 74 + 95 + 60 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Quadra...1 + 22 + + + FIFTH + 6 + + TRIANGL + 23 + 0 + 11 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 4 + 4 + + + 2 + 0.5 + 0.5 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W2 + W1 + 3 + 3 + 0 + -3 + + 19 + 15 + 19 + 21 + 31 + 7 + 12 + 9 + 15 + 14 + 15 + 15 + 0 + 2 + 7 + 4 + 6 + 5 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 80 + 95 + 76 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Quadra...2 + 23 + + + THIRD + 5 + + TRIANGL + 0 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 3 + + + 1 + 1 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + 0 + 0 + 3 + 3 + + 18 + 23 + 25 + 13 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 1 + 0 + 0 + 1 + 2 + 3 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 91 + 67 + 85 + 81 + + 3 + 0 + 2 + 3 + 20 + 10 + 8 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ResoSynth1 + 24 + + + FIFTH + 7 + + TRIANGL + 0 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 4 + 3 + + + 1 + 1 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 3 + 3 + + 18 + 23 + 25 + 13 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 1 + 0 + 0 + 1 + 2 + 3 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 65 + 99 + 80 + + 3 + 0 + 2 + 3 + 20 + 10 + 8 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ResoSynth2 + 25 + + + FIFTH + 4 + + TRIANGL + 32 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 6 + 4 + + + 1 + 1 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 0 + 0 + 0 + 0 + + 27 + 24 + 25 + 27 + 8 + 7 + 7 + 9 + 14 + 13 + 12 + 13 + 4 + 3 + 3 + 3 + 8 + 8 + 8 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 89 + 98 + 78 + + 1 + 1 + 2 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + RMI......1 + 26 + + + FIFTH + 4 + + TRIANGL + 32 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 6 + 3 + + + 0.5 + 2 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 27 + 24 + 25 + 27 + 8 + 7 + 7 + 9 + 14 + 13 + 12 + 13 + 4 + 3 + 3 + 3 + 8 + 8 + 8 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 82 + 98 + 81 + + 1 + 2 + 2 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + RMI......2 + 27 + + + FIFTH + 5 + + TRIANGL + 2 + 0 + 10 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 1 + 0 + 1 + 5 + 3 + 5 + 4 + + + 1 + 5 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W2 + W1 + 2 + -2 + 2 + -2 + + 18 + 23 + 25 + 16 + 31 + 31 + 31 + 8 + 15 + 15 + 15 + 7 + 0 + 1 + 0 + 0 + 4 + 4 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 62 + 97 + 87 + + 3 + 0 + 2 + 1 + 20 + 10 + 8 + 0 + + + -12 + MONO + 7 + FINGER + 5 + POR + 99 + 0 + 0 + 99 + 99 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SH 7.....1 + 28 + + + FIFTH + 5 + + TRIANGL + 2 + 0 + 10 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 4 + 4 + 5 + + + 1 + 0.5 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + 2 + -2 + 2 + -2 + + 18 + 23 + 25 + 16 + 31 + 31 + 31 + 8 + 15 + 15 + 15 + 7 + 0 + 1 + 0 + 0 + 5 + 5 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 92 + 97 + 87 + + 2 + 2 + 2 + 2 + 20 + 10 + 8 + 0 + + + -12 + MONO + 7 + FINGER + 1 + POR + 99 + 0 + 0 + 99 + 99 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SH 7.....2 + 29 + + + FIFTH + 7 + + TRIANGL + 33 + 0 + 56 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 6 + 4 + 4 + + + 1 + 1 + 4 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W1 + 1 + 0 + 0 + 0 + + 28 + 31 + 31 + 31 + 6 + 5 + 8 + 9 + 7 + 11 + 12 + 8 + 4 + 0 + 0 + 16 + 4 + 5 + 3 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 90 + 85 + 78 + + 2 + 2 + 3 + 0 + 0 + 45 + 67 + 0 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sigma....1 + 30 + + + FIFTH + 6 + + TRIANGL + 37 + 73 + 15 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 7 + 6 + 3 + + + 6 + 25.95 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + 2 + 0 + -3 + 3 + + 22 + 22 + 22 + 22 + 21 + 10 + 9 + 8 + 13 + 13 + 15 + 15 + 1 + 10 + 1 + 3 + 6 + 5 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 89 + 75 + 99 + 87 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -24 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sigma....2 + 31 + + + FIFTH + 5 + + TRIANGL + 33 + 0 + 56 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 4 + 3 + + + 2 + 6 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 0 + 0 + 0 + 0 + + 28 + 31 + 31 + 31 + 6 + 3 + 8 + 9 + 7 + 6 + 12 + 8 + 4 + 0 + 0 + 16 + 4 + 5 + 3 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 65 + 85 + 90 + + 2 + 2 + 3 + 0 + 0 + 45 + 67 + 0 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sigma....3 + 32 + + + SIXTH + 0 + + TRIANGL + 31 + 6 + 9 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 7 + 1 + 2 + 1 + 2 + + + 3 + 6 + 2.99 + 5.99 + no + no + no + no + 8 + 8 + 10 + 12 + + W2 + W4 + W4 + W6 + -3 + -3 + 3 + 3 + + 31 + 24 + 27 + 31 + 10 + 8 + 16 + 8 + 10 + 11 + 11 + 9 + 0 + 0 + 0 + 0 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 84 + 99 + 39 + + 0 + 0 + 0 + 0 + 35 + 99 + 0 + 0 + + + -19 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Soft Synth + 33 + + + SIXTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 3 + + + 3 + 15 + 2.99 + 2.99 + no + no + no + no + 8 + 8 + 10 + 10 + + W1 + W1 + W1 + W1 + 2 + 2 + -3 + -3 + + 15 + 31 + 15 + 31 + 31 + 15 + 31 + 15 + 15 + 12 + 15 + 13 + 6 + 6 + 6 + 0 + 5 + 4 + 5 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 92 + 99 + 84 + + 0 + 1 + 0 + 0 + 0 + 24 + 0 + 0 + + + -19 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Softsynth* + 34 + + + SECOND + 0 + + TRIANGL + 30 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 3 + + + 0.5 + 0.5 + 0.62 + 2 + no + no + no + no + 8 + 8 + 10 + 8 + + W1 + W2 + W8 + W1 + 1 + -1 + 0 + -1 + + 26 + 31 + 31 + 31 + 1 + 29 + 29 + 31 + 13 + 12 + 12 + 14 + 1 + 7 + 12 + 5 + 5 + 4 + 4 + 3 + VOF + VOF + VOF + VOF + + + 99 + 82 + 99 + 50 + 50 + 50 + + 98 + 80 + 65 + 80 + + 1 + 1 + 1 + 1 + 0 + 17 + 40 + 40 + + + 12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SoloSynth + 35 + + + FIFTH + 4 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 3 + + + 1 + 1 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + -1 + 1 + 1 + 0 + + 22 + 22 + 22 + 18 + 9 + 12 + 15 + 9 + 15 + 14 + 14 + 14 + 6 + 6 + 6 + 6 + 7 + 5 + 7 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 98 + 96 + + 1 + 1 + 1 + 2 + 0 + 3 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SpiralSynt + 36 + + + SIXTH + 6 + + TRIANGL + 37 + 0 + 0 + 0 + off + + + 2 + 0 + off + off + off + off + 7 + 3 + 3 + 7 + 5 + 5 + 5 + 3 + + + 0.5 + 0.5 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + 0 + 0 + 0 + 2 + + 31 + 31 + 31 + 31 + 22 + 22 + 22 + 6 + 13 + 13 + 13 + 11 + 0 + 0 + 0 + 0 + 10 + 10 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 70 + 99 + 91 + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sweeper + 37 + + + FIFTH + 6 + + TRIANGL + 31 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 1 + 4 + + + 1 + 1 + 2 + 3.18 + no + no + no + no + 8 + 8 + 8 + 11 + + W1 + W5 + W1 + W1 + -3 + -1 + 3 + 1 + + 14 + 5 + 17 + 15 + 7 + 3 + 17 + 17 + 13 + 13 + 9 + 9 + 0 + 0 + 0 + 13 + 4 + 1 + 7 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 91 + 78 + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + SweepSynt* + 38 + + + FIRST + 0 + + TRIANGL + 32 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 1 + 2 + 0 + + + 6 + 6 + 1.5 + 2 + no + no + no + no + 8 + 8 + 16 + 8 + + W2 + W4 + W6 + W6 + 3 + -2 + 1 + -1 + + 17 + 13 + 27 + 20 + 13 + 13 + 13 + 9 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 7 + 3 + 7 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 45 + 51 + 18 + + 0 + 0 + 0 + 0 + 0 + 66 + 0 + 41 + + + -19 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + SweetSynth + 39 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 46 + 0 + off + + + 4 + 0 + off + off + off + off + 1 + 5 + 1 + 5 + 0 + 0 + 0 + 0 + + + 3 + 2.99 + 3 + 3 + no + no + no + no + 8 + 10 + 8 + 8 + + W4 + W7 + W2 + W4 + 3 + 3 + -3 + -3 + + 11 + 31 + 11 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 86 + 68 + 86 + 70 + + 0 + 0 + 0 + 0 + 30 + 0 + 30 + 0 + + + -19 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.AftrTch + 40 + + + SIXTH + 7 + + TRIANGL + 31 + 6 + 9 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 1 + 2 + + + 3 + 6 + 2.99 + 5.99 + no + no + no + no + 8 + 8 + 10 + 12 + + W2 + W4 + W4 + W6 + -3 + -3 + 3 + 3 + + 31 + 24 + 27 + 31 + 10 + 8 + 16 + 8 + 10 + 11 + 11 + 9 + 0 + 0 + 0 + 0 + 4 + 4 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 81 + 96 + 73 + + 0 + 0 + 0 + 0 + 0 + 20 + 0 + 20 + + + -19 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Decay 1 + 41 + + + FOURTH + 7 + + TRIANGL + 28 + 8 + 2 + 27 + off + + + 5 + 1 + on + off + on + off + 0 + 0 + 0 + 0 + 3 + 4 + 3 + 2 + + + 1.49 + 1.49 + 1.5 + 20.31 + no + no + no + no + 9 + 9 + 16 + 23 + + W1 + W1 + W2 + W8 + -2 + 3 + 3 + -2 + + 31 + 31 + 31 + 31 + 7 + 17 + 11 + 12 + 14 + 14 + 12 + 12 + 4 + 1 + 7 + 8 + 8 + 4 + 10 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 78 + 87 + 62 + + 2 + 2 + 1 + 2 + 0 + 26 + 0 + 34 + + + -7 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Decay 2 + 42 + + + SECOND + 5 + + TRIANGL + 0 + 2 + 0 + 3 + off + + + 5 + 0 + on + on + on + on + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + + + 7.85 + 1.41 + 20.76 + 19.03 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 25 + 21 + 31 + 31 + 22 + 28 + 31 + 8 + 11 + 11 + 14 + 5 + 0 + 6 + 0 + 2 + 1 + 1 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 95 + 88 + 98 + + 2 + 1 + 2 + 0 + 0 + 0 + 0 + 0 + + + -6 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Synballs + 43 + + + FIFTH + 6 + + TRIANGL + 38 + 33 + 9 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 4 + + + 1 + 1 + 1 + 15 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W3 + W1 + 0 + 0 + 0 + 0 + + 13 + 23 + 22 + 22 + 9 + 15 + 19 + 22 + 13 + 13 + 13 + 13 + 6 + 0 + 7 + 7 + 6 + 6 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 87 + 99 + 75 + + 1 + 0 + 2 + 1 + 0 + 0 + 1 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Synth....1 + 44 + + + FIFTH + 3 + + TRIANGL + 38 + 35 + 6 + 27 + on + + + 3 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 2 + + + 2 + 2 + 1 + 11 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W1 + -3 + -3 + -1 + -1 + + 31 + 31 + 12 + 31 + 10 + 15 + 10 + 10 + 13 + 13 + 13 + 13 + 6 + 0 + 7 + 9 + 5 + 6 + 4 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 78 + 99 + 80 + + 1 + 1 + 2 + 0 + 0 + 0 + 1 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Synth....2 + 45 + + + FIFTH + 4 + + TRIANGL + 36 + 50 + 19 + 2 + off + + + 3 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 3 + + + 1 + 1 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W3 + W1 + 0 + -3 + 0 + 3 + + 31 + 13 + 31 + 13 + 29 + 10 + 29 + 10 + 14 + 14 + 14 + 14 + 7 + 7 + 7 + 7 + 9 + 9 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 82 + 99 + 89 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Synth....3 + 46 + + + THIRD + 4 + + TRIANGL + 40 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 6 + 5 + + + 1 + 1 + 1 + 25.95 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -3 + 0 + 0 + + 31 + 31 + 24 + 31 + 6 + 6 + 16 + 31 + 14 + 14 + 12 + 15 + 7 + 7 + 15 + 15 + 15 + 15 + 14 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 77 + 83 + 80 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Synth....4 + 47 + + + FIFTH + 6 + + TRIANGL + 38 + 33 + 32 + 42 + off + + + 1 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 3 + + + 1 + 1 + 4 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + 3 + -1 + 3 + 0 + + 14 + 27 + 31 + 31 + 3 + 3 + 21 + 20 + 9 + 14 + 0 + 0 + 6 + 6 + 7 + 8 + 8 + 8 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 76 + 95 + 99 + + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Synth....5 + 48 + + + FIFTH + 6 + + TRIANGL + 38 + 0 + 0 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 4 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W4 + W1 + 0 + 0 + 0 + 0 + + 31 + 30 + 31 + 16 + 22 + 12 + 22 + 12 + 13 + 10 + 13 + 10 + 7 + 7 + 0 + 7 + 7 + 7 + 15 + 12 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 85 + 99 + 85 + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Synth....6 + 49 + + + FIFTH + 5 + + TRIANGL + 37 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 4 + 4 + + + 1 + 0.5 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W2 + W1 + -1 + -1 + 1 + 2 + + 31 + 31 + 31 + 31 + 12 + 12 + 12 + 13 + 14 + 14 + 14 + 4 + 9 + 9 + 9 + 9 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 91 + 99 + 94 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Synth....7 + 50 + + + FIFTH + 6 + + TRIANGL + 32 + 5 + 25 + 15 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + + + 2.55 + 2.55 + 2.56 + 2.56 + no + no + no + no + 21 + 21 + 17 + 17 + + W1 + W1 + W1 + W1 + -3 + -3 + 3 + 3 + + 11 + 3 + 16 + 18 + 10 + 13 + 8 + 8 + 14 + 15 + 13 + 12 + 0 + 0 + 0 + 0 + 4 + 1 + 4 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 73 + 99 + 82 + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + + + -16 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Synthish * + 51 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 3 + + + 2 + 0.5 + 2 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + -3 + -3 + 3 + 3 + + 15 + 31 + 15 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 3 + 4 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 94 + 93 + 81 + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SynthRise1 + 52 + + + FIFTH + 6 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 6 + 5 + + + 2 + 0.5 + 2 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W5 + W3 + W3 + -3 + -3 + 3 + 3 + + 15 + 31 + 15 + 15 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 13 + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 88 + 97 + 95 + 95 + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SynthRise2 + 53 + + + EIGHTH + 7 + + TRIANGL + 34 + 0 + 15 + 0 + on + + + 3 + 1 + on + on + off + off + 0 + 0 + 0 + 0 + 3 + 1 + 2 + 2 + + + 1.51 + 1.49 + 1.49 + 1.51 + no + no + no + no + 14 + 9 + 9 + 14 + + W6 + W6 + W2 + W2 + -1 + 1 + -3 + 3 + + 14 + 11 + 17 + 17 + 8 + 8 + 7 + 17 + 15 + 15 + 15 + 15 + 4 + 7 + 8 + 6 + 5 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 98 + 98 + 98 + + 0 + 0 + 0 + 0 + 20 + 22 + 29 + 29 + + + -19 + POLY + 2 + FULL + 3 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SynthyPad1 + 54 + + + FIFTH + 6 + + TRIANGL + 34 + 0 + 6 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 5 + + + 0.5 + 0.5 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W2 + W1 + 0 + 3 + 0 + 3 + + 22 + 22 + 22 + 22 + 9 + 9 + 9 + 9 + 14 + 14 + 14 + 14 + 4 + 4 + 4 + 4 + 9 + 9 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 90 + 92 + 84 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + System 15 + 55 + + + FIFTH + 2 + + TRIANGL + 23 + 0 + 11 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 4 + + + 1 + 0.5 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W2 + 3 + 1 + 0 + -2 + + 19 + 11 + 14 + 7 + 2 + 7 + 3 + 1 + 15 + 15 + 15 + 12 + 0 + 0 + 1 + 0 + 4 + 4 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 99 + 95 + + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + System35.1 + 56 + + + FIFTH + 7 + + TRIANGL + 23 + 0 + 11 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 4 + 4 + + + 2 + 2 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 0 + 0 + -2 + + 10 + 21 + 18 + 21 + 4 + 4 + 4 + 4 + 13 + 13 + 13 + 13 + 3 + 3 + 3 + 3 + 8 + 8 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 76 + 98 + 80 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + System35.2 + 57 + + + FIFTH + 6 + + TRIANGL + 23 + 0 + 11 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 2 + + + 0.5 + 0.5 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W5 + W5 + W1 + W1 + 3 + 3 + 0 + -2 + + 19 + 21 + 19 + 15 + 3 + 4 + 12 + 1 + 15 + 15 + 15 + 12 + 1 + 0 + 2 + 0 + 6 + 7 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 78 + 99 + 81 + + 2 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + System35.3 + 58 + + + FIFTH + 5 + + TRIANGL + 23 + 0 + 11 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 6 + 3 + + + 1 + 0.5 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W2 + W1 + 0 + 3 + 0 + -3 + + 19 + 21 + 19 + 9 + 12 + 3 + 31 + 9 + 14 + 5 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 6 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 96 + 99 + 91 + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + System55.1 + 59 + + + FIFTH + 6 + + TRIANGL + 23 + 0 + 11 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 4 + 2 + + + 0.5 + 2 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + -1 + 3 + -1 + 3 + + 19 + 21 + 19 + 9 + 12 + 3 + 31 + 9 + 14 + 5 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 6 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 88 + 99 + 92 + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + System55.2 + 60 + + + FOURTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0 + + + 1 + 0.5 + 12 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W1 + W1 + W3 + 0 + 0 + 0 + 0 + + 30 + 31 + 7 + 10 + 13 + 31 + 8 + 7 + 13 + 15 + 0 + 0 + 5 + 2 + 4 + 7 + 4 + 3 + 3 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 86 + 69 + 73 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Tamboura * + 61 + + + SIXTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 3 + 5 + 1 + + + 1 + 1 + 1.41 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 25 + 29 + 31 + 31 + 24 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 3 + 2 + 2 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 95 + 69 + 80 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Tamboura.1 + 62 + + + SIXTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 2 + + + 1 + 0.5 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 25 + 29 + 31 + 31 + 24 + 17 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 7 + 4 + 4 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 91 + 99 + 69 + 84 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Tamboura.2 + 63 + + + FIFTH + 5 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 2 + 3 + 2 + + + 1 + 0.5 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 25 + 29 + 31 + 31 + 24 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 3 + 3 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 91 + 67 + 91 + 71 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Tamboura.3 + 64 + + + THIRD + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + + 0.5 + 0.5 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 2 + -2 + 3 + + 18 + 31 + 31 + 6 + 6 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 3 + 1 + 1 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 72 + 88 + 90 + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + + + 12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Time X * + 65 + + + SIXTH + 0 + + TRIANGL + 31 + 6 + 9 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 7 + 1 + 2 + 1 + 2 + + + 6 + 9 + 2.99 + 5.99 + no + no + no + no + 8 + 8 + 10 + 12 + + W2 + W4 + W4 + W6 + -3 + -3 + 3 + 3 + + 23 + 16 + 19 + 23 + 6 + 4 + 12 + 4 + 10 + 11 + 11 + 9 + 0 + 0 + 0 + 0 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 84 + 99 + 30 + + 0 + 0 + 0 + 0 + 35 + 99 + 0 + 0 + + + -19 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + TrdrpSynth + 66 + + + FIFTH + 2 + + TRIANGL + 32 + 0 + 28 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 0 + 2 + 0 + + + 1.51 + 0.75 + 1.5 + 0.75 + no + no + no + no + 14 + 12 + 16 + 12 + + W1 + W1 + W1 + W5 + 0 + 3 + -3 + -3 + + 21 + 23 + 21 + 23 + 7 + 5 + 7 + 9 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + 3 + 4 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 92 + 99 + 91 + + 1 + 1 + 1 + 1 + 6 + 0 + 7 + 25 + + + -7 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Voyage * + 67 + + + FIFTH + 6 + + SHOLD + 38 + 0 + 2 + 0 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 4 + 4 + + + 2 + 2 + 1 + 7 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W4 + W2 + W1 + 3 + -2 + 0 + 0 + + 9 + 30 + 10 + 10 + 16 + 15 + 9 + 9 + 15 + 13 + 14 + 14 + 3 + 0 + 7 + 7 + 4 + 5 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 98 + 71 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Walt/Wendy + 68 + + + FIFTH + 6 + + TRIANGL + 37 + 41 + 38 + 99 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 6 + 4 + + + 2 + 1 + 3 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W2 + 0 + 0 + -3 + 0 + + 16 + 16 + 16 + 18 + 0 + 0 + 0 + 28 + 13 + 13 + 13 + 14 + 3 + 3 + 3 + 21 + 8 + 8 + 9 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 88 + 95 + 82 + + 1 + 1 + 1 + 2 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Wapper...1 + 69 + + + FIFTH + 5 + + TRIANGL + 37 + 42 + 38 + 99 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 5 + + + 1 + 5 + 1 + 14 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W2 + W4 + 0 + 0 + -3 + 0 + + 16 + 16 + 16 + 18 + 0 + 0 + 0 + 28 + 13 + 13 + 13 + 14 + 3 + 3 + 3 + 10 + 8 + 8 + 9 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 62 + 95 + 73 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Wapper...2 + 70 + + + FIFTH + 6 + + TRIANGL + 32 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 1 + 2 + 1 + + + 1.49 + 1.49 + 1.51 + 1.51 + no + no + no + no + 9 + 9 + 14 + 14 + + W1 + W6 + W1 + W3 + 3 + -3 + -3 + 3 + + 22 + 31 + 18 + 31 + 14 + 14 + 14 + 6 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 7 + 3 + 7 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 99 + 79 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -19 + MONO + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + WarmSquare + 71 + + + FIFTH + 4 + + TRIANGL + 35 + 0 + 5 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 3 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 18 + 16 + 18 + 14 + 9 + 7 + 7 + 10 + 14 + 0 + 12 + 12 + 4 + 6 + 6 + 6 + 7 + 10 + 9 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 99 + 83 + + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Wendy : + 72 + + + FIFTH + 6 + + TRIANGL + 43 + 0 + 11 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 6 + 4 + + + 2 + 2 + 2 + 10 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 0 + 0 + -1 + 3 + + 8 + 8 + 14 + 12 + 0 + 0 + 9 + 9 + 15 + 15 + 15 + 15 + 0 + 0 + 4 + 4 + 5 + 4 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 68 + 98 + 49 + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Wendy C + 73 + + + SIXTH + 3 + + SHOLD + 46 + 58 + 69 + 99 + on + + + 7 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 7 + 3 + 5 + 3 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 15 + 15 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 88 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Whos Upset + 74 + + + FIFTH + 7 + + TRIANGL + 33 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 3 + + + 1.5 + 1.5 + 1.51 + 1.51 + no + no + no + no + 16 + 16 + 14 + 14 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 11 + 14 + 21 + 18 + 31 + 8 + 14 + 8 + 15 + 15 + 15 + 13 + 0 + 0 + 0 + 0 + 6 + 1 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 67 + 99 + 82 + + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + + + -19 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + X-Pander * + 75 + + + FOURTH + 6 + + TRIANGL + 32 + 0 + 20 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 7 + 0 + + + 2 + 2 + 27.57 + 27.57 + no + no + no + no + 8 + 8 + 23 + 23 + + W1 + W1 + W1 + W1 + 3 + -3 + 3 + 2 + + 15 + 31 + 17 + 19 + 4 + 0 + 7 + 8 + 15 + 15 + 0 + 15 + 9 + 0 + 18 + 0 + 6 + 4 + 2 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 72 + 74 + 70 + + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + + + -24 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Xuereb * + 76 + + + + + VOICES + 4 + + Breath + 0 + + SEVENTH + 7 + + TRIANGL + 29 + 6 + 15 + 0 + on + + + 4 + 2 + off + off + off + on + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + + + 1.51 + 1.5 + 1.49 + 22.49 + no + no + no + no + 14 + 16 + 9 + 96 + + W5 + W4 + W1 + W4 + -3 + 3 + 3 + -3 + + 14 + 11 + 15 + 31 + 8 + 8 + 5 + 0 + 15 + 15 + 15 + 15 + 4 + 7 + 3 + 0 + 5 + 7 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 59 + 99 + + 0 + 0 + 0 + 0 + 0 + 5 + 8 + 0 + + + -7 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BadBreath1 + 0 + + + SEVENTH + 7 + + TRIANGL + 29 + 6 + 15 + 41 + on + + + 4 + 3 + off + off + off + on + 0 + 0 + 0 + 0 + 4 + 3 + 3 + 1 + + + 1.58 + 1.57 + 1.58 + 22.49 + no + no + no + yes + 18 + 8 + 10 + 96 + + W5 + W4 + W5 + W4 + -3 + 3 + -2 + -3 + + 15 + 12 + 16 + 31 + 8 + 9 + 7 + 0 + 15 + 15 + 15 + 15 + 4 + 4 + 3 + 0 + 5 + 7 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 77 + 99 + + 0 + 0 + 0 + 0 + 51 + 62 + 12 + 0 + + + -7 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BadBreath2 + 1 + + + SEVENTH + 7 + + TRIANGL + 29 + 6 + 15 + 0 + on + + + 4 + 2 + off + off + off + on + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + + + 1.51 + 1.5 + 1.49 + 22.49 + no + no + no + no + 14 + 16 + 9 + 96 + + W5 + W4 + W8 + W2 + -3 + 3 + 3 + -3 + + 10 + 10 + 10 + 31 + 8 + 8 + 5 + 0 + 15 + 15 + 15 + 15 + 4 + 7 + 3 + 0 + 5 + 7 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 50 + 99 + + 0 + 0 + 0 + 0 + 25 + 21 + 19 + 0 + + + -7 + POLY + 0 + FULL + 2 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 3 + + BadBreath3 + 2 + + + FIFTH + 7 + + SHOLD + 99 + 0 + 47 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + + + 1.5 + 22.49 + 1.49 + 23.55 + no + no + no + no + 16 + 80 + 9 + 64 + + W2 + W6 + W2 + W4 + -3 + 0 + 3 + 0 + + 13 + 13 + 13 + 13 + 31 + 7 + 31 + 11 + 15 + 12 + 15 + 12 + 0 + 0 + 0 + 0 + 5 + 1 + 5 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 31 + 99 + 44 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -7 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BreathOrgn + 3 + + + SEVENTH + 7 + + TRIANGL + 29 + 6 + 15 + 0 + on + + + 4 + 2 + off + off + off + on + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + + + 2 + 2 + 2.06 + 22.49 + no + no + no + no + 8 + 8 + 9 + 96 + + W5 + W2 + W8 + W4 + -3 + 3 + 3 + -3 + + 16 + 11 + 15 + 31 + 4 + 8 + 5 + 0 + 15 + 15 + 15 + 15 + 4 + 7 + 3 + 0 + 9 + 6 + 6 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 43 + 99 + + 0 + 0 + 0 + 0 + 0 + 5 + 8 + 0 + + + -12 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BreathyEns + 4 + + + + Choir + 1 + + FIFTH + 0 + + TRIANGL + 30 + 31 + 63 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 0 + 0 + + + 11.13 + 1 + 2 + 1 + yes + no + no + no + 71 + 8 + 8 + 8 + + W1 + W3 + W1 + W1 + -3 + 3 + -3 + 3 + + 9 + 31 + 11 + 31 + 25 + 25 + 31 + 25 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 7 + 1 + 6 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 77 + 77 + 99 + 70 + + 0 + 0 + 0 + 0 + 23 + 74 + 0 + 8 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ChoiChoir* + 0 + + + THIRD + 1 + + TRIANGL + 32 + 33 + 53 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 7 + 7 + 0 + + + 1 + 2 + 2 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + -3 + 1 + -2 + 0 + + 8 + 12 + 12 + 12 + 8 + 3 + 6 + 11 + 13 + 15 + 15 + 13 + 9 + 9 + 0 + 12 + 7 + 9 + 9 + 12 + VOF + V48 + VOF + V24 + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 50 + 69 + 55 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + Choir....1 + 1 + + + FIFTH + 1 + + TRIANGL + 32 + 33 + 53 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 5 + 3 + + + 1 + 2 + 2 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 0 + 0 + 0 + + 12 + 12 + 12 + 12 + 8 + 31 + 6 + 8 + 13 + 15 + 15 + 13 + 9 + 9 + 0 + 12 + 7 + 9 + 9 + 12 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 53 + 99 + 53 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Choir....2 + 2 + + + FIFTH + 0 + + TRIANGL + 31 + 35 + 33 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 6 + 2 + + + 1 + 2 + 2 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W1 + W1 + -1 + 1 + -2 + -1 + + 15 + 16 + 11 + 16 + 15 + 22 + 22 + 21 + 15 + 15 + 15 + 15 + 4 + 9 + 9 + 31 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 68 + 95 + 58 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Choir....3 + 3 + + + SECOND + 4 + + TRIANGL + 32 + 45 + 0 + 0 + off + + + 0 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 0 + + + 1 + 1 + 6 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W4 + W1 + 3 + -3 + 0 + 0 + + 9 + 9 + 7 + 7 + 31 + 31 + 0 + 0 + 15 + 15 + 9 + 10 + 1 + 3 + 6 + 4 + 6 + 7 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 88 + 58 + 52 + 57 + + 0 + 0 + 0 + 0 + 41 + 99 + 88 + 97 + + + 12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 4 + + Choir....4 + 4 + + + SECOND + 5 + + TRIANGL + 33 + 19 + 9 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 6 + 3 + + + 1 + 1 + 7 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -3 + -3 + 3 + + 14 + 11 + 21 + 19 + 31 + 31 + 14 + 18 + 15 + 15 + 9 + 10 + 1 + 3 + 6 + 4 + 9 + 10 + 10 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 68 + 59 + 54 + + 0 + 0 + 0 + 0 + 0 + 86 + 99 + 58 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Choir....5 + 5 + + + SECOND + 2 + + TRIANGL + 33 + 22 + 8 + 0 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 3 + + + 1 + 1 + 2 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W2 + 3 + -3 + -3 + 3 + + 12 + 12 + 13 + 18 + 31 + 31 + 14 + 21 + 15 + 15 + 9 + 10 + 1 + 3 + 6 + 4 + 9 + 10 + 10 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 87 + 57 + 72 + 51 + + 0 + 0 + 0 + 0 + 0 + 86 + 99 + 58 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Choir....6 + 6 + + + FIFTH + 7 + + TRIANGL + 30 + 10 + 17 + 4 + off + + + 4 + 2 + on + on + on + on + 0 + 0 + 0 + 0 + 2 + 0 + 2 + 0 + + + 1 + 0.5 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 3 + -3 + -3 + + 10 + 10 + 12 + 11 + 13 + 13 + 11 + 13 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 4 + 2 + 4 + 2 + VOF + VOF + VOF + VOF + + + 99 + 86 + 99 + 50 + 50 + 50 + + 99 + 50 + 99 + 50 + + 0 + 0 + 0 + 0 + 20 + 10 + 30 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Choral + 7 + + + SEVENTH + 0 + + TRIANGL + 29 + 0 + 23 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 2 + 0.5 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 13 + 13 + 13 + 13 + 14 + 14 + 14 + 14 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 4 + 2 + 4 + 2 + VOF + VOF + VOF + VOF + + + 99 + 71 + 99 + 50 + 50 + 50 + + 99 + 78 + 99 + 50 + + 1 + 1 + 1 + 0 + 88 + 0 + 0 + 40 + + + 0 + POLY + 5 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 13 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Chorus + 8 + + + FOURTH + 5 + + TRIANGL + 35 + 35 + 11 + 2 + off + + + 4 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 6 + 6 + 5 + 2 + + + 1 + 1 + 1 + 1.56 + no + no + no + yes + 8 + 8 + 8 + 57 + + W2 + W2 + W1 + W1 + -3 + 0 + -1 + 1 + + 10 + 6 + 10 + 31 + 6 + 7 + 6 + 22 + 15 + 7 + 15 + 15 + 7 + 4 + 9 + 2 + 6 + 4 + 9 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 64 + 57 + 47 + + 0 + 0 + 0 + 0 + 10 + 50 + 69 + 35 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 1 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + Chorus...1 + 9 + + + FOURTH + 7 + + TRIANGL + 35 + 35 + 11 + 2 + off + + + 4 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 3 + + + 1 + 1 + 1 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 0 + -1 + 2 + + 15 + 7 + 9 + 14 + 6 + 7 + 6 + 22 + 15 + 7 + 15 + 15 + 7 + 7 + 8 + 5 + 9 + 4 + 9 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 67 + 64 + 58 + + 0 + 0 + 0 + 0 + 10 + 50 + 69 + 35 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 1 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Chorus...2 + 10 + + + SEVENTH + 5 + + TRIANGL + 35 + 35 + 11 + 2 + off + + + 4 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 6 + 5 + 4 + + + 1 + 2 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + -3 + 1 + -1 + 2 + + 13 + 6 + 13 + 11 + 7 + 7 + 6 + 9 + 15 + 7 + 15 + 15 + 7 + 7 + 8 + 5 + 9 + 4 + 9 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 77 + 87 + 73 + + 0 + 0 + 0 + 0 + 10 + 50 + 69 + 35 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 1 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Chorus...3 + 11 + + + SEVENTH + 0 + + TRIANGL + 27 + 15 + 72 + 34 + off + + + 1 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 6 + 5 + 6 + 3 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W2 + W2 + 3 + 2 + 1 + 0 + + 10 + 10 + 13 + 7 + 5 + 4 + 6 + 5 + 14 + 9 + 15 + 14 + 8 + 5 + 8 + 10 + 7 + 5 + 9 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 91 + 96 + 81 + + 1 + 0 + 0 + 1 + 10 + 60 + 89 + 45 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 1 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + Chorus...4 + 12 + + + SEVENTH + 1 + + TRIANGL + 27 + 15 + 79 + 38 + off + + + 1 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 7 + 6 + 6 + 4 + + + 1 + 1 + 0.5 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W4 + W1 + W1 + 2 + 1 + -2 + 1 + + 9 + 12 + 10 + 9 + 4 + 8 + 7 + 7 + 15 + 11 + 15 + 13 + 8 + 4 + 5 + 8 + 7 + 6 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 99 + 99 + 65 + + 0 + 0 + 0 + 0 + 10 + 60 + 89 + 45 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 1 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Chorus...5 + 13 + + + SEVENTH + 1 + + TRIANGL + 27 + 15 + 79 + 61 + off + + + 1 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 5 + + + 1 + 2 + 3 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W3 + 0 + 0 + 0 + 0 + + 12 + 12 + 10 + 12 + 7 + 6 + 10 + 10 + 15 + 13 + 15 + 13 + 6 + 5 + 3 + 6 + 8 + 7 + 7 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 75 + + 0 + 0 + 1 + 0 + 10 + 50 + 67 + 62 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 1 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + Chorus...6 + 14 + + + SEVENTH + 3 + + TRIANGL + 27 + 15 + 79 + 61 + off + + + 3 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 3 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W4 + W1 + 2 + 0 + 3 + 0 + + 8 + 9 + 8 + 6 + 8 + 3 + 5 + 7 + 15 + 13 + 15 + 13 + 5 + 4 + 4 + 5 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 91 + 85 + 91 + 66 + + 0 + 0 + 0 + 0 + 30 + 50 + 42 + 23 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 1 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + Chorus...7 + 15 + + + SEVENTH + 1 + + TRIANGL + 27 + 15 + 79 + 61 + off + + + 1 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 6 + 5 + 7 + 0 + + + 3 + 1 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W4 + W2 + 0 + 0 + 0 + 0 + + 9 + 9 + 9 + 6 + 6 + 5 + 4 + 5 + 13 + 14 + 13 + 12 + 2 + 3 + 6 + 6 + 9 + 7 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 91 + 95 + 57 + + 0 + 0 + 0 + 0 + 30 + 50 + 42 + 23 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 1 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Chorus...8 + 16 + + + + FVoice + 2 + + FIFTH + 6 + + TRIANGL + 39 + 27 + 48 + 8 + on + + + 2 + 1 + off + off + on + on + 0 + 0 + 0 + 0 + 6 + 6 + 6 + 6 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W1 + W4 + -3 + -1 + 3 + -2 + + 12 + 21 + 12 + 31 + 8 + 24 + 8 + 19 + 14 + 12 + 14 + 10 + 4 + 24 + 4 + 4 + 9 + 7 + 9 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 75 + 91 + 82 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 4 + + F Voice..1 + 0 + + + FOURTH + 4 + + TRIANGL + 39 + 34 + 91 + 2 + off + + + 1 + 1 + off + off + on + on + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 5 + + + 1 + 1 + 1 + 23.55 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 0 + 3 + -2 + + 14 + 6 + 12 + 13 + 8 + 7 + 6 + 22 + 14 + 9 + 14 + 14 + 4 + 15 + 10 + 15 + 9 + 3 + 7 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 87 + 68 + 26 + 50 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + F Voice..2 + 1 + + + EIGHTH + 4 + + TRIANGL + 35 + 0 + 21 + 40 + off + + + 1 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 6 + 6 + 6 + 5 + + + 1 + 2 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -2 + 2 + 3 + -3 + + 13 + 12 + 13 + 15 + 25 + 25 + 12 + 31 + 15 + 15 + 15 + 15 + 6 + 6 + 10 + 14 + 7 + 7 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 99 + 99 + 99 + + 0 + 0 + 0 + 0 + 0 + 60 + 15 + 40 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 4 + + F Voice..3 + 2 + + + FIFTH + 7 + + TRIANGL + 35 + 58 + 10 + 2 + off + + + 4 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 0 + 6 + 4 + + + 1 + 1 + 2 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + 1 + 0 + 0 + + 18 + 15 + 18 + 18 + 6 + 6 + 21 + 21 + 15 + 14 + 15 + 15 + 4 + 6 + 4 + 3 + 9 + 7 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 88 + 67 + 55 + 71 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + + + 12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + F Voice..4 + 3 + + + FIFTH + 4 + + TRIANGL + 30 + 3 + 37 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 2 + 0 + + + 1 + 1 + 2 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -3 + -3 + 3 + + 19 + 14 + 11 + 24 + 15 + 23 + 13 + 23 + 15 + 15 + 10 + 15 + 0 + 0 + 0 + 0 + 7 + 6 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 47 + 99 + 45 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Fem.Voice* + 4 + + + + MVoice + 3 + + FIFTH + 0 + + TRIANGL + 30 + 33 + 51 + 38 + off + + + 1 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 6 + 6 + 6 + 5 + + + 2 + 5 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W5 + W2 + W1 + 1 + -1 + -1 + -1 + + 13 + 13 + 12 + 31 + 24 + 5 + 6 + 24 + 15 + 15 + 15 + 14 + 2 + 2 + 4 + 3 + 7 + 7 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 61 + 99 + 73 + + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + M Voice..1 + 0 + + + FIFTH + 4 + + TRIANGL + 29 + 12 + 41 + 38 + off + + + 2 + 1 + on + off + on + off + 0 + 0 + 0 + 0 + 6 + 6 + 6 + 5 + + + 2 + 1 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W2 + 1 + -2 + 0 + 0 + + 15 + 31 + 15 + 31 + 24 + 24 + 24 + 24 + 15 + 15 + 15 + 15 + 3 + 3 + 3 + 3 + 7 + 4 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 74 + 96 + 71 + + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + M Voice..2 + 1 + + + FIFTH + 4 + + TRIANGL + 30 + 33 + 33 + 12 + off + + + 1 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 5 + + + 3 + 6.96 + 1 + 1 + no + yes + no + no + 8 + 55 + 8 + 8 + + W1 + W1 + W2 + W2 + 2 + 0 + 1 + 1 + + 8 + 18 + 9 + 31 + 0 + 7 + 3 + 24 + 12 + 3 + 9 + 10 + 15 + 15 + 15 + 2 + 8 + 4 + 7 + 4 + VOF + V24 + VOF + V48 + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 42 + 88 + 90 + + 1 + 1 + 1 + 1 + 10 + 10 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + M Voice..3 + 2 + + + FIFTH + 2 + + TRIANGL + 33 + 20 + 56 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 6 + 6 + + + 1 + 8 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W2 + W1 + -2 + 1 + 3 + 1 + + 10 + 13 + 12 + 12 + 0 + 12 + 6 + 5 + 12 + 15 + 13 + 3 + 15 + 6 + 15 + 7 + 8 + 5 + 7 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 52 + 92 + 70 + + 1 + 1 + 1 + 1 + 10 + 10 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + M Voice..4 + 3 + + + FIFTH + 0 + + TRIANGL + 32 + 0 + 48 + 38 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 13.5 + 1 + 2 + 1 + yes + no + no + no + 72 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 2 + -3 + 3 + + 10 + 18 + 11 + 31 + 25 + 6 + 25 + 25 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 7 + 2 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 78 + 71 + 99 + 77 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 19 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Mal.Voice* + 4 + + + FOURTH + 1 + + TRIANGL + 10 + 7 + 5 + 1 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + + + 4 + 5 + 0.5 + 27.57 + no + no + no + no + 8 + 8 + 8 + 23 + + W1 + W4 + W1 + W2 + 0 + -3 + 3 + 0 + + 14 + 11 + 15 + 31 + 0 + 2 + 2 + 0 + 15 + 15 + 15 + 15 + 1 + 3 + 4 + 0 + 6 + 1 + 1 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 60 + 59 + 50 + + 0 + 0 + 0 + 0 + 8 + 13 + 35 + 44 + + + -12 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 3 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Male Voice + 5 + + + FOURTH + 1 + + TRIANGL + 26 + 0 + 5 + 1 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + + + 1.5 + 1.49 + 0.75 + 9.06 + no + no + no + no + 16 + 9 + 12 + 9 + + W1 + W4 + W1 + W2 + 0 + -3 + 3 + 0 + + 14 + 11 + 15 + 31 + 0 + 2 + 2 + 0 + 15 + 15 + 15 + 15 + 1 + 3 + 4 + 0 + 6 + 1 + 1 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 60 + 59 + 50 + + 0 + 0 + 0 + 0 + 8 + 13 + 35 + 44 + + + -7 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + MaleVoices + 6 + + + + Other + 4 + + FIFTH + 5 + + TRIANGL + 34 + 14 + 19 + 8 + off + + + 5 + 1 + off + on + off + on + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 5 + + + 2 + 2 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + 3 + 3 + -3 + -3 + + 12 + 12 + 12 + 5 + 31 + 7 + 31 + 7 + 15 + 14 + 15 + 14 + 0 + 0 + 0 + 0 + 7 + 5 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 86 + 99 + 82 + + 0 + 0 + 0 + 0 + 10 + 14 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Quartet..1 + 0 + + + FIFTH + 6 + + TRIANGL + 34 + 14 + 19 + 8 + off + + + 5 + 1 + off + on + off + on + 0 + 0 + 0 + 0 + 6 + 5 + 6 + 4 + + + 2 + 1 + 2 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W1 + 3 + 3 + -3 + -3 + + 12 + 14 + 14 + 14 + 31 + 7 + 31 + 7 + 15 + 14 + 15 + 14 + 0 + 0 + 0 + 0 + 7 + 5 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 99 + 81 + + 0 + 0 + 0 + 0 + 10 + 14 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Quartet..2 + 1 + + + SIXTH + 7 + + TRIANGL + 33 + 8 + 12 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 1 + 2 + + + 3 + 6 + 2.99 + 5.99 + no + no + no + no + 8 + 8 + 10 + 12 + + W2 + W4 + W4 + W6 + -3 + -3 + 3 + 3 + + 14 + 14 + 14 + 20 + 9 + 8 + 9 + 6 + 10 + 9 + 11 + 7 + 2 + 2 + 2 + 0 + 4 + 4 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 89 + 99 + 73 + + 0 + 0 + 0 + 0 + 0 + 20 + 0 + 20 + + + -19 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Ensem.1 + 2 + + + SEVENTH + 7 + + TRIANGL + 33 + 12 + 22 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 2 + + + 3 + 6 + 6 + 21.98 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W2 + W1 + W7 + -3 + 3 + 3 + 0 + + 10 + 10 + 31 + 31 + 3 + 4 + 7 + 23 + 11 + 7 + 11 + 12 + 1 + 2 + 2 + 9 + 5 + 5 + 5 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 72 + + 0 + 0 + 0 + 0 + 0 + 20 + 0 + 20 + + + -19 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Ensem.2 + 3 + + + FIFTH + 2 + + SHOLD + 99 + 0 + 12 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 6 + 2 + + + 1 + 3 + 5 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W5 + W1 + -3 + -3 + 3 + 3 + + 26 + 31 + 26 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 7 + 5 + 7 + 5 + 4 + 2 + 4 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 67 + 86 + 80 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 39 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Ensem.3 + 4 + + + FIFTH + 7 + + TRIANGL + 31 + 1 + 20 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + + + 6 + 3 + 2.99 + 6 + no + no + no + no + 8 + 8 + 10 + 8 + + W2 + W4 + W4 + W1 + -3 + -1 + 1 + 3 + + 27 + 7 + 16 + 8 + 9 + 7 + 31 + 4 + 11 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 4 + 4 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 81 + 99 + 62 + + 0 + 0 + 0 + 0 + 20 + 20 + 20 + 20 + + + -19 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Ensem.4 + 5 + + + SIXTH + 6 + + TRIANGL + 28 + 11 + 27 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 3 + 3 + 0 + + + 1 + 0.5 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W2 + W3 + W6 + -3 + 3 + -3 + 0 + + 14 + 11 + 14 + 14 + 6 + 6 + 6 + 2 + 14 + 14 + 14 + 10 + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 91 + 68 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 19 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Ensem.5 + 6 + + + FIFTH + 5 + + TRIANGL + 30 + 10 + 80 + 4 + off + + + 4 + 2 + on + on + on + on + 0 + 0 + 0 + 0 + 2 + 0 + 2 + 0 + + + 2 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + -3 + 3 + 3 + + 10 + 10 + 10 + 12 + 14 + 14 + 12 + 14 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 4 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 86 + 99 + 50 + 50 + 50 + + 99 + 65 + 99 + 65 + + 0 + 0 + 0 + 0 + 10 + 10 + 10 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Voice 1 + 7 + + + FIFTH + 5 + + TRIANGL + 30 + 10 + 80 + 4 + off + + + 4 + 2 + on + on + on + on + 0 + 0 + 0 + 0 + 2 + 0 + 2 + 0 + + + 2 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + -3 + 3 + 3 + + 13 + 13 + 13 + 12 + 14 + 14 + 12 + 14 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 4 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 86 + 99 + 50 + 50 + 50 + + 99 + 65 + 99 + 65 + + 0 + 0 + 0 + 0 + 10 + 10 + 10 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Voice 1* + 8 + + + FIFTH + 6 + + TRIANGL + 30 + 18 + 44 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 2 + 0 + + + 2 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W4 + W1 + -3 + 0 + 0 + 1 + + 14 + 15 + 14 + 18 + 2 + 2 + 2 + 2 + 10 + 11 + 10 + 15 + 1 + 1 + 1 + 1 + 5 + 2 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 62 + 99 + 50 + 50 + 50 + + 99 + 49 + 99 + 55 + + 1 + 1 + 1 + 1 + 15 + 0 + 15 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Voice 2 + 9 + + + FOURTH + 7 + + TRIANGL + 30 + 11 + 33 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 2 + 0 + + + 1 + 1 + 2 + 11 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -2 + 3 + 0 + + 17 + 11 + 12 + 31 + 15 + 23 + 13 + 31 + 15 + 15 + 11 + 15 + 0 + 0 + 0 + 0 + 7 + 6 + 7 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 66 + 0 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Syntvoice* + 10 + + + THIRD + 7 + + SAWUP + 16 + 0 + 81 + 0 + on + + + 6 + 2 + off + off + off + on + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + + + 1 + 0.5 + 1.49 + 15.57 + no + no + no + no + 8 + 8 + 9 + 96 + + W2 + W4 + W1 + W4 + -3 + 3 + 3 + -3 + + 20 + 14 + 19 + 31 + 17 + 8 + 28 + 0 + 0 + 15 + 6 + 15 + 13 + 7 + 13 + 0 + 11 + 7 + 12 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 76 + 99 + 71 + + 0 + 0 + 0 + 0 + 0 + 5 + 8 + 0 + + + -1 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + VocalNuts + 11 + + + FIFTH + 7 + + TRIANGL + 35 + 42 + 35 + 0 + off + + + 3 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 6 + 1 + 6 + 3 + + + 1 + 1 + 10 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 2 + 1 + -1 + 1 + + 8 + 10 + 9 + 15 + 14 + 31 + 31 + 14 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 3 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 66 + 68 + 69 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 99 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 65 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + > Voices < + 12 + + + FOURTH + 7 + + TRIANGL + 26 + 0 + 5 + 1 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + + + 1.5 + 1.49 + 1.51 + 10.48 + no + no + no + no + 16 + 9 + 14 + 9 + + W1 + W1 + W1 + W1 + 0 + -3 + 3 + 0 + + 14 + 11 + 15 + 31 + 0 + 2 + 2 + 0 + 15 + 15 + 15 + 15 + 1 + 3 + 4 + 0 + 6 + 1 + 1 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 64 + 53 + 57 + + 0 + 0 + 0 + 0 + 0 + 5 + 8 + 0 + + + -7 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Voices + 13 + + + SEVENTH + 7 + + SAWUP + 79 + 0 + 68 + 99 + off + + + 3 + 0 + off + off + off + on + 0 + 0 + 0 + 0 + 2 + 2 + 3 + 0 + + + 1.51 + 1.49 + 24.22 + 22.38 + no + no + no + no + 14 + 9 + 8 + 23 + + W4 + W4 + W7 + W3 + -3 + 1 + 3 + -3 + + 11 + 11 + 16 + 31 + 8 + 8 + 10 + 14 + 13 + 13 + 12 + 14 + 0 + 0 + 0 + 0 + 4 + 4 + 6 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 99 + 65 + 92 + + 1 + 0 + 0 + 0 + 0 + 38 + 0 + 0 + + + -7 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 21 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Whisper + 14 + + + SECOND + 0 + + SHOLD + 99 + 0 + 82 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 1 + 2 + 1 + + + 2 + 8 + 2 + 7.4 + no + no + no + no + 8 + 8 + 8 + 12 + + W1 + W8 + W1 + W4 + 3 + 3 + -3 + -3 + + 11 + 0 + 23 + 6 + 1 + 0 + 1 + 29 + 15 + 15 + 10 + 15 + 6 + 12 + 0 + 1 + 5 + 2 + 2 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 83 + 75 + 6 + + 1 + 1 + 1 + 0 + 1 + 46 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Wind Voice + 15 + + + + + PERCUSSION + 5 + + Bell + 0 + + FIFTH + 0 + + TRIANGL + 18 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 0 + 2 + 1 + + + 1 + 3.46 + 1 + 2.93 + no + no + no + no + 8 + 8 + 8 + 23 + + W1 + W1 + W1 + W5 + -3 + -3 + 3 + 3 + + 26 + 31 + 26 + 31 + 15 + 31 + 15 + 31 + 0 + 15 + 0 + 15 + 0 + 0 + 0 + 0 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 65 + 99 + 73 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Agogo * + 0 + + + FIFTH + 7 + + TRIANGL + 19 + 0 + 6 + 0 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 1 + 2 + + + 2 + 13.89 + 2 + 7 + no + yes + no + no + 8 + 45 + 8 + 8 + + W1 + W2 + W1 + W3 + -1 + -2 + -1 + 1 + + 31 + 31 + 31 + 31 + 17 + 19 + 17 + 18 + 10 + 12 + 14 + 12 + 15 + 25 + 16 + 25 + 6 + 4 + 6 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 89 + 99 + 87 + + 1 + 1 + 1 + 1 + 0 + 17 + 0 + 6 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Agogo Bell + 1 + + + FIFTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 5 + 0 + + + 3.5 + 3.52 + 5.25 + 5.25 + no + no + no + no + 16 + 16 + 12 + 12 + + W1 + W2 + W1 + W1 + 3 + -3 + 0 + 2 + + 29 + 31 + 23 + 23 + 10 + 3 + 6 + 10 + 0 + 0 + 0 + 0 + 8 + 8 + 8 + 0 + 3 + 3 + 3 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 99 + 84 + + 1 + 1 + 1 + 1 + 14 + 76 + 20 + 56 + + + -22 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Analobell* + 2 + + + FIFTH + 1 + + TRIANGL + 30 + 0 + 0 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 3 + 0 + 1 + + + 3 + 2 + 1 + 2.82 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 2 + 3 + -3 + + 26 + 30 + 28 + 25 + 12 + 16 + 8 + 26 + 4 + 4 + 11 + 7 + 5 + 0 + 5 + 0 + 4 + 3 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 87 + 98 + 88 + + 0 + 2 + 1 + 1 + 0 + 0 + 0 + 0 + + + 2 + POLY + 3 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 38 + 42 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bangkok + 3 + + + FIFTH + 5 + + TRIANGL + 24 + 0 + 0 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 1 + 5 + 1 + + + 1 + 5 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + 0 + 0 + 0 + + 27 + 31 + 31 + 31 + 15 + 16 + 11 + 5 + 15 + 15 + 14 + 7 + 12 + 12 + 0 + 0 + 3 + 3 + 5 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 79 + 78 + 98 + 80 + + 1 + 1 + 0 + 3 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bass Bells + 4 + + + FIFTH + 7 + + TRIANGL + 30 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 1 + 3 + 1 + + + 0.5 + 3 + 1 + 7 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + -3 + 3 + 3 + + 24 + 31 + 25 + 31 + 9 + 16 + 9 + 22 + 0 + 8 + 0 + 10 + 0 + 10 + 0 + 7 + 6 + 4 + 4 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 68 + 96 + 76 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bell + 5 + + + FIFTH + 7 + + TRIANGL + 30 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 1 + 3 + 1 + + + 0.5 + 4 + 1 + 7 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + -3 + 3 + 3 + + 24 + 31 + 25 + 31 + 9 + 16 + 9 + 22 + 0 + 8 + 0 + 10 + 0 + 10 + 0 + 7 + 6 + 4 + 4 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 68 + 96 + 76 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bell* + 6 + + + FIFTH + 0 + + TRIANGL + 26 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 4 + 2 + 4 + + + 1.5 + 10.37 + 1.49 + 10.38 + no + no + no + no + 16 + 14 + 9 + 8 + + W1 + W5 + W1 + W4 + -3 + -3 + 3 + 3 + + 31 + 30 + 30 + 31 + 31 + 10 + 29 + 5 + 15 + 2 + 15 + 4 + 10 + 1 + 10 + 0 + 4 + 4 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 83 + 92 + 81 + + 1 + 1 + 1 + 1 + 0 + 80 + 0 + 80 + + + 5 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bell Ensem + 7 + + + SEVENTH + 7 + + TRIANGL + 31 + 0 + 6 + 0 + on + + + 4 + 2 + off + off + off + on + 0 + 0 + 0 + 0 + 3 + 0 + 3 + 0 + + + 1.51 + 1.49 + 0.75 + 9 + no + no + no + no + 14 + 9 + 12 + 96 + + W6 + W6 + W1 + W4 + 3 + -3 + 3 + -3 + + 21 + 31 + 14 + 18 + 8 + 8 + 7 + 11 + 15 + 15 + 15 + 7 + 4 + 7 + 2 + 15 + 5 + 7 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 92 + 67 + + 0 + 0 + 0 + 0 + 0 + 5 + 8 + 0 + + + 5 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + Bell Pad + 8 + + + FIFTH + 6 + + TRIANGL + 12 + 0 + 6 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 4 + 5 + 1 + + + 2 + 4 + 2 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W3 + W1 + W1 + 3 + -3 + 0 + 0 + + 30 + 27 + 29 + 29 + 2 + 15 + 15 + 4 + 14 + 14 + 14 + 13 + 3 + 0 + 3 + 1 + 3 + 3 + 3 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 87 + 99 + 82 + + 1 + 1 + 0 + 0 + 0 + 88 + 87 + 0 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 17 + 6 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bell.....1 + 9 + + + FIFTH + 7 + + TRIANGL + 20 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 6 + 4 + + + 4 + 14 + 1 + 14 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W3 + W1 + -3 + -3 + 0 + 3 + + 31 + 31 + 31 + 27 + 8 + 7 + 7 + 4 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 74 + 99 + 56 + + 1 + 0 + 1 + 2 + 0 + 0 + 0 + 98 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bell.....2 + 10 + + + FIFTH + 4 + + TRIANGL + 9 + 0 + 4 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 4 + 2 + + + 1 + 5 + 2 + 1.41 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W4 + -3 + 3 + 3 + 0 + + 24 + 21 + 28 + 26 + 24 + 14 + 6 + 4 + 14 + 13 + 7 + 11 + 3 + 0 + 4 + 1 + 1 + 1 + 2 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 84 + 99 + 78 + + 2 + 2 + 2 + 0 + 0 + 0 + 0 + 22 + + + 12 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bell.....3 + 11 + + + FIFTH + 7 + + TRIANGL + 20 + 10 + 0 + 57 + on + + + 0 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 7 + 3 + 5 + 2 + + + 3 + 15 + 3 + 15 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W5 + W1 + W1 + 0 + 1 + 3 + 3 + + 25 + 25 + 25 + 25 + 7 + 10 + 7 + 10 + 7 + 2 + 7 + 1 + 15 + 31 + 18 + 23 + 3 + 3 + 4 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 65 + 99 + 78 + + 0 + 0 + 0 + 0 + 19 + 0 + 19 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 21 + 39 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bell.....4 + 12 + + + SEVENTH + 6 + + TRIANGL + 20 + 10 + 0 + 57 + on + + + 0 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 6 + 4 + + + 1 + 2 + 4 + 15 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 1 + 3 + 3 + + 25 + 25 + 25 + 25 + 7 + 10 + 7 + 10 + 7 + 2 + 7 + 1 + 7 + 31 + 18 + 2 + 4 + 5 + 4 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 72 + 98 + 81 + + 0 + 0 + 0 + 0 + 19 + 0 + 19 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 21 + 39 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bell.....5 + 13 + + + SECOND + 0 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 5 + + + 1 + 2 + 4 + 15 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W3 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 6 + 10 + 31 + 26 + 0 + 0 + 15 + 0 + 0 + 0 + 0 + 14 + 4 + 5 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 73 + 73 + 78 + + 0 + 1 + 1 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bell.....6 + 14 + + + THIRD + 0 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 4 + 4 + + + 1 + 7 + 7 + 13 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W2 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 6 + 10 + 31 + 26 + 0 + 0 + 15 + 0 + 0 + 0 + 0 + 14 + 6 + 5 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 73 + 73 + 78 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bell.....7 + 15 + + + FIFTH + 7 + + TRIANGL + 92 + 0 + 1 + 99 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 5 + + + 1 + 7 + 1 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W4 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 10 + 0 + 13 + 13 + 0 + 15 + 0 + 0 + 7 + 0 + 31 + 31 + 4 + 2 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 99 + 75 + + 0 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bell.....8 + 16 + + + SIXTH + 0 + + TRIANGL + 26 + 0 + 0 + 57 + on + + + 6 + 1 + on + on + on + off + 0 + 0 + 0 + 0 + 6 + 3 + 5 + 3 + + + 1 + 4 + 8 + 18.37 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W3 + W1 + 0 + 0 + 0 + 0 + + 18 + 18 + 18 + 24 + 8 + 31 + 31 + 21 + 15 + 15 + 15 + 10 + 10 + 10 + 10 + 9 + 5 + 5 + 5 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bell.....9 + 17 + + + FOURTH + 0 + + TRIANGL + 26 + 0 + 0 + 28 + on + + + 6 + 1 + off + off + on + off + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 4 + + + 2 + 7 + 4 + 12 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W1 + 0 + 0 + 0 + 0 + + 24 + 31 + 31 + 31 + 4 + 12 + 6 + 13 + 12 + 15 + 12 + 10 + 9 + 6 + 7 + 6 + 4 + 3 + 3 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 63 + 72 + 63 + + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bell....10 + 18 + + + SEVENTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 2 + + + 2 + 12 + 2 + 9 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W2 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 16 + 11 + 8 + 5 + 11 + 10 + 10 + 15 + 0 + 0 + 0 + 14 + 4 + 5 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 92 + 93 + 72 + + 0 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bell....11 + 19 + + + FIFTH + 0 + + TRIANGL + 25 + 0 + 36 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 1 + 2 + + + 0.75 + 2.68 + 0.75 + 2.7 + no + no + no + no + 12 + 19 + 12 + 17 + + W1 + W1 + W1 + W1 + 3 + -3 + -3 + 3 + + 28 + 24 + 31 + 26 + 10 + 8 + 10 + 8 + 14 + 13 + 14 + 13 + 8 + 6 + 8 + 6 + 4 + 2 + 3 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 91 + 97 + 92 + + 0 + 1 + 0 + 1 + 11 + 21 + 13 + 22 + + + 5 + POLY + 1 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 48 + 0 + 0 + 0 + 0 + 0 + 0 + + BelleBell* + 20 + + + EIGHTH + 0 + + TRIANGL + 29 + 0 + 3 + 19 + on + + + 5 + 3 + off + on + off + off + 0 + 0 + 7 + 0 + 0 + 0 + 0 + 0 + + + 6.28 + 1 + 19.03 + 5.19 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 12 + 12 + 12 + 12 + 5 + 5 + 5 + 5 + 13 + 13 + 13 + 13 + 4 + 4 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 95 + 97 + 87 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 24 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bells + 21 + + + SEVENTH + 7 + + TRIANGL + 31 + 0 + 6 + 0 + on + + + 4 + 2 + off + off + off + on + 0 + 0 + 0 + 0 + 3 + 0 + 3 + 0 + + + 1.51 + 1.49 + 0.75 + 9 + no + no + no + no + 14 + 9 + 12 + 96 + + W7 + W7 + W1 + W8 + 3 + -3 + 3 + -3 + + 19 + 19 + 31 + 30 + 12 + 12 + 7 + 11 + 10 + 11 + 15 + 7 + 4 + 7 + 2 + 15 + 5 + 7 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 87 + 88 + 92 + 67 + + 0 + 0 + 0 + 0 + 0 + 5 + 8 + 0 + + + 5 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + BellyStuff + 22 + + + FIFTH + 6 + + SHOLD + 12 + 0 + 6 + 0 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 3 + 7 + 3 + + + 1 + 8.48 + 0.5 + 3.46 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 3 + -3 + 0 + 0 + + 30 + 27 + 29 + 29 + 2 + 15 + 15 + 4 + 14 + 14 + 14 + 13 + 3 + 0 + 3 + 1 + 3 + 3 + 3 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 99 + 81 + + 1 + 1 + 0 + 0 + 0 + 88 + 87 + 0 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 17 + 6 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Big Bell.1 + 23 + + + FIFTH + 6 + + SHOLD + 12 + 0 + 6 + 0 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 4 + + + 1 + 5.65 + 4 + 6.92 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W2 + W3 + 3 + -3 + 0 + 0 + + 30 + 27 + 29 + 29 + 2 + 15 + 15 + 4 + 14 + 14 + 14 + 13 + 3 + 0 + 3 + 1 + 3 + 3 + 3 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 87 + 99 + 82 + + 1 + 1 + 0 + 0 + 0 + 88 + 87 + 0 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 17 + 6 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Big Bell.2 + 24 + + + FIFTH + 6 + + SHOLD + 12 + 0 + 6 + 0 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 6 + 1 + + + 0.5 + 0.5 + 2 + 7.85 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -3 + 0 + 0 + + 30 + 27 + 29 + 29 + 2 + 15 + 15 + 4 + 14 + 14 + 14 + 13 + 3 + 0 + 3 + 1 + 3 + 3 + 3 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 90 + 99 + 81 + + 1 + 1 + 0 + 0 + 0 + 88 + 87 + 0 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 17 + 6 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Big Bell.3 + 25 + + + FIFTH + 3 + + TRIANGL + 30 + 6 + 17 + 9 + off + + + 5 + 2 + off + off + off + on + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + + + 1 + 3 + 4 + 11 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W2 + -3 + -3 + 3 + 3 + + 11 + 10 + 11 + 11 + 31 + 7 + 31 + 4 + 15 + 15 + 15 + 15 + 2 + 4 + 2 + 5 + 5 + 4 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 71 + 99 + 85 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 40 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 4 + + BowedBell + 26 + + + FIFTH + 2 + + TRIANGL + 26 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 6 + 2 + + + 2 + 7 + 2 + 7 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W4 + -3 + -3 + 3 + 3 + + 26 + 31 + 26 + 31 + 31 + 14 + 31 + 14 + 15 + 14 + 15 + 13 + 7 + 5 + 7 + 5 + 4 + 2 + 4 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 88 + 96 + 99 + + 1 + 0 + 1 + 0 + 0 + 26 + 0 + 39 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BrightBell + 27 + + + FIFTH + 0 + + SHOLD + 84 + 0 + 71 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 1 + 2 + 1 + + + 5 + 12.72 + 1 + 5.99 + no + no + no + no + 8 + 8 + 8 + 12 + + W1 + W5 + W5 + W1 + 0 + 0 + -1 + 0 + + 13 + 28 + 14 + 28 + 9 + 7 + 4 + 8 + 12 + 14 + 10 + 14 + 0 + 0 + 0 + 0 + 2 + 1 + 2 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 88 + 99 + 85 + + 1 + 1 + 1 + 0 + 1 + 46 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Brthbells + 28 + + + THIRD + 7 + + TRIANGL + 99 + 63 + 49 + 44 + off + + + 5 + 3 + off + on + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1.93 + 1.41 + 0.93 + 1 + no + no + no + no + 23 + 8 + 15 + 8 + + W1 + W2 + W1 + W1 + 3 + 3 + -3 + -3 + + 23 + 24 + 31 + 31 + 31 + 16 + 4 + 31 + 15 + 1 + 11 + 15 + 9 + 28 + 16 + 1 + 8 + 14 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 84 + 64 + 43 + 47 + + 1 + 0 + 0 + 1 + 0 + 36 + 44 + 34 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Carnival! + 29 + + + FIFTH + 5 + + SAWUP + 25 + 42 + 14 + 0 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 4 + 7 + 1 + + + 1 + 1.41 + 1 + 23.55 + no + no + no + yes + 8 + 8 + 8 + 8 + + W2 + W1 + W2 + W1 + 0 + -3 + 0 + 0 + + 28 + 28 + 28 + 28 + 9 + 9 + 9 + 9 + 4 + 4 + 4 + 4 + 31 + 31 + 31 + 31 + 3 + 4 + 4 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 83 + 90 + 91 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ChurchBell + 30 + + + SECOND + 7 + + TRIANGL + 35 + 0 + 8 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + + + 1.06 + 0.68 + 2.06 + 0.56 + no + no + no + no + 9 + 11 + 9 + 9 + + W1 + W1 + W2 + W4 + 0 + 1 + 0 + 0 + + 26 + 24 + 22 + 25 + 5 + 24 + 7 + 22 + 0 + 3 + 6 + 7 + 7 + 3 + 6 + 0 + 3 + 3 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 96 + 60 + 67 + + 1 + 1 + 0 + 0 + 0 + 34 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 3 + + ClickChime + 31 + + + FIFTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1.5 + 5.25 + 1.51 + 5.29 + no + no + no + no + 16 + 12 + 14 + 14 + + W1 + W1 + W1 + W1 + 3 + 1 + -3 + -1 + + 31 + 31 + 30 + 30 + 9 + 5 + 9 + 4 + 0 + 0 + 0 + 0 + 10 + 27 + 22 + 31 + 3 + 4 + 3 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 73 + 99 + 75 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + -7 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Cloches * + 32 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 21.88 + 12.25 + 19.56 + 11.13 + yes + yes + yes + yes + 31 + 68 + 62 + 55 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 18 + 22 + 18 + 10 + 15 + 11 + 7 + 12 + 18 + 0 + 16 + 31 + 8 + 4 + 8 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 79 + 95 + 67 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Cow Bell + 33 + + + FIFTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 3 + 0 + + + 1 + 5 + 1 + 20.7 + no + no + no + yes + 8 + 8 + 8 + 51 + + W1 + W5 + W1 + W3 + 0 + 0 + 0 + 0 + + 26 + 31 + 26 + 31 + 16 + 20 + 14 + 23 + 0 + 0 + 0 + 0 + 31 + 31 + 31 + 31 + 8 + 10 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 71 + 99 + 81 + + 1 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Cow-Belle* + 34 + + + THIRD + 5 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 6 + 4 + + + 1 + 9 + 3.46 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 22 + 22 + 31 + 31 + 7 + 7 + 15 + 15 + 2 + 2 + 4 + 4 + 6 + 6 + 4 + 4 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 74 + 81 + 65 + + 1 + 1 + 1 + 1 + 0 + 0 + 31 + 31 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Gong.....1 + 35 + + + THIRD + 6 + + TRIANGL + 25 + 0 + 0 + 64 + on + + + 5 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 7 + 5 + + + 1 + 9 + 3.46 + 14.1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 24 + 12 + 24 + 2 + 9 + 9 + 9 + 12 + 14 + 3 + 3 + 12 + 5 + 14 + 7 + 6 + 6 + 3 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 80 + 59 + + 1 + 1 + 1 + 1 + 0 + 0 + 31 + 31 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Gong.....2 + 36 + + + THIRD + 6 + + TRIANGL + 11 + 0 + 13 + 64 + on + + + 6 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 4 + + + 0.5 + 0.78 + 0.87 + 0.87 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 7 + 19 + 25 + 31 + 31 + 31 + 31 + 14 + 15 + 15 + 15 + 3 + 2 + 2 + 2 + 3 + 2 + 2 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 70 + 74 + 53 + + 1 + 1 + 1 + 1 + 0 + 0 + 31 + 31 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Gong.....3 + 37 + + + FIFTH + 0 + + TRIANGL + 82 + 0 + 7 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 4 + 3 + 4 + + + 1 + 1.41 + 1 + 2.29 + no + no + no + no + 8 + 8 + 8 + 18 + + W1 + W1 + W1 + W1 + -3 + 3 + 3 + 0 + + 24 + 7 + 16 + 11 + 24 + 4 + 6 + 4 + 14 + 13 + 7 + 11 + 3 + 0 + 4 + 1 + 1 + 1 + 2 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 71 + 99 + 67 + + 2 + 2 + 2 + 0 + 0 + 0 + 0 + 22 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Gong Ageng + 38 + + + FOURTH + 5 + + SHOLD + 99 + 32 + 80 + 0 + on + + + 7 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 1 + 3 + + + 0.5 + 0.79 + 3 + 1.41 + no + no + no + no + 8 + 9 + 8 + 8 + + W1 + W5 + W1 + W8 + 0 + 0 + 0 + 0 + + 22 + 31 + 31 + 31 + 9 + 31 + 13 + 31 + 14 + 15 + 10 + 15 + 15 + 0 + 0 + 0 + 3 + 3 + 2 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 85 + 69 + 83 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 3 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 41 + 0 + 0 + 0 + 0 + 0 + 0 + + Gongs * + 39 + + + FIFTH + 7 + + TRIANGL + 20 + 8 + 2 + 27 + off + + + 5 + 1 + on + off + on + off + 0 + 0 + 0 + 0 + 3 + 4 + 3 + 2 + + + 1.49 + 1.49 + 1.5 + 20.31 + no + no + no + no + 9 + 9 + 16 + 23 + + W1 + W1 + W2 + W8 + -3 + 3 + 3 + -3 + + 31 + 31 + 31 + 31 + 8 + 18 + 12 + 13 + 14 + 14 + 12 + 12 + 4 + 2 + 8 + 9 + 7 + 4 + 13 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 86 + 96 + 61 + + 2 + 2 + 1 + 2 + 0 + 25 + 0 + 39 + + + -7 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + HiTine81Z + 40 + + + SIXTH + 7 + + TRIANGL + 36 + 35 + 0 + 0 + on + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 3 + + + 1 + 8 + 1 + 7 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W3 + W2 + -1 + 0 + 0 + 0 + + 31 + 31 + 19 + 12 + 6 + 6 + 6 + 6 + 13 + 13 + 13 + 13 + 6 + 6 + 6 + 10 + 4 + 4 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 87 + 86 + 98 + 68 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + HumorBells + 41 + + + FIFTH + 0 + + SQUARE + 31 + 11 + 4 + 26 + off + + + 5 + 3 + off + on + off + on + 0 + 0 + 0 + 0 + 4 + 3 + 4 + 3 + + + 1.5 + 15 + 1.49 + 15 + no + no + no + no + 16 + 8 + 9 + 8 + + W1 + W7 + W1 + W8 + -3 + -3 + 3 + 3 + + 31 + 31 + 31 + 31 + 9 + 14 + 9 + 14 + 13 + 9 + 13 + 9 + 8 + 13 + 8 + 13 + 4 + 4 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 63 + 95 + 63 + + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + + + 5 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 10 + 80 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + KeyBell + 42 + + + FIFTH + 6 + + SHOLD + 12 + 0 + 6 + 0 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 6 + 4 + + + 1.41 + 10 + 3.46 + 3.46 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -3 + 0 + 0 + + 30 + 27 + 29 + 29 + 2 + 15 + 15 + 4 + 14 + 14 + 14 + 13 + 3 + 0 + 3 + 1 + 3 + 3 + 3 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 84 + + 1 + 1 + 0 + 0 + 0 + 88 + 87 + 0 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 17 + 6 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Large Ben + 43 + + + THIRD + 2 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 4 + 3 + + + 4 + 0.5 + 0.5 + 7 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 19 + 19 + 22 + 29 + 9 + 28 + 12 + 10 + 14 + 9 + 4 + 3 + 6 + 9 + 2 + 7 + 9 + 4 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 88 + + 3 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + LastTwango + 44 + + + FIFTH + 7 + + TRIANGL + 20 + 8 + 2 + 27 + off + + + 5 + 1 + on + off + on + off + 0 + 0 + 0 + 0 + 3 + 4 + 3 + 2 + + + 1.49 + 1.49 + 1.5 + 21.06 + no + no + no + no + 9 + 9 + 16 + 23 + + W1 + W1 + W2 + W8 + -3 + 3 + 3 + -3 + + 31 + 31 + 31 + 31 + 12 + 4 + 15 + 9 + 14 + 13 + 12 + 12 + 3 + 3 + 8 + 9 + 7 + 4 + 13 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 86 + 96 + 53 + + 2 + 2 + 1 + 2 + 0 + 25 + 0 + 39 + + + -19 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + LoTine81Z + 45 + + + FIFTH + 6 + + TRIANGL + 32 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 1 + 2 + + + 1.5 + 3 + 1.49 + 2.99 + no + no + no + no + 16 + 8 + 9 + 10 + + W1 + W1 + W1 + W1 + -3 + 3 + 3 + -3 + + 20 + 31 + 21 + 31 + 14 + 14 + 18 + 6 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 7 + 3 + 7 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 99 + 79 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -19 + MONO + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + MellowSqar + 46 + + + FIFTH + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 3 + + + 3 + 4 + 2 + 1.41 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 16 + 16 + 16 + 16 + 5 + 5 + 5 + 5 + 18 + 18 + 18 + 18 + 8 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 71 + 99 + 74 + + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Moooo Bell + 47 + + + FIFTH + 0 + + TRIANGL + 25 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 4 + 2 + 4 + + + 1.31 + 8.97 + 1 + 7.85 + no + no + no + no + 13 + 11 + 8 + 8 + + W1 + W2 + W1 + W1 + -3 + -2 + 3 + 0 + + 31 + 31 + 31 + 29 + 12 + 13 + 10 + 15 + 11 + 1 + 1 + 1 + 6 + 0 + 0 + 0 + 4 + 6 + 5 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 79 + 99 + 80 + + 0 + 1 + 1 + 1 + 0 + 3 + 0 + 6 + + + 11 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Mr.Rogers + 48 + + + FIFTH + 0 + + SAWUP + 12 + 0 + 0 + 15 + off + + + 0 + 0 + off + on + off + on + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 6 + 5 + 6 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 3 + -3 + -3 + + 17 + 31 + 17 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 5 + 0 + 5 + 0 + 3 + 3 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 73 + 99 + 73 + + 2 + 1 + 2 + 1 + 99 + 0 + 99 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OhMy!Bells + 49 + + + FIRST + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 2 + 5 + 2 + + + 1 + 2 + 1 + 7.07 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 16 + 16 + 16 + 16 + 5 + 5 + 5 + 5 + 18 + 18 + 18 + 18 + 8 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 70 + 73 + 79 + + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntCowBel + 50 + + + FIFTH + 0 + + SHOLD + 67 + 0 + 4 + 41 + off + + + 6 + 3 + off + off + off + on + 0 + 0 + 0 + 0 + 3 + 4 + 5 + 3 + + + 0.5 + 0.5 + 5 + 18.84 + no + no + no + no + 8 + 8 + 8 + 96 + + W1 + W4 + W1 + W7 + -3 + 3 + 3 + -3 + + 31 + 31 + 31 + 31 + 22 + 22 + 31 + 31 + 14 + 14 + 14 + 13 + 10 + 15 + 15 + 7 + 6 + 7 + 7 + 4 + VOF + VOF + VOF + V24 + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + PluckBell + 51 + + + SEVENTH + 0 + + TRIANGL + 31 + 0 + 14 + 0 + on + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 3 + + + 2 + 2 + 2 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 9 + 31 + 31 + 31 + 13 + 17 + 0 + 0 + 15 + 15 + 15 + 15 + 9 + 12 + 0 + 3 + 6 + 4 + 4 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 81 + 99 + + 1 + 1 + 2 + 0 + 0 + 0 + 0 + 10 + + + -24 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SpaceBell1 + 52 + + + SIXTH + 4 + + TRIANGL + 22 + 0 + 9 + 4 + on + + + 3 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 3 + + + 14 + 23.55 + 20.41 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 24 + 25 + 31 + 31 + 15 + 31 + 31 + 15 + 15 + 15 + 15 + 9 + 10 + 10 + 10 + 7 + 6 + 6 + 6 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 85 + + 1 + 1 + 2 + 0 + 0 + 0 + 0 + 10 + + + -24 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SpaceBell2 + 53 + + + FIFTH + 4 + + TRIANGL + 7 + 0 + 4 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 6 + 4 + + + 1 + 1.41 + 7 + 11 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W2 + W1 + -1 + 0 + -2 + -2 + + 24 + 21 + 28 + 26 + 24 + 14 + 6 + 4 + 14 + 13 + 7 + 11 + 3 + 0 + 4 + 1 + 1 + 1 + 2 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 83 + 99 + 79 + + 2 + 2 + 2 + 0 + 0 + 0 + 0 + 22 + + + -12 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SundayBell + 54 + + + FIFTH + 7 + + TRIANGL + 34 + 0 + 10 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + + + 1.5 + 22.49 + 3 + 25.95 + no + no + no + no + 16 + 8 + 8 + 8 + + W3 + W3 + W1 + W4 + -3 + 0 + 3 + 0 + + 31 + 31 + 31 + 31 + 15 + 21 + 11 + 17 + 10 + 12 + 8 + 8 + 6 + 5 + 6 + 6 + 5 + 1 + 5 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 76 + 99 + 77 + + 0 + 0 + 0 + 0 + 0 + 30 + 0 + 70 + + + -7 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Perc. 1 + 55 + + + FIFTH + 7 + + TRIANGL + 32 + 0 + 18 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 2 + 0 + + + 2 + 13 + 0.5 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W3 + W2 + W1 + W2 + -2 + -2 + 2 + 2 + + 27 + 31 + 26 + 31 + 9 + 7 + 8 + 8 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 5 + 1 + 4 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 57 + 92 + 50 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Perc. 2 + 56 + + + FIFTH + 7 + + TRIANGL + 31 + 0 + 0 + 0 + off + + + 5 + 0 + on + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W7 + W6 + W1 + 3 + 3 + -3 + -3 + + 22 + 31 + 26 + 31 + 21 + 26 + 22 + 20 + 14 + 4 + 12 + 0 + 7 + 8 + 12 + 0 + 7 + 1 + 9 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 60 + 91 + 77 + + 2 + 0 + 2 + 0 + 0 + 0 + 0 + 30 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Perc. 3 + 57 + + + FIFTH + 0 + + TRIANGL + 26 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 4 + 2 + 4 + + + 1.5 + 10.37 + 1.49 + 10.38 + no + no + no + no + 16 + 14 + 9 + 8 + + W1 + W5 + W1 + W4 + -3 + -3 + 3 + 3 + + 31 + 30 + 30 + 31 + 31 + 10 + 29 + 5 + 15 + 2 + 15 + 4 + 10 + 1 + 10 + 0 + 5 + 5 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 83 + 92 + 81 + + 1 + 1 + 1 + 1 + 0 + 30 + 0 + 30 + + + 5 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sy.Perc. 4 + 58 + + + SIXTH + 0 + + SHOLD + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 5 + + + 0.5 + 2 + 2 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 1 + -1 + 3 + + 31 + 31 + 31 + 31 + 6 + 6 + 6 + 6 + 14 + 14 + 14 + 14 + 6 + 6 + 6 + 6 + 4 + 4 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 91 + 84 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -24 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SynthBell + 59 + + + FIFTH + 2 + + TRIANGL + 26 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 6 + 2 + + + 2 + 7 + 2 + 7 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W4 + -3 + -3 + 3 + 3 + + 26 + 31 + 26 + 31 + 31 + 14 + 31 + 14 + 15 + 14 + 15 + 10 + 7 + 5 + 7 + 5 + 4 + 2 + 4 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 67 + 96 + 80 + + 1 + 0 + 1 + 0 + 0 + 26 + 0 + 39 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Tube Bell + 60 + + + FIFTH + 4 + + TRIANGL + 7 + 0 + 4 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 1.41 + 1 + 1.41 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 3 + 3 + 0 + + 24 + 21 + 28 + 26 + 24 + 14 + 6 + 4 + 14 + 13 + 7 + 11 + 3 + 0 + 4 + 1 + 1 + 1 + 2 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 76 + 99 + 71 + + 2 + 2 + 2 + 0 + 0 + 0 + 0 + 22 + + + 12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Tube Bells + 61 + + + + Block + 1 + + THIRD + 7 + + SHOLD + 99 + 0 + 99 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + + + 14.13 + 1.41 + 13 + 23.55 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 3 + -3 + 3 + 2 + + 31 + 31 + 31 + 31 + 17 + 0 + 19 + 3 + 15 + 0 + 11 + 15 + 10 + 31 + 11 + 26 + 6 + 3 + 3 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 64 + 81 + 62 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -10 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + "Air"imba + 0 + + + FIFTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 4 + 2 + 7 + + + 1.5 + 5.02 + 1.51 + 8.63 + no + no + no + yes + 16 + 17 + 14 + 72 + + W1 + W1 + W1 + W1 + -3 + -3 + -2 + 0 + + 31 + 29 + 28 + 31 + 11 + 18 + 8 + 23 + 0 + 4 + 9 + 3 + 24 + 26 + 9 + 24 + 6 + 8 + 4 + 12 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 79 + 99 + 78 + + 2 + 0 + 2 + 0 + 20 + 35 + 36 + 34 + + + -7 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Balafon * + 1 + + + FIFTH + 6 + + TRIANGL + 82 + 0 + 7 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 3.89 + 1 + 1.83 + no + no + no + no + 8 + 12 + 8 + 9 + + W1 + W1 + W1 + W1 + 1 + -1 + -1 + 1 + + 31 + 31 + 26 + 23 + 16 + 23 + 18 + 25 + 10 + 11 + 11 + 12 + 16 + 21 + 22 + 21 + 9 + 10 + 10 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 85 + 92 + 87 + + 0 + 0 + 1 + 1 + 0 + 2 + 1 + 2 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BamboBlock + 2 + + + FIFTH + 0 + + TRIANGL + 35 + 0 + 2 + 0 + on + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 2 + 7 + 3 + + + 1 + 11 + 2 + 7 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + -1 + + 19 + 18 + 18 + 21 + 31 + 31 + 15 + 18 + 15 + 15 + 12 + 12 + 9 + 18 + 12 + 15 + 15 + 15 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 94 + 91 + 81 + + 0 + 1 + 2 + 1 + 0 + 39 + 17 + 82 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BamboChiff + 3 + + + FIFTH + 3 + + TRIANGL + 44 + 99 + 4 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 4 + 2 + + + 3 + 11 + 6 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -1 + 1 + 1 + + 18 + 18 + 31 + 31 + 10 + 18 + 10 + 18 + 0 + 9 + 12 + 0 + 7 + 6 + 6 + 7 + 6 + 5 + 6 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 99 + 76 + + 3 + 3 + 3 + 3 + 0 + 0 + 0 + 2 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BamboMar.1 + 4 + + + FIFTH + 3 + + TRIANGL + 21 + 0 + 0 + 0 + on + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 4 + + + 1 + 7 + 1 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -1 + 1 + 1 + + 18 + 18 + 27 + 22 + 10 + 18 + 10 + 13 + 0 + 9 + 12 + 12 + 7 + 6 + 10 + 10 + 6 + 5 + 6 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 70 + 99 + 77 + + 3 + 2 + 3 + 3 + 0 + 0 + 0 + 2 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BamboMar.2 + 5 + + + FIFTH + 7 + + TRIANGL + 21 + 0 + 0 + 0 + on + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 1 + + + 1 + 7 + 1 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -1 + 1 + 1 + + 18 + 18 + 27 + 22 + 10 + 18 + 10 + 13 + 0 + 9 + 12 + 12 + 7 + 6 + 10 + 10 + 6 + 5 + 6 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 70 + 99 + 72 + + 3 + 3 + 3 + 3 + 0 + 0 + 0 + 2 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BamboMar.3 + 6 + + + THIRD + 5 + + TRIANGL + 23 + 12 + 49 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 3 + 2 + + + 0.5 + 1.05 + 1.06 + 0.5 + no + no + no + no + 8 + 12 + 9 + 8 + + W1 + W2 + W8 + W2 + 2 + 0 + 0 + -3 + + 26 + 28 + 23 + 26 + 10 + 18 + 27 + 6 + 0 + 4 + 4 + 0 + 31 + 15 + 15 + 31 + 5 + 5 + 5 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 91 + 80 + 60 + + 1 + 2 + 2 + 2 + 0 + 0 + 0 + 70 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bamboo * + 7 + + + FIFTH + 3 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.5 + 12.72 + 0.5 + 11.24 + yes + yes + yes + yes + 8 + 64 + 8 + 72 + + W1 + W1 + W1 + W2 + 3 + -3 + -3 + 3 + + 31 + 24 + 31 + 25 + 21 + 22 + 21 + 22 + 0 + 0 + 0 + 0 + 21 + 31 + 0 + 31 + 12 + 3 + 12 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 99 + 82 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Castanet + 8 + + + FOURTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0 + + + 1 + 0.5 + 4 + 1 + no + yes + no + no + 8 + 96 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 28 + 29 + 22 + 31 + 15 + 8 + 7 + 15 + 17 + 13 + 15 + 0 + 8 + 7 + 11 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 61 + 70 + 0 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Claves * + 9 + + + FIFTH + 7 + + SAWUP + 50 + 35 + 0 + 82 + on + + + 4 + 0 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 5 + 6 + 4 + + + 1 + 1 + 1 + 11 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 6 + 24 + 6 + 24 + 12 + 12 + 12 + 12 + 6 + 16 + 6 + 16 + 7 + 1 + 7 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 89 + 94 + 98 + + 1 + 1 + 1 + 1 + 14 + 99 + 14 + 99 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + MarimbLead + 10 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 0 + 1 + 3 + + + 1 + 2 + 1 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -3 + -3 + 3 + + 31 + 31 + 31 + 31 + 13 + 0 + 15 + 3 + 0 + 15 + 0 + 15 + 0 + 21 + 0 + 18 + 6 + 5 + 5 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 63 + 96 + 71 + + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Marimba * + 11 + + + FIFTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 6 + + + 0.5 + 3 + 2 + 4.71 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 22 + 26 + 23 + 31 + 31 + 24 + 31 + 22 + 15 + 5 + 15 + 5 + 10 + 12 + 10 + 14 + 5 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 82 + 98 + 82 + + 1 + 1 + 1 + 1 + 0 + 12 + 0 + 21 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Marimba + 12 + + + THIRD + 0 + + TRIANGL + 30 + 9 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 5 + 5 + 4 + + + 4 + 8.72 + 18.37 + 8.01 + no + no + yes + no + 8 + 11 + 8 + 19 + + W1 + W1 + W6 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 15 + 31 + 18 + 15 + 8 + 15 + 15 + 10 + 16 + 18 + 14 + 6 + 6 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 79 + 75 + 73 + + 2 + 2 + 3 + 3 + 0 + 99 + 59 + 72 + + + -24 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 40 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Marimba* + 13 + + + THIRD + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 5 + + + 1 + 6 + 7 + 13 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 12 + 18 + 13 + 27 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 69 + 68 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Marimba..1 + 14 + + + FIFTH + 5 + + TRIANGL + 21 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 5 + + + 1 + 6 + 1 + 10 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W4 + -3 + 3 + 3 + -3 + + 31 + 31 + 31 + 27 + 10 + 17 + 10 + 25 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 99 + 91 + + 0 + 1 + 1 + 1 + 17 + 0 + 17 + 0 + + + -12 + POLY + 2 + FINGER + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + Marimba..2 + 15 + + + FIFTH + 5 + + TRIANGL + 21 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 3 + 6 + 4 + + + 1 + 7 + 1 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 3 + 3 + -3 + + 31 + 31 + 31 + 27 + 10 + 17 + 10 + 25 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 73 + 99 + 76 + + 0 + 1 + 1 + 1 + 17 + 0 + 17 + 0 + + + -24 + POLY + 2 + FINGER + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Marimba..3 + 16 + + + FIFTH + 5 + + TRIANGL + 21 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 4 + + + 1 + 5 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + -3 + 3 + 3 + -3 + + 31 + 31 + 31 + 22 + 10 + 17 + 10 + 13 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 5 + 7 + 7 + 7 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 80 + 99 + 88 + + 0 + 1 + 1 + 3 + 17 + 0 + 17 + 0 + + + -12 + POLY + 2 + FINGER + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Marimba..4 + 17 + + + THIRD + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 5 + 7 + 5 + + + 0.5 + 0.5 + 5 + 13 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 12 + 18 + 13 + 27 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 77 + 70 + 93 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Marimba..5 + 18 + + + THIRD + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 6 + 5 + + + 1 + 1 + 7 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 12 + 18 + 13 + 31 + 0 + 0 + 0 + 4 + 0 + 0 + 0 + 2 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 75 + 68 + 98 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Marimba..6 + 19 + + + FOURTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 6 + 5 + + + 2 + 3 + 1 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 12 + 18 + 13 + 31 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 2 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 79 + 66 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Marimba..7 + 20 + + + SEVENTH + 7 + + SHOLD + 30 + 40 + 36 + 15 + on + + + 2 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 6 + 2 + 4 + 1 + + + 1 + 1 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 24 + 16 + 16 + 16 + 24 + 13 + 13 + 13 + 12 + 18 + 9 + 9 + 12 + 5 + 7 + 4 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 64 + 99 + 81 + + 2 + 2 + 3 + 3 + 1 + 46 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Ornt Block + 21 + + + FIRST + 7 + + SHOLD + 58 + 0 + 99 + 80 + off + + + 5 + 3 + off + off + on + on + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 5 + 12.72 + 3 + 5.19 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 1 + -1 + 0 + + 31 + 20 + 31 + 10 + 15 + 3 + 27 + 20 + 0 + 14 + 10 + 11 + 0 + 0 + 17 + 0 + 11 + 15 + 5 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 65 + 63 + 45 + + 1 + 1 + 1 + 0 + 1 + 46 + 0 + 0 + + + -13 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SynGameran + 22 + + + FIFTH + 7 + + SAWUP + 50 + 35 + 0 + 82 + on + + + 4 + 0 + on + on + on + on + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 3 + + + 1 + 0.5 + 1 + 20.41 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + 0 + 0 + 0 + 0 + + 15 + 10 + 31 + 31 + 2 + 1 + 9 + 24 + 14 + 15 + 12 + 12 + 7 + 7 + 15 + 16 + 7 + 7 + 7 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 99 + 93 + + 0 + 0 + 1 + 1 + 0 + 0 + 14 + 99 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SynthMarib + 23 + + + THIRD + 0 + + TRIANGL + 24 + 0 + 38 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 3 + + + 0.5 + 0.5 + 22.49 + 4.37 + no + no + yes + no + 8 + 8 + 8 + 14 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 19 + 25 + 31 + 25 + 16 + 31 + 5 + 28 + 10 + 6 + 15 + 10 + 17 + 27 + 0 + 23 + 6 + 9 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 12 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 19 + 0 + 0 + 0 + 0 + 0 + 0 + + Tablas * + 24 + + + FIFTH + 5 + + TRIANGL + 82 + 0 + 7 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 1 + 2 + + + 1 + 3.62 + 1 + 1.83 + no + no + no + no + 8 + 18 + 8 + 9 + + W1 + W1 + W1 + W2 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 18 + 24 + 21 + 24 + 0 + 12 + 10 + 0 + 19 + 18 + 19 + 1 + 9 + 10 + 10 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 99 + 85 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 12 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Wood Block + 25 + + + FIFTH + 0 + + TRIANGL + 14 + 0 + 99 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 3 + 2 + 0 + + + 1.49 + 5.59 + 1.51 + 4.12 + no + no + no + no + 9 + 17 + 14 + 18 + + W1 + W5 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 26 + 31 + 31 + 31 + 15 + 23 + 15 + 15 + 0 + 0 + 12 + 22 + 0 + 0 + 6 + 7 + 7 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 73 + 99 + 75 + + 2 + 1 + 1 + 1 + 0 + 32 + 0 + 0 + + + -7 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + WoodBlock* + 26 + + + FIFTH + 0 + + TRIANGL + 48 + 0 + 0 + 0 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 0 + 5 + 0 + + + 1 + 1 + 1 + 3.46 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 16 + 16 + 22 + 18 + 13 + 13 + 12 + 10 + 18 + 18 + 16 + 15 + 9 + 9 + 8 + 12 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 69 + 99 + 77 + + 1 + 1 + 2 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + WoodBlock1 + 27 + + + THIRD + 0 + + TRIANGL + 48 + 0 + 0 + 0 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 4 + 1 + + + 1 + 1 + 1 + 3.46 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 16 + 16 + 22 + 18 + 13 + 13 + 12 + 10 + 18 + 18 + 16 + 15 + 9 + 9 + 8 + 12 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 55 + 66 + 77 + + 1 + 1 + 2 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + WoodBlock2 + 28 + + + THIRD + 0 + + TRIANGL + 48 + 0 + 0 + 0 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 1 + 5 + 0 + + + 1 + 1.41 + 1.73 + 3.46 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 16 + 16 + 22 + 18 + 13 + 13 + 12 + 10 + 18 + 18 + 16 + 15 + 9 + 9 + 8 + 12 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 75 + 72 + 68 + + 1 + 1 + 2 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + WoodBlock3 + 29 + + + + Chime + 2 + + FIFTH + 0 + + TRIANGL + 26 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 4 + 2 + 4 + + + 1.5 + 10.37 + 1.49 + 10.38 + no + no + no + no + 16 + 14 + 9 + 8 + + W1 + W3 + W1 + W3 + -3 + -3 + 3 + 3 + + 31 + 31 + 31 + 31 + 11 + 12 + 11 + 12 + 14 + 1 + 14 + 1 + 9 + 0 + 9 + 0 + 5 + 6 + 5 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 99 + 80 + + 1 + 1 + 1 + 1 + 0 + 10 + 0 + 10 + + + 5 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 4 + + BriteCelst + 0 + + + FIFTH + 0 + + TRIANGL + 25 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 4 + 2 + 4 + + + 1 + 7 + 1 + 1.73 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 3 + 3 + -3 + + 31 + 31 + 31 + 25 + 13 + 16 + 10 + 28 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 4 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 70 + 99 + 82 + + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Celeste + 1 + + + FIFTH + 0 + + TRIANGL + 25 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 3 + + + 1 + 8 + 1 + 15.55 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W1 + W1 + W1 + -3 + 3 + 3 + -3 + + 31 + 31 + 31 + 25 + 13 + 16 + 10 + 28 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 4 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 60 + 99 + 81 + + 0 + 1 + 1 + 2 + 0 + 0 + 0 + 0 + + + 12 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Celeste..1 + 2 + + + FIFTH + 0 + + TRIANGL + 25 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 4 + 1 + + + 1 + 2 + 4 + 10 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W4 + W1 + -3 + 3 + 3 + -3 + + 31 + 31 + 31 + 31 + 13 + 16 + 10 + 21 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 18 + 4 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 59 + 99 + 59 + + 0 + 1 + 1 + 2 + 0 + 0 + 0 + 0 + + + 12 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Celeste..2 + 3 + + + FIFTH + 5 + + SHOLD + 41 + 0 + 0 + 0 + on + + + 0 + 2 + on + off + on + off + 0 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + + + 2.5 + 5.19 + 2.5 + 5 + no + no + no + no + 16 + 8 + 16 + 8 + + W1 + W4 + W1 + W1 + 2 + -2 + 1 + -2 + + 23 + 31 + 25 + 31 + 31 + 31 + 31 + 31 + 13 + 13 + 13 + 13 + 7 + 9 + 7 + 7 + 3 + 2 + 3 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 86 + 83 + 92 + + 1 + 1 + 1 + 1 + 0 + 17 + 0 + 18 + + + 12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 0 + 54 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Chimes * + 4 + + + THIRD + 0 + + TRIANGL + 25 + 2 + 1 + 22 + off + + + 5 + 2 + off + on + off + on + 0 + 0 + 0 + 0 + 4 + 3 + 7 + 3 + + + 1.5 + 7.43 + 23.55 + 15 + no + no + no + no + 16 + 15 + 8 + 8 + + W1 + W1 + W5 + W7 + 0 + 3 + 0 + 0 + + 31 + 31 + 31 + 31 + 8 + 5 + 24 + 14 + 13 + 13 + 0 + 0 + 10 + 7 + 0 + 2 + 5 + 2 + 2 + 1 + VOF + V48 + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 76 + 61 + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -7 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 40 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Chiming + 5 + + + SIXTH + 7 + + TRIANGL + 33 + 0 + 10 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 7 + 7 + 7 + + + 15 + 10 + 2 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 14 + 10 + 12 + 29 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 6 + 6 + 5 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 91 + 99 + 99 + 99 + + 0 + 0 + 0 + 0 + 0 + 10 + 15 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Glocken + 6 + + + SEVENTH + 4 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 3 + 3 + on + off + off + off + 0 + 0 + 0 + 0 + 3 + 4 + 5 + 2 + + + 4 + 1 + 1 + 14 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W1 + W1 + -3 + -3 + 3 + 3 + + 31 + 31 + 24 + 31 + 17 + 14 + 17 + 19 + 15 + 9 + 15 + 10 + 8 + 5 + 8 + 4 + 5 + 2 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 61 + 99 + 77 + + 0 + 0 + 1 + 0 + 5 + 0 + 10 + 35 + + + 0 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Glocken..1 + 7 + + + FIFTH + 4 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 3 + 3 + on + off + off + off + 0 + 0 + 0 + 0 + 6 + 6 + 5 + 2 + + + 1 + 8 + 1 + 15 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + -3 + 3 + 3 + + 31 + 31 + 30 + 31 + 17 + 14 + 18 + 19 + 15 + 9 + 12 + 10 + 8 + 5 + 10 + 4 + 5 + 2 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 57 + 99 + 76 + + 0 + 0 + 1 + 1 + 5 + 0 + 10 + 35 + + + 12 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Glocken..2 + 8 + + + FIFTH + 0 + + TRIANGL + 26 + 0 + 8 + 0 + off + + + 0 + 3 + on + on + on + on + 0 + 0 + 0 + 0 + 1 + 4 + 1 + 7 + + + 1 + 3 + 1 + 14 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -3 + -3 + 3 + + 20 + 25 + 20 + 31 + 26 + 26 + 26 + 15 + 13 + 13 + 13 + 13 + 7 + 12 + 7 + 15 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 65 + 99 + 58 + + 1 + 2 + 1 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 23 + 59 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + GoodVibes* + 9 + + + EIGHTH + 0 + + TRIANGL + 22 + 0 + 0 + 42 + off + + + 6 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 3 + 3 + 3 + 3 + + + 1 + 14 + 4 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 3 + 3 + 3 + + 31 + 31 + 31 + 31 + 20 + 16 + 20 + 20 + 13 + 0 + 13 + 13 + 7 + 21 + 11 + 7 + 7 + 6 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 8 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + GreatVibes + 10 + + + SEVENTH + 3 + + TRIANGL + 25 + 19 + 7 + 92 + on + + + 3 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 5 + + + 2 + 4 + 24.22 + 25.95 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W2 + W3 + 2 + -2 + 0 + 0 + + 14 + 15 + 31 + 31 + 8 + 8 + 31 + 15 + 9 + 9 + 15 + 0 + 13 + 13 + 11 + 8 + 6 + 6 + 6 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 91 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -24 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Mod Chime + 11 + + + FIFTH + 1 + + TRIANGL + 35 + 0 + 3 + 10 + on + + + 4 + 2 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 4 + + + 2 + 2 + 10 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W2 + W3 + 1 + -2 + 1 + 2 + + 16 + 13 + 31 + 0 + 5 + 10 + 9 + 31 + 3 + 1 + 2 + 13 + 9 + 31 + 8 + 16 + 6 + 3 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 76 + 96 + 99 + + 1 + 1 + 1 + 1 + 10 + 10 + 10 + 10 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SynthChime + 12 + + + SIXTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 5 + + + 2 + 2 + 15.57 + 11 + yes + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 14 + 15 + 14 + 12 + 12 + 12 + 12 + 4 + 4 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 64 + 99 + 57 + + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Triangle.1 + 13 + + + SEVENTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 6 + 3 + + + 2 + 6 + 14 + 11 + no + yes + no + yes + 8 + 8 + 8 + 32 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 13 + 31 + 31 + 15 + 0 + 15 + 14 + 12 + 31 + 12 + 12 + 4 + 4 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 97 + 99 + 48 + + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Triangle.2 + 14 + + + SIXTH + 5 + + TRIANGL + 39 + 0 + 0 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 7 + 4 + + + 1 + 1 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 24 + 22 + 23 + 21 + 22 + 10 + 10 + 3 + 15 + 15 + 15 + 14 + 7 + 7 + 7 + 7 + 9 + 9 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 81 + + 3 + 3 + 3 + 3 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Vib Lead.1 + 15 + + + FIFTH + 5 + + TRIANGL + 39 + 0 + 0 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 5 + 4 + + + 1 + 14 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W3 + 0 + 0 + 0 + 0 + + 31 + 31 + 23 + 21 + 7 + 15 + 10 + 3 + 14 + 11 + 15 + 14 + 7 + 10 + 7 + 7 + 10 + 12 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 62 + 99 + 81 + + 1 + 2 + 3 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Vib Lead.2 + 16 + + + FIFTH + 0 + + TRIANGL + 31 + 0 + 0 + 31 + off + + + 3 + 3 + on + off + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + + + 1 + 5 + 1 + 12 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 3 + 3 + -3 + + 31 + 31 + 31 + 31 + 17 + 14 + 17 + 15 + 15 + 9 + 15 + 10 + 5 + 8 + 5 + 14 + 4 + 6 + 4 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 54 + 97 + 54 + + 2 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 30 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Vibe. + 17 + + + FIFTH + 7 + + TRIANGL + 21 + 0 + 0 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 2 + 3 + + + 1 + 7 + 1 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + -1 + + 31 + 27 + 31 + 22 + 9 + 22 + 10 + 13 + 12 + 7 + 12 + 13 + 7 + 0 + 10 + 10 + 6 + 12 + 13 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 87 + 96 + 59 + + 1 + 2 + 1 + 2 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 8 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Vibe.....1 + 18 + + + EIGHTH + 0 + + TRIANGL + 22 + 0 + 0 + 42 + off + + + 6 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 7 + 5 + 4 + 4 + + + 1 + 12 + 4 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 3 + 3 + 3 + + 31 + 31 + 31 + 31 + 20 + 16 + 20 + 20 + 13 + 0 + 13 + 13 + 7 + 21 + 11 + 7 + 7 + 6 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 8 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Vibe.....2 + 19 + + + EIGHTH + 0 + + TRIANGL + 22 + 0 + 0 + 42 + off + + + 6 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 7 + 4 + 5 + 2 + + + 1 + 7 + 1 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 3 + 3 + 3 + + 31 + 31 + 31 + 31 + 20 + 16 + 20 + 20 + 13 + 0 + 13 + 13 + 7 + 21 + 11 + 7 + 7 + 6 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 0 + 1 + 0 + 2 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 8 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Vibe.....3 + 20 + + + SIXTH + 5 + + TRIANGL + 33 + 0 + 0 + 99 + on + + + 0 + 0 + on + on + on + on + 0 + 0 + 0 + 0 + 7 + 5 + 4 + 3 + + + 1 + 4 + 1 + 12 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 3 + 3 + 3 + + 31 + 27 + 27 + 18 + 21 + 9 + 9 + 6 + 12 + 13 + 13 + 4 + 6 + 3 + 3 + 31 + 8 + 6 + 6 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 58 + + 0 + 1 + 1 + 2 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 8 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Vibe.....4 + 21 + + + SIXTH + 5 + + TRIANGL + 33 + 0 + 0 + 99 + on + + + 0 + 0 + on + on + on + on + 0 + 0 + 0 + 0 + 6 + 4 + 4 + 3 + + + 1 + 7 + 1 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W3 + W1 + -3 + 3 + 3 + 3 + + 31 + 27 + 27 + 18 + 21 + 9 + 9 + 6 + 12 + 13 + 13 + 4 + 6 + 3 + 3 + 31 + 8 + 6 + 6 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 91 + 99 + 57 + + 1 + 3 + 3 + 3 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 8 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Vibe.....5 + 22 + + + EIGHTH + 0 + + TRIANGL + 22 + 0 + 0 + 42 + off + + + 6 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 7 + 5 + 5 + 4 + + + 2 + 12 + 4 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W3 + -3 + 3 + 3 + 3 + + 31 + 31 + 31 + 31 + 20 + 16 + 20 + 20 + 13 + 0 + 13 + 13 + 7 + 21 + 11 + 7 + 7 + 6 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 8 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Vibe.....6 + 23 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 7 + 0 + 5 + + + 1 + 6 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W2 + -3 + 1 + 3 + 0 + + 27 + 31 + 28 + 27 + 26 + 20 + 27 + 10 + 14 + 0 + 14 + 0 + 10 + 18 + 11 + 31 + 5 + 1 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 89 + 99 + 84 + + 2 + 1 + 2 + 1 + 11 + 0 + 11 + 21 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Vibesyn * + 24 + + + SEVENTH + 0 + + SHOLD + 45 + 0 + 5 + 6 + off + + + 3 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 7 + 4 + 4 + 3 + + + 11 + 11 + 11 + 15 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 6 + 31 + 31 + 18 + 15 + 18 + 18 + 11 + 11 + 11 + 11 + 9 + 9 + 9 + 9 + 4 + 2 + 2 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 99 + 99 + 82 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + WindChime1 + 25 + + + SEVENTH + 1 + + SHOLD + 78 + 0 + 56 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 3 + 5 + 2 + + + 11 + 12.72 + 2.82 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + -1 + 0 + + 17 + 28 + 14 + 28 + 13 + 18 + 16 + 12 + 12 + 14 + 10 + 14 + 0 + 0 + 0 + 0 + 3 + 2 + 2 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 80 + 89 + 80 + + 1 + 1 + 1 + 0 + 1 + 46 + 0 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + WindChime2 + 26 + + + SIXTH + 6 + + SQUARE + 41 + 44 + 0 + 54 + on + + + 0 + 2 + on + on + on + off + 0 + 0 + 0 + 0 + 1 + 1 + 2 + 1 + + + 1 + 1 + 2 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 0 + 3 + 3 + + 31 + 31 + 25 + 31 + 17 + 18 + 16 + 14 + 14 + 14 + 13 + 14 + 12 + 13 + 14 + 14 + 5 + 5 + 5 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 90 + 75 + 75 + + 2 + 2 + 2 + 2 + 0 + 0 + 32 + 17 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 0 + 49 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Xylophone.1 + 27 + + + THIRD + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 1 + 1 + 1 + + + 1 + 5 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W7 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 23 + 31 + 22 + 15 + 5 + 15 + 5 + 15 + 16 + 18 + 0 + 7 + 5 + 7 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 86 + 99 + 90 + + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Xylophone.2 + 28 + + + FIFTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 3 + 1 + 2 + + + 3 + 8 + 1 + 10 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 15 + 22 + 15 + 22 + 7 + 9 + 7 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 80 + 98 + 65 + + 2 + 1 + 1 + 2 + 0 + 0 + 0 + 38 + + + 12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Xylophone.3 + 29 + + + FIFTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 3 + 1 + 2 + + + 4 + 8 + 1 + 10 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 15 + 22 + 15 + 22 + 7 + 9 + 7 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 80 + 98 + 65 + + 2 + 1 + 1 + 2 + 0 + 0 + 0 + 38 + + + 12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Xylophone.4 + 30 + + + SIXTH + 6 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 7 + 4 + + + 0.5 + 1 + 3.46 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W1 + 0 + 3 + 0 + 3 + + 27 + 27 + 31 + 31 + 16 + 16 + 13 + 13 + 14 + 14 + 14 + 14 + 6 + 6 + 7 + 7 + 6 + 6 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 86 + 99 + 83 + + 1 + 2 + 3 + 3 + 0 + 0 + 0 + 0 + + + 12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 17 + 6 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Xylophone1 + 31 + + + FIFTH + 6 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 7 + 3 + + + 1 + 2 + 1 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 3 + -2 + -1 + + 31 + 31 + 31 + 31 + 10 + 18 + 12 + 18 + 13 + 13 + 13 + 13 + 6 + 7 + 6 + 7 + 7 + 4 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 93 + 99 + 79 + + 1 + 3 + 1 + 2 + 0 + 25 + 0 + 20 + + + 12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 17 + 6 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Xylophone2 + 32 + + + FIFTH + 6 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 3 + 7 + 3 + + + 1 + 14 + 1 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W1 + W2 + 0 + 3 + -2 + -1 + + 31 + 29 + 31 + 22 + 9 + 22 + 12 + 13 + 12 + 7 + 13 + 12 + 7 + 0 + 6 + 5 + 6 + 12 + 7 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 91 + 99 + 79 + + 1 + 3 + 2 + 2 + 0 + 25 + 0 + 20 + + + 12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 17 + 6 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Xylophone3 + 33 + + + SIXTH + 6 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 6 + 7 + 4 + + + 0.5 + 2 + 3.46 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + 0 + 3 + 0 + 3 + + 27 + 27 + 31 + 31 + 16 + 16 + 13 + 13 + 14 + 14 + 14 + 14 + 6 + 6 + 7 + 7 + 5 + 5 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 84 + 99 + 64 + + 1 + 1 + 3 + 3 + 0 + 0 + 0 + 0 + + + 12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 17 + 6 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Xylophone4 + 34 + + + SIXTH + 1 + + TRIANGL + 35 + 0 + 25 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 4 + + + 1 + 6 + 0.5 + 13 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W2 + W1 + -1 + 1 + 2 + -2 + + 31 + 31 + 31 + 31 + 17 + 14 + 31 + 19 + 15 + 9 + 15 + 10 + 8 + 5 + 0 + 4 + 5 + 5 + 8 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 67 + 62 + 65 + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + 12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Xylophone5 + 35 + + + SIXTH + 1 + + TRIANGL + 35 + 0 + 25 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 4 + 4 + 3 + + + 1 + 2 + 4 + 15.7 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -1 + 1 + 2 + -2 + + 31 + 31 + 31 + 31 + 17 + 14 + 31 + 14 + 15 + 9 + 15 + 10 + 8 + 5 + 0 + 9 + 6 + 6 + 9 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 66 + 59 + 82 + + 1 + 1 + 1 + 3 + 0 + 0 + 0 + 0 + + + 12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Xylophone6 + 36 + + + FIFTH + 1 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 6 + 4 + 5 + + + 0.5 + 1 + 1 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -1 + 1 + 2 + -2 + + 31 + 18 + 31 + 31 + 17 + 18 + 31 + 14 + 15 + 9 + 15 + 10 + 8 + 5 + 0 + 9 + 6 + 6 + 9 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 91 + 95 + 85 + + 1 + 3 + 3 + 3 + 0 + 0 + 0 + 0 + + + 12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Xylophone7 + 37 + + + FIFTH + 6 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 5 + 7 + 4 + + + 1 + 14 + 1 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 3 + 0 + -1 + + 28 + 31 + 31 + 22 + 15 + 21 + 10 + 13 + 12 + 7 + 12 + 13 + 6 + 0 + 5 + 5 + 6 + 12 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 79 + + 2 + 1 + 1 + 2 + 0 + 0 + 0 + 0 + + + 12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 17 + 6 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Xylophone8 + 38 + + + + Cymbal + 3 + + FOURTH + 7 + + TRIANGL + 31 + 13 + 14 + 30 + on + + + 0 + 3 + off + on + off + off + 0 + 0 + 0 + 0 + 4 + 1 + 1 + 0 + + + 0.5 + 3 + 6.28 + 1.18 + no + no + no + no + 8 + 8 + 8 + 19 + + W1 + W1 + W2 + W8 + 3 + -3 + 3 + -3 + + 29 + 30 + 31 + 31 + 11 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 31 + 1 + 0 + 0 + 4 + 1 + 1 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 78 + 86 + 68 + + 0 + 0 + 0 + 0 + 10 + 31 + 0 + 11 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Chin.Cymb* + 0 + + + SECOND + 6 + + TRIANGL + 0 + 2 + 0 + 3 + off + + + 5 + 0 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 0 + 0 + 0 + + + 8.65 + 0.87 + 21.98 + 18.84 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 25 + 21 + 31 + 31 + 22 + 28 + 31 + 8 + 11 + 11 + 14 + 5 + 0 + 6 + 0 + 2 + 1 + 1 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 78 + 87 + 89 + + 2 + 1 + 2 + 0 + 0 + 0 + 0 + 0 + + + -6 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Cymbal...1 + 1 + + + SECOND + 6 + + TRIANGL + 0 + 2 + 0 + 3 + off + + + 5 + 0 + on + on + on + on + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 8.65 + 0.87 + 21.98 + 19.03 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 25 + 21 + 31 + 31 + 22 + 28 + 31 + 8 + 11 + 11 + 14 + 5 + 0 + 6 + 0 + 2 + 1 + 1 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 78 + 87 + 89 + + 2 + 1 + 2 + 0 + 0 + 0 + 0 + 0 + + + -6 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Cymbal...1* + 2 + + + SECOND + 6 + + TRIANGL + 0 + 2 + 0 + 3 + off + + + 5 + 0 + on + on + on + on + 0 + 0 + 0 + 0 + 4 + 0 + 0 + 0 + + + 8.65 + 10.13 + 8 + 12 + no + no + no + no + 8 + 11 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 25 + 21 + 31 + 31 + 22 + 28 + 31 + 8 + 11 + 11 + 14 + 5 + 0 + 6 + 0 + 2 + 1 + 1 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 86 + 89 + + 2 + 1 + 2 + 0 + 0 + 0 + 0 + 0 + + + -6 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Cymbal...2 + 4 + + + SECOND + 6 + + TRIANGL + 0 + 2 + 0 + 3 + off + + + 5 + 0 + on + on + on + on + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 8.65 + 9.89 + 7 + 12 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 25 + 21 + 31 + 31 + 22 + 28 + 31 + 8 + 11 + 11 + 14 + 5 + 0 + 6 + 0 + 2 + 1 + 1 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 86 + 89 + + 2 + 1 + 2 + 0 + 0 + 0 + 0 + 0 + + + -6 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Cymbal...2* + 5 + + + FOURTH + 6 + + TRIANGL + 0 + 2 + 0 + 3 + off + + + 5 + 0 + on + on + on + on + 0 + 0 + 0 + 0 + 4 + 1 + 0 + 0 + + + 6.92 + 7.07 + 10.38 + 19.78 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 25 + 21 + 31 + 31 + 22 + 28 + 31 + 8 + 11 + 11 + 14 + 5 + 0 + 6 + 0 + 2 + 1 + 1 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 91 + 91 + + 2 + 1 + 2 + 0 + 0 + 0 + 0 + 0 + + + -6 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Cymbal...3 + 7 + + + + Drum + 4 + + FIFTH + 6 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 0 + 5 + 0 + + + 0.5 + 0.5 + 13 + 17.27 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 18 + 31 + 31 + 15 + 7 + 15 + 15 + 11 + 0 + 16 + 0 + 8 + 5 + 7 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 99 + 99 + + 0 + 0 + 2 + 0 + 0 + 0 + 99 + 0 + + + -24 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bass/Snare + 0 + + + FOURTH + 7 + + SHOLD + 99 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 1 + 2 + 0 + + + 0.5 + 0.5 + 9 + 15 + no + no + yes + yes + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -1 + 2 + 3 + + 30 + 31 + 31 + 31 + 20 + 18 + 20 + 31 + 0 + 0 + 0 + 0 + 19 + 19 + 19 + 19 + 15 + 2 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 86 + 95 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -11 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + Bass Drum + 1 + + + FOURTH + 0 + + TRIANGL + 80 + 0 + 74 + 0 + off + + + 7 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 2.31 + 1 + 0.71 + 2 + yes + no + no + no + 13 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 11 + 24 + 21 + 15 + 14 + 8 + 10 + 0 + 18 + 0 + 8 + 31 + 12 + 6 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 91 + 95 + 73 + 78 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -24 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bass Drum1 + 2 + + + SECOND + 6 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 7.02 + 1.31 + 0.81 + 10.7 + yes + yes + yes + yes + 9 + 13 + 13 + 19 + + W1 + W1 + W1 + W1 + 2 + -2 + 2 + -2 + + 31 + 31 + 31 + 31 + 10 + 24 + 21 + 25 + 15 + 10 + 10 + 11 + 21 + 0 + 0 + 7 + 10 + 11 + 12 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 71 + 69 + 70 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -24 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bass Drum2 + 3 + + + SIXTH + 6 + + TRIANGL + 0 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 1 + 6 + 0 + + + 0.78 + 0.87 + 0.5 + 0.87 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 24 + 27 + 31 + 15 + 16 + 18 + 27 + 15 + 13 + 14 + 14 + 18 + 25 + 16 + 25 + 9 + 12 + 8 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 85 + + 2 + 2 + 2 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BassDrum.1 + 5 + + + FIFTH + 6 + + TRIANGL + 0 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 2 + 5 + 0 + + + 0.5 + 0.87 + 0.5 + 0.87 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 24 + 27 + 31 + 15 + 27 + 18 + 27 + 15 + 13 + 14 + 14 + 18 + 25 + 16 + 25 + 9 + 12 + 8 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 70 + 99 + 78 + + 2 + 2 + 2 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BassDrum.2 + 6 + + + THIRD + 6 + + TRIANGL + 0 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 1 + 2 + 0 + + + 0.5 + 0.5 + 0.78 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 24 + 27 + 31 + 15 + 27 + 18 + 27 + 15 + 13 + 14 + 14 + 18 + 25 + 16 + 25 + 9 + 12 + 8 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 78 + 85 + 72 + + 2 + 2 + 2 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BassDrum.3 + 7 + + + FIFTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 3 + + + 0.71 + 1.43 + 1 + 0.62 + no + no + no + no + 8 + 15 + 8 + 10 + + W1 + W6 + W2 + W1 + 0 + 3 + -3 + -3 + + 28 + 24 + 24 + 25 + 12 + 17 + 15 + 21 + 11 + 4 + 0 + 0 + 20 + 9 + 0 + 31 + 6 + 6 + 7 + 14 + VOF + VOF + VOF + VOF + + + 99 + 17 + 42 + 50 + 50 + 50 + + 99 + 66 + 99 + 82 + + 2 + 2 + 2 + 0 + 0 + 30 + 2 + 5 + + + 5 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BoConga + 8 + + + THIRD + 0 + + TRIANGL + 24 + 0 + 38 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 3 + + + 0.5 + 0.5 + 13 + 0.87 + no + no + yes + no + 8 + 8 + 8 + 14 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 19 + 25 + 31 + 25 + 16 + 31 + 5 + 29 + 10 + 6 + 11 + 9 + 17 + 27 + 0 + 23 + 6 + 9 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Congas * + 9 + + + THIRD + 6 + + TRIANGL + 34 + 10 + 9 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 3 + + + 1 + 2 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -3 + -1 + -1 + + 31 + 31 + 31 + 24 + 24 + 27 + 27 + 25 + 15 + 11 + 11 + 11 + 7 + 31 + 31 + 18 + 7 + 15 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 76 + + 1 + 2 + 1 + 3 + 0 + 0 + 0 + 46 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + DrmSpring1 + 10 + + + THIRD + 7 + + TRIANGL + 34 + 10 + 25 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 5 + 6 + 3 + + + 0.78 + 1.73 + 2.82 + 0.78 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -3 + -1 + -1 + + 31 + 31 + 31 + 24 + 24 + 27 + 27 + 25 + 15 + 11 + 11 + 11 + 7 + 31 + 31 + 18 + 7 + 15 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 96 + 96 + 99 + + 1 + 2 + 1 + 3 + 0 + 0 + 0 + 46 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + DrmSpring2 + 11 + + + FIFTH + 5 + + TRIANGL + 33 + 35 + 15 + 0 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 6 + 2 + + + 2 + 2 + 2.82 + 9.89 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 0 + 1 + 2 + + 31 + 31 + 21 + 6 + 4 + 10 + 10 + 8 + 0 + 13 + 13 + 13 + 8 + 3 + 4 + 1 + 7 + 6 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 98 + 81 + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 99 + + + -24 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + DrumString + 12 + + + FIFTH + 7 + + SHOLD + 99 + 0 + 99 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + + + 1.57 + 1.41 + 13 + 23.55 + no + no + yes + yes + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -1 + 2 + 3 + + 30 + 31 + 31 + 31 + 9 + 16 + 15 + 18 + 9 + 5 + 6 + 5 + 13 + 11 + 14 + 19 + 6 + 2 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 86 + 95 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 8 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 7 + + Efem Toms + 13 + + + FOURTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0.62 + 0.5 + 8.24 + 4 + yes + yes + yes + no + 10 + 8 + 12 + 8 + + W2 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 27 + 31 + 14 + 3 + 4 + 14 + 0 + 0 + 7 + 0 + 4 + 0 + 10 + 8 + 7 + 1 + 1 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 95 + 84 + 87 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + -24 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + El.Snare * + 14 + + + FOURTH + 2 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + + + 3 + 1 + 10.81 + 3.56 + no + yes + yes + no + 8 + 8 + 12 + 9 + + W2 + W2 + W6 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 16 + 3 + 2 + 14 + 0 + 7 + 0 + 0 + 0 + 0 + 1 + 2 + 8 + 3 + 1 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 68 + 81 + 87 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + -24 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + El.Snare2* + 15 + + + FOURTH + 7 + + TRIANGL + 0 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 7 + 0 + 0 + 2 + 0 + 0 + 0 + + + 2 + 7 + 7 + 21.98 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W1 + W8 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 13 + 9 + 12 + 12 + 4 + 15 + 15 + 15 + 31 + 0 + 0 + 0 + 15 + 4 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 75 + 86 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + FM Hi-Hats + 16 + + + SECOND + 7 + + TRIANGL + 35 + 0 + 8 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + + + 1.06 + 0.68 + 2.06 + 0.56 + no + no + no + no + 9 + 11 + 9 + 9 + + W1 + W1 + W1 + W1 + 0 + 1 + 0 + 0 + + 31 + 31 + 29 + 31 + 5 + 24 + 7 + 22 + 0 + 3 + 6 + 7 + 7 + 3 + 6 + 0 + 3 + 3 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 60 + 80 + + 3 + 2 + 0 + 0 + 0 + 34 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 3 + + Hand Drum + 17 + + + SECOND + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 1 + 6 + 0 + + + 0.87 + 0.87 + 2.82 + 0.71 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 29 + 26 + 0 + 24 + 26 + 21 + 15 + 13 + 4 + 9 + 7 + 3 + 6 + 0 + 3 + 4 + 4 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 59 + 65 + 83 + + 3 + 2 + 0 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Hand Drum1 + 18 + + + SECOND + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 0 + 0 + 0 + + + 0.71 + 1 + 0.71 + 0.71 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 29 + 26 + 0 + 24 + 26 + 21 + 15 + 13 + 4 + 9 + 7 + 3 + 6 + 0 + 8 + 4 + 4 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 59 + 65 + 87 + + 3 + 2 + 0 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Hand Drum2 + 19 + + + FIFTH + 7 + + TRIANGL + 99 + 0 + 85 + 70 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 16.77 + 12.5 + 11.67 + 12 + yes + yes + yes + yes + 59 + 104 + 108 + 111 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 10 + 9 + 10 + 6 + 0 + 15 + 0 + 15 + 0 + 31 + 0 + 6 + 15 + 15 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 89 + 99 + 99 + 99 + + 3 + 3 + 3 + 3 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + "Hi!" Hat! + 20 + + + FOURTH + 7 + + TRIANGL + 0 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 7 + 0 + 0 + 2 + 0 + 0 + 0 + + + 2 + 7 + 7 + 21.98 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W1 + W8 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 19 + 9 + 12 + 12 + 0 + 15 + 15 + 15 + 31 + 0 + 0 + 0 + 15 + 4 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 78 + 94 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Hi-Hat * + 21 + + + FIFTH + 7 + + TRIANGL + 11 + 0 + 8 + 0 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 2 + 1 + 2 + + + 1 + 5.19 + 1 + 7.85 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + -3 + 3 + 3 + + 26 + 21 + 27 + 21 + 31 + 20 + 31 + 19 + 15 + 12 + 15 + 13 + 14 + 9 + 15 + 13 + 6 + 4 + 7 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 86 + 99 + 80 + + 0 + 1 + 0 + 1 + 0 + 30 + 0 + 30 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Java Jive + 22 + + + FIRST + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + + 5.62 + 1 + 0.5 + 0.78 + yes + yes + yes + yes + 18 + 8 + 8 + 80 + + W1 + W1 + W3 + W4 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 29 + 17 + 25 + 22 + 15 + 0 + 4 + 3 + 16 + 1 + 19 + 0 + 8 + 8 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 83 + 95 + 95 + + 1 + 2 + 3 + 0 + 0 + 0 + 0 + 0 + + + -12 + MONO + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + KickDrum * + 23 + + + FIFTH + 5 + + TRIANGL + 36 + 0 + 0 + 80 + off + + + 0 + 0 + on + on + on + on + 0 + 0 + 0 + 0 + 4 + 1 + 5 + 1 + + + 0.5 + 0.5 + 0.5 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 27 + 31 + 24 + 19 + 15 + 24 + 6 + 24 + 0 + 0 + 4 + 4 + 13 + 12 + 15 + 15 + 6 + 5 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 99 + 29 + + 1 + 0 + 2 + 3 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Log Drum.1 + 24 + + + FIFTH + 5 + + TRIANGL + 36 + 0 + 0 + 80 + off + + + 0 + 0 + on + on + on + on + 0 + 0 + 0 + 0 + 4 + 1 + 4 + 0 + + + 0.71 + 0.87 + 0.71 + 1.41 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 27 + 31 + 24 + 19 + 15 + 24 + 6 + 24 + 0 + 0 + 4 + 4 + 13 + 12 + 15 + 15 + 6 + 5 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 73 + 99 + 93 + + 1 + 1 + 2 + 3 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Log Drum.2 + 25 + + + FIRST + 5 + + TRIANGL + 4 + 0 + 69 + 0 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 1 + 1 + + + 0.5 + 0.98 + 0.68 + 1.73 + no + no + no + no + 8 + 10 + 11 + 8 + + W1 + W6 + W1 + W4 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 13 + 10 + 2 + 13 + 13 + 0 + 0 + 0 + 15 + 0 + 0 + 0 + 6 + 2 + 4 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 70 + 64 + 72 + + 1 + 1 + 1 + 1 + 0 + 4 + 0 + 33 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 42 + 0 + 0 + 0 + 0 + 0 + 0 + + MiamiToms* + 26 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 3 + 2 + + + 1 + 2 + 1.73 + 0.87 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 25 + 24 + 29 + 27 + 15 + 15 + 21 + 25 + 4 + 0 + 15 + 13 + 24 + 12 + 21 + 24 + 7 + 9 + 15 + 13 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 90 + 99 + 98 + + 1 + 2 + 0 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntDrm..1 + 27 + + + FIFTH + 5 + + TRIANGL + 40 + 0 + 16 + 46 + off + + + 2 + 1 + off + on + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 3 + 2 + + + 0.5 + 0.5 + 0.5 + 0.78 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 1 + 0 + 0 + + 31 + 31 + 31 + 31 + 12 + 22 + 9 + 1 + 0 + 0 + 11 + 0 + 31 + 0 + 6 + 7 + 6 + 3 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 86 + 99 + 73 + + 2 + 1 + 2 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntDrm..2 + 28 + + + FIFTH + 5 + + TRIANGL + 11 + 0 + 16 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 4 + 4 + + + 0.5 + 0.5 + 0.87 + 0.78 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 1 + 0 + 0 + + 31 + 31 + 31 + 31 + 12 + 22 + 9 + 1 + 0 + 0 + 11 + 0 + 31 + 0 + 6 + 7 + 6 + 3 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 85 + 62 + 72 + + 2 + 1 + 2 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntDrm..3 + 29 + + + FIFTH + 5 + + TRIANGL + 11 + 0 + 16 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 3 + 5 + 2 + + + 2 + 10.38 + 0.71 + 0.71 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 1 + 0 + 0 + + 31 + 31 + 31 + 31 + 12 + 22 + 11 + 10 + 0 + 0 + 11 + 0 + 31 + 0 + 9 + 9 + 6 + 3 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 56 + 89 + 75 + + 2 + 1 + 2 + 1 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntDrm..4 + 30 + + + FIFTH + 5 + + TRIANGL + 11 + 0 + 16 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 4 + 3 + + + 1 + 2 + 1 + 16.96 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 1 + 0 + 0 + + 27 + 31 + 31 + 31 + 12 + 16 + 9 + 13 + 13 + 14 + 13 + 14 + 12 + 12 + 22 + 18 + 6 + 6 + 10 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 72 + 97 + 67 + + 1 + 1 + 1 + 3 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntDrm..5 + 31 + + + FIFTH + 1 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 2 + 4 + 3 + + + 0.5 + 2.82 + 0.5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 28 + 0 + 28 + 15 + 9 + 15 + 9 + 10 + 12 + 9 + 13 + 12 + 9 + 0 + 9 + 5 + 7 + 1 + 7 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 97 + 99 + 77 + + 1 + 0 + 2 + 3 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntDrm..6 + 32 + + + FIFTH + 5 + + TRIANGL + 11 + 0 + 16 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 3 + 5 + + + 0.5 + 0.71 + 0.87 + 0.78 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -1 + 0 + 0 + + 31 + 31 + 31 + 31 + 12 + 22 + 11 + 10 + 0 + 0 + 11 + 0 + 31 + 0 + 9 + 9 + 6 + 3 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 83 + 87 + 72 + + 2 + 2 + 2 + 2 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntDrm..7 + 33 + + + THIRD + 6 + + TRIANGL + 11 + 0 + 16 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 6 + 2 + + + 0.5 + 0.71 + 1.41 + 0.78 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -1 + 0 + 0 + + 31 + 31 + 31 + 31 + 12 + 22 + 11 + 10 + 0 + 0 + 11 + 0 + 31 + 0 + 9 + 9 + 6 + 3 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 83 + 87 + 72 + + 2 + 2 + 2 + 2 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntDrm..8 + 34 + + + THIRD + 6 + + TRIANGL + 11 + 0 + 16 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 2 + 5 + 3 + + + 0.5 + 0.71 + 1.41 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -1 + 0 + 0 + + 31 + 31 + 31 + 31 + 12 + 22 + 26 + 11 + 0 + 0 + 11 + 0 + 31 + 0 + 9 + 9 + 6 + 3 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 68 + 95 + 48 + + 2 + 2 + 2 + 3 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntDrm..9 + 35 + + + FOURTH + 6 + + TRIANGL + 11 + 0 + 16 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 3 + 3 + + + 0.71 + 2.82 + 1.73 + 0.87 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -1 + 0 + 0 + + 24 + 24 + 31 + 31 + 15 + 15 + 26 + 11 + 0 + 5 + 11 + 0 + 12 + 24 + 9 + 9 + 8 + 7 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 68 + 55 + 48 + + 2 + 2 + 2 + 3 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntDrm.10 + 36 + + + FIFTH + 5 + + SAWUP + 38 + 28 + 14 + 0 + off + + + 7 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 2 + + + 0.5 + 0.5 + 0.5 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 28 + 15 + 25 + 18 + 5 + 10 + 6 + 24 + 13 + 13 + 4 + 15 + 3 + 3 + 15 + 15 + 7 + 7 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 72 + 99 + 91 + + 1 + 0 + 2 + 3 + 0 + 0 + 0 + 99 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntEchoDr + 37 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 0 + 5 + 0 + + + 1.73 + 0.87 + 0.5 + 3.14 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 18 + 18 + 31 + 15 + 8 + 10 + 15 + 12 + 12 + 9 + 5 + 6 + 5 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 95 + 78 + 90 + + 1 + 0 + 0 + 0 + 0 + 70 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Percussive + 38 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1.73 + 0.71 + 0.5 + 3.14 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 18 + 18 + 31 + 15 + 8 + 10 + 15 + 12 + 12 + 9 + 5 + 6 + 5 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 95 + 78 + 90 + + 1 + 0 + 0 + 0 + 0 + 70 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Percussive* + 39 + + + SECOND + 0 + + TRIANGL + 2 + 0 + 95 + 0 + on + + + 7 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.5 + 0.68 + 3.46 + 0.79 + no + no + no + no + 8 + 11 + 8 + 9 + + W1 + W3 + W5 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 16 + 0 + 9 + 13 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 7 + 2 + 4 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 66 + 83 + 99 + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Simmons1 * + 40 + + + SECOND + 0 + + TRIANGL + 2 + 0 + 95 + 0 + on + + + 7 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.5 + 0.68 + 3.46 + 0.79 + no + no + no + no + 8 + 11 + 8 + 9 + + W1 + W3 + W5 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 15 + 0 + 9 + 13 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 5 + 1 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 60 + 75 + 99 + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Simmons2 * + 41 + + + THIRD + 7 + + TRIANGL + 20 + 0 + 0 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 3 + 3 + + + 1 + 0.5 + 3 + 3.14 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W3 + W4 + 0 + 0 + 3 + -3 + + 31 + 31 + 31 + 31 + 15 + 19 + 25 + 25 + 7 + 5 + 5 + 3 + 17 + 5 + 6 + 8 + 9 + 11 + 11 + 10 + VOF + V24 + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 88 + 99 + 99 + + 0 + 1 + 1 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 7 + + Skankin' + 42 + + + THIRD + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 6.86 + 2.62 + 2 + 17.27 + yes + yes + no + yes + 14 + 18 + 8 + 96 + + W1 + W1 + W3 + W4 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 26 + 14 + 0 + 0 + 15 + 0 + 0 + 0 + 16 + 0 + 0 + 0 + 8 + 1 + 1 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 89 + 84 + 99 + + 1 + 2 + 3 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Snare * + 43 + + + FIFTH + 7 + + SHOLD + 99 + 0 + 99 + 0 + on + + + 7 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 2 + 0 + + + 22.81 + 0.93 + 0.5 + 21.78 + yes + no + yes + yes + 19 + 23 + 8 + 126 + + W1 + W1 + W1 + W1 + 3 + -3 + -3 + 3 + + 31 + 31 + 31 + 31 + 15 + 21 + 10 + 24 + 10 + 11 + 14 + 15 + 16 + 9 + 18 + 0 + 8 + 3 + 8 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 90 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Snare 1 + 44 + + + FIFTH + 7 + + TRIANGL + 99 + 0 + 48 + 15 + on + + + 6 + 2 + on + on + on + on + 0 + 0 + 0 + 0 + 2 + 4 + 2 + 0 + + + 14.22 + 14.22 + 16.87 + 13.46 + yes + yes + yes + yes + 9 + 9 + 20 + 73 + + W1 + W1 + W1 + W1 + 3 + -3 + -3 + 3 + + 31 + 31 + 27 + 31 + 19 + 21 + 19 + 26 + 14 + 11 + 14 + 15 + 19 + 9 + 19 + 0 + 7 + 4 + 9 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 78 + 99 + 97 + + 0 + 3 + 0 + 3 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Snare 2 + 45 + + + FOURTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1.41 + 0.62 + 3.14 + 17.27 + yes + no + no + yes + 8 + 10 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 20 + 31 + 31 + 15 + 8 + 15 + 15 + 15 + 8 + 16 + 0 + 8 + 5 + 8 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 95 + 99 + 98 + + 1 + 1 + 3 + 0 + 0 + 0 + 12 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Snare 1 + 46 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + + + 1.41 + 0.78 + 3.14 + 17.27 + yes + no + no + no + 8 + 8 + 8 + 112 + + W1 + W1 + W8 + W7 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 20 + 4 + 0 + 15 + 8 + 15 + 15 + 15 + 8 + 16 + 0 + 8 + 5 + 8 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 7 + + Snare 2 + 47 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 0 + 5 + 0 + + + 0.5 + 1.57 + 1 + 3.14 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + -3 + + 31 + 31 + 19 + 31 + 31 + 26 + 31 + 31 + 15 + 10 + 15 + 15 + 16 + 10 + 17 + 0 + 7 + 5 + 8 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 87 + 88 + 94 + 96 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Snare....1 + 48 + + + FIRST + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 0 + 5 + 0 + + + 0.78 + 1.57 + 1.57 + 25.95 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 19 + 31 + 31 + 26 + 22 + 31 + 15 + 10 + 13 + 15 + 16 + 10 + 17 + 0 + 8 + 5 + 8 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 79 + 99 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Snare....2 + 49 + + + FOURTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 0 + 4 + 0 + + + 0.71 + 1.57 + 0.5 + 17.27 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 21 + 31 + 31 + 15 + 9 + 15 + 15 + 16 + 15 + 18 + 0 + 8 + 5 + 8 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 33 + 83 + 99 + + 0 + 0 + 1 + 0 + 0 + 20 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Snare....3 + 50 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 1 + 6 + 1 + + + 25.95 + 25.95 + 0.5 + 17.27 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 19 + 31 + 31 + 15 + 5 + 15 + 15 + 15 + 16 + 18 + 0 + 8 + 5 + 8 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 67 + 71 + 99 + 99 + + 0 + 2 + 1 + 0 + 0 + 20 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Snare....4 + 51 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 2 + 0 + + + 12.06 + 9.81 + 0.62 + 9.87 + yes + yes + yes + yes + 17 + 21 + 10 + 22 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 16 + 18 + 20 + 31 + 26 + 0 + 0 + 15 + 15 + 15 + 0 + 14 + 0 + 6 + 1 + 7 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 99 + 99 + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + + + 12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SnareDrm.* + 52 + + + FIFTH + 7 + + TRIANGL + 35 + 36 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + + + 1.41 + 0.78 + 3.14 + 17.27 + yes + no + no + no + 8 + 8 + 8 + 112 + + W1 + W1 + W8 + W4 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 16 + 4 + 0 + 15 + 8 + 15 + 15 + 15 + 8 + 16 + 0 + 0 + 5 + 8 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 1 + 1 + 1 + 0 + 46 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 7 + + Snare&Tom + 53 + + + SECOND + 0 + + TRIANGL + 32 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 2 + 3 + + + 1 + 1 + 3.14 + 15.7 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -1 + -2 + 0 + 0 + + 24 + 19 + 21 + 20 + 12 + 8 + 12 + 16 + 15 + 10 + 12 + 10 + 15 + 0 + 14 + 16 + 5 + 4 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 66 + 76 + 39 + + 1 + 0 + 0 + 0 + 0 + 26 + 0 + 26 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Steel Drum + 54 + + + THIRD + 0 + + TRIANGL + 16 + 0 + 9 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 4 + 7 + + + 2 + 6 + 8.98 + 2.02 + no + no + no + no + 8 + 8 + 14 + 15 + + W1 + W2 + W3 + W4 + 1 + 0 + 3 + -3 + + 21 + 13 + 14 + 31 + 8 + 8 + 5 + 9 + 12 + 11 + 10 + 10 + 12 + 12 + 3 + 4 + 6 + 5 + 4 + 3 + VOF + VOF + VOF + V48 + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 64 + 40 + 68 + + 1 + 1 + 1 + 1 + 0 + 50 + 0 + 26 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SteelDrum + 55 + + + SEVENTH + 4 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 6 + 3 + + + 1 + 1 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 2 + 2 + -2 + + 31 + 27 + 27 + 31 + 12 + 10 + 10 + 6 + 14 + 14 + 14 + 14 + 13 + 13 + 13 + 9 + 6 + 6 + 6 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 95 + 84 + + 1 + 2 + 2 + 2 + 0 + 45 + 67 + 0 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SteelDrum1 + 56 + + + FIFTH + 5 + + TRIANGL + 25 + 0 + 10 + 21 + off + + + 2 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 4 + 3 + 6 + 2 + + + 1 + 2 + 1 + 1.73 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 2 + 2 + -2 + + 31 + 27 + 27 + 31 + 12 + 10 + 10 + 6 + 14 + 14 + 14 + 14 + 13 + 13 + 13 + 9 + 6 + 6 + 6 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 95 + 84 + + 1 + 2 + 2 + 2 + 0 + 45 + 67 + 0 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SteelDrum2 + 57 + + + THIRD + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 1 + + + 1 + 1.57 + 1 + 3.14 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 20 + 20 + 20 + 20 + 10 + 10 + 10 + 16 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 4 + 4 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 60 + 63 + 73 + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SteelDrum3 + 58 + + + THIRD + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 3 + 6 + 2 + + + 1 + 1.57 + 1.57 + 3.14 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 20 + 20 + 20 + 20 + 10 + 10 + 10 + 16 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 4 + 4 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 66 + 47 + 66 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SteelDrum4 + 59 + + + FOURTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 4 + 0 + 4 + + + 0.5 + 0.93 + 1 + 0.62 + no + no + no + no + 8 + 15 + 8 + 10 + + W1 + W1 + W5 + W1 + 3 + -2 + -3 + 3 + + 27 + 24 + 23 + 25 + 18 + 17 + 11 + 21 + 10 + 4 + 10 + 0 + 10 + 9 + 4 + 31 + 5 + 6 + 4 + 2 + VOF + VOF + VOF + VOF + + + 99 + 25 + 25 + 21 + 50 + 50 + + 93 + 93 + 89 + 95 + + 2 + 2 + 3 + 3 + 0 + 30 + 50 + 75 + + + -12 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SyBon + 60 + + + FOURTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 4 + 0 + 4 + + + 0.5 + 0.93 + 1 + 0.62 + no + no + no + no + 8 + 15 + 8 + 10 + + W1 + W1 + W5 + W1 + 3 + -2 + -3 + 3 + + 27 + 24 + 23 + 25 + 18 + 17 + 11 + 21 + 13 + 4 + 13 + 0 + 13 + 9 + 4 + 31 + 5 + 6 + 4 + 2 + VOF + VOF + VOF + VOF + + + 99 + 25 + 25 + 21 + 50 + 50 + + 93 + 93 + 89 + 95 + + 2 + 2 + 3 + 3 + 0 + 30 + 50 + 75 + + + -12 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SyBon* + 61 + + + FIFTH + 7 + + SAWUP + 63 + 0 + 99 + 0 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 5 + 2 + + + 2 + 1 + 6 + 4.71 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 2 + 0 + 0 + + 21 + 24 + 21 + 24 + 19 + 24 + 21 + 24 + 0 + 4 + 0 + 15 + 12 + 22 + 12 + 31 + 11 + 11 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 99 + 60 + + 0 + 0 + 0 + 0 + 0 + 45 + 67 + 0 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SynthDrm.1 + 62 + + + FIFTH + 7 + + SAWUP + 63 + 0 + 99 + 0 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 1 + 4 + 1 + + + 0.5 + 1 + 2.82 + 25.95 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 2 + 0 + 0 + + 21 + 24 + 21 + 24 + 19 + 24 + 21 + 24 + 0 + 4 + 0 + 15 + 12 + 22 + 12 + 31 + 11 + 11 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 99 + 93 + + 1 + 2 + 1 + 0 + 0 + 45 + 67 + 0 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SynthDrm.2 + 63 + + + FIFTH + 7 + + SAWUP + 63 + 0 + 99 + 0 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 0 + 3 + 2 + + + 0.5 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 2 + 0 + 0 + + 28 + 31 + 21 + 24 + 19 + 24 + 21 + 24 + 0 + 4 + 0 + 15 + 12 + 22 + 12 + 31 + 11 + 11 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 99 + 99 + + 1 + 2 + 1 + 0 + 0 + 45 + 67 + 0 + + + 0 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SynthDrm.3 + 64 + + + FIFTH + 4 + + SHOLD + 30 + 99 + 0 + 0 + off + + + 7 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 1 + 5 + 1 + + + 0.5 + 0.71 + 1 + 15.7 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 25 + 21 + 24 + 18 + 12 + 21 + 24 + 0 + 15 + 0 + 15 + 9 + 7 + 12 + 31 + 7 + 4 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 0 + 0 + 1 + 0 + 0 + 45 + 67 + 0 + + + 0 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SynthDrm.4 + 65 + + + FIFTH + 4 + + SHOLD + 30 + 99 + 0 + 0 + off + + + 7 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 3 + 4 + 3 + + + 0.5 + 0.5 + 0.5 + 14.13 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 24 + 17 + 31 + 31 + 24 + 0 + 15 + 15 + 15 + 9 + 7 + 0 + 31 + 5 + 5 + 15 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 92 + 99 + 99 + + 0 + 1 + 1 + 3 + 0 + 45 + 67 + 0 + + + 0 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SynthDrm.5 + 66 + + + THIRD + 3 + + TRIANGL + 23 + 0 + 0 + 42 + on + + + 6 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 2 + + + 0.5 + 0.71 + 0.5 + 0.71 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 2 + 0 + 0 + + 21 + 24 + 21 + 24 + 19 + 24 + 21 + 24 + 0 + 4 + 0 + 15 + 12 + 22 + 12 + 31 + 11 + 11 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 99 + 93 + + 1 + 2 + 1 + 0 + 0 + 45 + 67 + 0 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SynthDrm.6 + 67 + + + FOURTH + 3 + + TRIANGL + 23 + 0 + 0 + 42 + on + + + 6 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 2 + + + 1 + 0.71 + 1 + 25.95 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 2 + 0 + 0 + + 28 + 24 + 21 + 24 + 19 + 24 + 21 + 24 + 0 + 4 + 0 + 15 + 12 + 22 + 12 + 31 + 11 + 11 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 99 + 93 + + 1 + 2 + 1 + 0 + 0 + 45 + 67 + 0 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SynthDrm.7 + 68 + + + THIRD + 3 + + TRIANGL + 23 + 0 + 0 + 42 + on + + + 6 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 3 + 2 + + + 0.5 + 1 + 1.73 + 25.95 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 2 + 0 + 0 + + 16 + 25 + 31 + 31 + 16 + 25 + 31 + 6 + 12 + 0 + 12 + 0 + 18 + 9 + 6 + 7 + 9 + 7 + 6 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 25 + + 1 + 2 + 1 + 0 + 0 + 45 + 67 + 0 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SynthDrm.8 + 69 + + + FIFTH + 3 + + TRIANGL + 23 + 0 + 0 + 42 + on + + + 6 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 3 + 1 + + + 0.5 + 1 + 0.5 + 23.55 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 16 + 19 + 12 + 31 + 6 + 0 + 0 + 10 + 31 + 31 + 0 + 31 + 9 + 6 + 6 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 57 + + 1 + 2 + 1 + 0 + 0 + 45 + 67 + 0 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SynthDrm.9 + 70 + + + FIFTH + 4 + + SAWUP + 8 + 0 + 99 + 0 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 2 + 5 + 1 + + + 1.41 + 0.71 + 0.71 + 21.2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 16 + 19 + 12 + 31 + 6 + 0 + 0 + 10 + 31 + 31 + 0 + 31 + 9 + 6 + 6 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 57 + + 1 + 2 + 1 + 0 + 0 + 45 + 67 + 0 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SynthDrm10 + 71 + + + FIFTH + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 2 + + + 0.5 + 0.71 + 1.41 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 29 + 26 + 16 + 31 + 26 + 21 + 0 + 10 + 4 + 9 + 31 + 16 + 6 + 0 + 5 + 4 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 84 + 99 + 74 + + 1 + 2 + 0 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SynthDrm11 + 72 + + + FIFTH + 3 + + TRIANGL + 36 + 28 + 2 + 77 + on + + + 7 + 1 + on + off + on + off + 0 + 0 + 0 + 0 + 6 + 2 + 4 + 2 + + + 1.73 + 1 + 0.5 + 18.37 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 18 + 16 + 20 + 11 + 31 + 6 + 0 + 0 + 15 + 31 + 31 + 0 + 25 + 9 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 45 + + 1 + 2 + 1 + 3 + 0 + 45 + 67 + 0 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SynthDrm12 + 73 + + + FIFTH + 7 + + SAWUP + 63 + 0 + 99 + 0 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 4 + 4 + + + 0.71 + 1.57 + 1.73 + 25.95 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 2 + 0 + 0 + + 21 + 24 + 21 + 24 + 19 + 24 + 21 + 24 + 0 + 4 + 0 + 15 + 12 + 22 + 12 + 31 + 11 + 11 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 95 + 99 + 97 + + 0 + 0 + 0 + 0 + 0 + 45 + 67 + 0 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SynthDrm13 + 74 + + + FIRST + 7 + + SAWUP + 63 + 0 + 99 + 0 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 3 + 3 + + + 0.71 + 0.71 + 1.73 + 25.95 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 2 + 0 + 0 + + 21 + 24 + 21 + 24 + 19 + 24 + 21 + 24 + 0 + 4 + 0 + 15 + 12 + 22 + 12 + 31 + 11 + 11 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 86 + 66 + 97 + + 0 + 0 + 0 + 0 + 0 + 45 + 67 + 0 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SynthDrm14 + 75 + + + FOURTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 4 + 3 + + + 0.5 + 0.5 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 2 + 0 + 0 + + 21 + 19 + 31 + 24 + 17 + 24 + 24 + 24 + 0 + 10 + 9 + 15 + 12 + 14 + 13 + 31 + 11 + 11 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 53 + 94 + 99 + + 0 + 0 + 0 + 0 + 0 + 45 + 67 + 0 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SynthDrm15 + 76 + + + FIFTH + 7 + + SHOLD + 0 + 0 + 0 + 0 + on + + + 7 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 2 + 5 + 2 + + + 0.87 + 0.5 + 0.71 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 28 + 20 + 31 + 28 + 15 + 7 + 12 + 30 + 7 + 0 + 0 + 0 + 7 + 22 + 31 + 8 + 7 + 15 + 6 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 97 + 99 + + 1 + 3 + 0 + 1 + 62 + 0 + 0 + 99 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 98 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SynthDrm16 + 77 + + + FIFTH + 4 + + TRIANGL + 32 + 44 + 20 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 3 + 5 + 2 + + + 1 + 5 + 1 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -1 + -1 + 2 + + 28 + 28 + 28 + 28 + 9 + 15 + 9 + 15 + 10 + 10 + 10 + 12 + 13 + 31 + 13 + 9 + 2 + 2 + 2 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 52 + 93 + 89 + + 1 + 1 + 1 + 2 + 30 + 30 + 50 + 50 + + + -12 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Tibet Drum + 78 + + + FIFTH + 7 + + TRIANGL + 11 + 0 + 16 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 0 + 4 + 0 + + + 0.5 + 0.71 + 0.87 + 0.78 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -3 + 3 + 3 + + 31 + 21 + 19 + 15 + 12 + 9 + 31 + 7 + 0 + 15 + 15 + 15 + 7 + 4 + 0 + 3 + 6 + 4 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 71 + 95 + 55 + + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Timbale..1 + 79 + + + FIFTH + 5 + + TRIANGL + 11 + 0 + 16 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 0 + 5 + 0 + + + 0.5 + 0.71 + 0.87 + 0.78 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -3 + 3 + 3 + + 31 + 31 + 31 + 31 + 12 + 24 + 9 + 1 + 0 + 10 + 11 + 0 + 7 + 9 + 6 + 7 + 6 + 3 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 83 + 87 + 61 + + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 99 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Timbale..2 + 80 + + + SECOND + 0 + + TRIANGL + 2 + 0 + 95 + 0 + on + + + 7 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 0 + 0 + 0 + + + 2 + 0.88 + 14.45 + 1.62 + no + no + no + no + 32 + 10 + 52 + 18 + + W1 + W3 + W1 + W2 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 14 + 13 + 17 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 7 + 9 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 60 + 80 + + 0 + 0 + 0 + 1 + 0 + 12 + 50 + 19 + + + -24 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Timbales * + 81 + + + THIRD + 0 + + TRIANGL + 7 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 2 + 5 + 7 + + + 0.5 + 0.62 + 0.88 + 0.62 + no + no + no + no + 8 + 10 + 10 + 10 + + W1 + W1 + W3 + W4 + 0 + -3 + 3 + -3 + + 29 + 31 + 31 + 31 + 11 + 17 + 18 + 15 + 0 + 11 + 15 + 0 + 0 + 6 + 12 + 8 + 4 + 3 + 4 + 3 + VOF + VOF + V48 + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 75 + 79 + 79 + + 1 + 1 + 1 + 0 + 0 + 54 + 0 + 0 + + + 0 + POLY + 12 + FULL + 0 + POR + 40 + 0 + 0 + 80 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Timpani * + 82 + + + THIRD + 7 + + TRIANGL + 21 + 0 + 3 + 0 + off + + + 6 + 2 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 1 + 0 + + + 0.5 + 0.5 + 0.78 + 22.49 + no + no + no + yes + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 29 + 17 + 15 + 15 + 18 + 15 + 15 + 12 + 0 + 12 + 7 + 17 + 0 + 4 + 4 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 60 + 82 + 65 + + 0 + 0 + 0 + 0 + 0 + 0 + 59 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Timpani + 83 + + + THIRD + 5 + + TRIANGL + 21 + 0 + 3 + 0 + off + + + 6 + 2 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 0 + 5 + 0 + + + 0.5 + 0.5 + 0.78 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 29 + 12 + 19 + 7 + 18 + 15 + 11 + 12 + 0 + 12 + 12 + 4 + 0 + 4 + 4 + 2 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 72 + 63 + 55 + + 0 + 0 + 0 + 0 + 0 + 0 + 59 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Timpani..1 + 84 + + + THIRD + 7 + + TRIANGL + 21 + 0 + 3 + 0 + off + + + 6 + 2 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 0 + 5 + 0 + + + 0.78 + 0.5 + 0.5 + 0.78 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 29 + 31 + 31 + 15 + 18 + 15 + 15 + 12 + 0 + 12 + 8 + 7 + 0 + 4 + 4 + 3 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 55 + 79 + 61 + + 1 + 0 + 0 + 1 + 0 + 0 + 59 + 0 + + + -24 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Timpani..2 + 85 + + + SECOND + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 8.24 + 11.46 + 2.31 + no + yes + yes + yes + 8 + 12 + 26 + 13 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 16 + 12 + 14 + 5 + 15 + 4 + 0 + 14 + 10 + 16 + 10 + 10 + 7 + 7 + 6 + 8 + VOF + VOF + VOF + VOF + + + 99 + 23 + 35 + 46 + 50 + 50 + + 94 + 52 + 81 + 93 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -24 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Tom 1 + 86 + + + FOURTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0 + + + 0.5 + 1 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 31 + 24 + 31 + 15 + 15 + 6 + 15 + 11 + 0 + 17 + 0 + 6 + 1 + 3 + 1 + VOF + VOF + VOF + VOF + + + 99 + 37 + 38 + 0 + 50 + 50 + + 99 + 55 + 94 + 99 + + 1 + 1 + 1 + 0 + 0 + 19 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Tom 2 + 87 + + + FOURTH + 7 + + SHOLD + 99 + 0 + 99 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0 + + + 0.5 + 1 + 0.87 + 8.65 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 20 + 31 + 24 + 31 + 14 + 15 + 6 + 15 + 11 + 0 + 5 + 0 + 6 + 1 + 3 + 1 + VOF + VOF + VOF + VOF + + + 99 + 37 + 38 + 0 + 50 + 50 + + 99 + 55 + 94 + 70 + + 1 + 1 + 1 + 0 + 0 + 19 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Tom 3 + 88 + + + FOURTH + 4 + + SHOLD + 99 + 0 + 99 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0 + + + 0.5 + 0.62 + 0.62 + 1.57 + no + no + no + no + 8 + 10 + 10 + 8 + + W1 + W1 + W6 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 11 + 31 + 24 + 31 + 10 + 15 + 6 + 15 + 31 + 0 + 5 + 0 + 10 + 1 + 3 + 1 + VOF + VOF + VOF + VOF + + + 99 + 37 + 38 + 44 + 50 + 50 + + 99 + 55 + 94 + 70 + + 1 + 1 + 1 + 0 + 0 + 19 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Tom 4 + 89 + + + FOURTH + 4 + + SHOLD + 99 + 0 + 99 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0 + + + 0.5 + 0.62 + 0.62 + 1.57 + no + no + no + no + 8 + 10 + 10 + 8 + + W1 + W1 + W6 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 11 + 31 + 24 + 31 + 13 + 15 + 6 + 15 + 31 + 0 + 5 + 0 + 10 + 1 + 3 + 1 + VOF + VOF + VOF + VOF + + + 99 + 37 + 38 + 44 + 50 + 50 + + 99 + 55 + 94 + 70 + + 1 + 1 + 1 + 0 + 0 + 19 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Tom 4* + 90 + + + FOURTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 0 + 6 + 0 + + + 0.5 + 0.78 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 3 + 3 + 0 + + 19 + 21 + 24 + 24 + 22 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 13 + 27 + 16 + 23 + 10 + 15 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 93 + 0 + 0 + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Tom Tom..1 + 91 + + + FOURTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 0 + 5 + 0 + + + 0.5 + 0.78 + 0.78 + 1.73 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 3 + 3 + 0 + + 19 + 21 + 24 + 24 + 22 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 13 + 27 + 16 + 26 + 10 + 15 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 93 + 71 + 99 + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Tom Tom..2 + 92 + + + FIFTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 0 + 5 + 0 + + + 0.71 + 0.71 + 0.78 + 0.71 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 3 + 3 + 0 + + 19 + 21 + 24 + 24 + 22 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 13 + 27 + 16 + 26 + 10 + 15 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 2 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Tom Tom..3 + 93 + + + FIFTH + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 0 + 5 + 0 + + + 3 + 4 + 5 + 3 + no + no + no + no + 8 + 13 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + -3 + + 31 + 31 + 31 + 31 + 28 + 19 + 13 + 19 + 15 + 13 + 13 + 10 + 15 + 10 + 12 + 12 + 7 + 5 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 78 + 89 + 77 + + 0 + 0 + 0 + 0 + 0 + 50 + 31 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Tom Tom..4 + 94 + + + THIRD + 3 + + TRIANGL + 7 + 0 + 81 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.5 + 0.68 + 0.87 + 0.5 + no + no + no + no + 8 + 11 + 8 + 8 + + W1 + W1 + W6 + W6 + 3 + -3 + 3 + -3 + + 29 + 31 + 19 + 31 + 12 + 22 + 11 + 16 + 0 + 9 + 9 + 0 + 0 + 4 + 3 + 0 + 6 + 3 + 2 + 1 + VOF + VOF + VOF + VOF + + + 99 + 64 + 67 + 22 + 50 + 50 + + 90 + 99 + 60 + 80 + + 0 + 0 + 0 + 0 + 0 + 54 + 59 + 53 + + + -12 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Tom-Pany + 95 + + + FIFTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 1 + 6 + 0 + + + 0.5 + 0.5 + 0.5 + 25.95 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 27 + 24 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 15 + 31 + 31 + 31 + 6 + 7 + 6 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 0 + 0 + 0 + 0 + 0 + 70 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Wood Drum + 96 + + + FIFTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.5 + 0.5 + 0.5 + 25.95 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 27 + 24 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 15 + 31 + 31 + 31 + 6 + 7 + 6 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 0 + 0 + 0 + 0 + 0 + 70 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Wood Drum* + 97 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 3 + 6 + 4 + + + 0.5 + 0.71 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -1 + -2 + 0 + 3 + + 31 + 16 + 31 + 31 + 9 + 12 + 22 + 22 + 12 + 9 + 3 + 5 + 9 + 12 + 15 + 21 + 6 + 3 + 6 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 63 + 99 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 46 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + XyloSpring + 98 + + + FIRST + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + no + no + no + no + 255 + 255 + 255 + 255 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 11 + 0 + 0 + 0 + 15 + 15 + 15 + 15 + VOF + VOF + VOF + VOF + + + 93 + 72 + 99 + 67 + 6 + 0 + + 90 + 0 + 0 + 0 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + SUS + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + Bass Drum3 + 4 + + + + Other + 6 + + SIXTH + 7 + + SHOLD + 81 + 0 + 0 + 99 + on + + + 7 + 3 + on + on + on + off + 0 + 0 + 0 + 0 + 2 + 1 + 2 + 0 + + + 12 + 12 + 20.41 + 9 + yes + yes + yes + yes + 80 + 80 + 64 + 80 + + W2 + W6 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 13 + 13 + 13 + 21 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 7 + 7 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 24 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Cabassa * + 0 + + + SIXTH + 7 + + SHOLD + 89 + 0 + 0 + 99 + on + + + 7 + 3 + on + on + on + off + 0 + 0 + 0 + 0 + 2 + 1 + 2 + 0 + + + 22.49 + 22.81 + 12 + 9 + yes + yes + yes + yes + 80 + 83 + 96 + 96 + + W1 + W5 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 13 + 13 + 13 + 21 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 7 + 7 + 6 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 98 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 24 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Maracas * + 1 + + + THIRD + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + + + 1 + 7.02 + 7 + 13 + no + no + no + no + 8 + 9 + 8 + 8 + + W2 + W1 + W1 + W7 + 0 + 3 + -3 + 0 + + 31 + 31 + 31 + 31 + 14 + 16 + 11 + 23 + 0 + 8 + 8 + 5 + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 77 + 85 + + 1 + 1 + 1 + 1 + 0 + 10 + 12 + 28 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Metalimba + 2 + + + THIRD + 6 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 1 + 0 + 1 + + + 7.85 + 12.56 + 1 + 1.31 + yes + yes + yes + yes + 16 + 105 + 8 + 53 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 24 + 31 + 31 + 31 + 16 + 0 + 18 + 19 + 0 + 15 + 15 + 0 + 31 + 0 + 0 + 0 + 7 + 1 + 1 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 89 + 69 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -24 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Tambourin* + 3 + + + + + NOISES + 6 + + Noises + 0 + + FIFTH + 1 + + SHOLD + 99 + 0 + 0 + 99 + off + + + 2 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 6 + 5 + 6 + 5 + + + 0.5 + 0.5 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 12 + 19 + 15 + 15 + 18 + 18 + 4 + 4 + 15 + 12 + 15 + 15 + 3 + 17 + 3 + 2 + 3 + 3 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 99 + 99 + 77 + + 0 + 0 + 0 + 0 + 2 + 3 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Airplane.1 + 0 + + + FIFTH + 1 + + SHOLD + 99 + 0 + 0 + 99 + off + + + 2 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 7 + 4 + 4 + 4 + + + 0.5 + 2.82 + 1 + 2.82 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 12 + 19 + 15 + 15 + 18 + 18 + 4 + 4 + 15 + 12 + 15 + 15 + 3 + 17 + 3 + 2 + 3 + 3 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 99 + 99 + 86 + + 0 + 0 + 0 + 0 + 2 + 3 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Airplane.2 + 1 + + + THIRD + 4 + + SQUARE + 55 + 0 + 0 + 40 + off + + + 6 + 3 + on + off + on + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 27.57 + 5.19 + 3.14 + 25.95 + yes + yes + no + no + 47 + 96 + 8 + 8 + + W1 + W6 + W1 + W5 + 3 + 3 + -3 + -3 + + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 4 + 6 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 71 + 58 + 46 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Alarm Call + 2 + + + FIFTH + 4 + + TRIANGL + 38 + 3 + 5 + 0 + off + + + 4 + 1 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 0 + 2 + 0 + + + 2.06 + 1.66 + 1.67 + 2.06 + no + no + no + no + 13 + 9 + 11 + 17 + + W5 + W3 + W3 + W4 + -3 + -3 + 2 + -2 + + 20 + 25 + 15 + 30 + 21 + 7 + 10 + 5 + 14 + 15 + 14 + 14 + 3 + 4 + 0 + 2 + 5 + 5 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 76 + 99 + 77 + + 0 + 0 + 0 + 0 + 0 + 8 + 6 + 0 + + + -19 + POLY + 3 + FULL + 0 + POR + 99 + 0 + 0 + 43 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Alien 3 + 3 + + + THIRD + 0 + + SQUARE + 50 + 0 + 0 + 99 + on + + + 0 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 3 + + + 2 + 1 + 3 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -1 + 3 + 2 + + 21 + 22 + 22 + 10 + 4 + 16 + 15 + 12 + 14 + 13 + 13 + 14 + 31 + 31 + 31 + 1 + 6 + 5 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 44 + 70 + 40 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Alien Chat + 4 + + + FOURTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 3 + 5 + + + 0.62 + 0.5 + 8.24 + 4 + yes + yes + yes + no + 10 + 8 + 12 + 8 + + W2 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 27 + 29 + 19 + 3 + 4 + 10 + 15 + 0 + 7 + 7 + 4 + 0 + 10 + 8 + 6 + 1 + 1 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 87 + 94 + + 2 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + -24 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Artofnoiz* + 5 + + + EIGHTH + 0 + + TRIANGL + 37 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 4 + 3 + + + 8 + 6 + 5.65 + 5.19 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 3 + -3 + + 31 + 12 + 10 + 7 + 27 + 27 + 27 + 27 + 15 + 15 + 15 + 15 + 13 + 13 + 13 + 13 + 13 + 13 + 13 + 13 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -24 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AutoDecent + 6 + + + FOURTH + 5 + + SHOLD + 99 + 0 + 64 + 0 + off + + + 7 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 4 + 3 + + + 0.5 + 6.92 + 0.5 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + -3 + -3 + -3 + + 15 + 20 + 20 + 18 + 9 + 11 + 6 + 7 + 12 + 9 + 5 + 5 + 0 + 4 + 1 + 1 + 1 + 1 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 83 + 48 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -24 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AutoStorm1 + 7 + + + FOURTH + 3 + + SHOLD + 80 + 0 + 99 + 17 + on + + + 7 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 3 + 4 + 3 + + + 0.5 + 6.92 + 0.5 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + -3 + -3 + -3 + + 19 + 18 + 24 + 15 + 9 + 11 + 6 + 7 + 12 + 9 + 5 + 5 + 9 + 9 + 9 + 9 + 1 + 1 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 83 + 51 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -24 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + AutoStorm2 + 8 + + + FIFTH + 6 + + SQUARE + 89 + 0 + 99 + 35 + on + + + 7 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 3 + 4 + 4 + + + 0.5 + 4 + 4 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 27 + 27 + 28 + 31 + 15 + 12 + 12 + 11 + 7 + 7 + 12 + 12 + 9 + 9 + 11 + 11 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 84 + 99 + 66 + + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 1 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Big Belch + 9 + + + FIFTH + 0 + + TRIANGL + 34 + 0 + 80 + 94 + off + + + 6 + 3 + on + off + on + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 25.95 + 0.71 + 25.95 + 0.71 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 19 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 15 + 15 + 14 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 75 + 99 + 81 + + 0 + 0 + 0 + 0 + 10 + 40 + 10 + 40 + + + -12 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 99 + 0 + 0 + 51 + 0 + 0 + 0 + 0 + 0 + 0 + + Birds + 10 + + + FIFTH + 7 + + TRIANGL + 31 + 0 + 35 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.78 + 1.73 + 3.14 + 4.24 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W2 + W1 + 2 + -3 + -2 + 0 + + 18 + 25 + 19 + 30 + 0 + 0 + 0 + 0 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 8 + 8 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 97 + 95 + 69 + + 1 + 1 + 0 + 0 + 0 + 35 + 0 + 9 + + + -12 + POLY + 6 + FULL + 0 + POR + 99 + 0 + 0 + 61 + 0 + 29 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BlendOrgan + 11 + + + THIRD + 7 + + TRIANGL + 0 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 7 + 3 + 3 + 7 + 7 + 5 + 2 + 3 + + + 4 + 0.5 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 15 + 15 + 19 + 15 + 4 + 6 + 21 + 4 + 12 + 13 + 9 + 2 + 4 + 4 + 21 + 4 + 9 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 98 + + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Blow Up + 12 + + + FOURTH + 5 + + SAWUP + 17 + 0 + 73 + 90 + off + + + 7 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 4 + 4 + 2 + + + 2 + 7 + 20.41 + 9.42 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 2 + 0 + 2 + + 31 + 31 + 31 + 31 + 7 + 7 + 7 + 10 + 0 + 0 + 0 + 0 + 12 + 12 + 28 + 27 + 13 + 4 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 50 + 58 + 75 + + 2 + 2 + 2 + 2 + 0 + 0 + 0 + 0 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Boingggggg + 13 + + + THIRD + 5 + + SHOLD + 52 + 0 + 55 + 73 + off + + + 7 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 3 + 5 + 3 + + + 5 + 16.96 + 25.95 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 13 + 31 + 19 + 15 + 11 + 15 + 6 + 15 + 0 + 0 + 6 + 7 + 5 + 8 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 57 + 63 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 2 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + BrokWindow + 14 + + + FOURTH + 7 + + SQUARE + 50 + 0 + 99 + 67 + on + + + 3 + 2 + on + off + on + off + 0 + 0 + 0 + 0 + 5 + 4 + 3 + 4 + + + 3 + 1 + 0.71 + 0.71 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -3 + 0 + -3 + + 24 + 31 + 31 + 23 + 13 + 31 + 31 + 6 + 0 + 15 + 15 + 14 + 13 + 31 + 31 + 0 + 6 + 15 + 15 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 0 + 65 + 58 + + 2 + 0 + 1 + 0 + 0 + 0 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Bubbly + 15 + + + SEVENTH + 0 + + SQUARE + 19 + 70 + 0 + 99 + on + + + 4 + 3 + on + on + on + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 14.22 + 19.21 + 11.13 + 1 + yes + yes + yes + no + 17 + 26 + 23 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 15 + 15 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 95 + 58 + 0 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Busy * + 16 + + + THIRD + 0 + + SQUARE + 15 + 0 + 0 + 90 + off + + + 0 + 3 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 3 + 6 + 3 + + + 0.5 + 0.5 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 3 + -3 + -3 + + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 52 + 64 + 50 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Busy.....1 + 17 + + + EIGHTH + 0 + + SQUARE + 15 + 0 + 0 + 99 + off + + + 0 + 3 + on + on + on + on + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.5 + 0.5 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 3 + -3 + -3 + + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Busy.....2 + 18 + + + THIRD + 7 + + TRIANGL + 99 + 0 + 16 + 84 + on + + + 0 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 3 + + + 0.87 + 7.85 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 2 + 0 + 2 + + 16 + 28 + 28 + 26 + 12 + 31 + 16 + 16 + 15 + 15 + 15 + 15 + 3 + 31 + 3 + 17 + 9 + 6 + 6 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 72 + + 2 + 3 + 3 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Choo Choo + 19 + + + FIRST + 7 + + SAWUP + 42 + 0 + 66 + 90 + off + + + 6 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 3 + + + 0.5 + 13.84 + 18.84 + 25.95 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 11 + 31 + 31 + 31 + 11 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 7 + 1 + 3 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Chopper..1 + 20 + + + FOURTH + 5 + + SAWUP + 51 + 0 + 0 + 99 + on + + + 7 + 3 + on + on + on + on + 0 + 0 + 0 + 0 + 6 + 6 + 4 + 4 + + + 0.78 + 1.41 + 2 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + -1 + 1 + 1 + + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 3 + 3 + 3 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 86 + 78 + 80 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 1 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Chopper..2 + 21 + + + FIFTH + 4 + + SQUARE + 32 + 0 + 0 + 99 + off + + + 0 + 3 + on + off + on + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 19.47 + 13.12 + 17.17 + 15.11 + yes + yes + yes + yes + 93 + 10 + 95 + 18 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 29 + 31 + 28 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 4 + 1 + 4 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 82 + 90 + 82 + 90 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Cricket * + 22 + + + SIXTH + 1 + + TRIANGL + 99 + 0 + 0 + 49 + on + + + 7 + 3 + on + on + on + on + 0 + 0 + 0 + 0 + 7 + 4 + 6 + 4 + + + 1 + 1 + 1.41 + 1.57 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 13 + 13 + 13 + 13 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 3 + 3 + 4 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 54 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 12 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Diving Fly + 23 + + + THIRD + 7 + + TRIANGL + 85 + 0 + 45 + 0 + off + + + 7 + 0 + off + off + off + off + 7 + 3 + 3 + 7 + 6 + 4 + 5 + 4 + + + 1 + 1 + 25.95 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 27 + 31 + 3 + 3 + 10 + 8 + 0 + 0 + 15 + 5 + 13 + 13 + 13 + 9 + 4 + 4 + 3 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 56 + 73 + 79 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Dynamite + 24 + + + THIRD + 7 + + TRIANGL + 0 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 7 + 3 + 3 + 7 + 7 + 4 + 4 + 4 + + + 1 + 1 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + -3 + + 15 + 15 + 19 + 15 + 4 + 6 + 21 + 2 + 14 + 12 + 9 + 0 + 10 + 18 + 21 + 9 + 7 + 3 + 3 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 58 + 62 + 86 + + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + EarthQuake + 25 + + + FIRST + 7 + + SHOLD + 99 + 0 + 12 + 0 + off + + + 6 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 3 + + + 0.5 + 1.83 + 3.18 + 3.62 + no + no + no + no + 8 + 9 + 11 + 18 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 23 + 21 + 16 + 23 + 7 + 6 + 11 + 12 + 15 + 14 + 10 + 14 + 6 + 6 + 5 + 5 + 4 + 1 + 1 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 18 + 0 + 50 + 50 + + 93 + 86 + 76 + 76 + + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 3 + + + -24 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Earthquake + 26 + + + FIRST + 7 + + SHOLD + 99 + 0 + 12 + 0 + off + + + 6 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 3 + + + 0.5 + 1.83 + 3.18 + 4.81 + no + no + no + no + 8 + 9 + 11 + 21 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 23 + 21 + 16 + 23 + 7 + 6 + 11 + 12 + 15 + 14 + 13 + 14 + 6 + 6 + 5 + 5 + 4 + 1 + 1 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 18 + 0 + 50 + 50 + + 93 + 86 + 76 + 76 + + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 3 + + + -24 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Earthquake* + 27 + + + FIFTH + 0 + + SQUARE + 13 + 0 + 99 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 5 + 4 + + + 1 + 2 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 21 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 2 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 93 + 43 + + 0 + 0 + 1 + 0 + 5 + 0 + 10 + 35 + + + 0 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Eng Siren + 28 + + + FOURTH + 4 + + TRIANGL + 0 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 4 + + + 1 + 2 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 18 + 18 + 18 + 27 + 31 + 31 + 31 + 3 + 15 + 15 + 15 + 14 + 8 + 9 + 11 + 7 + 10 + 10 + 10 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 67 + 85 + 91 + + 0 + 0 + 0 + 0 + 1 + 0 + 75 + 77 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Excuse Me + 29 + + + FIRST + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.68 + 3 + 1.12 + 1 + yes + no + yes + no + 11 + 8 + 10 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 17 + 19 + 13 + 31 + 13 + 8 + 3 + 31 + 0 + 15 + 15 + 15 + 31 + 8 + 1 + 0 + 7 + 4 + 4 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 81 + 91 + 0 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -10 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Exo/Bird * + 30 + + + SIXTH + 0 + + SHOLD + 71 + 0 + 99 + 99 + off + + + 3 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 6 + 4 + 3 + 3 + + + 1 + 4 + 1.57 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 3 + -3 + -3 + + 16 + 16 + 16 + 16 + 9 + 9 + 9 + 9 + 15 + 15 + 15 + 15 + 4 + 4 + 4 + 4 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 44 + 99 + 78 + 95 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Explosion + 31 + + + SIXTH + 7 + + SAWUP + 57 + 0 + 99 + 0 + on + + + 7 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 2 + 5 + + + 1 + 1 + 2 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 28 + 14 + 10 + 9 + 8 + 13 + 15 + 15 + 13 + 31 + 31 + 31 + 31 + 10 + 10 + 10 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 57 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + FaucetDrip + 32 + + + SECOND + 7 + + TRIANGL + 29 + 20 + 6 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 6 + 1 + 1.25 + 6 + no + no + no + no + 8 + 8 + 12 + 8 + + W1 + W1 + W1 + W1 + 3 + -3 + 1 + -2 + + 28 + 31 + 31 + 31 + 31 + 20 + 31 + 10 + 14 + 11 + 15 + 15 + 1 + 5 + 0 + 0 + 8 + 8 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 97 + 73 + 64 + + 0 + 0 + 0 + 0 + 0 + 0 + 5 + 48 + + + 12 + POLY + 12 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 54 + 0 + 0 + 0 + 0 + 0 + 0 + + Feedback * + 33 + + + THIRD + 7 + + TRIANGL + 57 + 0 + 0 + 99 + off + + + 6 + 2 + off + off + on + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 4 + 1 + 5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 14 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 1 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 89 + 67 + 73 + + 0 + 0 + 0 + 0 + 0 + 50 + 59 + 0 + + + -24 + MONO + 12 + FULL + 99 + POR + 99 + 45 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Flight Sim + 34 + + + FOURTH + 7 + + TRIANGL + 20 + 0 + 0 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + + + 1 + 2.48 + 0.5 + 5 + no + no + no + no + 8 + 15 + 8 + 8 + + W1 + W3 + W4 + W1 + 3 + 3 + -3 + 3 + + 31 + 26 + 15 + 15 + 19 + 26 + 26 + 13 + 15 + 10 + 15 + 15 + 7 + 5 + 4 + 5 + 7 + 5 + 5 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 63 + + 1 + 1 + 2 + 0 + 0 + 54 + 19 + 30 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Gizmo * + 35 + + + FIRST + 0 + + SHOLD + 99 + 0 + 99 + 0 + off + + + 7 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1.25 + 1.75 + no + no + no + no + 8 + 8 + 12 + 20 + + W3 + W3 + W1 + W1 + 0 + -3 + 3 + -3 + + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 7 + 1 + 1 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 75 + 78 + 67 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -24 + MONO + 12 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + GrandPrix* + 36 + + + THIRD + 7 + + TRIANGL + 97 + 0 + 0 + 52 + off + + + 0 + 2 + on + on + on + on + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + + + 0.5 + 0.5 + 15 + 15 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 14 + 31 + 31 + 15 + 11 + 0 + 0 + 0 + 14 + 15 + 15 + 10 + 10 + 0 + 0 + 11 + 15 + 3 + 3 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 97 + 76 + 91 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + GuiRoach:: + 37 + + + FIFTH + 7 + + SHOLD + 39 + 54 + 27 + 68 + off + + + 7 + 3 + off + on + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 3.46 + 0.5 + 2 + 1.57 + yes + no + yes + yes + 8 + 8 + 8 + 48 + + W2 + W1 + W8 + W1 + -2 + 2 + -3 + 3 + + 2 + 25 + 1 + 31 + 3 + 11 + 16 + 17 + 15 + 15 + 15 + 15 + 0 + 1 + 0 + 0 + 6 + 1 + 6 + 1 + VOF + VOF + VOF + V48 + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 99 + 68 + + 0 + 0 + 0 + 0 + 0 + 0 + 24 + 71 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Gurgle + 38 + + + THIRD + 7 + + TRIANGL + 33 + 0 + 99 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 4 + 5 + 3 + + + 1 + 16.96 + 1 + 9 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 0 + -1 + -1 + + 18 + 31 + 31 + 18 + 4 + 6 + 21 + 4 + 15 + 15 + 15 + 15 + 0 + 22 + 0 + 0 + 9 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 48 + 99 + 99 + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 46 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Hard Rain + 39 + + + THIRD + 7 + + SAWUP + 99 + 0 + 99 + 99 + on + + + 3 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 3 + + + 1.41 + 2 + 0.5 + 2.82 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 3 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 6 + 0 + 4 + 2 + 9 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 81 + 19 + 90 + 91 + + 0 + 1 + 1 + 2 + 0 + 0 + 0 + 0 + + + -24 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Harley Hog + 40 + + + FIFTH + 0 + + TRIANGL + 0 + 0 + 0 + 0 + on + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 4 + 3 + + + 0.5 + 1 + 0.5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 21 + 21 + 7 + 31 + 19 + 18 + 19 + 31 + 12 + 12 + 15 + 15 + 18 + 18 + 18 + 24 + 8 + 8 + 8 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 52 + 99 + 99 + + 0 + 0 + 3 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Heart Beat + 41 + + + FIFTH + 7 + + TRIANGL + 51 + 0 + 0 + 91 + off + + + 6 + 3 + off + on + on + on + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 7 + 0.5 + 13.84 + 0.5 + yes + no + yes + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W1 + 0 + 0 + 0 + 0 + + 14 + 31 + 14 + 13 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 4 + 1 + 4 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 98 + 99 + 92 + + 0 + 0 + 0 + 0 + 10 + 40 + 10 + 40 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Helicopter + 42 + + + THIRD + 4 + + SQUARE + 56 + 0 + 0 + 50 + off + + + 6 + 3 + on + off + on + off + 0 + 0 + 0 + 0 + 5 + 4 + 4 + 4 + + + 10 + 6 + 3 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 3 + -3 + -3 + + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 4 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 67 + 55 + 49 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Hi Alarm + 43 + + + FIFTH + 7 + + SHOLD + 58 + 0 + 99 + 80 + off + + + 5 + 3 + off + off + on + on + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 5 + 12.72 + 4 + 5.19 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + -1 + 0 + + 31 + 21 + 20 + 31 + 18 + 7 + 12 + 20 + 0 + 14 + 10 + 11 + 16 + 0 + 17 + 0 + 11 + 15 + 5 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 98 + 51 + 88 + 84 + + 1 + 1 + 1 + 0 + 1 + 46 + 0 + 0 + + + 0 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Hole in 1 + 44 + + + FIFTH + 7 + + SQUARE + 47 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 4 + 5 + 4 + + + 0.5 + 8.48 + 0.5 + 8.48 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 3 + 0 + 0 + + 31 + 7 + 31 + 9 + 31 + 12 + 31 + 5 + 15 + 12 + 15 + 12 + 0 + 6 + 0 + 6 + 15 + 4 + 15 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 62 + 63 + 75 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -24 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + House Fly + 45 + + + FIFTH + 7 + + TRIANGL + 25 + 42 + 0 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 4 + 2 + + + 3.46 + 9 + 4 + 4.71 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 1 + 0 + 0 + 0 + + 14 + 18 + 15 + 18 + 12 + 16 + 9 + 10 + 15 + 13 + 14 + 15 + 9 + 6 + 3 + 6 + 10 + 10 + 9 + 12 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 61 + 82 + 51 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 10 + + + -24 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + HowlAtMoon + 46 + + + FIFTH + 0 + + TRIANGL + 99 + 67 + 32 + 74 + off + + + 4 + 0 + off + off + off + off + 0 + 3 + 1 + 3 + 0 + 7 + 2 + 1 + + + 4.32 + 4.75 + 19.03 + 16.3 + yes + no + no + yes + 24 + 44 + 72 + 41 + + W5 + W6 + W2 + W3 + -3 + 1 + 1 + 0 + + 31 + 2 + 12 + 8 + 4 + 9 + 29 + 13 + 11 + 5 + 7 + 15 + 14 + 10 + 12 + 23 + 2 + 8 + 13 + 7 + V12 + VOF + V12 + V24 + + + 0 + 0 + 0 + 0 + 50 + 50 + + 30 + 99 + 75 + 9 + + 1 + 3 + 1 + 1 + 44 + 37 + 12 + 93 + + + 0 + POLY + 11 + FULL + 38 + SUS + 81 + 21 + 28 + 41 + 31 + 81 + 47 + 37 + 27 + 0 + 0 + 0 + 0 + 4 + + Lil'Birdie + 47 + + + THIRD + 2 + + SQUARE + 56 + 0 + 0 + 39 + on + + + 6 + 1 + on + off + on + off + 0 + 0 + 0 + 0 + 4 + 4 + 5 + 3 + + + 1.73 + 7.85 + 1.73 + 0.87 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 3 + -3 + -3 + + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 4 + 6 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 67 + 55 + 49 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -24 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Lo Alarm + 48 + + + FIFTH + 7 + + TRIANGL + 24 + 6 + 16 + 0 + off + + + 5 + 2 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 2 + 0 + + + 2 + 2 + 2.16 + 1 + no + no + no + no + 8 + 8 + 12 + 8 + + W2 + W4 + W1 + W1 + 0 + -3 + 3 + 0 + + 26 + 31 + 31 + 31 + 10 + 9 + 0 + 4 + 15 + 15 + 15 + 15 + 0 + 3 + 0 + 0 + 5 + 2 + 11 + 2 + VOF + V12 + V48 + V24 + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 58 + 68 + 68 + + 2 + 0 + 0 + 0 + 5 + 21 + 12 + 15 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + MT:Apr'88 + 49 + + + FIFTH + 7 + + SAWUP + 64 + 0 + 99 + 99 + on + + + 7 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 0 + 5 + 0 + + + 0.5 + 2 + 1.57 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + -3 + + 25 + 25 + 31 + 26 + 21 + 9 + 21 + 21 + 15 + 15 + 15 + 15 + 3 + 8 + 31 + 18 + 9 + 9 + 10 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 84 + 99 + 99 + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + MachineGun + 50 + + + FIRST + 7 + + TRIANGL + 5 + 0 + 66 + 90 + off + + + 6 + 3 + on + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.5 + 13.84 + 18.84 + 25.95 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 11 + 31 + 31 + 31 + 22 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 7 + 1 + 3 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 91 + 99 + 99 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -24 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + MalibuNite + 51 + + + EIGHTH + 7 + + SHOLD + 33 + 0 + 53 + 28 + off + + + 6 + 3 + on + off + on + on + 0 + 0 + 0 + 0 + 3 + 1 + 1 + 5 + + + 0.62 + 3.93 + 11.36 + 0.93 + no + no + no + no + 10 + 23 + 9 + 15 + + W3 + W2 + W3 + W4 + -3 + 0 + 3 + -3 + + 1 + 1 + 1 + 7 + 8 + 8 + 7 + 17 + 10 + 9 + 8 + 9 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + VOF + V24 + V24 + V12 + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 98 + 98 + 79 + + 0 + 0 + 0 + 0 + 0 + 5 + 8 + 0 + + + -4 + POLY + 12 + FULL + 30 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 1 + + Med Musak + 52 + + + FOURTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1.41 + 0.68 + 3.14 + 17.27 + yes + no + no + yes + 8 + 11 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 20 + 31 + 31 + 15 + 1 + 15 + 15 + 14 + 31 + 31 + 12 + 15 + 9 + 15 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 99 + 62 + 92 + + 1 + 1 + 3 + 0 + 0 + 0 + 12 + 0 + + + 12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Mouse-Tom + 53 + + + FOURTH + 7 + + SHOLD + 99 + 0 + 99 + 0 + off + + + 7 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + + + 1.57 + 1.41 + 13 + 23.55 + no + no + yes + yes + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -1 + 2 + 3 + + 22 + 20 + 23 + 31 + 11 + 18 + 20 + 31 + 9 + 0 + 0 + 0 + 19 + 19 + 19 + 19 + 15 + 2 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 86 + 95 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -8 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + Mr.Mr.Noiz + 54 + + + FOURTH + 7 + + SHOLD + 99 + 0 + 99 + 0 + off + + + 7 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + + + 1.57 + 1.41 + 13 + 23.55 + no + no + yes + yes + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -1 + 2 + 3 + + 30 + 31 + 31 + 31 + 11 + 18 + 20 + 31 + 9 + 0 + 0 + 0 + 19 + 19 + 19 + 19 + 15 + 2 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 86 + 95 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 11 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + Noise Shot + 55 + + + FIFTH + 4 + + TRIANGL + 79 + 46 + 99 + 99 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 1 + 0 + + + 1.5 + 0.5 + 3 + 0.5 + no + yes + no + yes + 16 + 8 + 8 + 8 + + W2 + W4 + W6 + W3 + -3 + 2 + 3 + 0 + + 12 + 8 + 11 + 12 + 31 + 31 + 31 + 8 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 0 + 6 + 9 + 5 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 67 + 99 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Ofthewall* + 56 + + + FOURTH + 7 + + TRIANGL + 14 + 0 + 0 + 0 + off + + + 5 + 1 + off + off + off + on + 0 + 0 + 0 + 0 + 4 + 7 + 7 + 3 + + + 3.5 + 7.75 + 3.68 + 10.99 + no + yes + yes + no + 120 + 16 + 19 + 64 + + W1 + W1 + W2 + W1 + -3 + -3 + -1 + 3 + + 31 + 31 + 31 + 31 + 31 + 25 + 31 + 31 + 15 + 15 + 10 + 15 + 7 + 8 + 10 + 2 + 3 + 3 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 60 + + 1 + 1 + 1 + 1 + 0 + 99 + 90 + 0 + + + -9 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 55 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OldClock + 57 + + + SIXTH + 7 + + TRIANGL + 16 + 0 + 89 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 4 + 3 + + + 1 + 1 + 3 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -1 + 0 + 0 + + 31 + 31 + 31 + 15 + 2 + 3 + 4 + 3 + 13 + 13 + 13 + 14 + 2 + 3 + 2 + 9 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 96 + 98 + 60 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OutOfTune + 58 + + + FIFTH + 7 + + SQUARE + 10 + 0 + 0 + 0 + on + + + 7 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 3 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W2 + W2 + 0 + 0 + 0 + 0 + + 2 + 31 + 2 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 31 + 0 + 31 + 0 + 6 + 1 + 6 + 1 + VOF + VOF + VOF + VOF + + + 74 + 2 + 27 + 0 + 50 + 50 + + 90 + 82 + 90 + 85 + + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Passing By + 59 + + + FIFTH + 0 + + TRIANGL + 21 + 0 + 99 + 99 + off + + + 7 + 1 + off + on + off + on + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 4 + + + 1 + 2 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 21 + 31 + 16 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 9 + 9 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 74 + 93 + 43 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Pull Over + 60 + + + FIFTH + 0 + + SHOLD + 46 + 0 + 99 + 0 + on + + + 7 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 16.96 + 1 + 25.95 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W7 + W1 + W6 + W1 + 0 + 0 + 0 + 0 + + 29 + 13 + 29 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 9 + 9 + 9 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 0 + 99 + 0 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 12 + POLY + 12 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + R2-D2 * + 61 + + + THIRD + 7 + + TRIANGL + 5 + 0 + 60 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 1 + 0.71 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 21 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 3 + 1 + 3 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 53 + 91 + 71 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Racing Car + 62 + + + FOURTH + 7 + + SQUARE + 50 + 0 + 6 + 86 + on + + + 2 + 1 + on + off + on + on + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 16.87 + 3.67 + 19.56 + 13.56 + yes + yes + yes + yes + 20 + 10 + 62 + 25 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 18 + 21 + 11 + 3 + 24 + 9 + 5 + 3 + 14 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 3 + 2 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 97 + 51 + 81 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -24 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + RADIATION? + 63 + + + THIRD + 7 + + TRIANGL + 85 + 0 + 45 + 0 + off + + + 7 + 3 + off + on + off + off + 0 + 0 + 0 + 0 + 4 + 4 + 5 + 4 + + + 0.71 + 2 + 1 + 3.46 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -3 + 3 + -3 + + 31 + 31 + 31 + 31 + 0 + 0 + 0 + 0 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 4 + 5 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 44 + 99 + 99 + + 1 + 0 + 0 + 1 + 0 + 36 + 0 + 34 + + + -24 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Rain Storm + 64 + + + THIRD + 2 + + TRIANGL + 81 + 0 + 0 + 0 + off + + + 7 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + + + 10.59 + 1.81 + 1 + 18.77 + yes + yes + no + yes + 66 + 21 + 8 + 85 + + W1 + W1 + W1 + W4 + 0 + 0 + 0 + 0 + + 15 + 18 + 31 + 29 + 12 + 12 + 31 + 21 + 15 + 15 + 15 + 13 + 0 + 0 + 0 + 0 + 8 + 6 + 5 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 93 + 0 + 75 + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Refs.Wisl* + 65 + + + FIFTH + 5 + + SAWUP + 41 + 0 + 0 + 99 + on + + + 3 + 1 + on + on + on + on + 7 + 3 + 3 + 7 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 3 + -3 + 1 + + 22 + 22 + 22 + 19 + 4 + 4 + 4 + 24 + 9 + 9 + 9 + 15 + 6 + 6 + 6 + 6 + 7 + 7 + 7 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 66 + 99 + 95 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Repeater.1 + 66 + + + THIRD + 7 + + SAWUP + 41 + 61 + 84 + 99 + off + + + 7 + 1 + on + on + on + on + 7 + 3 + 3 + 7 + 4 + 3 + 5 + 3 + + + 5 + 5 + 1 + 5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 3 + -3 + 1 + + 22 + 22 + 22 + 19 + 4 + 4 + 4 + 24 + 9 + 9 + 9 + 15 + 6 + 6 + 6 + 6 + 7 + 7 + 7 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 89 + 55 + 97 + 71 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Repeater.2 + 67 + + + THIRD + 7 + + SAWUP + 51 + 0 + 0 + 99 + on + + + 3 + 1 + on + on + on + on + 7 + 3 + 3 + 7 + 5 + 3 + 5 + 1 + + + 1 + 5 + 1 + 7 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 3 + -3 + 1 + + 22 + 22 + 22 + 19 + 9 + 9 + 9 + 15 + 15 + 15 + 15 + 15 + 6 + 6 + 6 + 10 + 15 + 15 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 89 + 73 + 97 + 88 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Repeater.3 + 68 + + + FIFTH + 5 + + SAWUP + 64 + 0 + 0 + 99 + on + + + 3 + 1 + on + on + on + on + 7 + 3 + 3 + 7 + 5 + 3 + 5 + 3 + + + 1 + 1 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 1 + -3 + 0 + + 31 + 31 + 21 + 31 + 6 + 6 + 6 + 6 + 0 + 0 + 7 + 7 + 31 + 31 + 12 + 19 + 4 + 4 + 6 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 76 + 99 + 71 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Repeater.4 + 69 + + + SIXTH + 0 + + SQUARE + 37 + 0 + 0 + 99 + on + + + 3 + 1 + on + on + on + on + 7 + 3 + 3 + 7 + 6 + 4 + 5 + 3 + + + 1 + 1 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 27 + 3 + 19 + 31 + 15 + 27 + 27 + 27 + 14 + 15 + 15 + 15 + 4 + 4 + 4 + 4 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 86 + 81 + 82 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Repeater.5 + 70 + + + THIRD + 2 + + SQUARE + 88 + 0 + 0 + 50 + on + + + 6 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 8 + 8 + 8.48 + 8.48 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 22 + 31 + 31 + 21 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 2 + 2 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 62 + 57 + 52 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -24 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Ringing..1 + 71 + + + THIRD + 2 + + SQUARE + 59 + 0 + 0 + 60 + on + + + 6 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 10 + 10 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 22 + 31 + 31 + 21 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 2 + 2 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 62 + 57 + 28 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -24 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Ringing..2 + 72 + + + SIXTH + 7 + + SHOLD + 30 + 0 + 72 + 60 + on + + + 6 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 4 + 6 + 4 + + + 0.5 + 2 + 1 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 12 + 31 + 10 + 6 + 6 + 6 + 6 + 14 + 14 + 14 + 14 + 6 + 6 + 6 + 6 + 4 + 4 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 91 + 67 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + RiseDecent + 73 + + + THIRD + 0 + + TRIANGL + 30 + 9 + 4 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 6 + 3 + 7 + + + 1 + 5 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 11 + 31 + 9 + 23 + 11 + 11 + 0 + 15 + 4 + 5 + 0 + 3 + 9 + 9 + 9 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 98 + 92 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 82 + + + -12 + POLY + 7 + FULL + 3 + SUS + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + RubberBand1 + 74 + + + FIRST + 6 + + TRIANGL + 31 + 28 + 19 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 1 + 1 + 1 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 15 + 17 + 18 + 12 + 8 + 7 + 7 + 4 + 9 + 9 + 9 + 9 + 2 + 2 + 2 + 2 + 7 + 7 + 7 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 53 + 67 + + 1 + 0 + 1 + 1 + 54 + 0 + 0 + 8 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + RubberBand2 + 75 + + + FIFTH + 7 + + TRIANGL + 30 + 9 + 4 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 3 + + + 2 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 11 + 31 + 31 + 31 + 9 + 11 + 6 + 2 + 10 + 12 + 1 + 0 + 4 + 0 + 0 + 3 + 9 + 9 + 9 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 78 + 95 + 80 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 82 + + + -12 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + RubberBand3 + 76 + + + THIRD + 7 + + TRIANGL + 32 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 3 + -3 + 0 + + 11 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 0 + 0 + 0 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 60 + 66 + 49 + + 0 + 0 + 0 + 0 + 0 + 33 + 27 + 0 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + RubberBand4 + 77 + + + THIRD + 7 + + TRIANGL + 32 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 3 + -3 + 0 + + 11 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 0 + 0 + 0 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 78 + 64 + 50 + + 0 + 0 + 0 + 0 + 0 + 33 + 27 + 0 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + RubberBand5 + 78 + + + FIFTH + 7 + + TRIANGL + 30 + 9 + 3 + 0 + off + + + 6 + 0 + off + off + off + on + 0 + 0 + 0 + 0 + 7 + 4 + 5 + 3 + + + 1 + 2 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 28 + 10 + 8 + 2 + 12 + 12 + 10 + 0 + 4 + 0 + 2 + 3 + 9 + 9 + 9 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 96 + 82 + + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 10 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + RubberBand6 + 79 + + + THIRD + 0 + + TRIANGL + 30 + 9 + 4 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 6 + 3 + 7 + + + 1 + 5 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 11 + 31 + 9 + 23 + 11 + 11 + 0 + 15 + 4 + 5 + 0 + 3 + 9 + 9 + 9 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 98 + 92 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 82 + + + -12 + MONO + 7 + FULL + 3 + SUS + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + RubberBand7 + 80 + + + FIFTH + 7 + + TRIANGL + 30 + 9 + 4 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 3 + + + 2 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 1 + 0 + 0 + + 31 + 31 + 31 + 31 + 28 + 11 + 6 + 2 + 10 + 12 + 1 + 0 + 4 + 0 + 0 + 3 + 9 + 9 + 9 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 78 + 95 + 80 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 82 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + RubberBand8 + 81 + + + FIFTH + 7 + + TRIANGL + 30 + 9 + 4 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 3 + + + 2 + 1 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 1 + 0 + 0 + + 31 + 31 + 31 + 31 + 28 + 11 + 6 + 2 + 10 + 12 + 1 + 0 + 4 + 0 + 0 + 3 + 9 + 9 + 9 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 78 + 95 + 85 + + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 14 + + + -12 + POLY + 2 + FINGER + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + RubberBand9 + 82 + + + FOURTH + 7 + + TRIANGL + 5 + 0 + 0 + 88 + off + + + 6 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 4 + 4 + 4 + 4 + + + 25.95 + 10.38 + 18.84 + 25.95 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 15 + 13 + 31 + 31 + 0 + 15 + 15 + 15 + 9 + 6 + 0 + 0 + 7 + 4 + 3 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 85 + 99 + 99 + + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SCM Writer + 83 + + + EIGHTH + 6 + + TRIANGL + 82 + 0 + 7 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 5 + 5 + 5 + + + 1 + 2.74 + 5.4 + 8.93 + no + no + no + no + 8 + 20 + 10 + 23 + + W1 + W1 + W2 + W1 + -3 + 3 + 3 + 3 + + 31 + 31 + 31 + 29 + 17 + 12 + 13 + 9 + 15 + 12 + 15 + 10 + 7 + 6 + 8 + 5 + 6 + 6 + 3 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 93 + 94 + 80 + + 2 + 2 + 3 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Saron Gam + 84 + + + THIRD + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 25.95 + 10.59 + 22.92 + 11.02 + no + no + yes + yes + 8 + 10 + 52 + 70 + + W1 + W2 + W1 + W1 + 0 + 0 + 0 + 0 + + 3 + 23 + 23 + 16 + 9 + 14 + 15 + 15 + 0 + 15 + 15 + 13 + 0 + 0 + 0 + 0 + 15 + 13 + 10 + 13 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 82 + 99 + 99 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 24 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Shore Wave + 85 + + + THIRD + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 25.95 + 10.59 + 22.92 + 11.02 + no + no + yes + yes + 8 + 10 + 52 + 70 + + W1 + W2 + W1 + W1 + 0 + 0 + 0 + 0 + + 3 + 23 + 23 + 16 + 5 + 14 + 15 + 15 + 0 + 15 + 15 + 13 + 0 + 0 + 0 + 0 + 9 + 7 + 4 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 82 + 99 + 99 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 24 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Shore Wv2 + 86 + + + FIFTH + 0 + + SAWUP + 13 + 0 + 0 + 99 + off + + + 6 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 3 + + + 1 + 2 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 21 + 14 + 16 + 14 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 9 + 9 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 74 + 93 + 43 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sick Siren + 87 + + + FIFTH + 7 + + SAWUP + 31 + 0 + 42 + 60 + on + + + 3 + 3 + on + on + on + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.5 + 1.32 + 0.5 + 1.23 + no + no + no + yes + 8 + 15 + 8 + 118 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 25 + 31 + 15 + 31 + 31 + 31 + 21 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 10 + 15 + 4 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 83 + 99 + 86 + 99 + + 3 + 3 + 3 + 3 + 99 + 2 + 0 + 6 + + + -24 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Space BUG? + 88 + + + FIFTH + 7 + + TRIANGL + 10 + 8 + 45 + 60 + off + + + 3 + 1 + on + off + on + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.5 + 1.73 + 0.81 + 1.37 + no + no + no + no + 8 + 8 + 13 + 14 + + W3 + W3 + W2 + W2 + 3 + 3 + -3 + -3 + + 20 + 14 + 10 + 22 + 8 + 9 + 6 + 10 + 8 + 15 + 15 + 15 + 5 + 3 + 5 + 12 + 4 + 2 + 4 + 6 + VOF + VOF + VOF + VOF + + + 94 + 99 + 18 + 21 + 50 + 50 + + 90 + 89 + 90 + 83 + + 0 + 1 + 0 + 1 + 0 + 3 + 0 + 3 + + + 3 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Space Gong + 89 + + + SIXTH + 7 + + SAWUP + 57 + 0 + 99 + 0 + on + + + 7 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 5 + 4 + 2 + + + 1 + 1 + 2 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 28 + 4 + 10 + 9 + 8 + 13 + 15 + 15 + 13 + 31 + 31 + 31 + 31 + 10 + 10 + 10 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 57 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Space Gun + 90 + + + SIXTH + 0 + + SQUARE + 50 + 0 + 99 + 0 + off + + + 6 + 3 + on + on + on + on + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 4 + + + 1 + 1.57 + 2.82 + 3.14 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W5 + W7 + W8 + 1 + 0 + 0 + 0 + + 8 + 6 + 11 + 5 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 2 + 3 + 4 + 1 + 9 + 1 + 1 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 0 + 0 + 0 + 0 + 1 + 2 + 3 + 96 + + + 0 + POLY + 5 + FULL + 60 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Space Talk + 91 + + + EIGHTH + 0 + + SQUARE + 35 + 0 + 75 + 0 + on + + + 7 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 2 + 0 + + + 1 + 1 + 4 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W6 + W1 + W6 + W2 + 3 + -3 + 3 + -3 + + 31 + 25 + 25 + 25 + 0 + 0 + 0 + 15 + 15 + 15 + 15 + 15 + 6 + 15 + 15 + 15 + 2 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 98 + + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 5 + + + 6 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Space Vibe + 92 + + + FIFTH + 5 + + TRIANGL + 35 + 33 + 0 + 0 + on + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 3 + 3 + + + 0.5 + 1 + 1 + 15 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -2 + -2 + 2 + 3 + + 6 + 4 + 6 + 4 + 9 + 9 + 9 + 12 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 4 + 3 + 4 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 89 + 99 + 87 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Space....1 + 93 + + + FIFTH + 5 + + SAWUP + 5 + 0 + 47 + 99 + off + + + 1 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 3 + 3 + 1 + + + 6 + 9 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 2 + 0 + 0 + + 12 + 3 + 9 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 4 + 4 + 6 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 89 + 99 + 87 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Space....2 + 94 + + + FIFTH + 1 + + TRIANGL + 43 + 65 + 11 + 90 + off + + + 7 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 4 + 3 + 3 + 2 + + + 1 + 3.14 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 1 + 0 + 0 + + 28 + 4 + 21 + 25 + 9 + 9 + 21 + 18 + 4 + 4 + 15 + 0 + 4 + 31 + 9 + 6 + 4 + 4 + 10 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 74 + 93 + 99 + + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Space....3 + 95 + + + FIFTH + 1 + + TRIANGL + 99 + 0 + 99 + 0 + on + + + 7 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 4 + 4 + 2 + + + 1 + 1 + 2 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 1 + 1 + + 25 + 6 + 20 + 31 + 3 + 4 + 29 + 9 + 0 + 0 + 0 + 0 + 12 + 7 + 21 + 21 + 4 + 4 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 70 + 99 + 70 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Space....4 + 96 + + + EIGHTH + 0 + + TRIANGL + 37 + 0 + 66 + 90 + off + + + 6 + 3 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 5 + 4 + 3 + + + 0.5 + 13.84 + 2 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 3 + -3 + + 11 + 31 + 31 + 16 + 11 + 31 + 11 + 6 + 15 + 15 + 15 + 14 + 0 + 0 + 0 + 0 + 11 + 9 + 10 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 54 + 57 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + + + -24 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SpaceBirds + 97 + + + FOURTH + 7 + + TRIANGL + 31 + 13 + 14 + 30 + on + + + 0 + 3 + off + on + off + off + 0 + 0 + 0 + 0 + 4 + 1 + 1 + 0 + + + 0.5 + 2 + 6.28 + 23.55 + no + no + no + yes + 8 + 8 + 8 + 8 + + W1 + W1 + W2 + W8 + 3 + -3 + 3 + -3 + + 5 + 20 + 21 + 4 + 21 + 20 + 3 + 7 + 15 + 11 + 6 + 13 + 0 + 0 + 0 + 0 + 8 + 5 + 6 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 96 + 75 + + 0 + 0 + 0 + 1 + 0 + 36 + 0 + 34 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 5 + + Spc Midiot + 98 + + + FIFTH + 0 + + TRIANGL + 25 + 0 + 10 + 99 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 3 + 2 + 5 + + + 1 + 2.99 + 1 + 3.06 + no + no + no + no + 8 + 10 + 8 + 9 + + W1 + W1 + W1 + W1 + 3 + 3 + 3 + -3 + + 17 + 20 + 22 + 20 + 7 + 7 + 7 + 12 + 15 + 15 + 15 + 15 + 9 + 8 + 9 + 7 + 5 + 3 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 99 + 82 + + 2 + 1 + 1 + 1 + 0 + 43 + 0 + 39 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SteelPan * + 99 + + + FOURTH + 6 + + SHOLD + 99 + 0 + 99 + 0 + off + + + 7 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 1 + 1 + 1 + + + 0.5 + 5.19 + 0.5 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W5 + W2 + W1 + W6 + -3 + -3 + -3 + -3 + + 15 + 20 + 20 + 18 + 6 + 11 + 7 + 8 + 12 + 9 + 5 + 5 + 0 + 4 + 1 + 1 + 1 + 1 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 96 + 99 + 67 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -24 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Storm Wind + 100 + + + THIRD + 7 + + TRIANGL + 28 + 0 + 0 + 99 + off + + + 6 + 3 + on + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 25.19 + 0.5 + 0.5 + 0.5 + no + no + no + no + 17 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 21 + 18 + 23 + 18 + 21 + 9 + 8 + 9 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 10 + 1 + 1 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 83 + 97 + 51 + 58 + + 3 + 3 + 3 + 3 + 0 + 2 + 0 + 6 + + + -24 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + TAP TAP<<< + 101 + + + FIFTH + 7 + + SQUARE + 58 + 0 + 0 + 99 + on + + + 0 + 2 + off + on + off + on + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 12.5 + 13.31 + 16.28 + 16.68 + yes + yes + yes + yes + 104 + 69 + 54 + 74 + + W1 + W1 + W2 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 6 + 6 + 6 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 72 + 99 + 75 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Telephone* + 102 + + + FOURTH + 0 + + SHOLD + 99 + 0 + 35 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.5 + 2 + 2 + 18.24 + yes + no + no + no + 8 + 8 + 8 + 79 + + W1 + W3 + W5 + W7 + 0 + 3 + -3 + 0 + + 18 + 31 + 10 + 12 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 4 + 3 + 3 + 3 + VOF + VOF + VOF + VOF + + + 99 + 36 + 17 + 37 + 50 + 50 + + 84 + 59 + 52 + 46 + + 0 + 0 + 0 + 0 + 0 + 0 + 42 + 32 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Terror! + 103 + + + THIRD + 7 + + TRIANGL + 71 + 0 + 60 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 2 + + + 1 + 3 + 0.71 + 0.78 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 21 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 3 + 1 + 3 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 50 + 70 + 66 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 12 + FULL + 14 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Traffic..1 + 104 + + + THIRD + 7 + + SHOLD + 21 + 0 + 95 + 0 + off + + + 7 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 4 + + + 1 + 1.73 + 0.5 + 1.57 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 21 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 3 + 1 + 3 + 2 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 50 + 70 + 72 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 12 + FULL + 14 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Traffic..2 + 105 + + + THIRD + 7 + + SAWUP + 12 + 0 + 0 + 0 + on + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 6 + 3 + + + 1 + 2 + 1.57 + 1.57 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 19 + 15 + 31 + 21 + 22 + 13 + 7 + 22 + 15 + 15 + 12 + 15 + 0 + 0 + 0 + 0 + 7 + 1 + 3 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 59 + 60 + 0 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Tug Boat + 106 + + + FOURTH + 7 + + SQUARE + 74 + 0 + 0 + 0 + off + + + 0 + 3 + on + off + off + off + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + + + 20.8 + 12.12 + 8.24 + 0.5 + yes + yes + yes + yes + 20 + 66 + 12 + 8 + + W1 + W1 + W1 + W8 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 17 + 31 + 31 + 5 + 0 + 15 + 15 + 0 + 0 + 0 + 0 + 0 + 9 + 3 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 89 + 62 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Typwriter* + 107 + + + FIRST + 7 + + TRIANGL + 5 + 0 + 66 + 90 + off + + + 6 + 3 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 3 + + + 0.5 + 13.84 + 2 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 3 + -3 + + 11 + 31 + 31 + 16 + 11 + 31 + 11 + 6 + 15 + 15 + 15 + 14 + 0 + 0 + 0 + 0 + 7 + 1 + 10 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 54 + 57 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + UFO Decent + 108 + + + THIRD + 2 + + SAWUP + 68 + 0 + 0 + 99 + off + + + 0 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 3 + + + 0.5 + 13.84 + 18.84 + 25.95 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 10 + 4 + 9 + 6 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 8 + 7 + 6 + 6 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 71 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Uzzie + 109 + + + EIGHTH + 7 + + SHOLD + 67 + 0 + 99 + 99 + on + + + 7 + 2 + off + off + off + on + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + + + 1.51 + 1.5 + 1.49 + 8.63 + no + no + no + no + 14 + 16 + 9 + 16 + + W5 + W4 + W1 + W1 + -3 + 3 + 3 + -3 + + 9 + 8 + 6 + 6 + 8 + 8 + 7 + 0 + 15 + 15 + 15 + 15 + 4 + 7 + 8 + 6 + 5 + 7 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 90 + 68 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Water * + 110 + + + FIRST + 7 + + TRIANGL + 6 + 0 + 66 + 90 + off + + + 6 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 3 + + + 0.5 + 13.84 + 18.84 + 25.95 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 11 + 31 + 31 + 31 + 11 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 7 + 1 + 3 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Waves....1 + 111 + + + FIRST + 7 + + TRIANGL + 4 + 0 + 66 + 90 + off + + + 6 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 3 + + + 0.5 + 13.84 + 18.84 + 25.95 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 4 + 31 + 31 + 31 + 11 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 7 + 1 + 3 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Waves....2 + 112 + + + FIRST + 7 + + TRIANGL + 5 + 0 + 0 + 88 + off + + + 6 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 5 + + + 0.5 + 13.84 + 18.84 + 25.95 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 8 + 31 + 31 + 31 + 11 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 7 + 1 + 3 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Waves....3 + 113 + + + SEVENTH + 7 + + TRIANGL + 5 + 0 + 66 + 85 + off + + + 6 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 6 + 5 + 6 + 3 + + + 0.5 + 13.84 + 18.84 + 25.95 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 11 + 31 + 10 + 30 + 11 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 7 + 1 + 3 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 1 + 0 + 99 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Waves....4 + 114 + + + FIRST + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 4 + 2 + + + 0.5 + 3 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 12 + 31 + 31 + 31 + 10 + 31 + 31 + 31 + 14 + 15 + 15 + 15 + 9 + 0 + 0 + 0 + 7 + 1 + 3 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + + + -24 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Waves....5 + 115 + + + FOURTH + 7 + + SHOLD + 99 + 0 + 99 + 0 + off + + + 7 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + + + 1.41 + 0.5 + 13 + 10.99 + no + no + yes + yes + 8 + 8 + 64 + 8 + + W1 + W1 + W1 + W1 + 0 + -1 + 2 + 3 + + 6 + 31 + 31 + 31 + 8 + 5 + 0 + 0 + 14 + 0 + 0 + 0 + 0 + 19 + 19 + 19 + 2 + 1 + 1 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 0 + 64 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 12 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 83 + 0 + 0 + 0 + 0 + 0 + 0 + + Wind * + 116 + + + SECOND + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 1 + 1 + + + 1 + 0.5 + 0.5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W2 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 15 + 31 + 31 + 16 + 4 + 12 + 15 + 15 + 10 + 10 + 0 + 0 + 2 + 13 + 12 + 4 + 10 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 76 + 85 + 69 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + >>WOW<< + 117 + + + SECOND + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 1 + 0 + + + 1 + 1.73 + 3.46 + 17.27 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 31 + 20 + 11 + 31 + 15 + 5 + 15 + 15 + 15 + 16 + 18 + 0 + 8 + 5 + 8 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 65 + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 7 + + WaterGlass + 118 + + + FIFTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 1 + 0 + + + 0.5 + 20.5 + 8.81 + 22.81 + no + yes + no + yes + 8 + 81 + 12 + 83 + + W3 + W4 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 29 + 31 + 15 + 15 + 15 + 15 + 15 + 15 + 15 + 15 + 13 + 13 + 13 + 13 + 7 + 9 + 7 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 95 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + WeirdAxe * + 119 + + + THIRD + 0 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 25.95 + 10.59 + 22.92 + 11.02 + no + no + yes + yes + 8 + 10 + 52 + 70 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 11 + 31 + 31 + 24 + 10 + 18 + 19 + 19 + 10 + 15 + 15 + 10 + 10 + 0 + 0 + 0 + 11 + 10 + 12 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 90 + 86 + 92 + 63 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 24 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + White Blow + 120 + + + + + OTHER + 7 + + Other + 0 + + FIFTH + 4 + + TRIANGL + 28 + 17 + 2 + 0 + off + + + 4 + 0 + off + off + off + off + 7 + 3 + 3 + 7 + 5 + 5 + 5 + 5 + + + 1 + 13 + 5 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W5 + W1 + W1 + -2 + -2 + 1 + 1 + + 31 + 31 + 31 + 31 + 7 + 7 + 7 + 7 + 15 + 15 + 15 + 15 + 10 + 7 + 7 + 7 + 5 + 5 + 7 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 70 + 99 + 94 + + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + 120 VAC + 0 + + + FIFTH + 5 + + TRIANGL + 28 + 9 + 7 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 6 + 3 + 6 + + + 1.49 + 5.81 + 1.51 + 6 + no + no + no + no + 9 + 21 + 14 + 8 + + W2 + W7 + W2 + W2 + -2 + 0 + 2 + 0 + + 31 + 19 + 31 + 31 + 31 + 31 + 31 + 19 + 15 + 5 + 15 + 5 + 1 + 31 + 1 + 31 + 5 + 5 + 5 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 74 + 99 + 75 + + 1 + 2 + 1 + 2 + 0 + 0 + 0 + 0 + + + -19 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 40 + 0 + 15 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Amazon + 1 + + + FIFTH + 5 + + TRIANGL + 21 + 1 + 22 + 12 + off + + + 3 + 2 + on + off + on + off + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + + + 0.5 + 4 + 0.5 + 6.16 + no + no + no + no + 8 + 8 + 8 + 14 + + W1 + W1 + W1 + W1 + -3 + 3 + 3 + 3 + + 11 + 31 + 11 + 31 + 10 + 9 + 10 + 9 + 0 + 0 + 0 + 0 + 10 + 0 + 10 + 0 + 5 + 5 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 71 + 99 + 71 + + 0 + 1 + 0 + 1 + 9 + 10 + 9 + 10 + + + 12 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 55 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ArcoGlass* + 2 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.87 + 8.48 + 0.87 + 9.89 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 12 + 31 + 12 + 31 + 15 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 6 + 11 + 13 + 31 + 5 + 0 + 7 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 80 + 47 + 72 + 0 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Aviary + 3 + + + FIFTH + 1 + + TRIANGL + 30 + 24 + 3 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 7 + 6 + 4 + 6 + 3 + + + 1 + 5 + 2 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -3 + -3 + 0 + + 9 + 12 + 11 + 9 + 6 + 12 + 10 + 3 + 13 + 13 + 12 + 15 + 6 + 5 + 6 + 3 + 6 + 5 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 89 + 99 + 76 + + 2 + 2 + 1 + 1 + 0 + 64 + 39 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 1 + 0 + 0 + 50 + 99 + 0 + 0 + 0 + 0 + 0 + + BC1 GlassV + 4 + + + FOURTH + 7 + + TRIANGL + 28 + 0 + 0 + 0 + off + + + 5 + 3 + on + off + off + off + 0 + 0 + 0 + 0 + 2 + 1 + 2 + 1 + + + 1.49 + 3 + 2.99 + 6 + no + no + no + no + 9 + 8 + 10 + 8 + + W1 + W1 + W1 + W1 + 0 + -3 + 3 + -2 + + 14 + 31 + 31 + 31 + 8 + 25 + 17 + 19 + 14 + 13 + 9 + 13 + 0 + 0 + 13 + 17 + 7 + 7 + 9 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 79 + 92 + 85 + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + -19 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 16 + 46 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Botl.Shff* + 5 + + + FIFTH + 0 + + TRIANGL + 21 + 0 + 10 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 0 + 2 + 0 + + + 1.5 + 20.99 + 1.51 + 1.5 + no + no + no + no + 16 + 14 + 14 + 16 + + W1 + W1 + W1 + W2 + 0 + 0 + -3 + 3 + + 31 + 31 + 31 + 31 + 7 + 15 + 30 + 8 + 11 + 11 + 14 + 14 + 7 + 10 + 6 + 6 + 10 + 11 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 61 + 99 + 83 + + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 20 + + + -19 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Cairo * + 6 + + + SEVENTH + 7 + + TRIANGL + 26 + 0 + 5 + 1 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 1 + 3 + 2 + 0 + 0 + 0 + + + 1.5 + 1.49 + 1.51 + 20.86 + no + no + no + no + 16 + 9 + 14 + 9 + + W5 + W2 + W5 + W3 + -3 + 3 + 1 + 3 + + 14 + 11 + 15 + 31 + 0 + 2 + 2 + 0 + 0 + 0 + 10 + 15 + 1 + 3 + 4 + 0 + 6 + 4 + 3 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 85 + 65 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -7 + POLY + 12 + FINGER + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Celestial + 7 + + + FIFTH + 5 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 4 + 4 + + + 2 + 0.5 + 10 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 3 + -1 + 0 + + 15 + 31 + 31 + 31 + 31 + 31 + 9 + 9 + 15 + 15 + 8 + 8 + 0 + 0 + 4 + 4 + 4 + 3 + 4 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 94 + 91 + 87 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ChimeStrig + 8 + + + EIGHTH + 0 + + TRIANGL + 42 + 72 + 1 + 75 + off + + + 0 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 6 + 5 + 6 + 4 + + + 1 + 1 + 5 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 16 + 31 + 31 + 31 + 10 + 10 + 18 + 27 + 0 + 0 + 0 + 0 + 10 + 7 + 7 + 7 + 4 + 6 + 6 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 82 + 83 + 84 + + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 10 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Deep Space + 9 + + + FIFTH + 3 + + TRIANGL + 33 + 35 + 9 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 2 + + + 2 + 2 + 2 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 2 + -3 + 3 + -1 + + 9 + 11 + 10 + 12 + 16 + 3 + 8 + 6 + 15 + 8 + 15 + 14 + 3 + 3 + 3 + 2 + 5 + 5 + 7 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 71 + 99 + 63 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + EleChamber + 10 + + + EIGHTH + 0 + + SQUARE + 20 + 79 + 30 + 2 + on + + + 1 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 4 + + + 1 + 1 + 1 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 31 + 10 + 13 + 12 + 10 + 10 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Enc3rdKind + 11 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 50 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 9 + 6 + 3 + 6 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W3 + W1 + W4 + 0 + 0 + 0 + 0 + + 20 + 31 + 20 + 31 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 3 + 5 + 3 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 86 + 60 + 86 + 66 + + 0 + 0 + 0 + 0 + 30 + 0 + 30 + 0 + + + -19 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Etherial + 12 + + + FOURTH + 7 + + TRIANGL + 32 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + + + 1.5 + 1.51 + 10.22 + 1.58 + no + no + no + no + 16 + 14 + 12 + 10 + + W1 + W4 + W1 + W8 + -1 + 1 + 2 + -3 + + 15 + 24 + 31 + 24 + 20 + 7 + 31 + 31 + 15 + 7 + 15 + 15 + 0 + 0 + 21 + 22 + 15 + 15 + 15 + 15 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 95 + 69 + 99 + 99 + + 0 + 1 + 0 + 0 + 5 + 27 + 3 + 0 + + + -12 + POLY + 2 + FINGER + 0 + POR + 99 + 0 + 0 + 19 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 6 + + Floot Base + 13 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0.5 + 0.5 + 2 + 10 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + -3 + -3 + -1 + + 12 + 24 + 15 + 22 + 0 + 0 + 0 + 0 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 5 + 8 + 10 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 91 + 99 + 57 + + 2 + 2 + 2 + 0 + 0 + 91 + 0 + 0 + + + -12 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Full Ranks + 14 + + + FIFTH + 4 + + TRIANGL + 31 + 0 + 6 + 0 + on + + + 4 + 2 + off + off + off + on + 0 + 0 + 0 + 0 + 3 + 0 + 3 + 0 + + + 1.5 + 1.5 + 1.5 + 1.49 + no + no + no + no + 16 + 16 + 16 + 97 + + W4 + W4 + W1 + W4 + 3 + -3 + 3 + -3 + + 19 + 20 + 15 + 31 + 8 + 8 + 7 + 6 + 15 + 15 + 14 + 15 + 4 + 7 + 3 + 6 + 5 + 5 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 71 + 99 + 64 + + 0 + 0 + 0 + 0 + 0 + 5 + 8 + 0 + + + -19 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + FuzzyPad + 15 + + + EIGHTH + 6 + + TRIANGL + 82 + 0 + 7 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 4 + 4 + 4 + + + 1 + 2.64 + 5.12 + 8.87 + no + no + no + no + 8 + 19 + 10 + 22 + + W1 + W1 + W1 + W2 + -3 + 3 + 3 + 3 + + 31 + 31 + 24 + 21 + 18 + 14 + 19 + 19 + 13 + 12 + 12 + 10 + 3 + 4 + 3 + 5 + 6 + 6 + 8 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 74 + 89 + 84 + + 0 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Gender Gam + 16 + + + SEVENTH + 5 + + SHOLD + 99 + 0 + 0 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 3 + 3 + 2 + + + 0.5 + 4 + 0.5 + 6.92 + no + no + no + yes + 8 + 8 + 8 + 112 + + W1 + W2 + W1 + W1 + 1 + -1 + -1 + -1 + + 15 + 31 + 15 + 28 + 12 + 10 + 12 + 10 + 15 + 0 + 0 + 0 + 0 + 0 + 10 + 0 + 6 + 5 + 6 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 78 + 99 + 80 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 3 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + GlassHarp1 + 17 + + + FIFTH + 1 + + TRIANGL + 30 + 24 + 3 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 7 + 5 + 4 + 5 + 4 + + + 1 + 5 + 2 + 8 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -3 + -3 + 0 + + 9 + 12 + 11 + 9 + 6 + 12 + 10 + 3 + 13 + 13 + 12 + 15 + 6 + 5 + 6 + 3 + 6 + 5 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 92 + 79 + 99 + 64 + + 2 + 2 + 1 + 1 + 0 + 64 + 39 + 0 + + + 0 + POLY + 7 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 1 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + GlassHarp2 + 18 + + + SEVENTH + 5 + + SHOLD + 99 + 0 + 0 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 4 + 4 + 4 + + + 5 + 15 + 5 + 14.43 + no + no + no + yes + 8 + 8 + 8 + 119 + + W3 + W3 + W1 + W1 + -3 + 2 + 3 + 0 + + 10 + 7 + 12 + 12 + 8 + 7 + 6 + 7 + 12 + 9 + 3 + 10 + 5 + 4 + 7 + 4 + 5 + 4 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 39 + 99 + 62 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + GlassHarp3 + 19 + + + FIFTH + 0 + + TRIANGL + 28 + 14 + 28 + 0 + off + + + 3 + 1 + off + off + off + on + 0 + 0 + 0 + 0 + 1 + 3 + 1 + 3 + + + 1.5 + 1.5 + 1.49 + 1.49 + no + no + no + no + 120 + 16 + 9 + 65 + + W4 + W5 + W4 + W5 + -3 + -3 + 3 + 3 + + 11 + 10 + 11 + 10 + 31 + 31 + 31 + 31 + 15 + 15 + 15 + 15 + 0 + 2 + 0 + 2 + 4 + 5 + 4 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 79 + 99 + 77 + + 1 + 0 + 1 + 0 + 0 + 39 + 0 + 39 + + + -19 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 4 + + HarmoPad + 20 + + + FIFTH + 2 + + TRIANGL + 32 + 59 + 2 + 0 + off + + + 0 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 5 + 6 + + + 0.5 + 0.5 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W2 + W2 + W1 + 0 + 0 + 0 + 0 + + 22 + 9 + 22 + 9 + 7 + 21 + 7 + 21 + 15 + 15 + 15 + 15 + 4 + 4 + 4 + 4 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 67 + 99 + 80 + + 0 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Impression + 21 + + + FIFTH + 6 + + TRIANGL + 38 + 2 + 13 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 3 + + + 1 + 2 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W1 + W1 + -2 + 0 + 0 + 0 + + 21 + 18 + 21 + 18 + 12 + 4 + 3 + 3 + 14 + 14 + 14 + 14 + 3 + 1 + 2 + 1 + 9 + 4 + 9 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 77 + 99 + 84 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Jump.....1 + 22 + + + FIFTH + 5 + + TRIANGL + 38 + 33 + 32 + 0 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 5 + 3 + + + 2 + 2 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W4 + W1 + W2 + 0 + 0 + 0 + 0 + + 31 + 31 + 31 + 18 + 22 + 22 + 22 + 3 + 12 + 12 + 14 + 14 + 0 + 24 + 0 + 7 + 9 + 9 + 9 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 87 + + 0 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Jump.....2 + 23 + + + SEVENTH + 7 + + TRIANGL + 34 + 0 + 15 + 0 + on + + + 4 + 2 + off + off + off + on + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + + + 1.51 + 1.5 + 1.49 + 8.63 + no + no + no + no + 14 + 16 + 9 + 16 + + W5 + W4 + W1 + W4 + -3 + 3 + 3 + -3 + + 14 + 11 + 15 + 31 + 8 + 8 + 7 + 0 + 15 + 15 + 15 + 15 + 4 + 7 + 8 + 6 + 5 + 7 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 89 + 67 + + 0 + 0 + 0 + 0 + 0 + 5 + 8 + 0 + + + 5 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + KrstlChoir + 24 + + + EIGHTH + 7 + + TRIANGL + 34 + 0 + 15 + 0 + on + + + 2 + 1 + off + off + off + on + 0 + 0 + 0 + 0 + 3 + 1 + 1 + 5 + + + 1.51 + 1.5 + 1.49 + 9.16 + no + no + no + no + 14 + 16 + 9 + 16 + + W3 + W2 + W3 + W4 + -3 + 0 + 3 + -3 + + 14 + 11 + 15 + 31 + 8 + 8 + 7 + 17 + 15 + 15 + 15 + 15 + 4 + 7 + 8 + 6 + 5 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 98 + 98 + 79 + + 0 + 0 + 0 + 0 + 0 + 5 + 8 + 0 + + + -7 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + KrystlPad1 + 25 + + + FOURTH + 6 + + TRIANGL + 26 + 9 + 7 + 31 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 2 + 3 + 3 + + + 1.5 + 2.99 + 3 + 3.08 + no + no + no + no + 16 + 10 + 8 + 11 + + W1 + W1 + W1 + W4 + -3 + 3 + -3 + -3 + + 12 + 19 + 28 + 12 + 9 + 28 + 31 + 31 + 13 + 11 + 15 + 1 + 1 + 3 + 1 + 6 + 8 + 5 + 5 + 5 + VOF + VOF + VOF + V24 + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 83 + 70 + 63 + + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + -19 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 25 + 31 + 16 + 30 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + MilkBottle + 26 + + + FIFTH + 4 + + SQUARE + 24 + 57 + 9 + 25 + on + + + 3 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 6 + 3 + 4 + 3 + + + 1 + 1 + 8 + 14 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 2 + 1 + -1 + -3 + + 31 + 31 + 31 + 10 + 9 + 9 + 9 + 9 + 15 + 15 + 11 + 11 + 6 + 5 + 5 + 3 + 6 + 3 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 66 + + 0 + 0 + 1 + 2 + 0 + 0 + 0 + 0 + + + -24 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Movement.1 + 27 + + + FIFTH + 7 + + SHOLD + 37 + 0 + 0 + 39 + on + + + 3 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 5 + 4 + 3 + 3 + + + 2 + 2 + 2 + 9 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 2 + -2 + -1 + -3 + + 31 + 31 + 31 + 11 + 9 + 9 + 9 + 9 + 15 + 15 + 14 + 14 + 0 + 0 + 1 + 0 + 6 + 3 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 83 + 99 + 62 + + 2 + 0 + 0 + 3 + 0 + 0 + 0 + 0 + + + -24 + POLY + 0 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Movement.2 + 28 + + + FIFTH + 0 + + TRIANGL + 4 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 15.89 + 17.17 + 2 + 10 + yes + yes + no + no + 34 + 79 + 8 + 8 + + W1 + W1 + W1 + W2 + 0 + 0 + -3 + 3 + + 27 + 31 + 31 + 31 + 22 + 31 + 28 + 26 + 0 + 0 + 11 + 9 + 31 + 31 + 10 + 1 + 15 + 15 + 4 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 82 + 94 + 99 + 75 + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Musicbox * + 29 + + + EIGHTH + 7 + + TRIANGL + 26 + 0 + 5 + 1 + on + + + 6 + 0 + off + off + off + off + 0 + 0 + 1 + 3 + 2 + 0 + 0 + 0 + + + 1.5 + 1.49 + 1.51 + 20.86 + no + no + no + no + 16 + 9 + 14 + 9 + + W5 + W2 + W5 + W3 + -3 + 3 + 1 + 3 + + 2 + 2 + 2 + 2 + 13 + 2 + 2 + 29 + 0 + 0 + 10 + 15 + 1 + 3 + 4 + 0 + 6 + 4 + 3 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 85 + 65 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -7 + POLY + 12 + FINGER + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Obelisk + 30 + + + FIFTH + 5 + + TRIANGL + 72 + 42 + 10 + 39 + on + + + 3 + 1 + on + on + on + on + 0 + 0 + 0 + 0 + 4 + 2 + 5 + 2 + + + 1 + 18.37 + 11 + 14 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 1 + 2 + + 31 + 31 + 31 + 31 + 4 + 5 + 3 + 3 + 4 + 4 + 4 + 4 + 0 + 0 + 0 + 0 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 71 + 93 + 80 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Ornt E.T. + 31 + + + EIGHTH + 7 + + TRIANGL + 21 + 0 + 21 + 35 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 4 + 3 + + + 1 + 4 + 8 + 25.95 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 18 + 10 + 9 + 6 + 31 + 31 + 8 + 15 + 15 + 15 + 5 + 3 + 14 + 9 + 31 + 15 + 15 + 15 + 9 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 97 + 99 + 94 + 99 + + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Ornt Quest + 32 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 2 + 5 + 2 + + + 2 + 18.37 + 2 + 4 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 1 + -1 + -1 + + 19 + 31 + 18 + 18 + 3 + 19 + 2 + 6 + 13 + 10 + 0 + 0 + 21 + 29 + 0 + 0 + 9 + 9 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 93 + 99 + 99 + 70 + + 0 + 0 + 3 + 3 + 0 + 0 + 46 + 46 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntFlight + 33 + + + EIGHTH + 6 + + TRIANGL + 56 + 68 + 0 + 63 + on + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 3 + 3 + 2 + + + 1 + 2 + 3 + 3 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 0 + 0 + 0 + + 6 + 31 + 31 + 9 + 5 + 10 + 18 + 3 + 0 + 0 + 0 + 0 + 0 + 3 + 4 + 2 + 5 + 5 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 84 + 99 + 64 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntSound1 + 34 + + + FIFTH + 6 + + SQUARE + 56 + 68 + 0 + 63 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 2 + 5 + 2 + + + 1 + 1 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 3 + 0 + 0 + 0 + + 22 + 9 + 22 + 9 + 6 + 13 + 15 + 3 + 12 + 12 + 12 + 12 + 1 + 3 + 4 + 9 + 7 + 2 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 84 + 99 + 64 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + OrntSound2 + 35 + + + SEVENTH + 7 + + TRIANGL + 26 + 0 + 5 + 0 + off + + + 4 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + + + 7 + 7 + 3.5 + 10.5 + no + no + no + no + 8 + 8 + 16 + 16 + + W4 + W2 + W1 + W4 + 2 + -2 + 2 + -2 + + 14 + 19 + 31 + 31 + 15 + 11 + 9 + 10 + 13 + 10 + 10 + 11 + 12 + 12 + 12 + 11 + 7 + 7 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 84 + 75 + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + ParisDream + 36 + + + FIFTH + 7 + + TRIANGL + 35 + 0 + 14 + 0 + on + + + 3 + 1 + on + off + off + off + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 4 + + + 1 + 2 + 1 + 10 + no + no + no + no + 8 + 8 + 8 + 8 + + W4 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 8 + 10 + 31 + 31 + 14 + 31 + 7 + 10 + 15 + 15 + 7 + 6 + 0 + 0 + 7 + 14 + 6 + 3 + 5 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 76 + 99 + 77 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 99 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 2 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + PianoVoice + 37 + + + FIFTH + 7 + + TRIANGL + 31 + 6 + 10 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 1 + 2 + + + 3 + 3 + 2.99 + 2.99 + no + no + no + no + 8 + 8 + 34 + 10 + + W4 + W1 + W4 + W1 + -3 + -3 + 3 + 3 + + 31 + 31 + 31 + 31 + 31 + 28 + 31 + 28 + 15 + 15 + 15 + 15 + 0 + 0 + 0 + 0 + 5 + 4 + 5 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 67 + 99 + 67 + + 0 + 0 + 0 + 0 + 30 + 30 + 30 + 30 + + + -19 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + PianoStrng + 38 + + + FOURTH + 0 + + TRIANGL + 27 + 11 + 5 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 4 + 2 + 4 + + + 1 + 1 + 1 + 15.7 + no + no + no + no + 112 + 8 + 8 + 8 + + W5 + W6 + W6 + W4 + 3 + -3 + -3 + 3 + + 31 + 31 + 31 + 31 + 11 + 18 + 15 + 20 + 11 + 6 + 11 + 4 + 3 + 4 + 3 + 14 + 6 + 10 + 5 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 97 + 94 + 91 + + 2 + 2 + 2 + 2 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 50 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + PlasticHit + 39 + + + FIFTH + 5 + + TRIANGL + 33 + 35 + 15 + 0 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 7 + 4 + + + 2 + 2 + 1 + 14 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W1 + W1 + 2 + -3 + 3 + -1 + + 9 + 24 + 31 + 31 + 16 + 3 + 8 + 7 + 15 + 8 + 7 + 7 + 3 + 3 + 6 + 7 + 5 + 5 + 6 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 94 + 88 + 99 + 67 + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Pno String + 40 + + + SEVENTH + 0 + + TRIANGL + 28 + 14 + 9 + 46 + off + + + 4 + 2 + off + off + off + on + 4 + 4 + 0 + 0 + 4 + 4 + 4 + 5 + + + 8.98 + 9.07 + 1.5 + 1.49 + no + no + no + no + 14 + 15 + 16 + 97 + + W6 + W6 + W8 + W5 + 3 + -3 + 0 + -1 + + 7 + 6 + 31 + 31 + 7 + 11 + 31 + 31 + 14 + 14 + 15 + 15 + 1 + 1 + 8 + 8 + 4 + 4 + 5 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 78 + 78 + 99 + 71 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 23 + + + -19 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 7 + 0 + 50 + 57 + 0 + 0 + 0 + 0 + 0 + + PnoClouds + 41 + + + FOURTH + 6 + + TRIANGL + 20 + 0 + 0 + 0 + off + + + 6 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 3 + 4 + 4 + 4 + + + 1 + 1 + 2 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + -3 + -3 + -1 + + 26 + 31 + 31 + 31 + 23 + 2 + 18 + 12 + 12 + 14 + 14 + 6 + 8 + 3 + 6 + 6 + 8 + 11 + 8 + 11 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 97 + 96 + 86 + + 0 + 2 + 0 + 0 + 0 + 67 + 0 + 0 + + + 0 + POLY + 1 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 50 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + PopPercuss + 42 + + + EIGHTH + 7 + + TRIANGL + 34 + 0 + 15 + 0 + on + + + 3 + 1 + on + on + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + + + 1.5 + 1.49 + 1.49 + 1.51 + no + no + no + no + 16 + 9 + 9 + 14 + + W4 + W4 + W4 + W4 + 3 + -3 + -3 + 3 + + 14 + 14 + 14 + 14 + 8 + 8 + 8 + 8 + 15 + 15 + 15 + 14 + 4 + 7 + 5 + 6 + 5 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 98 + 98 + 99 + + 0 + 0 + 0 + 0 + 20 + 22 + 29 + 29 + + + -19 + POLY + 2 + FINGER + 3 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Sawsy Pad1 + 43 + + + EIGHTH + 0 + + TRIANGL + 35 + 19 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 4 + 4 + 4 + 4 + + + 8 + 6 + 5.65 + 5.65 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 3 + -3 + -3 + + 31 + 13 + 12 + 10 + 27 + 27 + 27 + 27 + 15 + 15 + 15 + 15 + 13 + 13 + 13 + 13 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 67 + 55 + 49 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -12 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Solstice + 44 + + + FIFTH + 7 + + TRIANGL + 31 + 0 + 6 + 0 + on + + + 4 + 2 + off + off + off + on + 0 + 0 + 0 + 0 + 3 + 0 + 3 + 0 + + + 1.51 + 1.49 + 0.75 + 9 + no + no + no + no + 14 + 9 + 12 + 96 + + W6 + W8 + W1 + W8 + 3 + -3 + 3 + -3 + + 19 + 19 + 31 + 30 + 12 + 12 + 7 + 11 + 10 + 11 + 15 + 7 + 4 + 7 + 2 + 15 + 5 + 7 + 7 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 87 + 84 + 92 + 67 + + 0 + 0 + 0 + 0 + 0 + 5 + 8 + 0 + + + -7 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SpoonChoir + 45 + + + FIFTH + 4 + + TRIANGL + 30 + 0 + 0 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 5 + 4 + 2 + + + 1 + 1 + 1 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 21 + 24 + 21 + 16 + 29 + 18 + 7 + 10 + 15 + 0 + 12 + 12 + 6 + 6 + 6 + 6 + 15 + 10 + 8 + 8 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 90 + 99 + 89 + + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + + + -24 + POLY + 5 + FULL + 0 + POR + 99 + 0 + 0 + 99 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + SpreadThin + 46 + + + FIFTH + 7 + + TRIANGL + 27 + 40 + 16 + 0 + off + + + 2 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 7 + 3 + 4 + 4 + + + 2 + 14 + 0.5 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W1 + W5 + W3 + 0 + 0 + 1 + -1 + + 31 + 31 + 12 + 31 + 12 + 31 + 12 + 0 + 15 + 15 + 15 + 15 + 6 + 12 + 6 + 0 + 5 + 5 + 5 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 83 + 99 + 76 + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + St Nick..1 + 47 + + + SEVENTH + 6 + + TRIANGL + 34 + 40 + 43 + 0 + off + + + 1 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 3 + 4 + 2 + + + 1 + 3 + 1 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W2 + W2 + W2 + W3 + 0 + 0 + 3 + -3 + + 25 + 25 + 12 + 31 + 12 + 31 + 12 + 0 + 15 + 15 + 15 + 15 + 6 + 12 + 6 + 0 + 5 + 5 + 5 + 1 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 90 + 76 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + St Nick..2 + 48 + + + THIRD + 7 + + SHOLD + 99 + 99 + 6 + 0 + on + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 4 + 6 + 5 + + + 1 + 1 + 0.5 + 2 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 3 + -3 + -3 + + 5 + 4 + 4 + 4 + 14 + 13 + 14 + 15 + 15 + 15 + 15 + 15 + 7 + 7 + 7 + 7 + 6 + 6 + 6 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 56 + 77 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + -24 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + StonedCycl + 49 + + + EIGHTH + 5 + + SHOLD + 50 + 0 + 99 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 1 + 2 + 0 + + + 1 + 1 + 4 + 0.5 + no + no + no + no + 8 + 8 + 8 + 8 + + W6 + W5 + W7 + W6 + 3 + -3 + 3 + -3 + + 31 + 27 + 15 + 12 + 0 + 0 + 0 + 15 + 15 + 15 + 15 + 15 + 13 + 13 + 13 + 13 + 7 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 12 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Texture * + 50 + + + FIFTH + 0 + + TRIANGL + 29 + 18 + 30 + 0 + off + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 2 + 5 + 2 + 2 + + + 1.5 + 20.99 + 1.51 + 1.49 + no + no + no + no + 16 + 14 + 14 + 9 + + W1 + W1 + W1 + W1 + 0 + -3 + 1 + -2 + + 27 + 30 + 30 + 30 + 6 + 7 + 6 + 2 + 0 + 11 + 0 + 0 + 31 + 10 + 10 + 7 + 11 + 8 + 7 + 5 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 96 + 89 + 99 + 94 + + 2 + 3 + 1 + 3 + 0 + 0 + 0 + 0 + + + -19 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 99 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + That Girl* + 51 + + + FIFTH + 0 + + TRIANGL + 35 + 0 + 0 + 0 + on + + + 3 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 6 + 2 + 5 + 4 + + + 1 + 1.73 + 4.24 + 1 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 31 + 31 + 27 + 31 + 9 + 15 + 3 + 18 + 13 + 14 + 14 + 14 + 15 + 12 + 1 + 12 + 6 + 4 + 2 + 6 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 80 + 81 + 95 + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 1 + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + Up We Go + 52 + + + FIFTH + 0 + + TRIANGL + 8 + 0 + 8 + 34 + off + + + 3 + 3 + on + on + on + off + 0 + 0 + 0 + 0 + 2 + 1 + 4 + 1 + + + 2 + 8 + 2 + 12 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + -3 + 3 + 3 + -3 + + 3 + 8 + 8 + 3 + 1 + 7 + 9 + 5 + 12 + 12 + 12 + 0 + 0 + 1 + 0 + 5 + 4 + 4 + 4 + 4 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 91 + 52 + 99 + 53 + + 3 + 1 + 3 + 1 + 50 + 64 + 50 + 64 + + + 0 + POLY + 4 + FULL + 0 + POR + 99 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 96 + 0 + 0 + 0 + 0 + 5 + + WineGlass* + 53 + + + FIFTH + 6 + + TRIANGL + 26 + 9 + 5 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 5 + 6 + 5 + 7 + + + 4 + 15.25 + 4.02 + 8.04 + no + yes + no + no + 8 + 84 + 17 + 10 + + W5 + W8 + W7 + W4 + -3 + 3 + -3 + -1 + + 16 + 25 + 18 + 20 + 9 + 9 + 7 + 25 + 13 + 0 + 12 + 0 + 7 + 0 + 7 + 3 + 5 + 5 + 5 + 5 + VOF + V48 + VOF + V24 + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 62 + 99 + 93 + + 1 + 2 + 1 + 2 + 0 + 31 + 0 + 0 + + + -24 + POLY + 2 + FULL + 0 + POR + 99 + 0 + 0 + 25 + 0 + 16 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + WireWaves + 54 + + + SEVENTH + 7 + + TRIANGL + 35 + 0 + 0 + 0 + off + + + 5 + 0 + off + off + off + off + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 6 + + + 1 + 3 + 3 + 12 + no + no + no + no + 8 + 8 + 8 + 8 + + W1 + W1 + W1 + W1 + 0 + 0 + 0 + 0 + + 22 + 26 + 23 + 31 + 31 + 24 + 31 + 22 + 15 + 5 + 15 + 7 + 10 + 12 + 13 + 14 + 5 + 7 + 7 + 7 + VOF + VOF + VOF + VOF + + + 99 + 99 + 99 + 50 + 50 + 50 + + 99 + 99 + 99 + 99 + + 1 + 1 + 1 + 1 + 0 + 12 + 0 + 21 + + + 0 + POLY + 2 + FULL + 0 + POR + 40 + 0 + 0 + 50 + 0 + 0 + 0 + 50 + 0 + 0 + 0 + 0 + 0 + 0 + + XyloSynth + 55 + + + + diff --git a/attic/muse_qt4_evolution/synti/deicsonze/TODO b/attic/muse_qt4_evolution/synti/deicsonze/TODO new file mode 100644 index 00000000..f7d486f1 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/TODO @@ -0,0 +1,13 @@ +- Fix sync +- Eg Rate Scaling +- Foot Control, Modulation Wheel, Breath Control, After Touch +- analogue reverb +- Change presetName subcategoryName category with SysEx +- Internal restructure, private vs public, add comment, etc +- Optimize the code +- Remember the last directory +- Pan per voices +- Load BUMP preset +- calibrate portamento and pitch envelope to fit real DX11 +- make deicsonze loadable as standalone by mus +- It seems that there is still a bug on the note on, on some presets diff --git a/attic/muse_qt4_evolution/synti/deicsonze/deicsonze.cpp b/attic/muse_qt4_evolution/synti/deicsonze/deicsonze.cpp new file mode 100644 index 00000000..2f630a15 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/deicsonze.cpp @@ -0,0 +1,4356 @@ +//=========================================================================== +// +// DeicsOnze an emulator of the YAMAHA DX11 synthesizer +// +// Version 0.5.5 +// +// +// +// +// Copyright (c) 2004-2006 Nil Geisweiller +// +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA or point your web browser to http://www.gnu.org. +//=========================================================================== + +// #include +#include + +// #include + +#include "muse/midi.h" +#include "libsynti/mess.h" +#include "plugin.h" +#include "muse/midictrl.h" +#include "deicsonze.h" +#include "config.h" + +#define ABS(x) (x>=0?x:-x) + + +float DeicsOnze::waveTable[NBRWAVES][RESOLUTION]; +int DeicsOnze::useCount = 0; + +//--------------------------------------------------------- +// DeicsOnze +//--------------------------------------------------------- + +DeicsOnze::DeicsOnze() : Mess(2) { + if (useCount++ == 0) { + // create sinus wave table, W1 + for(int i = 0; i < RESOLUTION; i++) + waveTable[W1][i] = + (float)(sin((i * 2.0 * M_PI) / (double)RESOLUTION)); + // create sinus*abs(sinus) wave table, W2 + for(int i = 0; i < RESOLUTION; i++){ + double t = (i * 2.0 * M_PI) / (double)RESOLUTION; + waveTable[W2][i] = (float)(ABS(sin(t))*sin(t));} + // create halfsinus_ wave table, W3 + for(int i = 0; i < RESOLUTION; i++) + waveTable[W3][i] = (float) + (ihide(); // to avoid flicker during MusE startup + _gui->setWindowTitle(QString("DeicsOnze")); + + //FX + Plugin* p; + p = plugins.find("freeverb", "freeverb1"); + _pluginIReverb = NULL; + if(p) initPluginReverb(p); + _pluginIChorus = NULL; + p = plugins.find("doublechorus", "doublechorus1"); + if(p) initPluginChorus(p); + _pluginIDelay = NULL; + p = plugins.find("pandelay", "pandelay"); + if(p) initPluginDelay(p); + + //Filter + _dryFilter = new LowFilter(); + _chorusFilter = new LowFilter(); + _reverbFilter = new LowFilter(); + _delayFilter = new LowFilter(); + + //Load configuration + QString defaultConf = + (QString(getenv("HOME")) + QString("/." DEICSONZESTR ".dco")); + FILE* f; + f = fopen(defaultConf.toAscii().data(), "r"); + if(f) { + fclose(f); + loadConfiguration(defaultConf); + } + + //load Set + _set=new Set("Initial Bank"); + if(_isInitSet) loadSet(_initSetPath); + + //loadSutulaPresets(); + + _initialPreset = new + Preset(new Subcategory(new Category(NULL, "NONE", 0), "NONE", 0), 0); + for(int c = 0; c < NBRCHANNELS; c++) { + _preset[c]=_initialPreset; + setPreset(c); + } + //update display gui + //update mastervol + unsigned char dataMasterVol[2]; + dataMasterVol[0]=SYSEX_MASTERVOL; + dataMasterVol[1]=getMasterVol(); + MidiEvent evSysexMasterVol(0, ME_SYSEX, + (const unsigned char*)dataMasterVol, + 2); + _gui->writeEvent(evSysexMasterVol); + //update return fx + unsigned char *dataReverbRet = new unsigned char[2]; + dataReverbRet[0]=SYSEX_REVERBRETURN; + dataReverbRet[1]=(unsigned char)getReverbReturn(); + MidiEvent evReverbRet(0,ME_SYSEX,(const unsigned char*)dataReverbRet, 2); + _gui->writeEvent(evReverbRet); + unsigned char *dataChorusRet = new unsigned char[2]; + dataChorusRet[0]=SYSEX_CHORUSRETURN; + dataChorusRet[1]=(unsigned char)getChorusReturn(); + MidiEvent evChorusRet(0,ME_SYSEX,(const unsigned char*)dataChorusRet, 2); + _gui->writeEvent(evChorusRet); + unsigned char *dataDelayRet = new unsigned char[2]; + dataDelayRet[0]=SYSEX_DELAYRETURN; + dataDelayRet[1]=(unsigned char)getDelayReturn(); + //printf("DELAY RET = %d, REVERB RET = %d\n", + //getDelayReturn(), getReverbReturn()); + MidiEvent evDelayRet(0,ME_SYSEX,(const unsigned char*)dataDelayRet, 2); + _gui->writeEvent(evDelayRet); + //update font size + unsigned char *dataFontSize = new unsigned char[2]; + dataFontSize[0]=SYSEX_FONTSIZE; + dataFontSize[1]=(unsigned char)_global.fontSize; + MidiEvent evFontSize(0, ME_SYSEX, (const unsigned char*)dataFontSize, 2); + _gui->writeEvent(evFontSize); + //display load preset + unsigned char dataUpdateGuiSet[1]; + dataUpdateGuiSet[0]=SYSEX_UPDATESETGUI; + MidiEvent evSysexUpdateGuiSet(0, ME_SYSEX, + (const unsigned char*)dataUpdateGuiSet, + 1); + _gui->writeEvent(evSysexUpdateGuiSet); +} + +//--------------------------------------------------------- +// ~DeicsOnze +//--------------------------------------------------------- + +DeicsOnze::~DeicsOnze() +{ + //if (--useCount == 0) + //delete[] sine_table; + //dealloc temp buffers chorus and reverb + for(int i = 0; i < NBRFXINPUTS; i++) free(tempInputChorus[i]); + free(tempInputChorus); + for(int i = 0; i < NBRFXOUTPUTS; i++) free(tempOutputChorus[i]); + free(tempOutputChorus); + for(int i = 0; i < NBRFXINPUTS; i++) free(tempInputReverb[i]); + free(tempInputReverb); + for(int i = 0; i < NBRFXOUTPUTS; i++) free(tempOutputReverb[i]); + free(tempOutputReverb); + for(int i = 0; i < NBRFXINPUTS; i++) free(tempInputDelay[i]); + free(tempInputDelay); + for(int i = 0; i < NBRFXOUTPUTS; i++) free(tempOutputDelay[i]); + free(tempOutputDelay); +} + +//--------------------------------------------------------- +// getSinusWaveTable +//--------------------------------------------------------- +float* DeicsOnze::getSinusWaveTable() { + return waveTable[W1]; +} + +//--------------------------------------------------------- +// guiVisible +//--------------------------------------------------------- +bool DeicsOnze::guiVisible() const +{ + return _gui->isVisible(); +} + +//--------------------------------------------------------- +// showGui +//--------------------------------------------------------- +void DeicsOnze::showGui(bool val) +{ + _gui->setShown(val); +} + +//--------------------------------------------------------- +// getGeometry +//--------------------------------------------------------- + +void DeicsOnze::getGeometry(int* x, int* y, int* w, int* h) const { + QPoint pos(_gui->pos()); + QSize size(_gui->size()); + *x = pos.x(); + *y = pos.y(); + *w = size.width(); + *h = size.height(); +} + +void DeicsOnze::setSampleRate(int sr) { + Mess::setSampleRate(sr); + _dryFilter->setSamplerate(sr); + _chorusFilter->setSamplerate(sr); + _reverbFilter->setSamplerate(sr); + _delayFilter->setSamplerate(sr); + setQuality(_global.quality); +} + +//--------------------------------------------------------- +// setGeometry +//--------------------------------------------------------- + +void DeicsOnze::setGeometry(int x, int y, int w, int h) { + _gui->resize(QSize(w, h)); + _gui->move(QPoint(x, y)); +} + +//--------------------------------------------------------- +// initCtrls +//--------------------------------------------------------- +void DeicsOnze::initCtrls() { + int i=0; + for(int k=0; kfindPreset(hbank, lbank, prog); +} +Subcategory* DeicsOnze::findSubcategory(int hbank, int lbank) const { + return _set->findSubcategory(hbank, lbank); +} +Category* DeicsOnze::findCategory(int hbank) const { + return _set->findCategory(hbank); +} +//--------------------------------------------------------- +// isPitchEnv +// return true iff all levels are in the middle +//--------------------------------------------------------- +inline bool isPitchEnv(PitchEg* pe) { + return(pe->pl1 != 50 || pe->pl2 != 50 || pe->pl3 != 50); +} +//--------------------------------------------------------- +// getPitchEnvCoefInct +// returns the coefInct according to level pl +//--------------------------------------------------------- +inline double getPitchEnvCoefInct(int pl) { + /* + pl = 0 <--> -4oct, pl = 50 <--> 0oct, pl = 100 <--> 4oct + + y = a * exp((pl - 50)/b) + 1.0 = a*exp(0) ==> a = 1.0 + 8.0 = exp(50/b) ==> log 8.0 = 50/b ==> b = 50/log(8.0) + */ + double b = 50.0/log(8.0); + return exp((pl-50.0)/b); +} + +//--------------------------------------------------------- +// getPitchEnvCoefInctInct +//--------------------------------------------------------- +inline double getPitchEnvCoefInctInct(int pl1, int pl2, int pr, double sr) { + //TODO : depending on the sampleRate + int a = pr; + double c = 1.0 + COEFPITCHENV*((double)(a*a)+1.0); + double inctInct = exp(log(c)*48000.0/sr); + if(pl1pl2) + return(1.0/inctInct); + else return 1.0; +} + +//--------------------------------------------------------- +// existsKeyOn +//--------------------------------------------------------- +bool DeicsOnze::existsKeyOn(int ch) { + return !_global.channel[ch].lastVoiceKeyOn.empty(); +} + +//--------------------------------------------------------- +// note2Amp +// return the Amp of a note depending on the level scaling +//--------------------------------------------------------- +inline double note2Amp(double note, int ls) +{ + if(ls==0) return(1.0); + else return((noteMAXNBRVOICES?MAXNBRVOICES:(nv<1?1:nv)); + //we assume that any voices + //that is not included in the active voices is properly initialized + for(int v=nv; v<_global.channel[c].nbrVoices; v++) + initVoice(c, v); + _global.channel[c].nbrVoices=nv; +} + +//---------------------------------------------------------------- +// setMasterVol +//---------------------------------------------------------------- +void DeicsOnze::setMasterVol(int mv) { + _global.masterVolume=level2amp(mv); //watch out that MAXMASTERVOLUME==255 +} +//---------------------------------------------------------------- +// setChannelEnable +//---------------------------------------------------------------- +void DeicsOnze::setChannelEnable(int c, bool e) { + _global.channel[c].isEnable = e; + setLfo(c); +} + +//---------------------------------------------------------------- +// setChannelVol +//---------------------------------------------------------------- +void DeicsOnze::setChannelVol(int c, int v) { + _global.channel[c].volume = v; +} + +void DeicsOnze::applyChannelAmp(int c) { + _global.channel[c].ampLeft = + level2amp(_global.channel[c].volume) + * ((double)(MAXCHANNELPAN - _global.channel[c].pan) + /(double)(2*MAXCHANNELPAN)); + _global.channel[c].ampRight = + level2amp(_global.channel[c].volume) + * ((double)(MAXCHANNELPAN + _global.channel[c].pan) + /(double)(2*MAXCHANNELPAN)); +} + +//---------------------------------------------------------------- +// setChannelPan +//---------------------------------------------------------------- +void DeicsOnze::setChannelPan(int c, int p) { + _global.channel[c].pan = p; +} +//---------------------------------------------------------------- +// setChannelDetune +//---------------------------------------------------------------- +void DeicsOnze::setChannelDetune(int c, int p) { + _global.channel[c].detune = p; +} +//---------------------------------------------------------------- +// setChannelBrightness +//---------------------------------------------------------------- +void DeicsOnze::setChannelBrightness(int c, int b) { + _global.channel[c].brightness = b; +} +//---------------------------------------------------------------- +// setChannelModulation +//---------------------------------------------------------------- +void DeicsOnze::setChannelModulation(int c, int m) { + _global.channel[c].modulation = m; +} +//---------------------------------------------------------------- +// setChannelAttack +//---------------------------------------------------------------- +void DeicsOnze::setChannelAttack(int c, int a) { + _global.channel[c].attack = a; +} +//---------------------------------------------------------------- +// setChannelRelease +//---------------------------------------------------------------- +void DeicsOnze::setChannelRelease(int c, int r) { + _global.channel[c].release = r; +} +//---------------------------------------------------------------- +// setChannelReverb +//---------------------------------------------------------------- +void DeicsOnze::setChannelReverb(int c, int r) { + _global.channel[c].reverbAmount = (float)lowlevel2amp(r); +} +//---------------------------------------------------------------- +// setChannelChorus +//---------------------------------------------------------------- +void DeicsOnze::setChannelChorus(int c, int val) { + _global.channel[c].chorusAmount = (float)lowlevel2amp(val); +} +//---------------------------------------------------------------- +// setChannelDelay +//---------------------------------------------------------------- +void DeicsOnze::setChannelDelay(int c, int val) { + _global.channel[c].delayAmount = (float)lowlevel2amp(val); +} + +//---------------------------------------------------------------- +// setChorusReturn +//---------------------------------------------------------------- +void DeicsOnze::setChorusReturn(int val) { + _global.chorusReturn = 2.0*(float)level2amp(val); //beware MAXFXRETURN==255 +} + +//---------------------------------------------------------------- +// setReverbReturn +//---------------------------------------------------------------- +void DeicsOnze::setReverbReturn(int val) { + _global.reverbReturn = 2.0*(float)level2amp(val); //beware MAXFXRETURN==255 +} + +//---------------------------------------------------------------- +// setDelayReturn +//---------------------------------------------------------------- +void DeicsOnze::setDelayReturn(int val) { + _global.delayReturn = 2.0*(float)level2amp(val); //beware MAXFXRETURN==255 +} + +//---------------------------------------------------------------- +// getNbrVoices +//---------------------------------------------------------------- +int DeicsOnze::getNbrVoices(int c) const { + return(_global.channel[c].nbrVoices); +} +//---------------------------------------------------------------- +// getMasterVol +//---------------------------------------------------------------- +int DeicsOnze::getMasterVol(void) const { + return(amp2level(_global.masterVolume)); +} +//---------------------------------------------------------------- +// getFilter +//---------------------------------------------------------------- +bool DeicsOnze::getFilter(void) const { + return _global.filter; +} +//---------------------------------------------------------------- +// getChannelEnable +//---------------------------------------------------------------- +bool DeicsOnze::getChannelEnable(int c) const { + return _global.channel[c].isEnable; +} + +//---------------------------------------------------------------- +// getChannelVol +//---------------------------------------------------------------- +int DeicsOnze::getChannelVol(int c) const { //TODO : to see if correct + //return((int)(MAX(_global.channel[c].ampLeft, _global.channel[c].ampRight) + //*(double)MAXCHANNELVOLUME)); + return(_global.channel[c].volume); +} +//---------------------------------------------------------------- +// getChannelPan +//---------------------------------------------------------------- +int DeicsOnze::getChannelPan(int c) const { + return(_global.channel[c].pan); +} +//---------------------------------------------------------------- +// setChannelDetune +//---------------------------------------------------------------- +int DeicsOnze::getChannelDetune(int c) const { + return _global.channel[c].detune; +} +//---------------------------------------------------------------- +// getChannelBrightness +//---------------------------------------------------------------- +int DeicsOnze::getChannelBrightness(int c) const { + return(_global.channel[c].brightness); +} +//---------------------------------------------------------------- +// getChannelModulation +//---------------------------------------------------------------- +int DeicsOnze::getChannelModulation(int c) const { + return(_global.channel[c].modulation); +} +//---------------------------------------------------------------- +// getChannelAttack +//---------------------------------------------------------------- +int DeicsOnze::getChannelAttack(int c) const { + return(_global.channel[c].attack); +} +//---------------------------------------------------------------- +// getChannelRelease +//---------------------------------------------------------------- +int DeicsOnze::getChannelRelease(int c) const { + return(_global.channel[c].release); +} +//---------------------------------------------------------------- +// getChannelReverb +//---------------------------------------------------------------- +int DeicsOnze::getChannelReverb(int c) const { + return(amp2lowlevel(_global.channel[c].reverbAmount)); +} +//---------------------------------------------------------------- +// getChannelChorus +//---------------------------------------------------------------- +int DeicsOnze::getChannelChorus(int c) const { + return(amp2lowlevel(_global.channel[c].chorusAmount)); +} +//---------------------------------------------------------------- +// getChannelDelay +//---------------------------------------------------------------- +int DeicsOnze::getChannelDelay(int c) const { + return(amp2lowlevel(_global.channel[c].delayAmount)); +} +//---------------------------------------------------------------- +// getChorusReturn +//---------------------------------------------------------------- +int DeicsOnze::getChorusReturn() const { + return(amp2level(_global.chorusReturn/2.0)); +} +//---------------------------------------------------------------- +// getReverbReturn +//---------------------------------------------------------------- +int DeicsOnze::getReverbReturn() const { + return(amp2level(_global.reverbReturn/2.0)); +} +//---------------------------------------------------------------- +// getReverbReturn +//---------------------------------------------------------------- +int DeicsOnze::getDelayReturn() const { + return(amp2level(_global.delayReturn/2.0)); +} + +//---------------------------------------------------------------- +// setLfo +//---------------------------------------------------------------- +void DeicsOnze::setLfo(int c/*channel*/) +{ + double x; + x=(double)_preset[c]->lfo.speed; + // lfoSpeed to Hz, obtained by fitting the actual curve by a polynomial + _global.channel[c].lfoFreq = + -1.9389e-08*x*x*x*x*x+2.8826e-06*x*x*x*x-9.0316e-05*x*x*x + +4.7453e-03*x*x-1.2295e-02*x+7.0347e-02;//a revoir + //Pitch LFO + _global.channel[c].lfoMaxIndex = + (_global.channel[c].lfoFreq==0?0:(int)((1.0/_global.channel[c].lfoFreq) + *(double)_global.deiSampleRate)); + double totalpDepth = + ((double)_preset[c]->lfo.pModDepth + + (((double)_global.channel[c].modulation)/127.0) + * ((double)(MAXPMODDEPTH - _preset[c]->lfo.pModDepth)) + )/(double)MAXPMODDEPTH; + _global.channel[c].lfoPitch = + totalpDepth * (COEFPLFO(_preset[c]->sensitivity.pitch)); + //Amplitude LFO + double totalaDepth = + ((double)_preset[c]->lfo.aModDepth + + (((double)_global.channel[c].modulation)/127.0) + * ((double)(MAXAMODDEPTH - _preset[c]->lfo.aModDepth)) + )/(double)MAXAMODDEPTH; + _global.channel[c].lfoMaxAmp = + totalaDepth * (COEFALFO(_preset[c]->sensitivity.amplitude)); + //index is concidered on the half of the frequency of the LFO + _global.channel[c].lfoDelayMaxIndex = + delay2Time(_preset[c]->lfo.delay)*_global.channel[c].lfoFreq*2; + _global.channel[c].lfoDelayInct = + (double)(RESOLUTION/4)/_global.channel[c].lfoDelayMaxIndex; + + //update the actuall values controlling the modulation now + if(_global.channel[c].lfoDelayIndex<(double)(RESOLUTION/4)) { + double delayCoef = + (double)waveTable[W2][(int)_global.channel[c].lfoDelayIndex]; + _global.channel[c].lfoMaxCoefInct = + exp((log(2.0)/12.0)*_global.channel[c].lfoPitch*delayCoef); + _global.channel[c].lfoCoefInctInct = + exp((log(2.0)/12.0)*((2*_global.channel[c].lfoPitch*delayCoef) + /_global.channel[c].lfoMaxIndex)); + _global.channel[c].lfoMaxDAmp = delayCoef*_global.channel[c].lfoMaxAmp; + } + else + if(_global.channel[c].delayPassed) { + _global.channel[c].lfoMaxCoefInct = + exp((log(2.0)/12.0)*_global.channel[c].lfoPitch); + _global.channel[c].lfoCoefInctInct= + exp((log(2.0)/12.0)*((2*_global.channel[c].lfoPitch) + /_global.channel[c].lfoMaxIndex)); + _global.channel[c].lfoMaxDAmp=_global.channel[c].lfoMaxAmp; + } +} + +//----------------------------------------------------------------- +// setOutLevel +//----------------------------------------------------------------- +void DeicsOnze::setOutLevel(int c, int k) { + for(int v=0; v<_global.channel[c].nbrVoices; v++) { + if(_global.channel[c].voices[v].op[k].envState!=OFF) { + _global.channel[c].voices[v].op[k].amp = + outLevel2Amp(_preset[c]->outLevel[k]) + * _global.channel[c].voices[v].op[k].ampVeloNote + * brightness2Amp(c, k); + } + } +} +void DeicsOnze::setOutLevel(int c) { + for(int k=0; keg[k].ar==0?0: + (double)(RESOLUTION/4)/(envAR2s(_preset[c]->eg[k].ar) + *_global.deiSampleRate)) + *coefAttack(_global.channel[c].attack); +} +void DeicsOnze::setEnvAttack(int c, int k) { + for(int v=0; v<_global.channel[c].nbrVoices; v++) setEnvAttack(c, v, k); +} +void DeicsOnze::setEnvAttack(int c) { + for(int k=0; keg[k].rr, _global.deiSampleRate, + _global.channel[c].release); +} +void DeicsOnze::setEnvRelease(int c, int k) { + for(int v=0; v<_global.channel[c].nbrVoices; v++) setEnvRelease(c, v, k); +} +void DeicsOnze::setEnvRelease(int c) { + for(int k=0; kpitchEg)) { + if(_global.channel[c].voices[v].pitchEnvCoefInct + > _global.channel[c].voices[v].pitchEnvCoefInctPhase1) { + _global.channel[c].voices[v].pitchEnvCoefInctInct = + getPitchEnvCoefInctInct(1, 0, _preset[c]->pitchEg.pr3, + _global.deiSampleRate); + _global.channel[c].voices[v].pitchEnvState = RELEASE_PE; + } + else if(_global.channel[c].voices[v].pitchEnvCoefInct + < _global.channel[c].voices[v].pitchEnvCoefInctPhase1) { + _global.channel[c].voices[v].pitchEnvCoefInctInct = + getPitchEnvCoefInctInct(0, 1, _preset[c]->pitchEg.pr3, + _global.deiSampleRate); + _global.channel[c].voices[v].pitchEnvState = RELEASE_PE; + } + else { + _global.channel[c].voices[v].pitchEnvCoefInctInct = 1.0; + _global.channel[c].voices[v].pitchEnvState = OFF_PE; + } + } +} + +//----------------------------------------------------------------- +// setQuality +//----------------------------------------------------------------- +void DeicsOnze::setQuality(Quality q) { + _global.quality = q; + switch(q) { + case high : + _global.qualityCounterTop = 1; + break; + case middle : + _global.qualityCounterTop = 2; + break; + case low : + _global.qualityCounterTop = 4; + break; + case ultralow : + _global.qualityCounterTop = 6; + break; + default : printf("Error switch setQuality : out of value\n"); + break; + } + //calculate _global.deiSampleRate + _global.deiSampleRate = (double)sampleRate() + / (double)_global.qualityCounterTop; + _global.qualityCounter = 0; + //update lfo to consider the new samplerate + for(int c = 0; c < 16; c++) if(_global.channel[c].isEnable) setLfo(c); + //update the cutoffs of the filters + _dryFilter->setCutoff(_global.deiSampleRate/4.0); + _reverbFilter->setCutoff(_global.deiSampleRate/4.0); + _chorusFilter->setCutoff(_global.deiSampleRate/4.0); + _delayFilter->setCutoff(_global.deiSampleRate/4.0); +} + +//----------------------------------------------------------------- +// setFilter +//----------------------------------------------------------------- +void DeicsOnze::setFilter(bool f) { + _global.filter = f; +} +//----------------------------------------------------------------- +// brightness2Amp +//----------------------------------------------------------------- +double DeicsOnze::brightness2Amp(int c, int k) { + if( + (k==1 && (_preset[c]->algorithm!=SIXTH || _preset[c]->algorithm!=SEVENTH + || _preset[c]->algorithm!=EIGHTH)) + || + (k==2 && (_preset[c]->algorithm==FIRST || _preset[c]->algorithm==SECOND + || _preset[c]->algorithm==THIRD || _preset[c]->algorithm==FOURTH)) + || + (k==3 && (_preset[c]->algorithm!=EIGHTH)) + ) { + double x = 2.0*(double)_global.channel[c].brightness + / (double)MAXFINEBRIGHTNESS; + double square_x = x*x; + return(square_x*x); + } + else return(1.0); +} +//----------------------------------------------------------------- +// setFeedback +//----------------------------------------------------------------- +void DeicsOnze::setFeedback(int c) { + _global.channel[c].feedbackAmp = + COEFFEEDBACK*exp(log(2)*(double)(_preset[c]->feedback-MAXFEEDBACK)); +} + +//----------------------------------------------------------------- +// setPreset +//----------------------------------------------------------------- + +void DeicsOnze::setPreset(int c) { + setFeedback(c); + setLfo(c); + setEnvAttack(c); + setEnvRelease(c); + setOutLevel(c); +} + + +inline double coarseFine2Ratio(int c,int f) { + double tab[64][16]= + { + {0.50,0.56,0.62,0.68,0.75,0.81,0.87,0.93,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}, + {0.71,0.79,0.88,0.96,1.05,1.14,1.23,1.32,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}, + {0.78,0.88,0.98,1.07,1.17,1.27,1.37,1.47,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}, + {0.87,0.97,1.08,1.18,1.29,1.40,1.51,1.62,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}, + {1.00,1.06,1.12,1.18,1.25,1.31,1.37,1.43,1.50,1.56,1.62,1.68,1.75,1.81,1.87,1.93}, + {1.41,1.49,1.58,1.67,1.76,1.85,1.93,2.02,2.11,2.20,2.29,2.37,2.46,2.55,2.64,2.73}, + {1.57,1.66,1.76,1.86,1.96,2.06,2.15,2.25,2.35,2.45,2.55,2.64,2.74,2.84,2.94,3.04}, + {1.73,1.83,1.94,2.05,2.16,2.27,2.37,2.48,2.59,2.70,2.81,2.91,3.02,3.13,3.24,3.35}, + {2.00,2.06,2.12,2.18,2.25,2.31,2.37,2.43,2.50,2.56,2.62,2.68,2.75,2.81,2.87,2.93}, + {2.82,2.90,2.99,3.08,3.17,3.26,3.34,3.43,3.52,3.61,3.70,3.78,3.87,3.96,4.05,3.14}, + {3.00,3.06,3.12,3.18,3.25,3.31,3.37,3.43,3.50,3.56,3.62,3.68,3.75,3.81,3.87,3.93} , + {3.14,3.23,3.33,3.43,3.53,3.63,3.72,3.82,3.92,4.02,4.12,4.21,4.31,4.41,4.51,4.61}, + {3.46,3.56,3.67,3.78,3.89,4.00,4.10,4.21,4.32,4.43,4.54,4.64,4.75,4.86,4.97,5.08}, + {4.00,4.06,4.12,4.18,4.25,4.31,4.37,4.43,4.50,4.56,4.62,4.68,4.75,4.81,4.87,4.93}, + {4.24,4.31,4.40,4.49,4.58,4.67,4.75,4.84,4.93,5.02,5.11,5.19,5.28,5.37,5.46,5.55}, + {4.71,4.80,4.90,5.00,5.10,5.20,5.29,5.39,5.49,5.59,5.69,5.78,5.88,5.98,6.08,6.18}, + {5.00,5.06,5.12,5.18,5.25,5.31,5.37,5.43,5.50,5.56,5.62,5.68,5.75,5.81,5.87,5.93}, + {5.19,5.29,5.40,5.51,5.62,5.73,5.83,5.94,6.05,6.16,6.27,6.37,6.48,6.59,6.70,6.81}, + {5.65,5.72,5.81,5.90,5.99,6.08,6.16,6.25,6.34,6.43,6.52,6.60,6.69,6.78,6.87,6.96}, + {6.00,6.06,6.12,6.18,6.25,6.31,6.37,6.43,6.50,6.56,6.62,6.68,6.75,6.81,6.87,6.93}, + {6.28,6.37,6.47,6.57,6.67,6.77,6.86,6.96,7.06,7.16,7.26,7.35,7.45,7.55,7.65,7.75}, + {6.92,7.02,7.13,7.24,7.35,7.46,7.56,7.67,7.78,7.89,8.00,8.10,8.21,8.32,8.43,8.54}, + {7.00,7.06,7.12,7.18,7.25,7.31,7.37,7.43,7.50,7.56,7.62,7.68,7.75,7.81,7.87,7.93}, + {7.07,7.13,7.22,7.31,7.40,7.49,7.57,7.66,7.75,7.84,7.93,8.01,8.10,8.19,8.28,8.37}, + {7.85,7.94,8.04,8.14,8.24,8.34,8.43,8.53,8.63,8.73,8.83,8.92,9.02,9.12,9.22,9.32}, + {8.00,8.06,8.12,8.18,8.25,8.31,8.37,8.43,8.50,8.56,8.62,8.68,8.75,8.81,8.87,8.93}, + {8.48,8.54,8.63,8.72,8.81,8.90,8.98,9.07,9.16,9.25,9.34,9.42,9.51,9.60,9.69,9.78}, + {8.65,8.75,8.86,8.97,9.08,9.19,9.29,9.40,9.51,9.62,9.73,9.83,9.94,10.05,10.16,10.27}, + {9.00,9.06,9.12,9.18,9.25,9.31,9.37,9.43,9.50,9.56,9.62,9.68,9.75,9.81,9.87,9.93}, + {9.42,9.51,9.61,9.71,9.81,9.91,10.00,10.10,10.20,10.30,10.40,10.49,10.59,10.69,10.79,10.89}, + {9.89,9.95,10.04,10.13,10.22,10.31,10.39,10.48,10.57,10.66,10.75,10.83,10.92,11.01,11.10,11.19}, + {10.00,10.06,10.12,10.18,10.25,10.31,10.37,10.43,10.50,10.56,10.62,10.68,10.75,10.81,10.87,10.93}, + {10.38,10.48,10.59,10.70,10.81,10.92,11.02,11.13,11.24,11.35,11.46,11.56,11.67,11.78,11.89,12.00}, + {10.99,11.08,11.18,11.28,11.38,11.48,11.57,11.67,11.77,11.87,11.97,12.06,12.16,12.26,12.36,12.46}, + {11.00,11.06,11.12,11.18,11.25,11.31,11.37,11.43,11.50,11.56,11.62,11.68,11.75,11.81,11.87,11.93}, + {11.30,11.36,11.45,11.54,11.63,11.72,11.80,11.89,11.98,12.07,12.16,12.24,12.33,12.42,12.51,12.60}, + {12.00,12.06,12.12,12.18,12.25,12.31,12.37,12.43,12.50,12.56,12.62,12.68,12.75,12.81,12.87,12.93}, + {12.11,12.21,12.32,12.43,12.54,12.65,12.75,12.86,12.97,13.08,13.19,13.29,13.40,13.51,13.62,13.73}, + {12.56,12.65,12.75,12.85,12.95,13.05,13.14,13.24,13.34,13.44,13.54,13.63,13.73,13.83,13.93,14.03}, + {12.72,12.77,12.86,12.95,13.04,13.13,13.21,13.30,13.39,13.48,13.57,13.65,13.74,13.83,13.92,14.01}, + {13.00,13.06,13.12,13.18,13.25,13.31,13.37,13.43,13.50,13.56,13.62,13.68,13.75,13.81,13.87,13.93}, + {13.84,13.94,14.05,14.16,14.27,14.38,14.48,14.59,14.70,14.81,14.92,15.02,15.13,15.24,15.35,15.46}, + {14.00,14.06,14.12,14.18,14.25,14.31,14.37,14.43,14.50,14.56,14.62,14.68,14.75,14.81,14.87,14.93}, + {14.10,14.18,14.27,14.36,14.45,14.54,14.62,14.71,14.80,14.89,14.98,15.06,15.15,15.24,15.33,15.42}, + {14.13,14.22,14.32,14.42,14.52,14.62,14.71,14.81,14.91,15.01,15.11,15.20,15.30,15.40,15.50,15.60}, + {15.00,15.06,15.12,15.18,15.25,15.31,15.37,15.43,15.50,15.56,15.62,15.68,15.75,15.81,15.87,15.93}, + {15.55,15.59,15.68,15.77,15.86,15.95,16.03,16.12,16.21,16.30,16.39,16.47,16.56,16.65,16.74,16.83}, + {15.57,15.67,15.78,15.89,16.00,16.11,16.21,16.32,16.43,16.54,16.65,16.75,16.86,16.97,17.08,17.19}, + {15.70,15.79,15.89,15.99,16.09,16.19,16.28,16.38,16.48,16.58,16.68,16.77,16.87,16.97,17.07,17.17}, + {16.96,17.00,17.09,17.18,17.27,17.36,17.44,17.53,17.62,17.71,17.80,17.88,17.97,18.06,18.15,18.24}, + {17.27,17.36,17.46,17.56,17.66,17.76,17.85,17.95,18.05,18.15,18.25,18.34,18.44,18.54,18.64,18.74}, + {17.30,17.40,17.51,17.62,17.73,17.84,17.94,18.05,18.16,18.27,18.38,18.48,18.59,18.70,18.81,18.92}, + {18.37,18.41,18.50,18.59,18.68,18.77,18.85,18.94,19.03,19.12,19.21,19.29,19.38,19.47,19.56,19.65}, + {18.84,18.93,19.03,19.13,19.23,19.33,19.42,19.52,19.62,19.72,19.82,19.91,20.01,20.11,20.21,20.31}, + {19.03,19.13,19.24,19.35,19.46,19.57,19.67,19.78,19.89,20.00,20.11,20.21,20.32,20.43,20.54,20.65}, + {19.78,19.82,19.91,20.00,20.09,20.18,20.26,20.35,20.44,20.53,20.62,20.70,20.79,20.88,20.97,21.06}, + {20.41,20.50,20.60,20.70,20.80,20.90,20.99,21.09,21.19,21.29,21.39,21.48,21.58,21.68,21.78,21.88}, + {20.76,20.86,20.97,21.08,21.19,21.30,21.40,21.51,21.62,21.73,21.84,21.94,22.05,22.16,22.27,22.38}, + {21.20,21.23,21.32,21.41,21.50,21.59,21.67,21.76,21.85,21.94,22.03,22.11,22.20,22.29,22.38,22.47}, + {21.98,22.07,22.17,22.17,22.37,22.47,22.56,22.66,22.76,22.86,22.96,23.05,23.15,23.25,23.35,23.45}, + {22.49,22.59,22.70,22.81,22.92,23.03,23.13,13.24,13.35,13.46,13.57,13.67,13.78,13.89,24.00,24.11}, + {23.55,23.64,23.74,23.84,23.94,24.04,24.13,24.23,24.33,24.43,24.53,24.62,24.72,24.82,24.92,25.02}, + {24.22,24.32,24.43,24.54,24.65,24.76,24.86,24.97,25.08,25.19,25.30,25.40,25.51,25.62,25.73,25.84}, + {25.95,26.05,26.16,26.27,26.38,26.49,26.59,26.70,26.81,26.92,27.03,27.13,27.24,27.35,27.46,27.57} + }; + return(tab[c][f]); +} + +//--------------------------------------------------------------- +// loadSet +//--------------------------------------------------------------- +void DeicsOnze::loadSet(QString fileName) { + // read the XML file and create DOM tree + if(!fileName.isEmpty()) { + QFile deicsonzeFile(fileName); + if(!deicsonzeFile.open(QIODevice::ReadOnly)) { + printf("Critical Error Cannot open file %s\n", + fileName.toAscii().data()); + return; + } + QDomDocument domTree; + if (!domTree.setContent(&deicsonzeFile )) { + printf("Critical Error Parsing error for file %s\n", + fileName.toAscii().data()); + deicsonzeFile.close(); + return; + } + deicsonzeFile.close(); + + QDomNode node = domTree.documentElement(); + while (!node.isNull()) { + QDomElement e = node.toElement(); + if (e.isNull()) + continue; + if (e.tagName() == "deicsOnzeSet") { + QString version = e.attribute(QString("version")); + if (version == "1.0") { + for(int c = 0; c_categoryVector.empty()) + delete(*_set->_categoryVector.begin()); + _set->readSet(node.firstChild()); + //display load preset + unsigned char dataUpdateGuiSet[1]; + dataUpdateGuiSet[0]=SYSEX_UPDATESETGUI; + MidiEvent evSysexUpdateGuiSet(0, ME_SYSEX, + (const unsigned char*)dataUpdateGuiSet, + 1); + _gui->writeEvent(evSysexUpdateGuiSet); + } + else printf("unsupported *.dei file version %s\n", + version.toLatin1().data()); + } + else printf("DeicsOnze: %s not supported\n", + e.tagName().toLatin1().data()); + node = node.nextSibling(); + } + } +} +//--------------------------------------------------------------- +// loadSutulaPreset +//--------------------------------------------------------------- + +void DeicsOnze::loadSutulaPresets() +{ + FILE* file; + int v; + int crs[NBROP], fin[NBROP]; //coarse ratio, fine ratio + char s[500]; + char sname[LENGTHNAME+1]; + char scategory[LENGTHCATEGORY+1]; + char ssubcategory[LENGTHSUBCATEGORY+1]; + int k; + int nhBank, nlBank, nPreset; + Preset* presetTemp; + Subcategory* subcategoryTemp = NULL; + Category* categoryTemp = NULL; + + if(!_set) _set=new Set("Sutula Bank"); + + nhBank=0; + nlBank=0; + nPreset=0; + + //QString presetPath(INSTPREFIX); + //presetPath += "/share/" PACKAGEVERSION "/presets/deicsonze/ARCH_ALIN"; + + QString presetPath("/home/a-lin/sources/svnMusEDev/lmuse/muse/synti/deicsonze/ARCH_ALIN"); + + file = fopen (presetPath.toLatin1().data(), "rt"); + if (file == NULL) { + printf("can't open "); + printf(presetPath.toLatin1().data()); + printf("\n"); + } + else + { + while(fgets(s, 500, file) && !strstr(s, "** Source:")) + { + if (strstr(s,"* CATEGORY")) + { + sscanf(s, "* CATEGORY %s", scategory); + categoryTemp=new Category(_set, scategory,0); + } + if (strstr(s,"* SUBCATEGORY")) + { + sscanf(s, "* SUBCATEGORY %s", ssubcategory); + subcategoryTemp=new Subcategory(categoryTemp,ssubcategory,0); + nlBank++; + } + } + while(!feof(file)) + { + + presetTemp=new Preset(subcategoryTemp); + // Fill the preset + //OP.4 to OP.1 + for(int kaka=(NBROP-1); kaka>=0; kaka--) + { + k=(kaka==2?1:(kaka==1?2:kaka)); + + fscanf(file, "%x", &v);//0 + presetTemp->eg[k].ar=v; + fscanf(file, "%x", &v);//1 + presetTemp->eg[k].d1r=v; + fscanf(file, "%x", &v);//2 + presetTemp->eg[k].d2r=v; + fscanf(file, "%x", &v);//3 + presetTemp->eg[k].rr=v; + fscanf(file, "%x", &v);//4 + presetTemp->eg[k].d1l=v; + fscanf(file, "%x", &v);//5 + presetTemp->scaling.level[k]=v; + fscanf(file, "%x", &v);//6 + presetTemp->sensitivity.keyVelocity[k]= + v & 0x7; + presetTemp->sensitivity.egBias[k]= + (v & 0x38)>>3; + presetTemp->sensitivity.ampOn[k]= + (v & 0x40)>>6; + fscanf(file, "%x", &v);//7 + presetTemp->outLevel[k]=v; + fscanf(file, "%x", &v);//8 + crs[k]=v; + fscanf(file, "%x", &v);//9 + presetTemp->detune[k]=(v & 0x7)-3; + presetTemp->scaling.rate[k]=(v & 0x18)>>3; + } + fscanf(file, "%x", &v);//40 + presetTemp->algorithm= + ((v & 0x7)==0?FIRST: + ((v & 0x7)==1?SECOND: + ((v & 0x7)==2?THIRD: + ((v & 0x7)==3?FOURTH: + ((v & 0x7)==4?FIFTH: + ((v & 0x7)==5?SIXTH: + ((v & 0x7)==6?SEVENTH:EIGHTH))))))); + presetTemp->feedback=(v & 0x38)>>3; + presetTemp->lfo.sync=(v & 0x40)>>6; + fscanf(file, "%x", &v);//41 + presetTemp->lfo.speed=v; + fscanf(file, "%x", &v);//42 + presetTemp->lfo.delay=v; + fscanf(file, "%x", &v);//43 + presetTemp->lfo.pModDepth=v; + fscanf(file, "%x", &v);//44 + presetTemp->lfo.aModDepth=v; + fscanf(file, "%x", &v);//45 + presetTemp->lfo.wave= + ((v & 0x3)==0?SAWUP: + ((v & 0x3)==1?SQUARE: + ((v & 0x3)==2?TRIANGL:SHOLD))); + presetTemp->sensitivity.amplitude=(v & 0xc)>>2; + presetTemp->sensitivity.pitch=(v & 0x70)>>4; + fscanf(file, "%x", &v);//46 + presetTemp->function.transpose=v-24; + fscanf(file, "%x", &v);//47 + presetTemp->function.pBendRange=v; + fscanf(file, "%x", &v);//48 + presetTemp->function.portamento= + ((v & 0x1)==0?FULL:FINGER); + presetTemp->function.footSw= + ((v & 0x4)==0?SUS:POR); + presetTemp->function.mode= + ((v & 0x8)==0?POLY:MONO); + fscanf(file, "%x", &v);//49 + presetTemp->function.portamentoTime=v; + fscanf(file, "%x", &v);//50 + presetTemp->function.fcVolume=v; + fscanf(file, "%x", &v);//51 + presetTemp->function.mwPitch=v; + fscanf(file, "%x", &v);//52 + presetTemp->function.mwAmplitude=v; + fscanf(file, "%x", &v);//53 + presetTemp->function.bcPitch=v; + fscanf(file, "%x", &v);//54 + presetTemp->function.bcAmplitude=v; + fscanf(file, "%x", &v);//55 + presetTemp->function.bcPitchBias=v; + fscanf(file, "%x", &v);//56 + presetTemp->function.bcEgBias=v; + for(int l=0; l<10; l++) + { + fscanf(file, "%x", &v);//57 to 66 + sname[l]=(char)v; + } + sname[10]='\0'; + presetTemp->name=sname; + fscanf(file, "%x", &v);//67 + presetTemp->pitchEg.pr1=v; + fscanf(file, "%x", &v);//68 + presetTemp->pitchEg.pr2=v; + fscanf(file, "%x", &v);//69 + presetTemp->pitchEg.pr3=v; + fscanf(file, "%x", &v);//70 + presetTemp->pitchEg.pl1=v; + fscanf(file, "%x", &v);//71 + presetTemp->pitchEg.pl1=v; + fscanf(file, "%x", &v);//72 + presetTemp->pitchEg.pl1=v; + for(int kaka=(NBROP-1); kaka>=0; kaka--) + { + k=(kaka==2?1:(kaka==1?2:kaka)); + + fscanf(file, "%x", &v);//73, 75, 77, 79 + presetTemp->frequency[k].isFix=(v & 0x8)>>3; + presetTemp->frequency[k].freq=((v & 0x7)==0?8:(v & 0x7)*16); + presetTemp->eg[k].egShift= + (((v & 0x30)>>4)==0?VOF: + (((v & 0x30)>>4)==1?V48: + (((v & 0x30)>>4)==2?V24:V12))); + fscanf(file, "%x", &v);//74, 76, 78, 80 + fin[k]=v & 0xF; + presetTemp->frequency[k].freq+=fin[k]; + presetTemp->frequency[k].ratio= + coarseFine2Ratio(crs[k],fin[k]); + presetTemp->oscWave[k]= + (((v & 0x70)>>4)==0?W1: + (((v & 0x70)>>4)==1?W2: + (((v & 0x70)>>4)==2?W3: + (((v & 0x70)>>4)==3?W4: + (((v & 0x70)>>4)==4?W5: + (((v & 0x70)>>4)==5?W6: + (((v & 0x70)>>4)==6?W7:W8))))))); + } + fscanf(file, "%x", &v);//81 + presetTemp->function.reverbRate=v; + fscanf(file, "%x", &v);//82 + presetTemp->function.fcPitch=v; + fscanf(file, "%x", &v);//83 + presetTemp->function.fcAmplitude=v; + //presetTemp->globalDetune=0; + presetTemp->prog=nPreset; + // End of filling the preset + + nPreset++; + while(fgets(s, 500, file) && !strstr(s, "** Source:")) + { + if (strstr(s,"* CATEGORY")) + { + sscanf(s, "* CATEGORY %s", scategory); + nhBank++; + categoryTemp=new Category(_set,scategory,nhBank); + nlBank=0; + } + if (strstr(s,"* SUBCATEGORY")) + { + sscanf(s, "* SUBCATEGORY %s", ssubcategory); + subcategoryTemp=new + Subcategory(categoryTemp,ssubcategory,nlBank); + nlBank++; + nPreset=0; + } + } + } + } + fclose(file); +} + +//--------------------------------------------------------- +// minVolu2Voice +// return the number of the voice which is the least aloud +// and is not is the ATTACK state +//--------------------------------------------------------- +int DeicsOnze::minVolu2Voice(int c) { + int minVoice=0; + double min=MAXVOLUME; + for(int i=0; i<_global.channel[c].nbrVoices; i++) + { + min=((min>_global.channel[c].voices[i].volume + && _global.channel[c].voices[i].op[0].envState!=ATTACK + && _global.channel[c].voices[i].op[1].envState!=ATTACK + && _global.channel[c].voices[i].op[2].envState!=ATTACK + && _global.channel[c].voices[i].op[3].envState!=ATTACK)? + _global.channel[c].voices[i].volume:min); + minVoice=(min==_global.channel[c].voices[i].volume?i:minVoice); + } + return minVoice; +} + +//--------------------------------------------------------- +// noteOff2Voice +// return the number of one off voice, MAXNBRVOICES otherwise +//--------------------------------------------------------- +int DeicsOnze::noteOff2Voice(int c) { + int offVoice=MAXNBRVOICES; + for(int i=0; i<_global.channel[c].nbrVoices; i++) + offVoice = (_global.channel[c].voices[i].isOn + || _global.channel[c].voices[i].keyOn? + offVoice:i); + return offVoice; +} + +//--------------------------------------------------------- +// pitchOn2Voice +// return the number of the voice which has the input +// pitch and is keyOn +//--------------------------------------------------------- +int DeicsOnze::pitchOn2Voice(int c, int pitch) { + int pitchVoice=MAXNBRVOICES; + for(int i=0; i<_global.channel[c].nbrVoices; i++) { + if(_global.channel[c].voices[i].pitch== + pitch && _global.channel[c].voices[i].keyOn + && !_global.channel[c].voices[i].isSustained) { + pitchVoice = i; + return pitchVoice; + } + } + return pitchVoice; +} + +//--------------------------------------------------------- +// getAttractor +//--------------------------------------------------------- +inline double getAttractor(int portamentoTime, double sr) { + /* some explanations + + c(48000) = c > 1 + + f_sr(0) = 1000, f_sr(t) = 2000 + + f_sr*2(0) = 1000, f_sr*2(t*2) = 2000 + + f_sr(t) = exp(t*ln(c(sr))) * 1000 + + 2000 = exp(t*ln(c(48000))) * 1000 + + 2000 = exp(t*2*ln(c(48000*2))) * 1000 + + t*ln(c(48000)) = t*2*ln(c(48000*2)) + + c(48000*m) = exp(ln(c)/m) + + sr = 48000*m + */ + double c; + c = 1.0 + COEFPORTA/(double)(portamentoTime*portamentoTime); + return(exp(log(c)*48000.0/sr)); +} + +//--------------------------------------------------------- +// pitch2freq +//--------------------------------------------------------- +inline double pitch2freq(double p) { + return(LOWERNOTEFREQ*exp(p*log(2.0)/12.0)); +} + +//--------------------------------------------------------- +// lfoUpdate +// update the coefficent which multiplies the current inct +// in order to +// get the right current frequency with respect to the lfo +// update the coefficent which multiplies the amplitude. +//--------------------------------------------------------- +inline void lfoUpdate(Preset* p, Channel* p_c, float* wt) { + double delayCoef; + + //Manage LFO delay + if(!p_c->delayPassed) { + if(p_c->lfoIndex==0 || p_c->lfoIndex==p_c->lfoMaxIndex/2) { + if(p_c->lfoDelayIndex<(double)(RESOLUTION/4)) { + delayCoef=(double)wt[(int)p_c->lfoDelayIndex]; + p_c->lfoMaxCoefInct=exp((log(2.0)/12.0)*p_c->lfoPitch*delayCoef); + p_c->lfoCoefInctInct= + exp((log(2.0)/12.0)*((2*p_c->lfoPitch*delayCoef)/p_c->lfoMaxIndex)); + p_c->lfoDelayIndex+=p_c->lfoDelayInct; + p_c->lfoMaxDAmp=delayCoef*p_c->lfoMaxAmp; + } + else { + p_c->lfoMaxCoefInct=exp((log(2.0)/12.0)*p_c->lfoPitch); + p_c->lfoCoefInctInct= + exp((log(2.0)/12.0)*((2*p_c->lfoPitch)/p_c->lfoMaxIndex)); + p_c->delayPassed=true; + p_c->lfoMaxDAmp=p_c->lfoMaxAmp; + } + } + } + switch(p->lfo.wave) { + case SAWUP : + if(p_c->lfoIndex==0) { + p_c->lfoCoefInct=1.0/(p_c->lfoMaxCoefInct); + p_c->lfoCoefAmp=p_c->lfoMaxDAmp/(double)p_c->lfoMaxIndex; + p_c->lfoAmp=1.0; + } + else { + p_c->lfoCoefInct*=p_c->lfoCoefInctInct; + p_c->lfoAmp-=p_c->lfoCoefAmp; + } + break; + case SQUARE : + if(p_c->lfoIndex==0) { + p_c->lfoCoefInct=p_c->lfoMaxCoefInct; + p_c->lfoAmp=1.0; + } + if(p_c->lfoIndex==(p_c->lfoMaxIndex/2)) { + p_c->lfoCoefInct=1.0/p_c->lfoMaxCoefInct; + p_c->lfoAmp=1.0-p_c->lfoMaxDAmp; + } + break; + case TRIANGL : + if(p_c->lfoIndex==0) { + p_c->lfoCoefInct=1.0; + p_c->lfoCoefAmp=p_c->lfoMaxDAmp + /(double)(p_c->lfoMaxIndex/2); + p_c->lfoAmp=1.0-p_c->lfoMaxDAmp/2.0; + } + else if(p_c->lfoIndex<(p_c->lfoMaxIndex/4)) { + p_c->lfoCoefInct*=p_c->lfoCoefInctInct; + p_c->lfoAmp-=p_c->lfoCoefAmp; + } + else if(p_c->lfoIndex<((3*p_c->lfoMaxIndex)/4)) { + p_c->lfoCoefInct/=p_c->lfoCoefInctInct; + p_c->lfoAmp+=p_c->lfoCoefAmp; + } + else if(p_c->lfoIndexlfoMaxIndex) { + p_c->lfoCoefInct*=p_c->lfoCoefInctInct; + p_c->lfoAmp-=p_c->lfoCoefAmp; + } + break; + case SHOLD : + if(p_c->lfoIndex==0||p_c->lfoIndex==(p_c->lfoMaxIndex/2)) { + double r;//uniform random between -1.0 and 1.0 + r = (double)(2*rand()-RAND_MAX)/(double)RAND_MAX; + p_c->lfoCoefInct=(r>=0.0?1.0+r*(p_c->lfoMaxCoefInct-1.0) + :1.0/(1.0-r*(p_c->lfoMaxCoefInct-1.0))); + p_c->lfoAmp=1.0-(r/2.0+0.5)*p_c->lfoMaxDAmp; + } + break; + default : printf("Error : lfo wave does not exist\n"); + break; + } + p_c->lfoIndex=(p_c->lfoIndexlfoMaxIndex?p_c->lfoIndex+1:0); +} + +//--------------------------------------------------------- +// portamento update +//--------------------------------------------------------- +inline void portamentoUpdate(Channel* p_c, Voice* p_v) { + double inctTemp; + bool allTargetReached; + if(p_v->hasAttractor) { + allTargetReached = true; + for(int k = 0; kop[k].inct < p_v->op[k].targetInct) { + inctTemp = p_v->op[k].inct * p_v->attractor; + if(inctTemp < p_v->op[k].targetInct) { + allTargetReached = false; + p_v->op[k].inct = inctTemp; + } + else p_v->op[k].inct = p_v->op[k].targetInct; + } + else if(p_v->op[k].inct > p_v->op[k].targetInct) { + inctTemp = p_v->op[k].inct / p_v->attractor; + if(inctTemp > p_v->op[k].targetInct) { + allTargetReached = false; + p_v->op[k].inct = inctTemp; + } + else p_v->op[k].inct = p_v->op[k].targetInct; + } + p_c->lastInc[k] = p_v->op[k].inct; + } + if(allTargetReached) p_v->hasAttractor = false; + } +} + + +//--------------------------------------------------------- +// pitchEnvelopeUpdate +//--------------------------------------------------------- +inline void pitchEnvelopeUpdate(Voice* v, PitchEg* pe, double sr) { + if(v->pitchEnvState != OFF_PE) { + switch(v->pitchEnvState) { + case PHASE1 : + if( //change to phase2 + (v->pitchEnvCoefInctInct == 1.0) + || (v->pitchEnvCoefInctInct > 1.0 && + v->pitchEnvCoefInct > v->pitchEnvCoefInctPhase2) + || (v->pitchEnvCoefInctInct < 1.0 && + v->pitchEnvCoefInct < v->pitchEnvCoefInctPhase2) + ) { + v->pitchEnvState = PHASE2; + v->pitchEnvCoefInct = getPitchEnvCoefInct(pe->pl2); + v->pitchEnvCoefInctInct = + getPitchEnvCoefInctInct(pe->pl2, pe->pl3, pe->pr2, sr); + } + else v->pitchEnvCoefInct *= v->pitchEnvCoefInctInct; + break; + case PHASE2 : + if( //change to off (temporarely) + (v->pitchEnvCoefInctInct == 1.0) + || (v->pitchEnvCoefInctInct > 1.0 && + v->pitchEnvCoefInct > v->pitchEnvCoefInctPhase3) + || (v->pitchEnvCoefInctInct < 1.0 && + v->pitchEnvCoefInct < v->pitchEnvCoefInctPhase3) + ) { + v->pitchEnvState = OFF_PE; + v->pitchEnvCoefInct = getPitchEnvCoefInct(pe->pl3); + v->pitchEnvCoefInctInct = 1.0; + } + else v->pitchEnvCoefInct *= v->pitchEnvCoefInctInct; + break; + case RELEASE_PE : + if( //change to release2 + (v->pitchEnvCoefInctInct == 1.0) + || (v->pitchEnvCoefInctInct > 1.0 && + v->pitchEnvCoefInct > v->pitchEnvCoefInctPhase1) + || (v->pitchEnvCoefInctInct < 1.0 && + v->pitchEnvCoefInct < v->pitchEnvCoefInctPhase1) + ) { + v->pitchEnvState = OFF_PE; + v->pitchEnvCoefInct = getPitchEnvCoefInct(pe->pl1); + v->pitchEnvCoefInctInct = 1.0; + } + else v->pitchEnvCoefInct *= v->pitchEnvCoefInctInct; + break; + case OFF_PE : + //do nothing, should not appear anyway + break; + default : + printf("Error switch pitchEnvelopeUpdate, no such case\n"); + break; + } + } +} + +//--------------------------------------------------------- +// outLevel2Amp, Amp for amplitude //between 0.0 and 2.0 or more +// 100->2.0, 90->1.0, 80->0.5 ... +//--------------------------------------------------------- +inline double outLevel2Amp(int ol) { + double a; + double b; + a = log(2)/10.0; + b = -a*DB0LEVEL; + return exp(a*(double)ol+b); +} + +//--------------------------------------------------------- +// lowlevel2amp, +// 127->0dB->1.0, 0->-25dB->0 +//--------------------------------------------------------- +inline double lowlevel2amp(int l) { + double a, b, c, db; + if(l==0) return 0.0; + else { + a = DB_MIN/127.0; + b = -DB_MIN; + db = a*l+b; + c = -log(2)/3; + return exp(-c*db); + } +} + +//--------------------------------------------------------- +// level2amp, +// 255->0dB->1.0, 0->-25dB->0 +//--------------------------------------------------------- +inline double level2amp(int l) { + double a, b, c, db; + if(l==0) return 0.0; + else { + a = DB_MIN/255.0; + b = -DB_MIN; + db = a*l+b; + c = -log(2.0)/3.0; + return exp(-c*db); + } +} + +//--------------------------------------------------------- +// amp2level +// 1.0->0dB->255, 0->-25dB->0 +//--------------------------------------------------------- +inline int amp2level(double amp){ + double a, b, c; + a = 255.0/DB_MIN; + b = 255.0; + c = log(2.0)/3.0; + return (int)(a*(log(amp)/c)+b); +} + +//--------------------------------------------------------- +// amp2lowlevel +// 1.0->0dB->127, 0->-25dB->0 +//--------------------------------------------------------- +inline int amp2lowlevel(double amp){ + double a, b, c; + a = 127.0/DB_MIN; + b = 127.0; + c = log(2.0)/3.0; + return (int)(a*(log(amp)/c)+b); +} + +//--------------------------------------------------------- +// velo2RAmp, AmpR between 0.0 and 1.0 +// return an amplitude ratio with respect to _preset->sensitivity.keyVelocity +//--------------------------------------------------------- +inline double velo2AmpR(int velo, int kvs) { + double lev; + lev = exp(-log(2)*kvs); + return (lev+(1.0-lev)*((double)velo/(double)MAXVELO)); +} + +//--------------------------------------------------------- +// envAR2s +// return the time in second of the ATTACK duration +//--------------------------------------------------------- +inline double envAR2s(int ar) { + //determined using the fitting feature of gnuplot + return 10.4423*exp(-0.353767*ar); +} + +//--------------------------------------------------------- +// envD1R2coef +// return the coefficient for the exponential decrease +// with respect to d1r and sampleRate, sr +//--------------------------------------------------------- +inline double envD1R2coef(int d1r, double sr) { + double dt;//such that amp(t+dt)=amp(t)/2 + double alpha;//such that amp(t)=exp(alpha*t) + + if(d1r==0) return 1.0; + else + { + //dt has been determined with the fitting function of gnuplot + dt=9.80715*exp(-0.356053*(double)d1r); + + //amp(0)=1 + //amp(t+dt)=amp(t)/2 + //amp(t)=exp(alpha*t) + //amp(t+mt) + //following the above equational system we found : + alpha=-log(2)/dt; + return exp(alpha/sr); + } +} + +//--------------------------------------------------------- +// coefRelease +// convert the release value to a coef for coefVLevel +//--------------------------------------------------------- +inline double coefRelease(unsigned char release) { + double x = COEFGRELEASE*(double)release/(double)MIDRELEASE+1.0-COEFGRELEASE; + double square_x = x*x; + return(1.0/(square_x*x)); +} + +//--------------------------------------------------------- +// envRR2coef +// return the coefficient for the exponential decrease +// with respect to rr and sampleRate, sr +//--------------------------------------------------------- +inline double envRR2coef(int rr, double sr, unsigned char release) { + double dt;//such that amp(t+dt)=amp(t)/2 + double alpha;//such that amp(t)=exp(alpha*t) + + //dt has been determined with the fitting function of gnuplot + dt=7.06636*exp(-0.697606*(double)rr); + + dt*=coefRelease(release); + //printf("demi life = %e\n", dt); + //amp(0)=1 + //amp(t+dt)=amp(t)/2 + //amp(t)=exp(alpha*t) + //amp(t+mt) + //following the above equational system we found : + alpha=-log(2)/dt; + return exp(alpha/sr); +} + +//--------------------------------------------------------- +// coefAttack +// convert the attack value to a coef for envInct +//--------------------------------------------------------- +inline double coefAttack(unsigned char attack) { + double x = COEFGATTACK*(double)attack/(double)MIDATTACK + 1.0-COEFGATTACK; + double square_x = x*x; + return(square_x*square_x*x); +} + +//--------------------------------------------------------- +// env2RAmp +// return the amplitude ratio with respect to an envelope and an +// envelope state, making evoluate the envelope +// sr is the sample rate and st the sine_table +//--------------------------------------------------------- +inline double env2AmpR(double sr, float* wt, Eg eg, OpVoice* p_opVoice) { + switch(p_opVoice->envState) { + case ATTACK: + p_opVoice->envIndex+=p_opVoice->envInct; + if (p_opVoice->envIndex<(RESOLUTION/4)) { + p_opVoice->envLevel=wt[(int)p_opVoice->envIndex]; + } + else { + p_opVoice->envState=DECAY; + p_opVoice->envLevel=1.0; + p_opVoice->coefVLevel=envD1R2coef(eg.d1r, sr); + } + return p_opVoice->envLevel; + break; + case DECAY: + if (p_opVoice->envLevel>((double)eg.d1l/(double)MAXD1L)+COEFERRDECSUS) { + p_opVoice->envLevel*=p_opVoice->coefVLevel; + } + else { + p_opVoice->envState=SUSTAIN; + p_opVoice->envLevel=((double)eg.d1l/(double)MAXD1L); + p_opVoice->coefVLevel=envD1R2coef(eg.d2r, sr);//probably the same + } + return p_opVoice->envLevel; + break; + case SUSTAIN: + if (p_opVoice->envLevel>COEFERRSUSREL) { + p_opVoice->envLevel*=p_opVoice->coefVLevel; + } + else { + p_opVoice->envState=OFF; + p_opVoice->envLevel=0.0; + } + return p_opVoice->envLevel; + break; + case RELEASE: + if (p_opVoice->envLevel > COEFERRSUSREL) { + p_opVoice->envLevel*=p_opVoice->coefVLevel; + } + else { + p_opVoice->envState=OFF; + p_opVoice->envLevel=0.0; + } + return p_opVoice->envLevel; + break; + case OFF: return 0.0; + break; + default: printf("Error case envelopeState"); + break; + } + return p_opVoice->envLevel; +} + +//--------------------------------------------------------- +// programSelect +//--------------------------------------------------------- + +void DeicsOnze::programSelect(int c, int hbank, int lbank, int prog) { + Preset* foundPreset; + foundPreset=findPreset(hbank, lbank, prog); + if (foundPreset) _preset[c]=foundPreset; + else { + _preset[c]=_initialPreset; + _preset[c]->prog=prog; + _preset[c]->_subcategory->_lbank=lbank; //TODO : real link + _preset[c]->_subcategory->_category->_hbank=hbank; + } + setPreset(c); +} + +//--------------------------------------------------------- +// setModulation +//--------------------------------------------------------- +void DeicsOnze::setModulation(int c, int val) { + _global.channel[c].modulation = (unsigned char) val; + setLfo(c); +} +//--------------------------------------------------------- +// setPitchBendCoef +//--------------------------------------------------------- +void DeicsOnze::setPitchBendCoef(int c, int val) { + _global.channel[c].pitchBendCoef = + exp(log(2)*((double)_preset[c]->function.pBendRange + /(double)MAXPBENDRANGE) + *((double)val/(double)MAXPITCHBENDVALUE)); +} + +//--------------------------------------------------------- +// setSustain +//--------------------------------------------------------- +void DeicsOnze::setSustain(int c, int val) { + _global.channel[c].sustain=(val>64); + if(!_global.channel[c].sustain) + for(int i=0; i<_global.channel[c].nbrVoices; i++) + if(_global.channel[c].voices[i].isSustained) { + for(int j=0; jwriteEvent(evNbrVoices); + }*/ + //channelNum + /* + if(qdEl.tagName()==CHANNELNUMSTR) { + _global.channelNum = (qdEl.text()==ALLSTR?-1:qdEl.text().toInt()-1); + unsigned char *dataChannelNum = new unsigned char[2]; + dataChannelNum[0]=SYSEX_CHANNELNUM; + dataChannelNum[1]=(unsigned char)_global.channelNum; + MidiEvent + evChannelNum(0, ME_SYSEX, (const unsigned char*)dataChannelNum, 2); + _gui->writeEvent(evChannelNum); + }*/ + //quality + if(qdEl.tagName()==QUALITYSTR) { + _global.quality = (qdEl.text()==HIGHSTR?high: + (qdEl.text()==MIDDLESTR?middle: + (qdEl.text()==LOWSTR?low:ultralow))); + setQuality(_global.quality); + unsigned char *dataQuality = new unsigned char[2]; + dataQuality[0]=SYSEX_QUALITY; + dataQuality[1]=(unsigned char)_global.quality; + MidiEvent evQuality(0, ME_SYSEX, (const unsigned char*)dataQuality, 2); + _gui->writeEvent(evQuality); + } + //filter + if(qdEl.tagName()==FILTERSTR) { + setFilter(qdEl.text()==YESSTRDEI?true:false); + unsigned char *dataFilter = new unsigned char[2]; + dataFilter[0]=SYSEX_FILTER; + dataFilter[1]=(unsigned char)getFilter(); + MidiEvent evFilter(0, ME_SYSEX, (const unsigned char*)dataFilter, 2); + _gui->writeEvent(evFilter); + } + //font size + if(qdEl.tagName()==FONTSIZESTR) { + _global.fontSize = qdEl.text().toInt(); + unsigned char *dataFontSize = new unsigned char[2]; + dataFontSize[0]=SYSEX_FONTSIZE; + dataFontSize[1]=(unsigned char)_global.fontSize; + MidiEvent evFontSize(0, ME_SYSEX, (const unsigned char*)dataFontSize, 2); + _gui->writeEvent(evFontSize); + } + //saveConfig + if(qdEl.tagName()==SAVECONFIGSTR) { + _saveConfig = (qdEl.text()==YESSTRDEI?true:false); + unsigned char *dataSaveConfig = new unsigned char[2]; + dataSaveConfig[0]=SYSEX_SAVECONFIG; + dataSaveConfig[1]=(unsigned char)_saveConfig; + MidiEvent + evSaveConfig(0, ME_SYSEX, (const unsigned char*)dataSaveConfig, 2); + _gui->writeEvent(evSaveConfig); + } + //saveOnlyUsed + if(qdEl.tagName()==SAVEONLYUSEDSTR) { + _saveOnlyUsed = (qdEl.text()==YESSTRDEI?true:false); + unsigned char *dataSaveOnlyUsed = new unsigned char[2]; + dataSaveOnlyUsed[0]=SYSEX_SAVEONLYUSED; + dataSaveOnlyUsed[1]=(unsigned char)_saveOnlyUsed; + MidiEvent + evSaveOnlyUsed(0, ME_SYSEX, (const unsigned char*)dataSaveOnlyUsed, 2); + _gui->writeEvent(evSaveOnlyUsed); + } + //colors + if(qdEl.tagName()==TEXTCOLORSTR) textColor = readColor(qdn); + if(qdEl.tagName()==BACKGROUNDCOLORSTR) backgroundColor = readColor(qdn); + if(qdEl.tagName()==EDITTEXTCOLORSTR) editTextColor = readColor(qdn); + if(qdEl.tagName()==EDITBACKGROUNDCOLORSTR) + editBackgroundColor = readColor(qdn); + + //must insert load image, later + + //load init set + if(qdEl.tagName()==ISINITSETSTR) { + _isInitSet = (qdEl.text()==YESSTRDEI?true:false); + unsigned char *dataIsInitSet = new unsigned char[2]; + dataIsInitSet[0]=SYSEX_ISINITSET; + dataIsInitSet[1]=(unsigned char)_isInitSet; + MidiEvent + evIsInitSet(0, ME_SYSEX, (const unsigned char*)dataIsInitSet, 2); + _gui->writeEvent(evIsInitSet); + } + if(qdEl.tagName()==INITSETPATHSTR) { + _initSetPath = qdEl.text(); + unsigned char *dataInitSetPath = + new unsigned char[1+MAXSTRLENGTHINITSETPATH]; + dataInitSetPath[0]=SYSEX_INITSETPATH; + strncpy((char*)&dataInitSetPath[1], _initSetPath.toLatin1().data(), + MAXSTRLENGTHINITSETPATH); + MidiEvent + evInitSetPath(0, ME_SYSEX, (const unsigned char*)dataInitSetPath, + 1+MAXSTRLENGTHINITSETPATH); + _gui->writeEvent(evInitSetPath); + } + //load background pix + if(qdEl.tagName()==ISBACKGROUNDPIXSTR) { + _isBackgroundPix = (qdEl.text()==YESSTRDEI?true:false); + unsigned char *dataIsBackgroundPix = new unsigned char[2]; + dataIsBackgroundPix[0]=SYSEX_ISBACKGROUNDPIX; + dataIsBackgroundPix[1]=(unsigned char)_isBackgroundPix; + MidiEvent + evIsBackgroundPix(0, ME_SYSEX, + (const unsigned char*)dataIsBackgroundPix, 2); + _gui->writeEvent(evIsBackgroundPix); + } + if(qdEl.tagName()==BACKGROUNDPIXPATHSTR) { + _backgroundPixPath = qdEl.text(); + unsigned char *dataBackgroundPixPath = + new unsigned char[1+MAXSTRLENGTHBACKGROUNDPIXPATH]; + dataBackgroundPixPath[0]=SYSEX_BACKGROUNDPIXPATH; + strncpy((char*)&dataBackgroundPixPath[1], + _backgroundPixPath.toLatin1().data(), + MAXSTRLENGTHBACKGROUNDPIXPATH); + MidiEvent + evBackgroundPixPath(0, ME_SYSEX, + (const unsigned char*)dataBackgroundPixPath, + 1+MAXSTRLENGTHBACKGROUNDPIXPATH); + _gui->writeEvent(evBackgroundPixPath); + } + qdn = qdn.nextSibling(); + } + //send colors + unsigned char dataColorGui[COLORSYSEXLENGTH+1]; + dataColorGui[0]=SYSEX_COLORGUI; + dataColorGui[1]=(unsigned char)textColor.red(); + dataColorGui[2]=(unsigned char)textColor.green(); + dataColorGui[3]=(unsigned char)textColor.blue(); + dataColorGui[4]=(unsigned char)backgroundColor.red(); + dataColorGui[5]=(unsigned char)backgroundColor.green(); + dataColorGui[6]=(unsigned char)backgroundColor.blue(); + dataColorGui[7]=(unsigned char)editTextColor.red(); + dataColorGui[8]=(unsigned char)editTextColor.green(); + dataColorGui[9]=(unsigned char)editTextColor.blue(); + dataColorGui[10]=(unsigned char)editBackgroundColor.red(); + dataColorGui[11]=(unsigned char)editBackgroundColor.green(); + dataColorGui[12]=(unsigned char)editBackgroundColor.blue(); + MidiEvent evSysexColor(0, ME_SYSEX, (const unsigned char*)dataColorGui, + COLORSYSEXLENGTH+1); + _gui->writeEvent(evSysexColor); +} + +//----------------------------------------------------------- +// loadConfiguration +//----------------------------------------------------------- +void DeicsOnze::loadConfiguration(QString fileName) { + // read the XML file and create DOM tree + if(!fileName.isEmpty()) { + QFile confFile(fileName); + if(!confFile.open(QIODevice::ReadOnly)) { + printf("Critical Error. Cannot open file %s\n", + fileName.toAscii().data()); + return; + } + QDomDocument domTree; + if (!domTree.setContent(&confFile )) { + printf("Critical Error. Parsing error for file %s\n", + fileName.toAscii().data()); + confFile.close(); + return; + } + + confFile.close(); + + QDomNode node = domTree.documentElement(); + while (!node.isNull()) { + QDomElement e = node.toElement(); + if (e.isNull()) + continue; + if (e.tagName() == DEICSONZECONFIGURATIONSTR) { + QString version = e.attribute(QString("version")); + if (version == "1.0") { + readConfiguration(node.firstChild()); + } + else printf("unsupported *.dco file version %s\n", + version.toLatin1().data()); + } + else printf("DeicsOnze: %s not supported\n", + e.tagName().toLatin1().data()); + node = node.nextSibling(); + } + } +} + +//--------------------------------------------------------- +// writeConfiguration +//--------------------------------------------------------- +void DeicsOnze::writeConfiguration(AL::Xml* xml) { + QString str; + xml->stag("deicsOnzeConfiguation version=\"1.0\""); + //xml->intTag(NBRVOICESSTR, (int)_global.nbrVoices); + //xml->strTag(CHANNELNUMSTR, (_global.channelNum==-1?ALLSTR: + // str.setNum(_global.channelNum+1))); + xml->tag(QUALITYSTR, QString((_global.quality==high?HIGHSTR: + (_global.quality==middle?MIDDLESTR: + (_global.quality==low?LOWSTR:ULTRALOWSTR))))); + xml->tag(FILTERSTR, QString(getFilter()==true?YESSTRDEI:NOSTRDEI)); + xml->tag(FONTSIZESTR, _global.fontSize); + xml->tag(SAVECONFIGSTR, QString((_saveConfig?YESSTRDEI:NOSTRDEI))); + xml->tag(SAVEONLYUSEDSTR, QString((_saveOnlyUsed?YESSTRDEI:NOSTRDEI))); + xml->tag(TEXTCOLORSTR, + reinterpret_cast(*_gui->tColor)); + xml->tag(BACKGROUNDCOLORSTR, + reinterpret_cast(*_gui->bColor)); + xml->tag(EDITTEXTCOLORSTR, + reinterpret_cast(*_gui->etColor)); + xml->tag(EDITBACKGROUNDCOLORSTR, + reinterpret_cast(*_gui->ebColor)); + xml->tag(ISINITSETSTR, QString((_isInitSet?YESSTRDEI:NOSTRDEI))); + xml->tag(INITSETPATHSTR, QString(_initSetPath)); + xml->tag(ISBACKGROUNDPIXSTR, QString((_isBackgroundPix?YESSTRDEI:NOSTRDEI))); + xml->tag(BACKGROUNDPIXPATHSTR, _backgroundPixPath); + + xml->etag(DEICSONZECONFIGURATIONSTR); +} + +//--------------------------------------------------------- +// getInitData +//--------------------------------------------------------- +void DeicsOnze::getInitData(int* length, const unsigned char** data) { + + //write the set in a temporary file and in a QByteArray + QTemporaryFile file; + file.open(); + AL::Xml* xml=new AL::Xml(&file); + xml->header(); + _set->writeSet(xml, _saveOnlyUsed); + file.reset(); //seek the start of the file + QByteArray ba = file.readAll(); + file.close(); + + //compress the QByteArray at default rate + QByteArray baComp = qCompress(ba); + + //save the set + *length = NUM_CONFIGLENGTH + + (_pluginIReverb?sizeof(float)*_pluginIReverb->plugin()->parameter():0) + + (_pluginIChorus?sizeof(float)*_pluginIChorus->plugin()->parameter():0) + + baComp.size(); + + unsigned char* buffer = new unsigned char[*length]; + //save init data + buffer[0]=SYSEX_INIT_DATA; + buffer[1]=SYSEX_INIT_DATA_VERSION; + //save global data + buffer[NUM_MASTERVOL] = (unsigned char) getMasterVol(); + for(int c = 0; c < NBRCHANNELS; c++) { + buffer[NUM_CHANNEL_ENABLE + c] = (unsigned char) getChannelEnable(c); + buffer[NUM_CHANNEL_VOL + c] = (unsigned char) getChannelVol(c); + buffer[NUM_CHANNEL_PAN + c] = (unsigned char) getChannelPan(c); + int b = getChannelBrightness(c); + buffer[NUM_CHANNEL_BRIGHTNESS + 2*c] = (unsigned char) (b%256); + buffer[NUM_CHANNEL_BRIGHTNESS + 2*c + 1] = (unsigned char) (b/256); + buffer[NUM_CHANNEL_MODULATION + c] = + (unsigned char) getChannelModulation(c); + buffer[NUM_CHANNEL_DETUNE + c] = + (unsigned char) getChannelDetune(c) + MAXCHANNELDETUNE; + buffer[NUM_CHANNEL_ATTACK + c] = (unsigned char) getChannelAttack(c); + buffer[NUM_CHANNEL_RELEASE + c] = (unsigned char) getChannelRelease(c); + buffer[NUM_CHANNEL_REVERB + c] = (unsigned char) getChannelReverb(c); + buffer[NUM_CHANNEL_CHORUS + c] = (unsigned char) getChannelChorus(c); + buffer[NUM_CHANNEL_DELAY + c] = (unsigned char) getChannelDelay(c); + buffer[NUM_CURRENTPROG + c] = (unsigned char) _preset[c]->prog; + buffer[NUM_CURRENTLBANK + c] = + (unsigned char) _preset[c]->_subcategory->_lbank; + buffer[NUM_CURRENTHBANK + c] = + (unsigned char) _preset[c]->_subcategory->_category->_hbank; + buffer[NUM_NBRVOICES + c] = (unsigned char) getNbrVoices(c); + } + buffer[NUM_SAVEONLYUSED]=(unsigned char) _saveOnlyUsed; + buffer[NUM_SAVECONFIG]=(unsigned char) _saveConfig; + //save config data + if(_saveConfig) { + buffer[NUM_QUALITY]=(unsigned char)_global.quality; + buffer[NUM_FILTER]=(unsigned char)getFilter(); + buffer[NUM_FONTSIZE]=(unsigned char)_global.fontSize; + buffer[NUM_RED_TEXT]=(unsigned char)_gui->tColor->red(); + buffer[NUM_GREEN_TEXT]=(unsigned char)_gui->tColor->green(); + buffer[NUM_BLUE_TEXT]=(unsigned char)_gui->tColor->blue(); + buffer[NUM_RED_BACKGROUND]=(unsigned char)_gui->bColor->red(); + buffer[NUM_GREEN_BACKGROUND]=(unsigned char)_gui->bColor->green(); + buffer[NUM_BLUE_BACKGROUND]=(unsigned char)_gui->bColor->blue(); + buffer[NUM_RED_EDITTEXT]=(unsigned char)_gui->etColor->red(); + buffer[NUM_GREEN_EDITTEXT]=(unsigned char)_gui->etColor->green(); + buffer[NUM_BLUE_EDITTEXT]=(unsigned char)_gui->etColor->blue(); + buffer[NUM_RED_EDITBACKGROUND]=(unsigned char)_gui->ebColor->red(); + buffer[NUM_GREEN_EDITBACKGROUND]=(unsigned char)_gui->ebColor->green(); + buffer[NUM_BLUE_EDITBACKGROUND]=(unsigned char)_gui->ebColor->blue(); + buffer[NUM_ISINITSET]=(unsigned char)_isInitSet; + strncpy((char*)&buffer[NUM_INITSETPATH], + _initSetPath.toLatin1().data(), MAXSTRLENGTHINITSETPATH); + buffer[NUM_ISBACKGROUNDPIX]=(unsigned char)_isBackgroundPix; + strncpy((char*)&buffer[NUM_BACKGROUNDPIXPATH], + _backgroundPixPath.toLatin1().data(), + MAXSTRLENGTHBACKGROUNDPIXPATH); + } + //FX + //reverb + buffer[NUM_IS_REVERB_ON]=(unsigned char)_global.isReverbActivated; + buffer[NUM_REVERB_RETURN]=(unsigned char)getReverbReturn(); + buffer[NUM_REVERB_PARAM_NBR]= + (_pluginIReverb?(unsigned char)_pluginIReverb->plugin()->parameter() : 0); + strncpy((char*)&buffer[NUM_REVERB_LIB], + (_pluginIReverb? + _pluginIReverb->plugin()->lib().toLatin1().data() : "\0"), + MAXSTRLENGTHFXLIB); + strncpy((char*)&buffer[NUM_REVERB_LABEL], + (_pluginIReverb? + _pluginIReverb->plugin()->label().toLatin1().data() : "\0"), + MAXSTRLENGTHFXLABEL); + //chorus + buffer[NUM_IS_CHORUS_ON]=(unsigned char)_global.isChorusActivated; + buffer[NUM_CHORUS_RETURN]=(unsigned char)getChorusReturn(); + buffer[NUM_CHORUS_PARAM_NBR]= + (_pluginIChorus?(unsigned char)_pluginIChorus->plugin()->parameter() : 0); + strncpy((char*)&buffer[NUM_CHORUS_LIB], + (_pluginIChorus? + _pluginIChorus->plugin()->lib().toLatin1().data() : "\0"), + MAXSTRLENGTHFXLIB); + strncpy((char*)&buffer[NUM_CHORUS_LABEL], + (_pluginIChorus? + _pluginIChorus->plugin()->label().toLatin1().data() : "\0"), + MAXSTRLENGTHFXLABEL); + //delay + buffer[NUM_IS_DELAY_ON]=(unsigned char)_global.isDelayActivated; + buffer[NUM_DELAY_RETURN]=(unsigned char)getDelayReturn(); + //save FX parameters + //reverb + for(int i = 0; i < (int)buffer[NUM_REVERB_PARAM_NBR]; i++) { + float val = (float)getReverbParam(i); + memcpy(&buffer[NUM_CONFIGLENGTH + sizeof(float)*i], &val, sizeof(float)); + } + //chorus + for(int i = 0; i < (int)buffer[NUM_CHORUS_PARAM_NBR]; i++) { + float val = (float)getChorusParam(i); + memcpy(&buffer[NUM_CONFIGLENGTH + + sizeof(float)*(int)buffer[NUM_REVERB_PARAM_NBR] + + sizeof(float)*i], &val, sizeof(float)); + } + //delay + float delayfloat; + delayfloat = getDelayBPM(); + memcpy(&buffer[NUM_DELAY_BPM], &delayfloat, 4); + delayfloat = getDelayBeatRatio(); + memcpy(&buffer[NUM_DELAY_BEATRATIO], &delayfloat, sizeof(float)); + delayfloat = getDelayFeedback(); + memcpy(&buffer[NUM_DELAY_FEEDBACK], &delayfloat, sizeof(float)); + delayfloat = getDelayLFOFreq(); + memcpy(&buffer[NUM_DELAY_LFO_FREQ], &delayfloat, sizeof(float)); + delayfloat = getDelayLFODepth(); + memcpy(&buffer[NUM_DELAY_LFO_DEPTH], &delayfloat, sizeof(float)); + + //save set data + int offset = + NUM_CONFIGLENGTH + + sizeof(float)*(int)buffer[NUM_REVERB_PARAM_NBR] + + sizeof(float)*(int)buffer[NUM_CHORUS_PARAM_NBR]; + for(int i = offset; i < *length; i++) + buffer[i]=(unsigned char)baComp.at(i - offset); + + *data=buffer; +} +//--------------------------------------------------------- +// parseInitData +//--------------------------------------------------------- +void DeicsOnze::parseInitData(int length, const unsigned char* data) { + if(data[1]==SYSEX_INIT_DATA_VERSION) { + //load global parameters + //master volume + setMasterVol(data[NUM_MASTERVOL]); + unsigned char *dataMasterVol = new unsigned char[2]; + dataMasterVol[0]=SYSEX_MASTERVOL; + dataMasterVol[1]=(unsigned char) getMasterVol(); + MidiEvent + evMasterVol(0, ME_SYSEX, (const unsigned char*)dataMasterVol, 2); + _gui->writeEvent(evMasterVol); + //channel configuration + for(int c = 0; c < NBRCHANNELS; c++) { + //isEnable + setChannelEnable(c, data[NUM_CHANNEL_ENABLE + c]); + MidiEvent + evChEnable(0, c, ME_CONTROLLER, + CTRL_CHANNELENABLE, data[NUM_CHANNEL_ENABLE + c]); + _gui->writeEvent(evChEnable); + //nbrVoices + setNbrVoices(c, data[NUM_NBRVOICES + c]); + MidiEvent + evNbrVoices(0,c,ME_CONTROLLER,CTRL_NBRVOICES, data[NUM_NBRVOICES + c]); + _gui->writeEvent(evNbrVoices); + //channel volume + setChannelVol(c, data[NUM_CHANNEL_VOL + c]); + MidiEvent + evChVol(0, c, ME_CONTROLLER, + CTRL_CHANNELVOLUME, data[NUM_CHANNEL_VOL + c]); + _gui->writeEvent(evChVol); + //channel pan + setChannelPan(c, data[NUM_CHANNEL_PAN + c]); + MidiEvent + evChPan(0, c, ME_CONTROLLER, CTRL_CHANNELPAN, + data[NUM_CHANNEL_PAN + c]); + _gui->writeEvent(evChPan); + if(getChannelEnable(c)) applyChannelAmp(c); + //channel detune + setChannelDetune(c, data[NUM_CHANNEL_DETUNE + c]-MAXCHANNELDETUNE); + MidiEvent + evChDetune(0, c, ME_CONTROLLER, CTRL_CHANNELDETUNE, + data[NUM_CHANNEL_DETUNE + c]-MAXCHANNELDETUNE); + _gui->writeEvent(evChDetune); + //channel brightness + setChannelBrightness(c, + data[NUM_CHANNEL_BRIGHTNESS + 2*c] + + data[NUM_CHANNEL_BRIGHTNESS + 2*c + 1] * 256); + MidiEvent + evChBrightness(0, c, ME_CONTROLLER, + CTRL_FINEBRIGHTNESS, getChannelBrightness(c)); + _gui->writeEvent(evChBrightness); + //channel modulation + setChannelModulation(c, data[NUM_CHANNEL_MODULATION + c]); + MidiEvent + evChMod(0, c, ME_CONTROLLER, + CTRL_MODULATION, data[NUM_CHANNEL_MODULATION + c]); + _gui->writeEvent(evChMod); + //channel attack + setChannelAttack(c, data[NUM_CHANNEL_ATTACK + c]); + MidiEvent + evChAttack(0, c, ME_CONTROLLER, + CTRL_ATTACK_TIME, data[NUM_CHANNEL_ATTACK + c]); + _gui->writeEvent(evChAttack); + //channel release + setChannelRelease(c, data[NUM_CHANNEL_RELEASE + c]); + MidiEvent + evChRelease(0, c, ME_CONTROLLER, + CTRL_RELEASE_TIME, data[NUM_CHANNEL_RELEASE + c]); + _gui->writeEvent(evChRelease); + //channel reverb + setChannelReverb(c, data[NUM_CHANNEL_REVERB + c]); + MidiEvent + evChReverb(0, c, ME_CONTROLLER, + CTRL_REVERB_SEND, data[NUM_CHANNEL_REVERB + c]); + _gui->writeEvent(evChReverb); + //channel chorus + setChannelChorus(c, data[NUM_CHANNEL_CHORUS + c]); + MidiEvent + evChChorus(0, c, ME_CONTROLLER, + CTRL_CHORUS_SEND, data[NUM_CHANNEL_CHORUS + c]); + _gui->writeEvent(evChChorus); + //channel delay + setChannelDelay(c, data[NUM_CHANNEL_DELAY + c]); + MidiEvent + evChDelay(0, c, ME_CONTROLLER, + CTRL_VARIATION_SEND, data[NUM_CHANNEL_DELAY + c]); + _gui->writeEvent(evChDelay); + } + //load configuration + _saveConfig = (bool)data[NUM_SAVECONFIG]; + unsigned char *dataSaveConfig = new unsigned char[2]; + dataSaveConfig[0]=SYSEX_SAVECONFIG; + dataSaveConfig[1]=(unsigned char)_saveConfig; + MidiEvent + evSaveConfig(0, ME_SYSEX, (const unsigned char*)dataSaveConfig, 2); + _gui->writeEvent(evSaveConfig); + if(_saveConfig) { + //saveOnlyUsed + _saveOnlyUsed = (bool)data[NUM_SAVEONLYUSED]; + unsigned char *dataSaveOnlyUsed = new unsigned char[2]; + dataSaveOnlyUsed[0]=SYSEX_SAVEONLYUSED; + dataSaveOnlyUsed[1]=(unsigned char)_saveOnlyUsed; + MidiEvent + evSaveOnlyUsed(0, ME_SYSEX, (const unsigned char*)dataSaveOnlyUsed, 2); + _gui->writeEvent(evSaveOnlyUsed); + //colors + unsigned char dataColorGui[COLORSYSEXLENGTH+1]; + dataColorGui[0]=SYSEX_COLORGUI; + for (int i=0; iwriteEvent(evSysexColor); + //quality + unsigned char dataQuality[2]; + dataQuality[0]=SYSEX_QUALITY; + dataQuality[1]=data[NUM_QUALITY]; + setQuality((Quality)data[NUM_QUALITY]); + MidiEvent evQuality(0, ME_SYSEX, (const unsigned char*)dataQuality, 2); + _gui->writeEvent(evQuality); + //filter + unsigned char dataFilter[2]; + dataFilter[0]=SYSEX_FILTER; + dataFilter[1]=data[NUM_FILTER]; + setFilter((bool)data[NUM_FILTER]); + MidiEvent evFilter(0, ME_SYSEX, (const unsigned char*)dataFilter, 2); + _gui->writeEvent(evFilter); + //font size + unsigned char dataFontSize[2]; + dataFontSize[0]=SYSEX_FONTSIZE; + dataFontSize[1]=data[NUM_FONTSIZE]; + MidiEvent evFontSize(0, ME_SYSEX, (const unsigned char*)dataFontSize, 2); + _gui->writeEvent(evFontSize); + //load init set + unsigned char dataIsInitSet[2]; + dataIsInitSet[0]=SYSEX_ISINITSET; + dataIsInitSet[1]=data[NUM_ISINITSET]; + MidiEvent evIsInitSet(0, ME_SYSEX, + (const unsigned char*)dataIsInitSet, 2); + _gui->writeEvent(evIsInitSet); + unsigned char dataInitSetPath[1+MAXSTRLENGTHINITSETPATH]; + dataInitSetPath[0]=SYSEX_INITSETPATH; + for(int a = 0; a < MAXSTRLENGTHINITSETPATH; a++) + dataInitSetPath[a+1] = data[a+NUM_INITSETPATH]; + MidiEvent evInitSetPath(0,ME_SYSEX,(const unsigned char*)dataInitSetPath, + 1+MAXSTRLENGTHINITSETPATH); + _gui->writeEvent(evInitSetPath); + //load background pix + unsigned char dataIsBackgroundPix[2]; + dataIsBackgroundPix[0]=SYSEX_ISBACKGROUNDPIX; + dataIsBackgroundPix[1]=data[NUM_ISBACKGROUNDPIX]; + MidiEvent evIsBackgroundPix(0, ME_SYSEX, + (const unsigned char*)dataIsBackgroundPix, 2); + _gui->writeEvent(evIsBackgroundPix); + unsigned char dataBackgroundPixPath[1+MAXSTRLENGTHBACKGROUNDPIXPATH]; + dataBackgroundPixPath[0]=SYSEX_BACKGROUNDPIXPATH; + for(int a = 0; a < MAXSTRLENGTHBACKGROUNDPIXPATH; a++) + dataBackgroundPixPath[a+1] = data[a+NUM_BACKGROUNDPIXPATH]; + MidiEvent evBackgroundPixPath(0,ME_SYSEX, + (const unsigned char*)dataBackgroundPixPath, + 1+MAXSTRLENGTHBACKGROUNDPIXPATH); + _gui->writeEvent(evBackgroundPixPath); + } + else _gui->saveConfigCheckBox->setChecked(false); + //load FX + //reverb + _global.isReverbActivated = (bool)data[NUM_IS_REVERB_ON]; + unsigned char *dataReverbAct = new unsigned char[2]; + dataReverbAct[0]=SYSEX_REVERBACTIV; + dataReverbAct[1]=(unsigned char)_global.isReverbActivated; + MidiEvent evReverbAct(0,ME_SYSEX,(const unsigned char*)dataReverbAct, 2); + _gui->writeEvent(evReverbAct); + setReverbReturn((int)data[NUM_REVERB_RETURN]); + unsigned char *dataReverbRet = new unsigned char[2]; + dataReverbRet[0]=SYSEX_REVERBRETURN; + dataReverbRet[1]=(unsigned char)getReverbReturn(); + MidiEvent evReverbRet(0,ME_SYSEX,(const unsigned char*)dataReverbRet, 2); + _gui->writeEvent(evReverbRet); + Plugin* p; + p = plugins.find((const char*)&data[NUM_REVERB_LIB], + (const char*)&data[NUM_REVERB_LABEL]); + if(p) { + initPluginReverb(p); + for(int i = 0; i < _pluginIReverb->plugin()->parameter(); i++) { + float val; + memcpy(&val, &data[NUM_CONFIGLENGTH + sizeof(float)*i], sizeof(float)); + setReverbParam(i, (double)val); + } + char dataBuildRev; + dataBuildRev = SYSEX_BUILDGUIREVERB; + MidiEvent evSysexBuildRev(0,ME_SYSEX, + (const unsigned char*)&dataBuildRev, 1); + _gui->writeEvent(evSysexBuildRev); + } + else _pluginIReverb = NULL; + //chorus + _global.isChorusActivated = (bool)data[NUM_IS_CHORUS_ON]; + unsigned char *dataChorusAct = new unsigned char[2]; + dataChorusAct[0]=SYSEX_CHORUSACTIV; + dataChorusAct[1]=(unsigned char)_global.isChorusActivated; + MidiEvent evChorusAct(0,ME_SYSEX,(const unsigned char*)dataChorusAct, 2); + _gui->writeEvent(evChorusAct); + setChorusReturn((int)data[NUM_CHORUS_RETURN]); + unsigned char *dataChorusRet = new unsigned char[2]; + dataChorusRet[0]=SYSEX_CHORUSRETURN; + dataChorusRet[1]=(unsigned char)getChorusReturn(); + MidiEvent evChorusRet(0,ME_SYSEX,(const unsigned char*)dataChorusRet, 2); + _gui->writeEvent(evChorusRet); + p = plugins.find((const char*)&data[NUM_CHORUS_LIB], + (const char*)&data[NUM_CHORUS_LABEL]); + if(p) { + initPluginChorus(p); + for(int i = 0; i < _pluginIChorus->plugin()->parameter(); i++) { + float val; + memcpy(&val, &data[NUM_CONFIGLENGTH + + sizeof(float)*(int)data[NUM_REVERB_PARAM_NBR] + + sizeof(float)*i], + sizeof(float)); + setChorusParam(i, (double)val); + } + char dataBuildCho; + dataBuildCho = SYSEX_BUILDGUICHORUS; + MidiEvent evSysexBuildCho(0,ME_SYSEX, + (const unsigned char*)&dataBuildCho, 1); + _gui->writeEvent(evSysexBuildCho); + } + else _pluginIChorus = NULL; + //delay + _global.isDelayActivated = (bool)data[NUM_IS_DELAY_ON]; + unsigned char *dataDelayAct = new unsigned char[2]; + dataDelayAct[0]=SYSEX_DELAYACTIV; + dataDelayAct[1]=(unsigned char)_global.isDelayActivated; + MidiEvent evDelayAct(0,ME_SYSEX,(const unsigned char*)dataDelayAct, 2); + _gui->writeEvent(evDelayAct); + setDelayReturn((int)data[NUM_DELAY_RETURN]); + unsigned char *dataDelayRet = new unsigned char[2]; + dataDelayRet[0]=SYSEX_DELAYRETURN; + dataDelayRet[1]=(unsigned char)getDelayReturn(); + MidiEvent evDelayRet(0,ME_SYSEX,(const unsigned char*)dataDelayRet, 2); + _gui->writeEvent(evDelayRet); + //initPluginDelay(plugins.find("pandelay", "pandelay")); + float delayfloat; + memcpy(&delayfloat, &data[NUM_DELAY_BPM], sizeof(float)); + setDelayBPM(delayfloat); + char dataDelayBPM[sizeof(float)+1]; + dataDelayBPM[0] = SYSEX_DELAYBPM; + memcpy(&dataDelayBPM[1], &delayfloat, sizeof(float)); + MidiEvent evSysexDelayBPM(0,ME_SYSEX, + (const unsigned char*)dataDelayBPM, + sizeof(float)+1); + _gui->writeEvent(evSysexDelayBPM); + memcpy(&delayfloat, &data[NUM_DELAY_BEATRATIO], sizeof(float)); + setDelayBeatRatio(delayfloat); + char dataDelayBeatRatio[sizeof(float)+1]; + dataDelayBeatRatio[0] = SYSEX_DELAYBEATRATIO; + memcpy(&dataDelayBeatRatio[1], &delayfloat, sizeof(float)); + MidiEvent evSysexDelayBeatRatio(0,ME_SYSEX, + (const unsigned char*)dataDelayBeatRatio, + sizeof(float)+1); + _gui->writeEvent(evSysexDelayBeatRatio); + memcpy(&delayfloat, &data[NUM_DELAY_FEEDBACK], sizeof(float)); + setDelayFeedback(delayfloat); + char dataDelayFeedback[sizeof(float)+1]; + dataDelayFeedback[0] = SYSEX_DELAYFEEDBACK; + memcpy(&dataDelayFeedback[1], &delayfloat, sizeof(float)); + MidiEvent evSysexDelayFeedback(0,ME_SYSEX, + (const unsigned char*)dataDelayFeedback, + sizeof(float)+1); + _gui->writeEvent(evSysexDelayFeedback); + memcpy(&delayfloat, &data[NUM_DELAY_LFO_FREQ], sizeof(float)); + setDelayLFOFreq(delayfloat); + char dataDelayLFOFreq[sizeof(float)+1]; + dataDelayLFOFreq[0] = SYSEX_DELAYLFOFREQ; + memcpy(&dataDelayLFOFreq[1], &delayfloat, sizeof(float)); + MidiEvent evSysexDelayLFOFreq(0,ME_SYSEX, + (const unsigned char*)dataDelayLFOFreq, + sizeof(float)+1); + _gui->writeEvent(evSysexDelayLFOFreq); + memcpy(&delayfloat, &data[NUM_DELAY_LFO_DEPTH], sizeof(float)); + setDelayLFODepth(delayfloat); + char dataDelayLFODepth[sizeof(float)+1]; + dataDelayLFODepth[0] = SYSEX_DELAYLFODEPTH; + memcpy(&dataDelayLFODepth[1], &delayfloat, sizeof(float)); + MidiEvent evSysexDelayLFODepth(0,ME_SYSEX, + (const unsigned char*)dataDelayLFODepth, + sizeof(float)+1); + _gui->writeEvent(evSysexDelayLFODepth); + + //load the set compressed + int offset = + NUM_CONFIGLENGTH + + sizeof(float)*(int)data[NUM_REVERB_PARAM_NBR] + + sizeof(float)*(int)data[NUM_CHORUS_PARAM_NBR]; + QByteArray baComp = QByteArray((const char*)&data[offset], length-offset); + + //uncompress the set + QByteArray baUncomp = qUncompress(baComp); + + //save the set in a temporary file and + // read the XML file and create DOM tree + QTemporaryFile file; + file.open(); + file.write(baUncomp); + QDomDocument domTree; + file.reset(); //seek the start of the file + domTree.setContent(&file); + file.close(); + QDomNode node = domTree.documentElement(); + + while (!node.isNull()) { + QDomElement e = node.toElement(); + if (e.isNull()) + continue; + if (e.tagName() == "deicsOnzeSet") { + QString version = e.attribute(QString("version")); + if (version == "1.0") { + for(int c = 0; c < NBRCHANNELS; c++) _preset[c]=_initialPreset; + //read the set + if((bool)data[NUM_SAVEONLYUSED]) { + //printf("Mini\n"); + //updateSaveOnlyUsed(true); + } + else { + //printf("Huge\n"); + while(!_set->_categoryVector.empty()) + delete(*_set->_categoryVector.begin()); + //updateSaveOnlyUsed(false); + } + _set->readSet(node.firstChild()); + //display load preset + //setSet(); + } + else printf("Wrong set version : %s\n", + version.toLatin1().data()); + } + node = node.nextSibling(); + } + //send sysex to the gui to load the set (actually not because it doesn't + //work -the code is just zapped in the middle???-, so it is done above + //int dL=2+baUncomp.size(); + int dL = 2; + char dataSend[dL]; + dataSend[0]=SYSEX_LOADSET; + dataSend[1]=data[NUM_SAVEONLYUSED]; + //for(int i=2; iwriteEvent(evSysex); + + //select programs per channel + for(int c = 0; c < NBRCHANNELS; c++) { + int hbank=(int)data[NUM_CURRENTHBANK+c]; + int lbank=(int)data[NUM_CURRENTLBANK+c]; + int prog=(int)data[NUM_CURRENTPROG+c]; + programSelect(c, hbank, lbank, prog); + int val=prog+(lbank<<8)+(hbank<<16); + MidiEvent evProgSel(0, c, ME_CONTROLLER, CTRL_PROGRAM, val); + _gui->writeEvent(evProgSel); + } + + } +} +//--------------------------------------------------------- +// sysex +//--------------------------------------------------------- +bool DeicsOnze::sysex(int length, const unsigned char* data) { + sysex(length, data, false); + return false; +} +bool DeicsOnze::sysex(int length, const unsigned char* data, bool fromGui) { + int cmd=data[0]; + int index; + float f; + switch(cmd) { + case SYSEX_INIT_DATA: + parseInitData(length, data); + break; + case SYSEX_MASTERVOL: + setMasterVol((int)data[1]); + if(!fromGui) { + MidiEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + //case SYSEX_CHANNELNUM: + //_global.channelNum = (char)data[1]; + //if(!fromGui) { + // MidiEvent evSysex(0, ME_SYSEX, data, length); + // _gui->writeEvent(evSysex); + //} + //break; + case SYSEX_QUALITY: + setQuality((Quality)data[1]); + if(!fromGui) { + MidiEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_FILTER: + setFilter((bool)data[1]); + if(!fromGui) { + MidiEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_FONTSIZE: + _global.fontSize = (int)data[1]; + if(!fromGui) { + MidiEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_SAVECONFIG: + _saveConfig = (bool)data[1]; + if(!fromGui) { + MidiEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_SAVEONLYUSED: + _saveOnlyUsed = (bool)data[1]; + if(!fromGui) { + MidiEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_ISINITSET: + _isInitSet = (bool)data[1]; + if(!fromGui) { + MidiEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_INITSETPATH: + _initSetPath = (char*)&data[1]; + if(!fromGui) { + MidiEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_ISBACKGROUNDPIX: + _isBackgroundPix = (bool)data[1]; + if(!fromGui) { + MidiEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_BACKGROUNDPIXPATH: + _backgroundPixPath = (char*)&data[1]; + if(!fromGui) { + MidiEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_PANIC: + resetVoices(); + break; + case SYSEX_CHORUSACTIV: + _global.isChorusActivated = (bool)data[1]; + if(!fromGui) { + MidiEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_CHORUSPARAM: + index = (int)data[1]; + memcpy(&f, &data[2], sizeof(float)); + setChorusParam(index, (double)f); + if(!fromGui) { + MidiEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_REVERBACTIV: + _global.isReverbActivated = (bool)data[1]; + if(!fromGui) { + MidiEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_REVERBPARAM: + index = (int)data[1]; + memcpy(&f, &data[2], sizeof(float)); + setReverbParam(index, (double)f); + if(!fromGui) { + MidiEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_DELAYACTIV: + _global.isDelayActivated = (bool)data[1]; + if(!fromGui) { + MidiEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_CHORUSRETURN: + setChorusReturn((int)data[1]); + if(!fromGui) { + MidiEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_REVERBRETURN: + setReverbReturn((int)data[1]); + if(!fromGui) { + MidiEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_DELAYRETURN: + setDelayReturn((int)data[1]); + if(!fromGui) { + MidiEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_SELECTREVERB: + Plugin* pluginReverb; + memcpy(&pluginReverb, &data[1], sizeof(Plugin*)); + initPluginReverb(pluginReverb); + break; + case SYSEX_SELECTCHORUS: + Plugin* pluginChorus; + memcpy(&pluginChorus, &data[1], sizeof(Plugin*)); + initPluginChorus(pluginChorus); + break; + case SYSEX_DELAYBPM: + memcpy(&f, &data[1], sizeof(float)); + setDelayBPM(f); + if(!fromGui) { + MidiEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_DELAYBEATRATIO: + memcpy(&f, &data[1], sizeof(float)); + setDelayBeatRatio(f); + if(!fromGui) { + MidiEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_DELAYFEEDBACK: + memcpy(&f, &data[1], sizeof(float)); + setDelayFeedback(f); + if(!fromGui) { + MidiEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_DELAYLFOFREQ: + memcpy(&f, &data[1], sizeof(float)); + setDelayLFOFreq(f); + if(!fromGui) { + MidiEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_DELAYLFODEPTH: + memcpy(&f, &data[1], sizeof(float)); + setDelayLFODepth(f); + if(!fromGui) { + MidiEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + default: + break; + } + return false; +} +//--------------------------------------------------------- +// setController +//--------------------------------------------------------- +bool DeicsOnze::setController(int channel, int id, int val) { + setController(channel, id, val, false); + return false; +} +bool DeicsOnze::setController(int ch, int ctrl, int val, bool fromGui) { + int deiPan, k=0; + if(_global.channel[ch].isEnable || ctrl==CTRL_CHANNELENABLE) { + if(ctrl>=CTRL_AR && ctrlCTRL_PL3 && ctrlsetIsUsed(true); + _preset[ch]->eg[k].ar=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_AR+k*DECAPAR1,val); + _gui->writeEvent(ev); + } + break; + case CTRL_D1R: + _preset[ch]->setIsUsed(true); + _preset[ch]->eg[k].d1r=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_D1R+k*DECAPAR1,val); + _gui->writeEvent(ev); + } + break; + case CTRL_D2R: + _preset[ch]->setIsUsed(true); + _preset[ch]->eg[k].d2r=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_D2R+k*DECAPAR1,val); + _gui->writeEvent(ev); + } + break; + case CTRL_RR: + _preset[ch]->setIsUsed(true); + _preset[ch]->eg[k].rr=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_RR+k*DECAPAR1,val); + _gui->writeEvent(ev); + } + break; + case CTRL_D1L: + _preset[ch]->setIsUsed(true); + _preset[ch]->eg[k].d1l=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_D1L+k*DECAPAR1,val); + _gui->writeEvent(ev); + } + break; + case CTRL_LS: + _preset[ch]->setIsUsed(true); + _preset[ch]->scaling.level[k]=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_LS+k*DECAPAR1,val); + _gui->writeEvent(ev); + } + break; + case CTRL_RS: + _preset[ch]->setIsUsed(true); + _preset[ch]->scaling.rate[k]=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_RS+k*DECAPAR1,val); + _gui->writeEvent(ev); + } + break; + case CTRL_EBS: + _preset[ch]->setIsUsed(true); + _preset[ch]->sensitivity.egBias[k]=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_EBS+k*DECAPAR1,val); + _gui->writeEvent(ev); + } + break; + case CTRL_AME: + _preset[ch]->setIsUsed(true); + _preset[ch]->sensitivity.ampOn[k]=val==1; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_AME+k*DECAPAR1,val); + _gui->writeEvent(ev); + } + break; + case CTRL_KVS: + _preset[ch]->setIsUsed(true); + _preset[ch]->sensitivity.keyVelocity[k]=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_KVS+k*DECAPAR1,val); + _gui->writeEvent(ev); + } + break; + case CTRL_OUT: + _preset[ch]->setIsUsed(true); + _preset[ch]->outLevel[k]=val; + setOutLevel(k); + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_OUT+k*DECAPAR1,val); + _gui->writeEvent(ev); + } + break; + case CTRL_RATIO: + _preset[ch]->setIsUsed(true); + _preset[ch]->frequency[k].ratio=((double)val)/100.0; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER, + CTRL_RATIO+k*DECAPAR1,val); + _gui->writeEvent(ev); + } + break; + case CTRL_DET: + _preset[ch]->setIsUsed(true); + _preset[ch]->detune[k]=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_DET+k*DECAPAR1,val); + _gui->writeEvent(ev); + } + break; + case CTRL_ALG: + _preset[ch]->setIsUsed(true); + _preset[ch]->algorithm=(Algorithm)val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_ALG,val); + _gui->writeEvent(ev); + } + break; + case CTRL_FEEDBACK: + _preset[ch]->setIsUsed(true); + _preset[ch]->feedback=val; + setFeedback(ch); + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_FEEDBACK,val); + _gui->writeEvent(ev); + } + break; + case CTRL_SPEED: + _preset[ch]->setIsUsed(true); + _preset[ch]->lfo.speed=val; + setLfo(ch); + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_SPEED,val); + _gui->writeEvent(ev); + } + break; + case CTRL_DELAY: + _preset[ch]->setIsUsed(true); + _preset[ch]->lfo.delay=val; + setLfo(ch); + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_DELAY,val); + _gui->writeEvent(ev); + } + break; + case CTRL_PMODDEPTH: + _preset[ch]->setIsUsed(true); + _preset[ch]->lfo.pModDepth=val; + setLfo(ch); + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_PMODDEPTH,val); + _gui->writeEvent(ev); + } + break; + case CTRL_AMODDEPTH: + _preset[ch]->setIsUsed(true); + _preset[ch]->lfo.aModDepth=val; + setLfo(ch); + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_AMODDEPTH,val); + _gui->writeEvent(ev); + } + break; + case CTRL_SYNC: + _preset[ch]->setIsUsed(true); + _preset[ch]->lfo.sync=val==1; + setLfo(ch); + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_SYNC,val); + _gui->writeEvent(ev); + } + break; + case CTRL_WAVE: + _preset[ch]->setIsUsed(true); + _preset[ch]->lfo.wave=(Wave)val; + setLfo(ch); + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_WAVE,val); + _gui->writeEvent(ev); + } + break; + case CTRL_PMODSENS: + _preset[ch]->setIsUsed(true); + _preset[ch]->sensitivity.pitch=val; + setLfo(ch); + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_PMODSENS,val); + _gui->writeEvent(ev); + } + break; + case CTRL_AMS: + _preset[ch]->setIsUsed(true); + _preset[ch]->sensitivity.amplitude=val; + setLfo(ch); + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_AMS,val); + _gui->writeEvent(ev); + } + break; + case CTRL_TRANSPOSE: + _preset[ch]->setIsUsed(true); + _preset[ch]->function.transpose=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_TRANSPOSE,val); + _gui->writeEvent(ev); + } + break; + case CTRL_POLYMODE: + _preset[ch]->setIsUsed(true); + _preset[ch]->function.mode=(Mode)val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_POLYMODE,val); + _gui->writeEvent(ev); + } + break; + case CTRL_PBENDRANGE: + _preset[ch]->setIsUsed(true); + _preset[ch]->function.pBendRange=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_PBENDRANGE,val); + _gui->writeEvent(ev); + } + break; + case CTRL_PORTAMODE: + _preset[ch]->setIsUsed(true); + _preset[ch]->function.portamento=(Portamento)val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_PORTAMODE,val); + _gui->writeEvent(ev); + } + break; + case CTRL_PORTATIME: + _preset[ch]->setIsUsed(true); + _preset[ch]->function.portamentoTime=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_PORTATIME,val); + _gui->writeEvent(ev); + } + break; + case CTRL_FCVOLUME: + _preset[ch]->setIsUsed(true); + _preset[ch]->function.fcVolume=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_FCVOLUME,val); + _gui->writeEvent(ev); + } + break; + case CTRL_FSW: + _preset[ch]->setIsUsed(true); + _preset[ch]->function.footSw=(FootSw)val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_FSW,val); + _gui->writeEvent(ev); + } + break; + case CTRL_MWPITCH: + _preset[ch]->setIsUsed(true); + _preset[ch]->function.mwPitch=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_MWPITCH,val); + _gui->writeEvent(ev); + } + break; + case CTRL_MWAMPLITUDE: + _preset[ch]->setIsUsed(true); + _preset[ch]->function.mwAmplitude=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_MWAMPLITUDE,val); + _gui->writeEvent(ev); + } + break; + case CTRL_BCPITCH: + _preset[ch]->setIsUsed(true); + _preset[ch]->function.bcPitch=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_BCPITCH,val); + _gui->writeEvent(ev); + } + break; + case CTRL_BCAMPLITUDE: + _preset[ch]->setIsUsed(true); + _preset[ch]->function.bcAmplitude=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_BCAMPLITUDE,val); + _gui->writeEvent(ev); + } + break; + case CTRL_BCPITCHBIAS: + _preset[ch]->setIsUsed(true); + _preset[ch]->function.bcPitchBias=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_BCPITCHBIAS,val); + _gui->writeEvent(ev); + } + break; + case CTRL_BCEGBIAS: + _preset[ch]->setIsUsed(true); + _preset[ch]->function.bcEgBias=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_BCEGBIAS,val); + _gui->writeEvent(ev); + } + break; + case CTRL_ATPITCH: + _preset[ch]->setIsUsed(true); + _preset[ch]->function.atPitch=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_ATPITCH,val); + _gui->writeEvent(ev); + } + break; + case CTRL_ATAMPLITUDE: + _preset[ch]->setIsUsed(true); + _preset[ch]->function.atAmplitude=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_ATAMPLITUDE,val); + _gui->writeEvent(ev); + } + break; + case CTRL_ATPITCHBIAS: + _preset[ch]->setIsUsed(true); + _preset[ch]->function.atPitchBias=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_ATPITCHBIAS,val); + _gui->writeEvent(ev); + } + break; + case CTRL_ATEGBIAS: + _preset[ch]->setIsUsed(true); + _preset[ch]->function.atEgBias=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_ATEGBIAS,val); + _gui->writeEvent(ev); + } + break; + case CTRL_PR1: + _preset[ch]->setIsUsed(true); + _preset[ch]->pitchEg.pr1=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_PR1,val); + _gui->writeEvent(ev); + } + break; + case CTRL_PR2: + _preset[ch]->setIsUsed(true); + _preset[ch]->pitchEg.pr2=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_PR2,val); + _gui->writeEvent(ev); + } + break; + case CTRL_PR3: + _preset[ch]->setIsUsed(true); + _preset[ch]->pitchEg.pr3=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_PR3,val); + _gui->writeEvent(ev); + } + break; + case CTRL_PL1: + _preset[ch]->setIsUsed(true); + _preset[ch]->pitchEg.pl1=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_PL1,val); + _gui->writeEvent(ev); + } + break; + case CTRL_PL2: + _preset[ch]->setIsUsed(true); + _preset[ch]->pitchEg.pl2=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_PL2,val); + _gui->writeEvent(ev); + } + break; + case CTRL_PL3: + _preset[ch]->setIsUsed(true); + _preset[ch]->pitchEg.pl3=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_PL3,val); + _gui->writeEvent(ev); + } + break; + case CTRL_FIX: + _preset[ch]->setIsUsed(true); + _preset[ch]->frequency[k].isFix=val==1; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_FIX+k*DECAPAR2,val); + _gui->writeEvent(ev); + } + break; + case CTRL_FIXRANGE: + _preset[ch]->setIsUsed(true); + _preset[ch]->frequency[k].freq=((double)val)/100.0; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER, + CTRL_FIXRANGE+k*DECAPAR2,val); + _gui->writeEvent(ev); + } + break; + case CTRL_OSW: + _preset[ch]->setIsUsed(true); + _preset[ch]->oscWave[k]=(OscWave)val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_OSW+k*DECAPAR2,val); + _gui->writeEvent(ev); + } + break; + case CTRL_SHFT: + _preset[ch]->setIsUsed(true); + _preset[ch]->eg[k].egShift=(egShiftValue)val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_SHFT+k*DECAPAR2,val); + _gui->writeEvent(ev); + } + break; + case CTRL_REVERBRATE: + _preset[ch]->setIsUsed(true); + _preset[ch]->function.reverbRate=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_REVERBRATE,val); + _gui->writeEvent(ev); + } + break; + case CTRL_FCPITCH: + _preset[ch]->setIsUsed(true); + _preset[ch]->function.fcPitch=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_FCPITCH,val); + _gui->writeEvent(ev); + } + break; + case CTRL_FCAMPLITUDE: + _preset[ch]->setIsUsed(true); + _preset[ch]->function.fcAmplitude=val; + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_FCAMPLITUDE,val); + _gui->writeEvent(ev); + } + break; + case CTRL_CHANNELENABLE: + setChannelEnable(ch, (bool)val); + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_CHANNELENABLE,val); + _gui->writeEvent(ev); + } + break; + case CTRL_CHANNELDETUNE: + _preset[ch]->setIsUsed(true); + setChannelDetune(ch, val); + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_CHANNELDETUNE,val); + _gui->writeEvent(ev); + } + break; + case CTRL_CHANNELVOLUME: + setChannelVol(ch, val); + applyChannelAmp(ch); + if(!fromGui) { + MidiEvent ev(0,ch,ME_CONTROLLER,CTRL_CHANNELVOLUME,val); + _gui->writeEvent(ev); + } + break; + case CTRL_NBRVOICES: + setNbrVoices(ch, val); + if(!fromGui) { + MidiEvent ev(0, ch, ME_CONTROLLER, CTRL_NBRVOICES, val); + _gui->writeEvent(ev); + } + break; + case CTRL_PROGRAM: { + int hbank = (val & 0xff0000) >> 16; + int lbank = (val & 0xff00) >> 8; + int prog = val & 0x7f; + if (hbank > 127) // map "dont care" to 0 + hbank = 0; + if (lbank > 127) + lbank = 0; + programSelect(ch, hbank, lbank, prog); + _preset[ch]->setIsUsed(true);//TODO : not sure to put that + if(!fromGui) { + MidiEvent ev(0, ch, ME_CONTROLLER, CTRL_PROGRAM, val); + _gui->writeEvent(ev); + } + } break; + case CTRL_MODULATION: + setModulation(ch, val); + if(!fromGui) { + MidiEvent ev(0, ch, ME_CONTROLLER, CTRL_MODULATION, val); + _gui->writeEvent(ev); + } + break; + case CTRL_PITCH: + setPitchBendCoef(ch, val); + break; + case CTRL_PANPOT: + _preset[ch]->setIsUsed(true); + deiPan = val*2*MAXCHANNELPAN/127-MAXCHANNELPAN; + setChannelPan(ch, deiPan); + applyChannelAmp(ch); + if(!fromGui) { + MidiEvent ev(0, ch, ME_CONTROLLER, CTRL_CHANNELPAN, deiPan); + _gui->writeEvent(ev); + } + break; + case CTRL_CHANNELPAN: + _preset[ch]->setIsUsed(true); + setChannelPan(ch, val); + applyChannelAmp(ch); + if(!fromGui) { + MidiEvent ev(0, ch, ME_CONTROLLER, CTRL_CHANNELPAN, val); + _gui->writeEvent(ev); + } + break; + case CTRL_FINEBRIGHTNESS: + _preset[ch]->setIsUsed(true); + setChannelBrightness(ch, val); + setOutLevel(ch); + if(!fromGui) { + MidiEvent ev(0,ch, ME_CONTROLLER, CTRL_FINEBRIGHTNESS, val); + _gui->writeEvent(ev); + } + break; + case CTRL_BRIGHTNESS: + _preset[ch]->setIsUsed(true); + setChannelBrightness(ch, val*(MIDFINEBRIGHTNESS/MIDBRIGHTNESS)); + setOutLevel(ch); + if(!fromGui) { + MidiEvent + ev(0,ch,ME_CONTROLLER,CTRL_FINEBRIGHTNESS,getChannelBrightness(ch)); + _gui->writeEvent(ev); + } + break; + case CTRL_ATTACK_TIME: + _preset[ch]->setIsUsed(true); + setChannelAttack(ch, val); + setEnvAttack(ch); + if(!fromGui) { + MidiEvent ev(0,ch, ME_CONTROLLER, CTRL_ATTACK_TIME, val); + _gui->writeEvent(ev); + } + break; + case CTRL_RELEASE_TIME: + _preset[ch]->setIsUsed(true); + setChannelRelease(ch, val); + setEnvRelease(ch); + if(!fromGui) { + MidiEvent ev(0,ch, ME_CONTROLLER, CTRL_RELEASE_TIME, val); + _gui->writeEvent(ev); + } + break; + case CTRL_REVERB_SEND: + setChannelReverb(ch, val); + if(!fromGui) { + MidiEvent ev(0,ch, ME_CONTROLLER, CTRL_REVERB_SEND, val); + _gui->writeEvent(ev); + } + break; + case CTRL_CHORUS_SEND: + setChannelChorus(ch, val); + if(!fromGui) { + MidiEvent ev(0,ch, ME_CONTROLLER, CTRL_CHORUS_SEND, val); + _gui->writeEvent(ev); + } + break; + case CTRL_VARIATION_SEND: + setChannelDelay(ch, val); + if(!fromGui) { + MidiEvent ev(0,ch, ME_CONTROLLER, CTRL_VARIATION_SEND, val); + _gui->writeEvent(ev); + } + break; + case CTRL_SUSTAIN: + setSustain(ch, val); + break; + case CTRL_VOLUME: + setChannelVol(ch, val*(MAXCHANNELVOLUME/127)); + applyChannelAmp(ch); + if(!fromGui) { + MidiEvent + ev(0, ch, ME_CONTROLLER, CTRL_CHANNELVOLUME, getChannelVol(ch)); + _gui->writeEvent(ev); + } + break; + case CTRL_ALL_SOUNDS_OFF: + resetVoices(); + default: + break; + } + } + return false; +} + +//--------------------------------------------------------- +// getPatchName +//--------------------------------------------------------- + +const char* DeicsOnze::getPatchName(int ch, int val, int) const { + if(_global.channel[ch].isEnable) { + Preset* p_preset; + int hbank = (val & 0xff0000) >> 16; + int lbank = (val & 0xff00) >> 8; + if (hbank > 127) + hbank = 0; + if (lbank > 127) + lbank = 0; + if (lbank == 127) // drum HACK + lbank = 128; + int prog = val & 0x7f; + char* tempName="INITVOICE"; + p_preset=_set->findPreset(hbank, lbank, prog); + if (p_preset) tempName=const_cast(p_preset->name.c_str()); + return tempName; + } + return " "; +} + +//--------------------------------------------------------- +// getPatchInfo +//--------------------------------------------------------- +const MidiPatch* DeicsOnze::getPatchInfo(int /*ch*/, const MidiPatch* p) const { + Preset* preset = NULL; + Subcategory* sub = NULL; + Category* cat = NULL; + if(p) { + _patch.hbank = p->hbank; + _patch.lbank = p->lbank; + _patch.prog = p->prog; + switch(p->typ) { + case MP_TYPE_HBANK : + sub = findSubcategory(_patch.hbank, _patch.lbank); + if(sub) { + _patch.name = sub->_subcategoryName.c_str(); + _patch.typ = MP_TYPE_LBANK; + return &_patch; + } + else { + if(_patch.lbank + 1 < LBANK_NBR) { + _patch.lbank++; + return getPatchInfo(0, &_patch); + } + else { + _patch.prog = PROG_NBR - 1; //hack to go faster + _patch.typ = 0; + return getPatchInfo(0, &_patch); + } + } + break; + case MP_TYPE_LBANK : + preset = findPreset(_patch.hbank, _patch.lbank, _patch.prog); + _patch.typ = 0; + if(preset) { + _patch.name = preset->name.c_str(); + return &_patch; + } + else return getPatchInfo(0, &_patch); + break; + default : + if(_patch.prog + 1 < PROG_NBR) { + _patch.prog++; + preset = findPreset(_patch.hbank, _patch.lbank, _patch.prog); + if(preset) { + _patch.name = preset->name.c_str(); + return &_patch; + } + else return getPatchInfo(0, &_patch); + } + else { + _patch.prog = 0; + if(_patch.lbank + 1 < LBANK_NBR) { + _patch.lbank++; + _patch.typ = MP_TYPE_HBANK; + return getPatchInfo(0, &_patch); + } + else { + _patch.lbank = 0; + if(_patch.hbank + 1 < HBANK_NBR) { + _patch.hbank++; + _patch.typ = MP_TYPE_HBANK; + cat = findCategory(_patch.hbank); + if(cat) { + _patch.name = cat->_categoryName.c_str(); + return &_patch; + } + return getPatchInfo(0, &_patch); + } + else return NULL; + } + } + } + } + else { + _patch.typ = MP_TYPE_HBANK; + _patch.hbank = 0; + _patch.lbank = 0; + _patch.prog = 0; + cat = findCategory(_patch.hbank); + if(cat) { + _patch.name = cat->_categoryName.c_str(); + return &_patch; + } + else { + _patch.hbank++; + return getPatchInfo(0, &_patch); + } + } +} + +//--------------------------------------------------------- +// getControllerInfo +/*! + \fn SimpleSynth::getControllerInfo + \brief Called from host to collect info about which controllers + the synth supports + \param index current controller number + \param name pointer where name is stored + \param controller int pointer where muse controller number is stored + \param min int pointer where controller min value is stored + \param max int pointer where controller max value is stored + \return 0 when done, otherwise return next desired controller index +*/ +//--------------------------------------------------------- +int DeicsOnze::getControllerInfo(int index, const char** name, + int* controller, int* min, int* max) +{ + if (index >= nbrCtrl) { + return 0; + } + + *name = _ctrl[index].name.c_str(); + *controller = _ctrl[index].num; + *min = _ctrl[index].min; + *max = _ctrl[index].max; + return (index +1); +} + +//--------------------------------------------------------- +// playNote +// process note on +//--------------------------------------------------------- +bool DeicsOnze::playNote(int ch, int pitch, int velo) { + int newVoice; + int nO2V; + int p2V; + double tempTargetFreq; + if(_global.channel[ch].isEnable) { + if(velo==0) {//Note off + p2V=pitchOn2Voice(ch, pitch); + //printf("Note Off : pitchOn2Voice = %d\n", p2V); + if(p2V<_global.channel[ch].nbrVoices) { + if(_global.channel[ch].sustain) + _global.channel[ch].voices[p2V].isSustained = true; + else { + _global.channel[ch].voices[p2V].keyOn = false; + _global.channel[ch].lastVoiceKeyOff = p2V; + _global.channel[ch].lastVoiceKeyOn.remove(p2V); + if(_preset[ch]->function.mode == MONO && existsKeyOn(ch) + && _global.channel[ch].voices[p2V].isOn) { + newVoice = _global.channel[ch].lastVoiceKeyOn.back(); + //portamento + if(_preset[ch]->function.portamentoTime!=0) { + _global.channel[ch].voices[newVoice].hasAttractor = true; + _global.channel[ch].voices[newVoice].attractor = + getAttractor(_preset[ch]->function.portamentoTime, + _global.deiSampleRate); + } + else _global.channel[ch].voices[newVoice].hasAttractor = false; + //feedback + _global.channel[ch].voices[newVoice].sampleFeedback = + _global.channel[ch].voices[p2V].sampleFeedback; + //on/off + _global.channel[ch].voices[p2V].isOn = false; + _global.channel[ch].voices[newVoice].isOn = true; + //per op + for(int i = 0; i < NBROP; i++) { + _global.channel[ch].voices[newVoice].op[i].index = + _global.channel[ch].voices[p2V].op[i].index; + _global.channel[ch].voices[newVoice].op[i].envState = + _global.channel[ch].voices[p2V].op[i].envState; + _global.channel[ch].voices[newVoice].op[i].envIndex = + _global.channel[ch].voices[p2V].op[i].envIndex; + _global.channel[ch].voices[newVoice].op[i].envInct = + _global.channel[ch].voices[p2V].op[i].envInct; + _global.channel[ch].voices[newVoice].op[i].envLevel = + _global.channel[ch].voices[p2V].op[i].envLevel; + _global.channel[ch].voices[newVoice].op[i].coefVLevel = + _global.channel[ch].voices[p2V].op[i].coefVLevel; + if(_global.channel[ch].voices[newVoice].hasAttractor) + _global.channel[ch].voices[newVoice].op[i].inct = + _global.channel[ch].voices[p2V].op[i].inct; + } + } + else { + setPitchEnvRelease(ch, p2V); + for(int i=0; ifunction.portamentoTime!=0 + && _global.channel[ch].isLastNote && + (_preset[ch]->function.portamento==FULL) || + (_preset[ch]->function.portamento==FINGER && existsKeyOn(ch))) { + _global.channel[ch].voices[newVoice].hasAttractor = true; + _global.channel[ch].voices[newVoice].attractor = + getAttractor(_preset[ch]->function.portamentoTime, + _global.deiSampleRate); + } + else _global.channel[ch].voices[newVoice].hasAttractor = false; + + if(_preset[ch]->lfo.sync) _global.channel[ch].lfoIndex=0; + + _global.channel[ch].lfoDelayIndex = + (_preset[ch]->lfo.delay==0?(double)(RESOLUTION/4):0.0); + _global.channel[ch].delayPassed = false; + + //-------------- + //PITCH ENVELOPE + //-------------- + if(isPitchEnv(&_preset[ch]->pitchEg)) { + _global.channel[ch].voices[newVoice].pitchEnvState = PHASE1; + _global.channel[ch].voices[newVoice].pitchEnvCoefInctPhase1 = + getPitchEnvCoefInct(_preset[ch]->pitchEg.pl1); + _global.channel[ch].voices[newVoice].pitchEnvCoefInctPhase2 = + getPitchEnvCoefInct(_preset[ch]->pitchEg.pl2); + _global.channel[ch].voices[newVoice].pitchEnvCoefInctPhase3 = + getPitchEnvCoefInct(_preset[ch]->pitchEg.pl3); + _global.channel[ch].voices[newVoice].pitchEnvCoefInct = + _global.channel[ch].voices[newVoice].pitchEnvCoefInctPhase1; + _global.channel[ch].voices[newVoice].pitchEnvCoefInctInct = + getPitchEnvCoefInctInct(_preset[ch]->pitchEg.pl1, + _preset[ch]->pitchEg.pl2, + _preset[ch]->pitchEg.pr1, + _global.deiSampleRate); + } + else { + _global.channel[ch].voices[newVoice].pitchEnvState = OFF_PE; + _global.channel[ch].voices[newVoice].pitchEnvCoefInct = 1.0; + } + //per operator + for(int i=0; isensitivity.keyVelocity[i]) + *note2Amp((double) (pitch+_preset[ch]->function.transpose), + _preset[ch]->scaling.level[i]); + _global.channel[ch].voices[newVoice].op[i].amp = + outLevel2Amp(_preset[ch]->outLevel[i]) + *_global.channel[ch].voices[newVoice].op[i].ampVeloNote + * brightness2Amp(ch, i); + //---------------- + //INDEX & ENVELOPE + //---------------- + //if index get 0.0, it means that the offset is 0 + if(existsKeyOn(ch)) { + int lastVoice = _global.channel[ch].lastVoiceKeyOn.back(); + if(_preset[ch]->function.mode == MONO) { + _global.channel[ch].voices[newVoice].op[i].index = + _global.channel[ch].voices[lastVoice].op[i].index; + _global.channel[ch].voices[newVoice].sampleFeedback = + _global.channel[ch].voices[lastVoice].sampleFeedback; + _global.channel[ch].voices[newVoice].op[i].envState = + _global.channel[ch].voices[lastVoice].op[i].envState; + _global.channel[ch].voices[newVoice].op[i].envIndex = + _global.channel[ch].voices[lastVoice].op[i].envIndex; + _global.channel[ch].voices[newVoice].op[i].envInct = + _global.channel[ch].voices[lastVoice].op[i].envInct; + _global.channel[ch].voices[newVoice].op[i].envLevel = + _global.channel[ch].voices[lastVoice].op[i].envLevel; + _global.channel[ch].voices[newVoice].op[i].coefVLevel = + _global.channel[ch].voices[lastVoice].op[i].coefVLevel; + _global.channel[ch].voices[lastVoice].isOn = false; + } + else { + _global.channel[ch].voices[newVoice].op[i].index = 0.0; + _global.channel[ch].voices[newVoice].sampleFeedback = 0.0; + _global.channel[ch].voices[newVoice].op[i].envState = ATTACK; + _global.channel[ch].voices[newVoice].op[i].envIndex = 0.0; + setEnvAttack(ch, newVoice, i); + } + } + else { + _global.channel[ch].voices[newVoice].op[i].index = 0.0; + _global.channel[ch].voices[newVoice].sampleFeedback = 0.0; + _global.channel[ch].voices[newVoice].op[i].envState = ATTACK; + _global.channel[ch].voices[newVoice].op[i].envIndex = 0.0; + setEnvAttack(ch, newVoice, i); + if(_preset[ch]->function.mode == MONO && + _global.channel[ch].isLastNote) { + _global.channel[ch].voices[_global.channel[ch].lastVoiceKeyOff] + .isOn = false; + } + } + + //---- + //FREQ + //---- + //the frequence for each operator is calculated + //and is used later to calculate inct + tempTargetFreq = + (pitch2freq((double)getChannelDetune(ch) + /(double)MAXCHANNELDETUNE) + /LOWERNOTEFREQ)* + (_preset[ch]->frequency[i].isFix? + _preset[ch]->frequency[i].freq: + (_preset[ch]->frequency[i].ratio + *pitch2freq((double)(pitch+_preset[ch]->function.transpose) + +(double)_preset[ch]->detune[i]*COEFDETUNE))); + //---- + //INCT + //---- + //compute inct + _global.channel[ch].voices[newVoice].op[i].targetInct = + (double)RESOLUTION / ( _global.deiSampleRate / tempTargetFreq ); + if(_global.channel[ch].voices[newVoice].hasAttractor && + !_preset[ch]->frequency[i].isFix) + _global.channel[ch].voices[newVoice].op[i].inct = + _global.channel[ch].lastInc[i]; + else _global.channel[ch].voices[newVoice].op[i].inct = + _global.channel[ch].voices[newVoice].op[i].targetInct; + } + //-------------------- + //some initializations + //-------------------- + _global.channel[ch].voices[newVoice].keyOn = true; + _global.channel[ch].voices[newVoice].isSustained = false; + _global.channel[ch].voices[newVoice].isOn = true; + _global.channel[ch].voices[newVoice].pitch = pitch; + _global.channel[ch].isLastNote = true; + _global.channel[ch].lastVoiceKeyOn.push_back(newVoice); + for(int k = 0; k < NBROP; k++) + _global.channel[ch].lastInc[k] = + _global.channel[ch].voices[newVoice].op[k].inct; + return false; + } + } + return false; +} + +//--------------------------------------------------------- +// plusMod +// add two doubles modulo RESOLUTION +//--------------------------------------------------------- +inline double plusMod(double x, double y) { + double res; + res=x+y; + if (res>=0) while (res >= (double)RESOLUTION) res-=(double)RESOLUTION; + else while (res < 0) res+=(double)RESOLUTION; + return res; +} + + +//--------------------------------------------------------- +// write +// synthesize n samples into buffer+offset +//--------------------------------------------------------- +void DeicsOnze::process(float** buffer, int offset, int n) { + //Process messages from the gui + while (_gui->fifoSize()) { + MidiEvent ev = _gui->readEvent(); + if (ev.type() == ME_SYSEX) { + sysex(ev.len(), ev.data(), true); + sendEvent(ev); + } + else if (ev.type() == ME_CONTROLLER) { + setController(ev.channel(), ev.dataA(), ev.dataB(), true); + sendEvent(ev); + } + } + float* leftOutput = buffer[0] + offset; + float* rightOutput = buffer[1] + offset; + + float sample[MAXNBRVOICES]; + float tempLeftOutput; + float tempRightOutput; + float tempChannelOutput; + float tempChannelLeftOutput; + float tempChannelRightOutput; + float tempIncChannel; //for optimization + float sampleOp[NBROP]; + for(int i = 0; i < NBROP; i++) sampleOp[i] = 0.0; + float ampOp[NBROP]; + for(int i = 0; i < n; i++) { + if(_global.qualityCounter == 0) { + tempLeftOutput = 0.0; + tempRightOutput = 0.0; + _global.lastInputLeftChorusSample = 0.0; + _global.lastInputRightChorusSample = 0.0; + _global.lastInputLeftReverbSample = 0.0; + _global.lastInputRightReverbSample = 0.0; + _global.lastInputLeftDelaySample = 0.0; + _global.lastInputRightDelaySample = 0.0; + //per channel + for(int c = 0; c < NBRCHANNELS; c++) { + tempChannelOutput = 0.0; + if(_global.channel[c].isEnable) { + //lfo, trick : we use the first quater of the wave W2 + lfoUpdate(_preset[c], &_global.channel[c], waveTable[W2]); + + //optimization + tempIncChannel = + _global.channel[c].lfoCoefInct * _global.channel[c].pitchBendCoef; + + //per voice + for(int j=0; j<_global.channel[c].nbrVoices; j++) { + if (_global.channel[c].voices[j].isOn) { + //portamento + portamentoUpdate(&_global.channel[c], + &_global.channel[c].voices[j]); + //pitch envelope + pitchEnvelopeUpdate(&_global.channel[c].voices[j], + &_preset[c]->pitchEg, _global.deiSampleRate); + //per op + for(int k=0; ksensitivity.ampOn[k]? + _global.channel[c].lfoAmp:1.0) + *env2AmpR(_global.deiSampleRate, waveTable[W2], + _preset[c]->eg[k], + &_global.channel[c].voices[j].op[k]); + } + switch(_preset[c]->algorithm) { + case FIRST : + sampleOp[3]=ampOp[3] + *waveTable[_preset[c]->oscWave[3]] + [(int)plusMod(_global.channel[c].voices[j].op[3].index, + (float)RESOLUTION + *_global.channel[c].voices[j].sampleFeedback)]; + sampleOp[2]=ampOp[2] + *waveTable[_preset[c]->oscWave[2]] + [(int)plusMod(_global.channel[c].voices[j].op[2].index, + (float)RESOLUTION*sampleOp[3])]; + sampleOp[1]=ampOp[1] + *waveTable[_preset[c]->oscWave[1]] + [(int)plusMod(_global.channel[c].voices[j].op[1].index, + (float)RESOLUTION*sampleOp[2])]; + sampleOp[0]=ampOp[0] + *waveTable[_preset[c]->oscWave[0]] + [(int)plusMod(_global.channel[c].voices[j].op[0].index, + (float)RESOLUTION*sampleOp[1])]; + + sample[j]=sampleOp[0];///COEFLEVEL; + + _global.channel[c].voices[j].isOn = + (_global.channel[c].voices[j].op[0].envState!=OFF); + break; + case SECOND : + sampleOp[3]=ampOp[3] + *waveTable[_preset[c]->oscWave[3]] + [(int)plusMod(_global.channel[c].voices[j].op[3].index, + (float)RESOLUTION + *_global.channel[c].voices[j].sampleFeedback)]; + sampleOp[2]=ampOp[2] + *waveTable[_preset[c]->oscWave[2]] + [(int)_global.channel[c].voices[j].op[2].index]; + sampleOp[1]=ampOp[1] + *waveTable[_preset[c]->oscWave[1]] + [(int)plusMod(_global.channel[c].voices[j].op[1].index, + (float)RESOLUTION + *(sampleOp[2]+sampleOp[3])/2.0)]; + sampleOp[0]=ampOp[0] + *waveTable[_preset[c]->oscWave[0]] + [(int)plusMod(_global.channel[c].voices[j].op[0].index, + (float)RESOLUTION + *sampleOp[1])]; + + sample[j]=sampleOp[0];///COEFLEVEL; + + _global.channel[c].voices[j].isOn = + (_global.channel[c].voices[j].op[0].envState!=OFF); + break; + case THIRD : + sampleOp[3]=ampOp[3] + *waveTable[_preset[c]->oscWave[3]] + [(int)plusMod(_global.channel[c].voices[j].op[3].index, + (float)RESOLUTION + *_global.channel[c].voices[j].sampleFeedback)]; + sampleOp[2]=ampOp[2] + *waveTable[_preset[c]->oscWave[2]] + [(int)_global.channel[c].voices[j].op[2].index]; + sampleOp[1]=ampOp[1] + *waveTable[_preset[c]->oscWave[1]] + [(int)plusMod(_global.channel[c].voices[j].op[1].index, + (float)RESOLUTION*sampleOp[2])]; + sampleOp[0]=ampOp[0] + *waveTable[_preset[c]->oscWave[0]] + [(int)plusMod(_global.channel[c].voices[j].op[0].index, + (float)RESOLUTION + *(sampleOp[3]+sampleOp[1])/2.0)]; + + sample[j]=sampleOp[0];///COEFLEVEL; + + _global.channel[c].voices[j].isOn = + (_global.channel[c].voices[j].op[0].envState!=OFF); + break; + case FOURTH : + sampleOp[3]=ampOp[3] + *waveTable[_preset[c]->oscWave[3]] + [(int)plusMod(_global.channel[c].voices[j].op[3].index, + (float)RESOLUTION + *_global.channel[c].voices[j].sampleFeedback)]; + sampleOp[2]=ampOp[2] + *waveTable[_preset[c]->oscWave[2]] + [(int)plusMod(_global.channel[c].voices[j].op[2].index, + (float)RESOLUTION + *sampleOp[3])]; + sampleOp[1]=ampOp[1] + *waveTable[_preset[c]->oscWave[1]] + [(int)_global.channel[c].voices[j].op[1].index]; + sampleOp[0]=ampOp[0] + *waveTable[_preset[c]->oscWave[0]] + [(int)plusMod(_global.channel[c].voices[j].op[0].index, + (float)RESOLUTION + *(sampleOp[1]+sampleOp[2])/2.0)]; + + sample[j]=sampleOp[0];///COEFLEVEL; + + _global.channel[c].voices[j].isOn = + (_global.channel[c].voices[j].op[0].envState!=OFF); + break; + case FIFTH : + sampleOp[3]=ampOp[3] + *waveTable[_preset[c]->oscWave[3]] + [(int)plusMod(_global.channel[c].voices[j].op[3].index, + (float)RESOLUTION + *_global.channel[c].voices[j].sampleFeedback)]; + sampleOp[2]=ampOp[2] + *waveTable[_preset[c]->oscWave[2]] + [(int)plusMod(_global.channel[c].voices[j].op[2].index, + (float)RESOLUTION*sampleOp[3])]; + sampleOp[1]=ampOp[1] + *waveTable[_preset[c]->oscWave[1]] + [(int)_global.channel[c].voices[j].op[1].index]; + sampleOp[0]=ampOp[0] + *waveTable[_preset[c]->oscWave[0]] + [(int)plusMod(_global.channel[c].voices[j].op[0].index, + (float)RESOLUTION*sampleOp[1])]; + + sample[j]=(sampleOp[0]+sampleOp[2])/2.0;///COEFLEVEL; + + _global.channel[c].voices[j].isOn = + (_global.channel[c].voices[j].op[0].envState!=OFF + ||_global.channel[c].voices[j].op[2].envState!=OFF); + break; + case SIXTH : + sampleOp[3]=ampOp[3] + *waveTable[_preset[c]->oscWave[3]] + [(int)plusMod(_global.channel[c].voices[j].op[3].index, + (float)RESOLUTION + *_global.channel[c].voices[j].sampleFeedback)]; + sampleOp[2]=ampOp[2] + *waveTable[_preset[c]->oscWave[2]] + [(int)plusMod(_global.channel[c].voices[j].op[2].index, + (float)RESOLUTION*sampleOp[3])]; + sampleOp[1]=ampOp[1] + *waveTable[_preset[c]->oscWave[1]] + [(int)plusMod(_global.channel[c].voices[j].op[1].index, + (float)RESOLUTION*sampleOp[3])]; + sampleOp[0]=ampOp[0] + *waveTable[_preset[c]->oscWave[0]] + [(int)plusMod(_global.channel[c].voices[j].op[0].index, + (float)RESOLUTION*sampleOp[3])]; + + sample[j]=(sampleOp[0]+sampleOp[1]+sampleOp[2])/3.0; + + _global.channel[c].voices[j].isOn = + (_global.channel[c].voices[j].op[0].envState!=OFF); + break; + case SEVENTH : + sampleOp[3]=ampOp[3] + *waveTable[_preset[c]->oscWave[3]] + [(int)plusMod(_global.channel[c].voices[j].op[3].index, + (float)RESOLUTION + *_global.channel[c].voices[j].sampleFeedback)]; + sampleOp[2]=ampOp[2] + *waveTable[_preset[c]->oscWave[2]] + [(int)plusMod(_global.channel[c].voices[j].op[2].index, + (float)RESOLUTION*sampleOp[3])]; + sampleOp[1]=ampOp[1] + *waveTable[_preset[c]->oscWave[1]] + [(int)_global.channel[c].voices[j].op[1].index]; + sampleOp[0]=ampOp[0]*waveTable[_preset[c]->oscWave[0]] + [(int)_global.channel[c].voices[j].op[0].index]; + + sample[j]=(sampleOp[0]+sampleOp[1]+sampleOp[2])/3.0; + + _global.channel[c].voices[j].isOn = + (_global.channel[c].voices[j].op[0].envState!=OFF); + break; + case EIGHTH : + sampleOp[3]=ampOp[3] + *waveTable[_preset[c]->oscWave[3]] + [(int)plusMod(_global.channel[c].voices[j].op[3].index, + (float)RESOLUTION + *_global.channel[c].voices[j].sampleFeedback)]; + sampleOp[2]=ampOp[2] + *waveTable[_preset[c]->oscWave[2]] + [(int)_global.channel[c].voices[j].op[2].index]; + sampleOp[1]=ampOp[1] + *waveTable[_preset[c]->oscWave[1]] + [(int)_global.channel[c].voices[j].op[1].index]; + sampleOp[0]=ampOp[0] + *waveTable[_preset[c]->oscWave[0]] + [(int)_global.channel[c].voices[j].op[0].index]; + + sample[j]= + (sampleOp[0]+sampleOp[1]+sampleOp[2]+sampleOp[3]) + /4.0; + + _global.channel[c].voices[j].isOn = + (_global.channel[c].voices[j].op[0].envState!=OFF + || _global.channel[c].voices[j].op[1].envState!=OFF + || _global.channel[c].voices[j].op[2].envState!=OFF + || _global.channel[c].voices[j].op[3].envState!=OFF); + break; + default : printf("Error : No algorithm"); + break; + } + + _global.channel[c].voices[j].volume= + ampOp[0]+ampOp[1]+ampOp[2]+ampOp[3]; + + _global.channel[c].voices[j].sampleFeedback = + sampleOp[3]*_global.channel[c].feedbackAmp; + + tempChannelOutput += sample[j]; + } + } + //printf("left out = %f, temp out = %f, left amp = %f\n", + //tempLeftOutput, tempChannelOutput, _global.channel[c].ampLeft); + + tempChannelLeftOutput = tempChannelOutput*_global.channel[c].ampLeft; + tempChannelRightOutput=tempChannelOutput*_global.channel[c].ampRight; + + if(_global.isChorusActivated) { + _global.lastInputLeftChorusSample += tempChannelLeftOutput * + _global.channel[c].chorusAmount; + _global.lastInputRightChorusSample += tempChannelRightOutput * + _global.channel[c].chorusAmount; + } + if(_global.isReverbActivated) { + _global.lastInputLeftReverbSample += tempChannelLeftOutput * + _global.channel[c].reverbAmount; + _global.lastInputRightReverbSample += tempChannelRightOutput * + _global.channel[c].reverbAmount; + } + if(_global.isDelayActivated) { + _global.lastInputLeftDelaySample += tempChannelLeftOutput * + _global.channel[c].delayAmount; + _global.lastInputRightDelaySample += tempChannelRightOutput * + _global.channel[c].delayAmount; + } + tempLeftOutput += tempChannelLeftOutput; + tempRightOutput += tempChannelRightOutput; + } + } + _global.lastLeftSample = tempLeftOutput * _global.masterVolume; + _global.lastRightSample = tempRightOutput * _global.masterVolume; + } + leftOutput[i] += _global.lastLeftSample; + rightOutput[i] += _global.lastRightSample; + + if(_global.isChorusActivated) { + tempInputChorus[0][i] = _global.lastInputLeftChorusSample; + tempInputChorus[1][i] = _global.lastInputRightChorusSample; + } + if(_global.isReverbActivated) { + tempInputReverb[0][i] = _global.lastInputLeftReverbSample; + tempInputReverb[1][i] = _global.lastInputRightReverbSample; + } + if(_global.isDelayActivated) { + tempInputDelay[0][i] = _global.lastInputLeftDelaySample; + tempInputDelay[1][i] = _global.lastInputRightDelaySample; + } + + _global.qualityCounter++; + _global.qualityCounter %= _global.qualityCounterTop; + } + //apply Filter + if(_global.filter) _dryFilter->process(leftOutput, rightOutput, n); + //Chorus + if(_pluginIChorus && _global.isChorusActivated) { + //apply Filter + if(_global.filter) _chorusFilter->process(tempOutputChorus[0], + tempOutputChorus[1], n); + //apply Chorus + _pluginIChorus->apply(n, 2, tempInputChorus, tempOutputChorus); + for(int i = 0; i < n; i++) { + leftOutput[i] += + tempOutputChorus[0][i] * _global.chorusReturn * _global.masterVolume; + rightOutput[i] += + tempOutputChorus[1][i] * _global.chorusReturn * _global.masterVolume; + } + } + //Reverb + if(_pluginIReverb && _global.isReverbActivated) { + //apply Filter + if(_global.filter) _reverbFilter->process(tempOutputReverb[0], + tempOutputReverb[1], n); + //apply Reverb + _pluginIReverb->apply(n, 2, tempInputReverb, tempOutputReverb); + for(int i = 0; i < n; i++) { + leftOutput[i] += + tempOutputReverb[0][i] * _global.reverbReturn * _global.masterVolume; + rightOutput[i] += + tempOutputReverb[1][i] * _global.reverbReturn * _global.masterVolume; + } + } + //Delay + if(_pluginIDelay && _global.isDelayActivated) { + //apply Filter + if(_global.filter) _delayFilter->process(tempOutputDelay[0], + tempOutputDelay[1], n); + //apply Delay + _pluginIDelay->apply(n, 2, tempInputDelay, tempOutputDelay); + for(int i = 0; i < n; i++) { + leftOutput[i] += + tempOutputDelay[0][i] * _global.delayReturn * _global.masterVolume; + rightOutput[i] += + tempOutputDelay[1][i] * _global.delayReturn * _global.masterVolume; + } + } +} + + +//--------------------------------------------------------- +// inst +//--------------------------------------------------------- + +class QWidget; + +static Mess* instantiate(int sr, const char*) +{ + DeicsOnze* deicsonze = new DeicsOnze(); + deicsonze->setSampleRate(sr); + return deicsonze; +} + +extern "C" { + static MESS descriptor = { + "DeicsOnze", + "DeicsOnze FM DX11/TX81Z emulator", + "0.5.5", // version string + MESS_MAJOR_VERSION, MESS_MINOR_VERSION, + instantiate + }; + + const MESS* mess_descriptor() { return &descriptor; } +} + diff --git a/attic/muse_qt4_evolution/synti/deicsonze/deicsonze.h b/attic/muse_qt4_evolution/synti/deicsonze/deicsonze.h new file mode 100644 index 00000000..26316690 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/deicsonze.h @@ -0,0 +1,603 @@ +//=========================================================================== +// +// DeicsOnze an emulator of the YAMAHA DX11 synthesizer +// +// Version 0.5.5 +// +// +// +// +// Copyright (c) 2004-2006 Nil Geisweiller +// +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA or point your web browser to http://www.gnu.org. +//=========================================================================== + + +#ifndef __DEICSONZE_H +#define __DEICSONZE_H + +#include + +#include "deicsonzepreset.h" +#include "deicsonzegui.h" +#include "deicsonzeplugin.h" +#include "deicsonzefilter.h" +#include "libsynti/mess.h" +#include "plugin.h" + +#define DEICSONZESTR "deicsonze" + +#define MAXPITCHBENDVALUE 8191 + +#define RESOLUTION 96000 + +#define MAXFXBUFFERSIZE 48000 +#define NBRFXINPUTS 2 +#define NBRFXOUTPUTS 2 + +#define NBRCTRLS 127 + +#define NBRPRESETS 128 + +#define LOWERNOTEFREQ 8.176 + +#define DB0LEVEL 90 + +#define LENGTHNAME 20 +#define LENGTHCATEGORY 20 +#define LENGTHSUBCATEGORY 20 + +#define MAXVELO 127 +#define MAXVOLUME 100.0 +#define MAXSTRLENGTHINITSETPATH 256 +#define MAXSTRLENGTHBACKGROUNDPIXPATH 256 +#define MAXSTRLENGTHFXLIB 256 +#define MAXSTRLENGTHFXLABEL 256 + +#define DB_MIN 25.0 + +//coef determined by ear to sound like the YAMAHA DX11 +#define COEFFEEDBACK 0.3 +#define COEFPLFO(x) (x==0?0.0:(x==1?0.06:(x==2?0.12:(x==3?0.25:(x==4?0.5:(x==5?0.9:(x==6?3.9:7.9))))))) //return pitch amplitude with respect to sensitivity pitch +#define COEFALFO(x) (x==0?0.0:(x==1?0.4:(x==2?0.9:1.0))) +#define MAX(x,y) (x2.0, 90->1.0, 80->0.5 ... +//--------------------------------------------------------- +inline double outLevel2Amp(int ol); + +//--------------------------------------------------------- +// level2amp, +// 255->0dB->1.0, 0->-27dB->0 +//--------------------------------------------------------- +inline double level2amp(int l); + +//--------------------------------------------------------- +// amp2level +// 1.0->0dB->255, 0->-27dB->0 +//--------------------------------------------------------- +inline int amp2level(double amp); + +//--------------------------------------------------------- +// amp2lowlevel +// 1.0->0dB->127, 0->-27dB->0 +//--------------------------------------------------------- +inline int amp2lowlevel(double amp); + +//--------------------------------------------------------- +// lowlevel2amp, +// 127->0dB->1.0, 0->-27dB->0 +//--------------------------------------------------------- +inline double lowlevel2amp(int l); + +//--------------------------------------------------------- +// envAR2s +// return the time in second of the ATTACK duration +//--------------------------------------------------------- +inline double envAR2s(int ar); + +//--------------------------------------------------------- +// coefAttack +// convert the attack value to a coef for envInct +//--------------------------------------------------------- +inline double coefAttack(unsigned char attack); + +//--------------------------------------------------------- +// envRR2coef +// return the coefficient for the exponential decrease +// with respect to rr and sampleRate, sr +//--------------------------------------------------------- +inline double envRR2coef(int rr, double sr, unsigned char release); + +//-------------------------------------------------------- +// DeicsOnzeCtrl +//-------------------------------------------------------- +struct DeicsOnzeCtlr +{ + std::string name; + int num; + int min, max; +}; + +//--------------------------------------------------------- +// EnvState +//--------------------------------------------------------- + +enum EnvState{ + ATTACK, + DECAY, + SUSTAIN, + RELEASE, + OFF +}; + +//--------------------------------------------------------- +// OpVoice +//--------------------------------------------------------- + +struct OpVoice { + double index; + double inct; + double targetInct; //used if portamento + double amp; //between 0 and 1 + double ampVeloNote; //keeps the ratio amplitude from velo2AmpR and note2Amp + //in order to change independently the output level + //after pressing the note + EnvState envState; + double envIndex; + double envInct; + double envLevel; + double coefVLevel; +}; + +//--------------------------------------------------------- +// PitchEnvState +//--------------------------------------------------------- +enum PitchEnvState{ + PHASE1, + PHASE2, + RELEASE_PE, + OFF_PE +}; + +//--------------------------------------------------------- +// Voice +//--------------------------------------------------------- + +struct Voice { + bool hasAttractor;//true iff the voice has an attractor (portamento occuring) + double attractor; //contains some coeficent for portamento TODO + PitchEnvState pitchEnvState; + double pitchEnvCoefInct; + double pitchEnvCoefInctPhase1; + double pitchEnvCoefInctPhase2; + double pitchEnvCoefInctPhase3; + double pitchEnvCoefInctRelease; + double pitchEnvCoefInctInct; + bool isOn; + bool keyOn; + bool isSustained; + int pitch; //number of the note + double volume; + OpVoice op[NBROP]; + float sampleFeedback; +}; + +//--------------------------------------------------------- +// Channel +//--------------------------------------------------------- +struct Channel { + bool isEnable; + float ampLeft; + float ampRight; + int volume; //0 to 255 + int pan; //TODO -63 +64 or -127 +128 + int modulation;//0 to 127 + int detune;//-31 to 31 + int brightness; //0 to 4095 + int attack; //0 to 127 + int release; //0 to 127 + float feedbackAmp; + float lfoFreq; + float lfoPitch; + float lfoMaxCoefInct; + float lfoCoefInct; + float lfoCoefInctInct; + unsigned int lfoIndex; + unsigned int lfoMaxIndex; + float lfoMaxAmp; + float lfoMaxDAmp; + float lfoAmp; + float lfoCoefAmp; + double lfoDelayIndex; + double lfoDelayInct; + double lfoDelayMaxIndex; + bool delayPassed; + bool sustain; + double pitchBendCoef;//speed coef to read the sample + unsigned char nbrVoices; + Voice voices[MAXNBRVOICES]; + double lastInc[NBROP]; + std::list lastVoiceKeyOn; //stack of the voice number + int lastVoiceKeyOff; + bool isLastNote; + //FX + float chorusAmount; //between 0.0 and 1.0 + float reverbAmount; //between 0.0 and 1.0 + float delayAmount; //between 0.0 and 1.0 +}; + +//--------------------------------------------------------- +// Global +//--------------------------------------------------------- +enum Quality { + high, + middle, + low, + ultralow +}; + +struct Global { + float masterVolume; + Quality quality; //high, middle, low + int qualityCounter; //counter to skip some sample depending on quality + int qualityCounterTop; //number of sample - 1 to skip + double deiSampleRate; //depending on quality deicsOnze sample rate varies + bool filter; //low passe filter used when the sampling is low + int fontSize; + float lastLeftSample; + float lastRightSample; + float lastInputLeftChorusSample; + float lastInputRightChorusSample; + float lastInputLeftReverbSample; + float lastInputRightReverbSample; + float lastInputLeftDelaySample; + float lastInputRightDelaySample; + Channel channel[NBRCHANNELS]; + bool isChorusActivated; + float chorusReturn; + bool isReverbActivated; + float reverbReturn; + bool isDelayActivated; + float delayReturn; +}; + +//--------------------------------------------------------- +// DeicsOnze : DX11 emulator +//--------------------------------------------------------- + +class DeicsOnze : public Mess { + DeicsOnzeGui* _gui; + + static int useCount; + static float waveTable[NBRWAVES][RESOLUTION]; + + private: + void parseInitData(int length, const unsigned char* data); + void loadConfiguration(QString fileName); + + public: + float** tempInputChorus; + float** tempOutputChorus; + float** tempInputReverb; + float** tempOutputReverb; + float** tempInputDelay; + float** tempOutputDelay; + + float* getSinusWaveTable(); + + int nbrCtrl; + + QString _initSetPath; + bool _isInitSet; + QString _backgroundPixPath; + bool _isBackgroundPix; + bool _saveOnlyUsed; + bool _saveConfig; + DeicsOnzeCtlr _ctrl[NBRCTRLS]; + Global _global; + Preset* _preset[NBRCHANNELS]; + Preset* _initialPreset; + + //FX + PluginI* _pluginIReverb; + PluginI* _pluginIChorus; + PluginI* _pluginIDelay; + + void initPluginReverb(Plugin*); + void initPluginChorus(Plugin*); + void initPluginDelay(Plugin*); + + void setReverbParam(int i, double val); + double getReverbParam(int i); + void setChorusParam(int i, double val); + double getChorusParam(int i); + void setDelayBPM(float val); + void setDelayBeatRatio(float val); + void setDelayFeedback(float val); + void setDelayLFOFreq(float val); + void setDelayLFODepth(float val); + void setDelayDryWet(float val); + float getDelayBPM(); + float getDelayBeatRatio(); + float getDelayFeedback(); + float getDelayLFOFreq(); + float getDelayLFODepth(); + + //Filter + LowFilter* _dryFilter; + LowFilter* _chorusFilter; + LowFilter* _reverbFilter; + LowFilter* _delayFilter; + + mutable MidiPatch _patch; + mutable int _numPatchProg; //used by getPatchInfo + + //preset tree + Set* _set; + + void setSampleRate(int sr); + Preset* findPreset(int hbank, int lbank, int prog) const; + Subcategory* findSubcategory(int hbank, int lbank) const; + Category* findCategory(int hbank) const; + void initCtrls(); + void initGlobal(); + void initChannels(); + void initChannel(int c); + void resetVoices(); //when panic is pressed + void initVoice(int c, int v); + void initVoices(int c); + void setPreset(int c); + void setFeedback(int c); + void setLfo(int c); + void setOutLevel(int c, int k); //set the output level of the op k + void setOutLevel(int c); //do the same for all operators + void setEnvAttack(int c, int v, int k); //set envInct of voice v and op k + void setEnvAttack(int c, int k); //do the same for all voices of operator k + void setEnvAttack(int c); //do the same for all voices all operators + void setEnvRelease(int c, int v, int k); //set coefVLevel of voice v and op k + void setEnvRelease(int c, int k); //do the same for all voices of operator k + void setEnvRelease(int c); //do the same for all voices all operators + void setPitchEnvRelease(int c, int v); + void setQuality(Quality q); + void setFilter(bool f); + double brightness2Amp(int c, int k); //get the brightness of the operator k + void loadSutulaPresets(); + void loadSet(QString s); + int noteOff2Voice(int c); //return the first free voice + int minVolu2Voice(int c); + int pitchOn2Voice(int c, int pitch); + void programSelect(int c, int hbank, int lbank, int prog); + bool existsKeyOn(int ch); + void setNbrVoices(int c, int nv); + void setMasterVol(int v); + void setChannelEnable(int c, bool e); + void setChannelVol(int c, int v); + void setChannelPan(int c, int v); + void applyChannelAmp(int c); + void setChannelDetune(int c, int d); + void setChannelBrightness(int c, int b); + void setChannelModulation(int c, int m); + void setChannelAttack(int c, int a); + void setChannelRelease(int c, int r); + void setChannelReverb(int c, int r); + void setChannelChorus(int c, int val); + void setChannelDelay(int c, int val); + void setChorusReturn(int val); + void setReverbReturn(int val); + void setDelayReturn(int val); + bool getChannelEnable(int c) const; + int getNbrVoices(int c) const; + int getMasterVol(void) const; + bool getFilter(void) const; + int getChannelVol(int c) const; + int getChannelPan(int c) const; + int getChannelDetune(int c) const; + int getChannelBrightness(int c) const; + int getChannelModulation(int c) const; + int getChannelAttack(int c) const; + int getChannelRelease(int c) const; + int getChannelReverb(int c) const; + int getChannelChorus(int c) const; + int getChannelDelay(int c) const; + int getChorusReturn(void) const; + int getReverbReturn(void) const; + int getDelayReturn(void) const; + void setPitchBendCoef(int c, int val); + void setModulation(int c, int val); //TODO check between setChannelModulation + void setSustain(int c, int val); + + void readConfiguration(QDomNode qdn); + void writeConfiguration(AL::Xml* xml); + + bool setController(int ch, int ctrl, int val, bool fromGui); + virtual bool setController(int ch, int ctrl, int val); + bool sysex(int length, const unsigned char* data, bool fromGui); + virtual bool sysex(int length, const unsigned char* data); + + virtual const char* getPatchName(int ch, int number, int) const; + virtual const MidiPatch* getPatchInfo(int, const MidiPatch *) const; + + virtual int getControllerInfo(int arg1, const char** arg2, + int* arg3, int* arg4, int* arg5); + virtual void getInitData(int* length, const unsigned char** data); + virtual bool playNote(int channel, int pitch, int velo); + virtual void process(float** buffer, int offset, int n); + + // GUI interface routines + virtual bool hasGui() const { return true; } + virtual bool guiVisible() const; + virtual void showGui(bool); + virtual void getGeometry(int* x, int* y, int* w, int* h) const; + virtual void setGeometry(int, int, int, int); + + DeicsOnze(); + ~DeicsOnze(); +}; + + +#endif /* __DEICSONZE_H */ diff --git a/attic/muse_qt4_evolution/synti/deicsonze/deicsonzefilter.cpp b/attic/muse_qt4_evolution/synti/deicsonze/deicsonzefilter.cpp new file mode 100644 index 00000000..d4bef946 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/deicsonzefilter.cpp @@ -0,0 +1,67 @@ +//=========================================================================== +// +// DeicsOnze an emulator of the YAMAHA DX11 synthesizer +// +// Version 0.5.5 +// +// deicsonzefilter.cpp +// +// +// Copyright (c) 2004-2006 Nil Geisweiller +// +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA or point your web browser to http://www.gnu.org. +//=========================================================================== + +#include "deicsonzefilter.h" + +LowFilter::LowFilter() { + _li = 0.0; + _ri = 0.0; + _lo = 0.0; + _ro = 0.0; +} + +void LowFilter::setSamplerate(int sr) { + _samplerate = sr; +} + +void LowFilter::setCutoff(double cut) { + _cutoff = cut; + float w = 2.0 * (float)_samplerate; + float fCut = _cutoff * 2.0 * M_PI; + float norm = 1.0 / (fCut + w); + _a = fCut * norm; + _b = (w - fCut) * norm; +} + +void LowFilter::process(float* leftSamples, float* rightSamples, unsigned n) { + float cl, cr; + for(unsigned i = 0; i < n; i++) { + cl = leftSamples[i]; + cr = rightSamples[i]; + + leftSamples[i] = _a * (cl + _li) + _b * _lo; + rightSamples[i] = _a * (cr + _ri) + _b * _ro; + + _li = cl; + _ri = cr; + _lo = leftSamples[i]; + _ro = rightSamples[i]; + } +} + diff --git a/attic/muse_qt4_evolution/synti/deicsonze/deicsonzefilter.h b/attic/muse_qt4_evolution/synti/deicsonze/deicsonzefilter.h new file mode 100644 index 00000000..fc92142a --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/deicsonzefilter.h @@ -0,0 +1,59 @@ +//=========================================================================== +// +// DeicsOnze an emulator of the YAMAHA DX11 synthesizer +// +// Version 0.5.5 +// +// deicsonzefilter.h +// +// +// Copyright (c) 2004-2006 Nil Geisweiller +// +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA or point your web browser to http://www.gnu.org. +//=========================================================================== + +#ifndef __DEICSONZEFILTER_H +#define __DEICSONZEFILTER_H + +#include + +class LowFilter { + private: + int _samplerate; + + double _cutoff; //frequency cutoff + float _a; + float _b; + + float _li; //last left input sample + float _ri; //last right input sample + float _lo; //last left output sample + float _ro; //last right output sample + public: + LowFilter(); + ~LowFilter() {} + + void setSamplerate(int sr); + void setCutoff(double cut); + //int getSamplerate(); + //double getCutoff(); + + void process(float* leftSamples, float* RightSamples, unsigned n); +}; + +#endif /* __DEICSONZEFILTER_H */ diff --git a/attic/muse_qt4_evolution/synti/deicsonze/deicsonzegui.cpp b/attic/muse_qt4_evolution/synti/deicsonze/deicsonzegui.cpp new file mode 100644 index 00000000..a651bcb1 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/deicsonzegui.cpp @@ -0,0 +1,4545 @@ +//=========================================================================== +// +// DeicsOnze an emulator of the YAMAHA DX11 synthesizer +// +// Version 0.5.5 +// +// deicsonzegui.cpp +// +// +// Copyright (c) 2004-2006 Nil Geisweiller +// +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA or point your web browser to http://www.gnu.org. +//=========================================================================== + +#include "muse/midi.h" +#include "muse/midictrl.h" +#include "config.h" +#include "plugin.h" +#include "plugingui.h" +#include "plugins/pandelay/pandelaymodel.h" + +#include "deicsonzegui.h" + +class PluginDialog; + +DeicsOnzeGui::DeicsOnzeGui(DeicsOnze* deicsOnze) + : QDialog(0), + MessGui() +{ + setupUi(this); + _deicsOnze = deicsOnze; + lastDir = QDir::currentPath(); + + _currentChannel = 0; + + //FX + _chorusSuperWidget = NULL; + _reverbSuperWidget = NULL; + + tColor = new TCOLOR; + bColor = new BCOLOR; + etColor = new ETCOLOR; + ebColor = new EBCOLOR; + curColor = new QColor(0, 0, 0); + + pitchEnvelopeGraph = new QFramePitchEnvelope(pitchEnvFrame, this); + + envelopeGraph[0] = new QFrameEnvelope(envelope1Frame, this, 0); + envelopeGraph[1] = new QFrameEnvelope(envelope2Frame, this, 1); + envelopeGraph[2] = new QFrameEnvelope(envelope3Frame, this, 2); + envelopeGraph[3] = new QFrameEnvelope(envelope4Frame, this, 3); + + //change/enable channel + connect(ChannelCheckBox, SIGNAL(toggled(bool)), this, + SLOT(setEnabledChannel(bool))); + connect(ChannelNumSpinBox, SIGNAL(valueChanged(int)), this, + SLOT(setChangeChannel(int))); + //MasterVolume + connect(masterVolKnob, SIGNAL(valueChanged(double, int)), + this, SLOT(setMasterVolKnob(double))); + //Panic + connect(panicButton, SIGNAL(pressed()), this, SLOT(setPanic())); + //reset Ctrls + connect(resCtrlButton, SIGNAL(pressed()), this, SLOT(setResCtrl())); + //FX + connect(chorusActivCheckBox, SIGNAL(toggled(bool)), + this, SLOT(setChorusActiv(bool))); + connect(chChorusSlider, SIGNAL(valueChanged(int)), + this, SLOT(setChannelChorus(int))); + connect(returnChorusSlider, SIGNAL(valueChanged(int)), + this, SLOT(setChorusReturn(int))); + connect(selectLadspaChorusPushButton, SIGNAL(pressed()), + this, SLOT(setSelectChorusPlugin())); + /*connect(panChorus1Knob, SIGNAL(valueChanged(double, int)), + this, SLOT(setPanChorus1(double))); + connect(LFOFreqChorus1Knob, SIGNAL(valueChanged(double, int)), + this, SLOT(setLFOFreqChorus1(double))); + connect(depthChorus1Knob, SIGNAL(valueChanged(double, int)), + this, SLOT(setDepthChorus1(double))); + connect(panChorus2Knob, SIGNAL(valueChanged(double, int)), + this, SLOT(setPanChorus2(double))); + connect(LFOFreqChorus2Knob, SIGNAL(valueChanged(double, int)), + this, SLOT(setLFOFreqChorus2(double))); + connect(depthChorus2Knob, SIGNAL(valueChanged(double, int)), + this, SLOT(setDepthChorus2(double)));*/ + connect(reverbActivCheckBox, SIGNAL(toggled(bool)), + this, SLOT(setReverbActiv(bool))); + connect(chReverbSlider, SIGNAL(valueChanged(int)), + this, SLOT(setChannelReverb(int))); + connect(returnReverbSlider, SIGNAL(valueChanged(int)), + this, SLOT(setReverbReturn(int))); + connect(selectLadspaReverbPushButton, SIGNAL(pressed()), + this, SLOT(setSelectReverbPlugin())); + //Quick edit + connect(channelVolumeKnob, SIGNAL(valueChanged(double, int)), + this, SLOT(setChannelVolKnob(double))); + connect(channelPanKnob, SIGNAL(valueChanged(double, int)), + this, SLOT(setChannelPan(double))); + connect(brightnessKnob, SIGNAL(valueChanged(double, int)), + this, SLOT(setBrightnessKnob(double))); + connect(modulationKnob, SIGNAL(valueChanged(double, int)), + this, SLOT(setModulationKnob(double))); + connect(detuneKnob, SIGNAL(valueChanged(double, int)), + this, SLOT(setDetuneKnob(double))); + connect(attackKnob, SIGNAL(valueChanged(double, int)), + this, SLOT(setAttackKnob(double))); + connect(releaseKnob, SIGNAL(valueChanged(double, int)), + this, SLOT(setReleaseKnob(double))); + //nbr of voices + connect(nbrVoicesSpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setNbrVoices(int))); + //quality + connect(qualityComboBox, SIGNAL(activated(const QString&)), + this, SLOT(setQuality(const QString&))); + connect(filterCheckBox, SIGNAL(toggled(bool)), + this, SLOT(setFilter(bool))); + //change font size + connect(fontSizeSpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setFontSize(int))); + //load save configuration + connect(saveConfPushButton, SIGNAL(pressed()), + this, SLOT(saveConfiguration())); + connect(loadConfPushButton, SIGNAL(pressed()), + this, SLOT(loadConfiguration())); + connect(saveDefaultPushButton, SIGNAL(pressed()), + this, SLOT(saveDefaultConfiguration())); + //load init set + connect(initSetCheckBox, SIGNAL(toggled(bool)), + this, SLOT(setIsInitSet(bool))); + connect(initSetPathLineEdit, SIGNAL(textChanged(const QString&)), + this, SLOT(setInitSetPath(const QString&))); + connect(initSetBrowsePushButton, SIGNAL(pressed()), + this, SLOT(setBrowseInitSetPath())); + //load background pix + connect(imageCheckBox, SIGNAL(toggled(bool)), + this, SLOT(setIsBackgroundPix(bool))); + connect(imagePathLineEdit, SIGNAL(textChanged(const QString&)), + this, SLOT(setBackgroundPixPath(const QString&))); + connect(imageBrowsePushButton, SIGNAL(pressed()), + this, SLOT(setBrowseBackgroundPixPath())); + + //Midi in channel + //connect(MidiInChComboBox, SIGNAL(activated(int)), + // this, SLOT(setMidiInCh(int))); + //Save mode ratio button + connect(minSaveRadioButton, SIGNAL(toggled(bool)), + this, SLOT(setSaveOnlyUsed(bool))); + connect(hugeSaveRadioButton, SIGNAL(toggled(bool)), + this, SLOT(setSaveOnlyUsedComp(bool))); + connect(saveConfigCheckBox, SIGNAL(toggled(bool)), + this, SLOT(setSaveConfig(bool))); + //Colors + connect(redSlider, SIGNAL(valueChanged(int)), + this, SLOT(setRedColor(int))); + connect(greenSlider, SIGNAL(valueChanged(int)), + this, SLOT(setGreenColor(int))); + connect(blueSlider, SIGNAL(valueChanged(int)), + this, SLOT(setBlueColor(int))); + connect(colorListBox, + SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), + this, SLOT(setRGBSliders(QListWidgetItem*))); + //PopupMenu Category Subcategory Preset + connect(categoryListView, + SIGNAL(customContextMenuRequested(const QPoint&)), + this, SLOT(categoryPopupMenu(const QPoint&))); + connect(subcategoryListView, + SIGNAL(customContextMenuRequested(const QPoint&)), + this, SLOT(subcategoryPopupMenu(const QPoint&))); + connect(presetListView, + SIGNAL(customContextMenuRequested(const QPoint &)), + this, SLOT(presetPopupMenu(const QPoint &))); + //Preset and bank + connect(presetLineEdit, SIGNAL(textChanged(const QString&)), + this, SLOT(setPresetName(const QString&))); + connect(subcategoryLineEdit, SIGNAL(textChanged(const QString&)), + this, SLOT(setSubcategoryName(const QString&))); + connect(categoryLineEdit, SIGNAL(textChanged(const QString&)), + this, SLOT(setCategoryName(const QString&))); + connect(hbankSpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setHBank(int))); + connect(lbankSpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setLBank(int))); + connect(progSpinBox, SIGNAL(valueChanged(int)), this, SLOT(setProg(int))); + //Global + //connect(channelPanSlider, SIGNAL(valueChanged(int)), + //this, SLOT(setChannelPan(int))); + connect(feedbackSlider, SIGNAL(valueChanged(int)), + this, SLOT(setFeedback(int))); + connect(LFOWaveComboBox, SIGNAL(activated(int)), + this, SLOT(setLfoWave(int))); + connect(LFOSpeedSlider, SIGNAL(valueChanged(int)), + this, SLOT(setLfoSpeed(int))); + connect(LFODelaySlider, SIGNAL(valueChanged(int)), + this, SLOT(setLfoDelay(int))); + connect(PModDepthSlider, SIGNAL(valueChanged(int)), + this, SLOT(setLfoPModDepth(int))); + connect(PModSensSlider, SIGNAL(valueChanged(int)), + this, SLOT(setLfoPitchSens(int))); + connect(AModDepthSlider, SIGNAL(valueChanged(int)), + this, SLOT(setLfoAModDepth(int))); + connect(AModSensSlider, SIGNAL(valueChanged(int)), + this, SLOT(setLfoAmpSens(int))); + connect(transposeSlider, SIGNAL(valueChanged(int)), + this, SLOT(setTranspose(int))); + //connect(channelDetuneSlider, SIGNAL(valueChanged(int)), + // this, SLOT(setChannelDetune(int))); + connect(algorithmComboBox, SIGNAL(activated(int)), + this, SLOT(setAlgorithm(int))); + connect(pitchBendRangeSlider, SIGNAL(valueChanged(int)), + this, SLOT(setPitchBendRange(int))); + //Pitch Envelope + connect(PL1SpinBox, SIGNAL(valueChanged(int)), this, SLOT(setPL1(int))); + connect(PL2SpinBox, SIGNAL(valueChanged(int)), this, SLOT(setPL2(int))); + connect(PL3SpinBox, SIGNAL(valueChanged(int)), this, SLOT(setPL3(int))); + connect(PR1SpinBox, SIGNAL(valueChanged(int)), this, SLOT(setPR1(int))); + connect(PR2SpinBox, SIGNAL(valueChanged(int)), this, SLOT(setPR2(int))); + connect(PR3SpinBox, SIGNAL(valueChanged(int)), this, SLOT(setPR3(int))); + //Function + connect(fcVolumeSpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setFcVolume(int))); + connect(fcPitchSpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setFcPitch(int))); + connect(fcAmplitudeSpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setFcAmplitude(int))); + connect(mwPitchSpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setMwPitch(int))); + connect(mwAmplitudeSpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setMwAmplitude(int))); + connect(bcPitchSpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setBcPitch(int))); + connect(bcAmplitudeSpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setBcAmplitude(int))); + connect(bcPitchBiasSpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setBcPitchBias(int))); + connect(bcEgBiasSpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setBcEgBias(int))); + connect(atPitchSpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setAtPitch(int))); + connect(atAmplitudeSpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setAtAmplitude(int))); + connect(atPitchBiasSpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setAtPitchBias(int))); + connect(atEgBiasSpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setAtEgBias(int))); + //connect(reverbSpinBox, SIGNAL(valueChanged(int)), + // this, SLOT(setReverbRate(int))); + connect(polyMonoComboBox, SIGNAL(activated(int)), + this, SLOT(setPolyMode(int))); + connect(PortFingerFullComboBox, SIGNAL(activated(int)), + this, SLOT(setPortFingerFull(int))); + connect(PortamentoTimeSlider, SIGNAL(valueChanged(int)), + this, SLOT(setPortaTime(int))); + //envelope + connect(AR1SpinBox, SIGNAL(valueChanged(int)), this, SLOT(setAR1(int))); + connect(D1R1SpinBox, SIGNAL(valueChanged(int)), this, SLOT(setD1R1(int))); + connect(D1L1SpinBox, SIGNAL(valueChanged(int)), this, SLOT(setD1L1(int))); + connect(D2R1SpinBox, SIGNAL(valueChanged(int)), this, SLOT(setD2R1(int))); + connect(RR1SpinBox, SIGNAL(valueChanged(int)), this, SLOT(setRR1(int))); + connect(AR2SpinBox, SIGNAL(valueChanged(int)), this, SLOT(setAR2(int))); + connect(D1R2SpinBox, SIGNAL(valueChanged(int)), this, SLOT(setD1R2(int))); + connect(D1L2SpinBox, SIGNAL(valueChanged(int)), this, SLOT(setD1L2(int))); + connect(D2R2SpinBox, SIGNAL(valueChanged(int)), this, SLOT(setD2R2(int))); + connect(RR2SpinBox, SIGNAL(valueChanged(int)), this, SLOT(setRR2(int))); + connect(AR3SpinBox, SIGNAL(valueChanged(int)), this, SLOT(setAR3(int))); + connect(D1R3SpinBox, SIGNAL(valueChanged(int)), this, SLOT(setD1R3(int))); + connect(D1L3SpinBox, SIGNAL(valueChanged(int)), this, SLOT(setD1L3(int))); + connect(D2R3SpinBox, SIGNAL(valueChanged(int)), this, SLOT(setD2R3(int))); + connect(RR3SpinBox, SIGNAL(valueChanged(int)), this, SLOT(setRR3(int))); + connect(AR4SpinBox, SIGNAL(valueChanged(int)), this, SLOT(setAR4(int))); + connect(D1R4SpinBox, SIGNAL(valueChanged(int)), this, SLOT(setD1R4(int))); + connect(D1L4SpinBox, SIGNAL(valueChanged(int)), this, SLOT(setD1L4(int))); + connect(D2R4SpinBox, SIGNAL(valueChanged(int)), this, SLOT(setD2R4(int))); + connect(RR4SpinBox, SIGNAL(valueChanged(int)), this, SLOT(setRR4(int))); + //Scaling + connect(LS1Slider, SIGNAL(valueChanged(int)), this, SLOT(setLS1(int))); + connect(RS1Slider, SIGNAL(valueChanged(int)), this, SLOT(setRS1(int))); + connect(LS2Slider, SIGNAL(valueChanged(int)), this, SLOT(setLS2(int))); + connect(RS2Slider, SIGNAL(valueChanged(int)), this, SLOT(setRS2(int))); + connect(LS3Slider, SIGNAL(valueChanged(int)), this, SLOT(setLS3(int))); + connect(RS3Slider, SIGNAL(valueChanged(int)), this, SLOT(setRS3(int))); + connect(LS4Slider, SIGNAL(valueChanged(int)), this, SLOT(setLS4(int))); + connect(RS4Slider, SIGNAL(valueChanged(int)), this, SLOT(setRS4(int))); + //Volume + connect(OUT1Slider, SIGNAL(valueChanged(int)), this, SLOT(setVol1(int))); + connect(OUT2Slider, SIGNAL(valueChanged(int)), this, SLOT(setVol2(int))); + connect(OUT3Slider, SIGNAL(valueChanged(int)), this, SLOT(setVol3(int))); + connect(OUT4Slider, SIGNAL(valueChanged(int)), this, SLOT(setVol4(int))); + //Ratio and Frequency + connect(CoarseRatio1SpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setCoarseRatio1(int))); + connect(FineRatio1SpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setFineRatio1(int))); + connect(Freq1SpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setFreq1(int))); + connect(Fix1CheckBox, SIGNAL(toggled(bool)), this, SLOT(setFix1(bool))); + connect(CoarseRatio2SpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setCoarseRatio2(int))); + connect(FineRatio2SpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setFineRatio2(int))); + connect(Freq2SpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setFreq2(int))); + connect(Fix2CheckBox, SIGNAL(toggled(bool)), this, SLOT(setFix2(bool))); + connect(CoarseRatio3SpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setCoarseRatio3(int))); + connect(FineRatio3SpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setFineRatio3(int))); + connect(Freq3SpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setFreq3(int))); + connect(Fix3CheckBox, SIGNAL(toggled(bool)), this, SLOT(setFix3(bool))); + connect(CoarseRatio4SpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setCoarseRatio4(int))); + connect(FineRatio4SpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setFineRatio4(int))); + connect(Freq4SpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setFreq4(int))); + connect(Fix4CheckBox, SIGNAL(toggled(bool)), this, SLOT(setFix4(bool))); + //Sensitivity + connect(AME1CheckBox, SIGNAL(toggled(bool)), this, SLOT(setAME1(bool))); + connect(EBS1Slider, SIGNAL(valueChanged(int)), this, SLOT(setEBS1(int))); + connect(KVS1Slider, SIGNAL(valueChanged(int)), this, SLOT(setKVS1(int))); + connect(AME2CheckBox, SIGNAL(toggled(bool)), this, SLOT(setAME2(bool))); + connect(EBS2Slider, SIGNAL(valueChanged(int)), this, SLOT(setEBS2(int))); + connect(KVS2Slider, SIGNAL(valueChanged(int)), this, SLOT(setKVS2(int))); + connect(AME3CheckBox, SIGNAL(toggled(bool)), this, SLOT(setAME3(bool))); + connect(EBS3Slider, SIGNAL(valueChanged(int)), this, SLOT(setEBS3(int))); + connect(KVS3Slider, SIGNAL(valueChanged(int)), this, SLOT(setKVS3(int))); + connect(AME4CheckBox, SIGNAL(toggled(bool)), this, SLOT(setAME4(bool))); + connect(EBS4Slider, SIGNAL(valueChanged(int)), this, SLOT(setEBS4(int))); + connect(KVS4Slider, SIGNAL(valueChanged(int)), this, SLOT(setKVS4(int))); + //detune + connect(DET1Slider, SIGNAL(valueChanged(int)), this, SLOT(setDET1(int))); + connect(DET2Slider, SIGNAL(valueChanged(int)), this, SLOT(setDET2(int))); + connect(DET3Slider, SIGNAL(valueChanged(int)), this, SLOT(setDET3(int))); + connect(DET4Slider, SIGNAL(valueChanged(int)), this, SLOT(setDET4(int))); + //WaveForm + connect(WaveForm1ComboBox, SIGNAL(activated(int)), + this, SLOT(setWaveForm1(int))); + connect(WaveForm2ComboBox, SIGNAL(activated(int)), + this, SLOT(setWaveForm2(int))); + connect(WaveForm3ComboBox, SIGNAL(activated(int)), + this, SLOT(setWaveForm3(int))); + connect(WaveForm4ComboBox, SIGNAL(activated(int)), + this, SLOT(setWaveForm4(int))); + //PanDelay + connect(delayActivCheckBox, SIGNAL(toggled(bool)), this, + SLOT(setActivDelay(bool))); + connect(delayReturnSlider, SIGNAL(valueChanged(int)), this, + SLOT(setDelayReturn(int))); + connect(chDelaySlider, SIGNAL(valueChanged(int)), this, + SLOT(setChannelDelay(int))); + connect(delayBPMFloatentry, SIGNAL(valueChanged(double, int)), this, + SLOT(setDelayBPM(double))); + connect(delayBPMKnob, SIGNAL(valueChanged(double, int)), this, + SLOT(setDelayBPM(double))); + connect(delayBeatRatioFloatentry, SIGNAL(valueChanged(double, int)), this, + SLOT(setDelayBeatRatio(double))); + connect(delayBeatRatioKnob, SIGNAL(valueChanged(double, int)), this, + SLOT(setDelayBeatRatio(double))); + connect(delayFeedbackFloatentry, SIGNAL(valueChanged(double, int)), this, + SLOT(setDelayFeedback(double))); + connect(delayFeedbackKnob, SIGNAL(valueChanged(double, int)), this, + SLOT(setDelayFeedback(double))); + connect(delayPanLFOFreqFloatentry, SIGNAL(valueChanged(double, int)), this, + SLOT(setDelayPanLFOFreq(double))); + connect(delayPanLFOFreqKnob, SIGNAL(valueChanged(double, int)), this, + SLOT(setDelayPanLFOFreq(double))); + delayPanLFOFreqKnob->setMinLogValue(0.1); + delayPanLFOFreqKnob->setMaxLogValue(10.0); + connect(delayPanLFODepthFloatentry, SIGNAL(valueChanged(double, int)), this, + SLOT(setDelayPanLFODepth(double))); + connect(delayPanLFODepthKnob, SIGNAL(valueChanged(double, int)), this, + SLOT(setDelayPanLFODepth(double))); + //category subcategory preset + connect(categoryListView, + SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), + this, SLOT(setCategory(QTreeWidgetItem*))); + connect(categoryListView, SIGNAL(itemClicked(QTreeWidgetItem*,int)), + this, SLOT(setCategory(QTreeWidgetItem*))); + connect(subcategoryListView, + SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), + this, SLOT(setSubcategory(QTreeWidgetItem*))); + connect(subcategoryListView, SIGNAL(itemClicked(QTreeWidgetItem*,int)), + this, SLOT(setSubcategory(QTreeWidgetItem*))); + connect(presetListView, + SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), + this, SLOT(setPreset(QTreeWidgetItem*))); + connect(presetListView, SIGNAL(itemClicked(QTreeWidgetItem*,int)), + this, SLOT(setPreset(QTreeWidgetItem*))); + //Connect socketnotifier to fifo + QSocketNotifier* s = new QSocketNotifier(readFd, QSocketNotifier::Read); + connect(s, SIGNAL(activated(int)), SLOT(readMessage(int))); + + setTextColor(reinterpret_cast(*tColor)); + setBackgroundColor(reinterpret_cast(*bColor)); + setEditTextColor(reinterpret_cast(*etColor)); + setEditBackgroundColor(reinterpret_cast(*ebColor)); + + //select the first item in the color list + colorListBox->setCurrentItem(colorListBox->item(0)); + + //color the colorFrame with the color of the text + QPalette p = colorFrame->palette(); + p.setColor(QPalette::Window, (reinterpret_cast(*tColor))); + colorFrame->setPalette(p); + + //update maaster volume + //updateMasterVolume(INITMASTERVOL); + //update Quick edit + updateQuickEdit(); + + //updatePreset(); + _enabledPreset = true; + setEnabledPreset(false); + + updateInitSetPath + (INSTPREFIX "/share/muse-" VERSION "/presets/deicsonze/SutulaBank.dei"); + //"/usr/local/share/muse-1.0pre1/presets/deicsonze/SutulaBank.dei") + //); + updateBackgroundPixPath + (INSTPREFIX "/share/muse-" VERSION "/wallpapers/paper2.jpg"); + updateBackgroundPixCheckBox(true); + applyBackgroundPix(); +} + +//----------------------------------------------------------- +// setEnabledChannel +//----------------------------------------------------------- +void DeicsOnzeGui::setEnabledChannel(bool e) { + sendController(_currentChannel, CTRL_CHANNELENABLE, (int)e); + updateEnabledChannel(e); +} +//----------------------------------------------------------- +// setUpdateEnabledChannelCheckBox +//----------------------------------------------------------- +void DeicsOnzeGui::updateChannelCheckBox(bool b) { + ChannelCheckBox->blockSignals(true); + ChannelCheckBox->setChecked(b); + ChannelCheckBox->blockSignals(false); +} + +//----------------------------------------------------------- +// setChangeChannel +//----------------------------------------------------------- +void DeicsOnzeGui::setChangeChannel(int c) { + _currentChannel = c-1; + updateChannelEnable(_deicsOnze->getChannelEnable(_currentChannel)); + updateNbrVoices(_deicsOnze->getNbrVoices(_currentChannel)); + //update quick edit + updateQuickEdit(); + //update preset + int p, l, h; + _deicsOnze->_preset[_currentChannel]->getHBankLBankProg(&h, &l, &p); + updateSelectPreset(h, l, p); + updatePreset(); +} +//----------------------------------------------------------- +// setPanic +//----------------------------------------------------------- +void DeicsOnzeGui::setPanic() { + unsigned char* message = new unsigned char[1]; + message[0]=SYSEX_PANIC; + sendSysex(message, 1); +} + +//----------------------------------------------------------- +// setResCtrl +//----------------------------------------------------------- +void DeicsOnzeGui::setResCtrl() { + //Detune + updateChannelDetune(0); + sendController(_currentChannel, CTRL_CHANNELDETUNE, 0); + //Brightness + updateBrightness(MIDFINEBRIGHTNESS); + sendController(_currentChannel, CTRL_FINEBRIGHTNESS, MIDFINEBRIGHTNESS); + //Attack + updateAttack(MIDATTACK); + sendController(_currentChannel, CTRL_ATTACK_TIME, MIDATTACK); + //Release + updateRelease(MIDRELEASE); + sendController(_currentChannel, CTRL_RELEASE_TIME, MIDRELEASE); +} + +//----------------------------------------------------------- +// setNbrVoices +//----------------------------------------------------------- +void DeicsOnzeGui::setNbrVoices(int nv) { + sendController(_currentChannel, CTRL_NBRVOICES, nv); +} + +//---------------------------------------------------------- +// setMidiInCh +//---------------------------------------------------------- +//void DeicsOnzeGui::setMidiInCh(int m) { +// unsigned char* message = new unsigned char[2]; +// message[0]=SYSEX_CHANNELNUM; +// message[1]=(unsigned char)(m-1); +// sendSysex(message, 2); +//} + +//----------------------------------------------------------- +// saveConfiguration +//----------------------------------------------------------- +void DeicsOnzeGui::saveConfiguration() { + QString filename = + QFileDialog::getSaveFileName( + this, + tr("Save configuration"), + lastDir, + QString("*.dco")); + if(!filename.isEmpty()) { + QFileInfo fi(filename); + lastDir = fi.path(); + if(!filename.endsWith(".dco")) filename+=".dco"; + QFile f(filename); + f.open(QIODevice::WriteOnly); + AL::Xml* xml = new AL::Xml(&f); + xml->header(); + _deicsOnze->writeConfiguration(xml); + f.close(); + } +} + +//----------------------------------------------------------- +// saveDefaultConfiguration +//----------------------------------------------------------- +void DeicsOnzeGui::saveDefaultConfiguration() { + QString filename = QString(getenv("HOME")) + QString("/." DEICSONZESTR ".dco"); + if(!filename.isEmpty()) { + QFile f(filename); + f.open(QIODevice::WriteOnly); + + AL::Xml* xml = new AL::Xml(&f); + xml->header(); + _deicsOnze->writeConfiguration(xml); + f.close(); + } +} + +//----------------------------------------------------------- +// loadConfiguration +//----------------------------------------------------------- +void DeicsOnzeGui::loadConfiguration(QString fileName) { + // read the XML file and create DOM tree + if(!fileName.isEmpty()) { + QFile confFile(fileName); + if(!confFile.open(QIODevice::ReadOnly)) { + QMessageBox::critical(0, + tr("Critical Error"), + tr("Cannot open file %1").arg(fileName)); + return; + } + QDomDocument domTree; + if (!domTree.setContent(&confFile )) { + QMessageBox::critical + (0, tr("Critical Error"), + tr("Parsing error for file %1").arg(fileName)); + confFile.close(); + return; + } + + confFile.close(); + + QDomNode node = domTree.documentElement(); + while (!node.isNull()) { + QDomElement e = node.toElement(); + if (e.isNull()) + continue; + if (e.tagName() == DEICSONZECONFIGURATIONSTR) { + QString version = e.attribute(QString("version")); + if (version == "1.0") { + _deicsOnze->readConfiguration(node.firstChild()); + } + else printf("unsupported *.dco file version %s\n", + version.toLatin1().data()); + } + else printf("DeicsOnze: %s not supported\n", + e.tagName().toLatin1().data()); + node = node.nextSibling(); + } + } +} + +//----------------------------------------------------------- +// loadConfiguration +//----------------------------------------------------------- +void DeicsOnzeGui::loadConfiguration() { + QString fileName = + QFileDialog::getOpenFileName( + this, + tr("Load category dialog"), + lastDir, + QString("*.dco")); + QFileInfo fi(fileName); + lastDir = fi.path(); + loadConfiguration(fileName); +} + +//----------------------------------------------------------- +// setQuality +//----------------------------------------------------------- +void DeicsOnzeGui::setQuality(const QString& q) { + unsigned char* message = new unsigned char[2]; + message[0]=SYSEX_QUALITY; + message[1]=(unsigned char)(q=="High"? + high:(q=="Middle"? + middle:(q=="Low"?low:ultralow))); + sendSysex(message, 2); +} +//----------------------------------------------------------- +// setFilter +//----------------------------------------------------------- +void DeicsOnzeGui::setFilter(bool f) { + unsigned char* message = new unsigned char[2]; + message[0]=SYSEX_FILTER; + message[1]=(unsigned char)f; + sendSysex(message, 2); +} +//----------------------------------------------------------- +// setFontSize +//----------------------------------------------------------- +void DeicsOnzeGui::setFontSize(int fs) { + applyFontSize(fs); + unsigned char* message = new unsigned char[2]; + message[0]=SYSEX_FONTSIZE; + message[1]=(unsigned char)fs; + sendSysex(message, 2); +} +//----------------------------------------------------------- +// setSaveOnlyUsed +//----------------------------------------------------------- +void DeicsOnzeGui::setSaveOnlyUsed(bool sou) { + unsigned char* message = new unsigned char[2]; + message[0]=SYSEX_SAVEONLYUSED; + message[1]=(unsigned char)sou; + sendSysex(message, 2); + updateSaveOnlyUsed(sou); +} +void DeicsOnzeGui::setSaveOnlyUsedComp(bool souc) { + unsigned char* message = new unsigned char[2]; + message[0]=SYSEX_SAVEONLYUSED; + message[1]=(unsigned char)!souc; + sendSysex(message, 2); + updateSaveOnlyUsed(!souc); +} +//----------------------------------------------------------- +// setSaveConfig +//----------------------------------------------------------- +void DeicsOnzeGui::setSaveConfig(bool ssc) { + unsigned char* message = new unsigned char[2]; + message[0]=SYSEX_SAVECONFIG; + message[1]=(unsigned char)ssc; + sendSysex(message, 2); +} +//----------------------------------------------------------- +// setColor +//----------------------------------------------------------- +void DeicsOnzeGui::setRedColor(int r) { + QListWidgetItem* i=colorListBox->selectedItems().at(0); + if(i){ + curColor->setRgb(r, curColor->green(), curColor->blue()); + if(i->text()==QString("Text")) { + tColor->setRgb(curColor->rgb()); + setTextColor(reinterpret_cast(*curColor)); + } + else if(i->text()==QString("Background")) { + bColor->setRgb(curColor->rgb()); + setBackgroundColor(reinterpret_cast(*curColor)); + } + else if(i->text()==QString("Edit Text")) { + etColor->setRgb(curColor->rgb()); + setEditTextColor(reinterpret_cast(*curColor)); + } + else if(i->text()==QString("Edit Background")) { + ebColor->setRgb(curColor->rgb()); + setEditBackgroundColor(reinterpret_cast(*curColor)); + } + QPalette p = colorFrame->palette(); + p.setColor(QPalette::Window, + (reinterpret_cast(*curColor))); + colorFrame->setPalette(p); + } +} +void DeicsOnzeGui::setGreenColor(int g) { + QListWidgetItem* i=colorListBox->selectedItems().at(0); + if(i) { + curColor->setRgb(curColor->red(), g, curColor->blue()); + if(i->text()==QString("Text")) { + tColor->setRgb(curColor->rgb()); + setTextColor(reinterpret_cast(*curColor)); + } + else if(i->text()==QString("Background")) { + bColor->setRgb(curColor->rgb()); + setBackgroundColor(reinterpret_cast(*curColor)); + } + else if(i->text()==QString("Edit Text")) { + etColor->setRgb(curColor->rgb()); + setEditTextColor(reinterpret_cast(*curColor)); + } + else if(i->text()==QString("Edit Background")) { + ebColor->setRgb(curColor->rgb()); + setEditBackgroundColor(reinterpret_cast(*curColor)); + } + QPalette p = colorFrame->palette(); + p.setColor(QPalette::Window, (reinterpret_cast(*curColor))); + colorFrame->setPalette(p); + } +} +void DeicsOnzeGui::setBlueColor(int b) { + QListWidgetItem* i=colorListBox->selectedItems().at(0); + if(i) { + curColor->setRgb(curColor->red(), curColor->green(), b); + if(i->text()==QString("Text")) { + tColor->setRgb(curColor->rgb()); + setTextColor(reinterpret_cast(*curColor)); + } + else if(i->text()==QString("Background")) { + bColor->setRgb(curColor->rgb()); + setBackgroundColor(reinterpret_cast(*curColor)); + } + else if(i->text()==QString("Edit Text")) { + etColor->setRgb(curColor->rgb()); + setEditTextColor(reinterpret_cast(*curColor)); + } + else if(i->text()==QString("Edit Background")) { + ebColor->setRgb(curColor->rgb()); + setEditBackgroundColor(reinterpret_cast(*curColor)); + } + QPalette p = colorFrame->palette(); + p.setColor(QPalette::Window, (reinterpret_cast(*curColor))); + colorFrame->setPalette(p); + } +} +void DeicsOnzeGui::setRGBSliders(QListWidgetItem* i) { + if(i->text()==QString("Text")) + curColor->setRgb(tColor->red(), tColor->green(), tColor->blue()); + else if(i->text()==QString("Background")) + curColor->setRgb(bColor->red(), bColor->green(), bColor->blue()); + else if(i->text()==QString("Edit Text")) + curColor->setRgb(etColor->red(), etColor->green(), etColor->blue()); + else if(i->text()==QString("Edit Background")) + curColor->setRgb(ebColor->red(), ebColor->green(), ebColor->blue()); + + redSlider->blockSignals(true); + redSlider->setValue(curColor->red()); + redSlider->blockSignals(false); + redSpinBox->blockSignals(true); + redSpinBox->setValue(curColor->red()); + redSpinBox->blockSignals(false); + greenSlider->blockSignals(true); + greenSlider->setValue(curColor->green()); + greenSlider->blockSignals(false); + greenSpinBox->blockSignals(true); + greenSpinBox->setValue(curColor->green()); + greenSpinBox->blockSignals(false); + blueSlider->blockSignals(true); + blueSlider->setValue(curColor->blue()); + blueSlider->blockSignals(false); + blueSpinBox->blockSignals(true); + blueSpinBox->setValue(curColor->blue()); + blueSpinBox->blockSignals(false); + QPalette p = colorFrame->palette(); + p.setColor(QPalette::Window, (reinterpret_cast(*curColor))); + colorFrame->setPalette(p); +} +void DeicsOnzeGui::setTextColor(const QColor & c) { + QPalette p = this->palette(); + p.setColor(QPalette::WindowText, c); + this->setPalette(p); + channelCtrlGroupBox->setPalette(p); + //channelPanGroupBox->setPalette(p); + FeedbackGroupBox->setPalette(p); + LFOGroupBox->setPalette(p); + ModulationMatrixGroupBox->setPalette(p); + FeedbackGroupBox->setPalette(p); + pitchEnvGroupBox->setPalette(p); + Frequency1groupBox->setPalette(p); + OUT1groupBox->setPalette(p); + Env1GroupBox->setPalette(p); + Scaling1GroupBox->setPalette(p); + DetWaveEGS1GroupBox->setPalette(p); + sensitivity1groupBox->setPalette(p); + Frequency2groupBox->setPalette(p); + OUT2groupBox->setPalette(p); + Env2GroupBox->setPalette(p); + Scaling2GroupBox->setPalette(p); + DetWaveEGS2GroupBox->setPalette(p); + sensitivity2groupBox->setPalette(p); + Frequency3groupBox->setPalette(p); + OUT3groupBox->setPalette(p); + Env3GroupBox->setPalette(p); + Scaling3GroupBox->setPalette(p); + DetWaveEGS3GroupBox->setPalette(p); + sensitivity3groupBox->setPalette(p); + Frequency4groupBox->setPalette(p); + OUT4groupBox->setPalette(p); + Env4GroupBox->setPalette(p); + Scaling4GroupBox->setPalette(p); + DetWaveEGS4GroupBox->setPalette(p); + sensitivity4groupBox->setPalette(p); + transposeGroupBox->setPalette(p); + //detuneGroupBox->setPalette(p); + //footSWGroupBox->setPalette(p); + pitchBendRangeGroupBox->setPalette(p); + //reverbGroupBox->setPalette(p); + modeGroupBox->setPalette(p); + portamentoGroupBox->setPalette(p); + colorGroupBox->setPalette(p); + pathGroupBox->setPalette(p); + qualityGroupBox->setPalette(p); + saveModeButtonGroup->setPalette(p); + fileGroupBox->setPalette(p); + onReverbGroupBox->setPalette(p); + selectLadspaReverbGroupBox->setPalette(p); + channelReverbGroupBox->setPalette(p); + parametersReverbGroupBox->setPalette(p); + onChorusGroupBox->setPalette(p); + selectLadspaChorusGroupBox->setPalette(p); + channelChorusGroupBox->setPalette(p); + parametersChorusGroupBox->setPalette(p); + fontSizeGroupBox->setPalette(p); + delayBPMGroupBox->setPalette(p); + delayBeatRatioGroupBox->setPalette(p); + delayFeedbackGroupBox->setPalette(p); + delayPanLFOGroupBox->setPalette(p); + delayPanDepthGroupBox->setPalette(p); + delayReturnGroupBox->setPalette(p); + channelDelayGroupBox->setPalette(p); +} + +void DeicsOnzeGui::setBackgroundColor(const QColor & c) { + if(imageCheckBox->checkState()==Qt::Unchecked) { + QPalette p = this->palette(); + p.setColor(QPalette::Window, c); + this->setPalette(p); + } +} +void DeicsOnzeGui::setEditTextColor(const QColor & c) { + QPalette p = this->palette(); + p.setColor(QPalette::Text, c); + this->setPalette(p); + channelCtrlGroupBox->setPalette(p); + //channelPanGroupBox->setPalette(p); + FeedbackGroupBox->setPalette(p); + LFOGroupBox->setPalette(p); + ModulationMatrixGroupBox->setPalette(p); + FeedbackGroupBox->setPalette(p); + pitchEnvGroupBox->setPalette(p); + Frequency1groupBox->setPalette(p); + OUT1groupBox->setPalette(p); + Env1GroupBox->setPalette(p); + Scaling1GroupBox->setPalette(p); + DetWaveEGS1GroupBox->setPalette(p); + sensitivity1groupBox->setPalette(p); + Frequency2groupBox->setPalette(p); + OUT2groupBox->setPalette(p); + Env2GroupBox->setPalette(p); + Scaling2GroupBox->setPalette(p); + DetWaveEGS2GroupBox->setPalette(p); + sensitivity2groupBox->setPalette(p); + Frequency3groupBox->setPalette(p); + OUT3groupBox->setPalette(p); + Env3GroupBox->setPalette(p); + Scaling3GroupBox->setPalette(p); + DetWaveEGS3GroupBox->setPalette(p); + sensitivity3groupBox->setPalette(p); + Frequency4groupBox->setPalette(p); + OUT4groupBox->setPalette(p); + Env4GroupBox->setPalette(p); + Scaling4GroupBox->setPalette(p); + DetWaveEGS4GroupBox->setPalette(p); + sensitivity4groupBox->setPalette(p); + transposeGroupBox->setPalette(p); + //detuneGroupBox->setPalette(p); + //footSWGroupBox->setPalette(p); + pitchBendRangeGroupBox->setPalette(p); + //reverbGroupBox->setPalette(p); + modeGroupBox->setPalette(p); + portamentoGroupBox->setPalette(p); + colorGroupBox->setPalette(p); + pathGroupBox->setPalette(p); + qualityGroupBox->setPalette(p); + saveModeButtonGroup->setPalette(p); + fileGroupBox->setPalette(p); + masterVolKnob->setScaleValueColor(c); + channelVolumeKnob->setScaleValueColor(c); + channelPanKnob->setScaleValueColor(c); + brightnessKnob->setScaleValueColor(c); + modulationKnob->setScaleValueColor(c); + detuneKnob->setScaleValueColor(c); + attackKnob->setScaleValueColor(c); + releaseKnob->setScaleValueColor(c); + channelChorusGroupBox->setPalette(p); + selectLadspaChorusGroupBox->setPalette(p); + parametersChorusGroupBox->setPalette(p); + for(int i=0; i < (int)_chorusSliderVector.size(); i++) + if(_chorusSliderVector[i]) _chorusSliderVector[i]->setScaleValueColor(c); + channelReverbGroupBox->setPalette(p); + selectLadspaReverbGroupBox->setPalette(p); + parametersReverbGroupBox->setPalette(p); + for(int i=0; i < (int)_reverbSliderVector.size(); i++) + if(_reverbSliderVector[i]) _reverbSliderVector[i]->setScaleValueColor(c); + channelDelayGroupBox->setPalette(p); + delayBPMKnob->setScaleValueColor(c); + delayBPMGroupBox->setPalette(p); + delayBeatRatioKnob->setScaleValueColor(c); + delayBeatRatioGroupBox->setPalette(p); + delayFeedbackKnob->setScaleValueColor(c); + delayFeedbackGroupBox->setPalette(p); + delayPanLFOFreqKnob->setScaleValueColor(c); + delayPanLFOGroupBox->setPalette(p); + delayPanLFODepthKnob->setScaleValueColor(c); + delayPanDepthGroupBox->setPalette(p); + fontSizeGroupBox->setPalette(p); +} +void DeicsOnzeGui::setEditBackgroundColor(const QColor & c) { + QPalette p = this->palette(); + p.setColor(QPalette::Base, c); + this->setPalette(p); + channelCtrlGroupBox->setPalette(p); + //channelPanGroupBox->setPalette(p); + FeedbackGroupBox->setPalette(p); + LFOGroupBox->setPalette(p); + ModulationMatrixGroupBox->setPalette(p); + FeedbackGroupBox->setPalette(p); + pitchEnvGroupBox->setPalette(p); + Frequency1groupBox->setPalette(p); + OUT1groupBox->setPalette(p); + Env1GroupBox->setPalette(p); + Scaling1GroupBox->setPalette(p); + DetWaveEGS1GroupBox->setPalette(p); + sensitivity1groupBox->setPalette(p); + Frequency2groupBox->setPalette(p); + OUT2groupBox->setPalette(p); + Env2GroupBox->setPalette(p); + Scaling2GroupBox->setPalette(p); + DetWaveEGS2GroupBox->setPalette(p); + sensitivity2groupBox->setPalette(p); + Frequency3groupBox->setPalette(p); + OUT3groupBox->setPalette(p); + Env3GroupBox->setPalette(p); + Scaling3GroupBox->setPalette(p); + DetWaveEGS3GroupBox->setPalette(p); + sensitivity3groupBox->setPalette(p); + Frequency4groupBox->setPalette(p); + OUT4groupBox->setPalette(p); + Env4GroupBox->setPalette(p); + Scaling4GroupBox->setPalette(p); + DetWaveEGS4GroupBox->setPalette(p); + sensitivity4groupBox->setPalette(p); + transposeGroupBox->setPalette(p); + //detuneGroupBox->setPalette(p); + //footSWGroupBox->setPalette(p); + pitchBendRangeGroupBox->setPalette(p); + //reverbGroupBox->setPalette(p); + modeGroupBox->setPalette(p); + portamentoGroupBox->setPalette(p); + colorGroupBox->setPalette(p); + pathGroupBox->setPalette(p); + qualityGroupBox->setPalette(p); + saveModeButtonGroup->setPalette(p); + fileGroupBox->setPalette(p); + p = pitchEnvFrame->palette(); + p.setColor(QPalette::Window, c); + pitchEnvFrame->setPalette(p); + p = envelope1Frame->palette(); + p.setColor(QPalette::Window, c); + envelope1Frame->setPalette(p); + p = envelope2Frame->palette(); + p.setColor(QPalette::Window, c); + envelope2Frame->setPalette(p); + p = envelope3Frame->palette(); + p.setColor(QPalette::Window, c); + envelope3Frame->setPalette(p); + p = envelope4Frame->palette(); + p.setColor(QPalette::Window, c); + envelope4Frame->setPalette(p); + masterVolKnob->setScaleColor(c); + channelVolumeKnob->setScaleColor(c); + channelPanKnob->setScaleColor(c); + brightnessKnob->setScaleColor(c); + modulationKnob->setScaleColor(c); + detuneKnob->setScaleColor(c); + attackKnob->setScaleColor(c); + releaseKnob->setScaleColor(c); + channelChorusGroupBox->setPalette(p); + selectLadspaChorusGroupBox->setPalette(p); + parametersChorusGroupBox->setPalette(p); + for(int i=0; i < (int)_chorusSliderVector.size(); i++) + if(_chorusSliderVector[i]) _chorusSliderVector[i]->setScaleColor(c); + channelReverbGroupBox->setPalette(p); + selectLadspaReverbGroupBox->setPalette(p); + parametersReverbGroupBox->setPalette(p); + for(int i=0; i < (int)_reverbSliderVector.size(); i++) + if(_reverbSliderVector[i]) _reverbSliderVector[i]->setScaleColor(c); + channelDelayGroupBox->setPalette(p); + delayBPMKnob->setScaleColor(c); + delayBPMGroupBox->setPalette(p); + delayBeatRatioKnob->setScaleColor(c); + delayBeatRatioGroupBox->setPalette(p); + delayFeedbackKnob->setScaleColor(c); + delayFeedbackGroupBox->setPalette(p); + delayPanLFOFreqKnob->setScaleColor(c); + delayPanLFOGroupBox->setPalette(p); + delayPanLFODepthKnob->setScaleColor(c); + delayPanDepthGroupBox->setPalette(p); + fontSizeGroupBox->setPalette(p); +} + +//----------------------------------------------------------- +// QFramePitchEnvelope +//----------------------------------------------------------- +void QFramePitchEnvelope::paintEvent(QPaintEvent* /*e*/) { + QPainter paint(this); + QPen pen; + pen.setColor(*(_deicsOnzeGui->etColor)); + //if the size of pitchEnvFrame is different than QFramePitchEnvelope resize + //and update the envelope + if(_deicsOnzeGui->pitchEnvFrame->width()!=width() || + _deicsOnzeGui->pitchEnvFrame->height()!=height()) { + resize(_deicsOnzeGui->pitchEnvFrame->width(), + _deicsOnzeGui->pitchEnvFrame->height()); + //update the positions of the envelope + PitchEg* pe = &_deicsOnzeGui->_deicsOnze + ->_preset[_deicsOnzeGui->_currentChannel]->pitchEg; + env2Points(pe->pl1, pe->pl2, pe->pl3, pe->pr1, pe->pr2, pe->pr3); + } + //Draw the verticale line on the release time + pen.setWidth(1); + pen.setStyle(Qt::DotLine); + paint.setPen(pen); + paint.drawLine(P2linkP3.x(), height(), P2linkP3.x(), 0); + //Draw the horisontal line for the center of the pitch + pen.setStyle(Qt::DashDotLine); + paint.setPen(pen); + paint.drawLine(0, height()/2-DOTWIDTH/2, width(), height()/2-DOTWIDTH/2); + //Draw the pitch envelope + pen.setWidth(PENWIDTH); + pen.setStyle(Qt::SolidLine); + paint.setPen(pen); + paint.drawRect(startlinkP1.x()-DOTWIDTH/2, startlinkP1.y()-DOTWIDTH/2, + DOTWIDTH, DOTWIDTH); + paint.drawRect(P1linkP2.x()-DOTWIDTH/2, P1linkP2.y()-DOTWIDTH/2, + DOTWIDTH, DOTWIDTH); + paint.drawRect(P2linkP3.x()-DOTWIDTH/2, P2linkP3.y()-DOTWIDTH/2, + DOTWIDTH, DOTWIDTH); + paint.drawRect(P3linkEnd.x()-DOTWIDTH/2, P3linkEnd.y()-DOTWIDTH/2, + DOTWIDTH, DOTWIDTH); + paint.drawLine(startlinkP1,P1linkP2); + paint.drawLine(P1linkP2, P2linkP3); + paint.drawLine(P2linkP3, P3linkEnd); +} +void QFramePitchEnvelope::mousePressEvent(QMouseEvent * e) { + //startlinkP1 + if(e->x()x()>startlinkP1.x()-DRAGWIDTH + && e->y()y()>startlinkP1.y()-DRAGWIDTH) + isStartlinkP1Edit=true; + //P1linkP2 + if(e->x()x()>P1linkP2.x()-DRAGWIDTH + && e->y()y()>P1linkP2.y()-DRAGWIDTH) + isP1linkP2Edit=true; + //P2linkP3 + if(e->x()x()>P2linkP3.x()-DRAGWIDTH + && e->y()y()>P2linkP3.y()-DRAGWIDTH) + isP2linkP3Edit=true; + //P3linkEnd + if(e->x()x()>P3linkEnd.x()-DRAGWIDTH + && e->y()y()>P3linkEnd.y()-DRAGWIDTH) + isP3linkEndEdit=true; +} +void QFramePitchEnvelope::mouseReleaseEvent(QMouseEvent* /*e*/) { + isStartlinkP1Edit=false; + isP1linkP2Edit=false; + isP2linkP3Edit=false; + isP3linkEndEdit=false; +} +void QFramePitchEnvelope::mouseMoveEvent(QMouseEvent* e) { + if(isStartlinkP1Edit) { + if(e->y()>startlinkP1.y()) _deicsOnzeGui->PL1SpinBox->stepDown(); + if(e->y()PL1SpinBox->stepUp(); + } + if(isP1linkP2Edit) { + if(e->x()>P1linkP2.x()) _deicsOnzeGui->PR1SpinBox->stepDown(); + if(e->x()PR1SpinBox->stepUp(); + if(e->y()>P1linkP2.y()) _deicsOnzeGui->PL2SpinBox->stepDown(); + if(e->y()PL2SpinBox->stepUp(); + } + if(isP2linkP3Edit) { + if(e->x()>P2linkP3.x()) _deicsOnzeGui->PR2SpinBox->stepDown(); + if(e->x()PR2SpinBox->stepUp(); + if(e->y()>P2linkP3.y()) _deicsOnzeGui->PL3SpinBox->stepDown(); + if(e->y()PL3SpinBox->stepUp(); + } + if(isP3linkEndEdit) { + if(e->x()>P3linkEnd.x()) _deicsOnzeGui->PR3SpinBox->stepDown(); + if(e->x()PR3SpinBox->stepUp(); + if(e->y()>P3linkEnd.y()) _deicsOnzeGui->PL1SpinBox->stepDown(); + if(e->y()PL1SpinBox->stepUp(); + } +} +//----------------------------------------------------------- +// env2Points +// assigns the right coordinates to the points +// to draw the pitch envelope +//----------------------------------------------------------- +void QFramePitchEnvelope::env2Points(int pl1, int pl2, int pl3, + int pr1, int pr2, int pr3) { + startlinkP1.setY(YOFFSET+MAXPHEIGHT + -PENWIDTH-((PL1HEIGHT-PENWIDTH)*pl1)/MAXPL); + startlinkP1.setX(XOFFSET); + P1linkP2.setY(YOFFSET+MAXPHEIGHT-PENWIDTH-((PL2HEIGHT-PENWIDTH)*pl2)/MAXPL); + P1linkP2.setX(XOFFSET+WALLWIDTH+PR1WIDTH-(PR1WIDTH*pr1)/MAXPR); + P2linkP3.setY(YOFFSET+MAXPHEIGHT-PENWIDTH-((PL3HEIGHT-PENWIDTH)*pl3)/MAXPL); + P2linkP3.setX(P1linkP2.x()+WALLWIDTH+PR2WIDTH-(PR2WIDTH*pr2)/MAXPR); + P3linkEnd.setY(YOFFSET+MAXPHEIGHT-PENWIDTH-((PL1HEIGHT-PENWIDTH)*pl1)/MAXPL); + P3linkEnd.setX(P2linkP3.x()+WALLWIDTH+PR3WIDTH-(PR3WIDTH*pr3)/MAXPR); +} +//----------------------------------------------------------- +// QFrameEnvelope +//----------------------------------------------------------- +void QFrameEnvelope::paintEvent(QPaintEvent* /*e*/) { + QPainter paint(this); + QPen pen; + pen.setColor(*(_deicsOnzeGui->etColor)); + //if the size of pitchEnvFrame is different than QFramePitchEnvelope resize + //and update the envelope + int op = _deicsOnzeGui->deicsOnzeTabWidget->currentIndex()-2; + //-2 because of the presetsTab and globalTab + Eg* eg=&(_deicsOnzeGui->_deicsOnze-> + _preset[_deicsOnzeGui->_currentChannel]->eg[op]); + switch(op) { + case 0 : + if(_deicsOnzeGui->envelope1Frame->width()!=width() || + _deicsOnzeGui->envelope1Frame->height()!=height()) { + resize(_deicsOnzeGui->envelope1Frame->width(), + _deicsOnzeGui->envelope1Frame->height()); + //update the positions of the envelope + env2Points(eg->ar, eg->d1r, eg->d1l, eg->d2r, eg->rr); + } + break; + case 1 : + if(_deicsOnzeGui->envelope2Frame->width()!=width() || + _deicsOnzeGui->envelope2Frame->height()!=height()) { + resize(_deicsOnzeGui->envelope2Frame->width(), + _deicsOnzeGui->envelope2Frame->height()); + //update the positions of the envelope + env2Points(eg->ar, eg->d1r, eg->d1l, eg->d2r, eg->rr); + } + break; + case 2 : + if(_deicsOnzeGui->envelope3Frame->width()!=width() || + _deicsOnzeGui->envelope3Frame->height()!=height()) { + resize(_deicsOnzeGui->envelope3Frame->width(), + _deicsOnzeGui->envelope3Frame->height()); + //update the positions of the envelope + env2Points(eg->ar, eg->d1r, eg->d1l, eg->d2r, eg->rr); + } + break; + case 3 : + if(_deicsOnzeGui->envelope4Frame->width()!=width() || + _deicsOnzeGui->envelope4Frame->height()!=height()) { + resize(_deicsOnzeGui->envelope4Frame->width(), + _deicsOnzeGui->envelope4Frame->height()); + //update the positions of the envelope + env2Points(eg->ar, eg->d1r, eg->d1l, eg->d2r, eg->rr); + } + break; + default : + printf("QFrameEnvelope::paintEvent switch case error\n"); + break; + } + //Draw the vertical line of the release note + pen.setWidth(1); + pen.setStyle(Qt::DotLine); + paint.setPen(pen); + paint.drawLine(D2linkRR.x(), MAXHEIGHT, D2linkRR.x(), YOFFSET); + //Draw the volume envelope + pen.setWidth(PENWIDTH); + pen.setStyle(Qt::SolidLine); + paint.setPen(pen); + paint.drawRect(startlinkAR.x()-DOTWIDTH/2, startlinkAR.y()-DOTWIDTH/2, + DOTWIDTH, DOTWIDTH); + paint.drawRect(ARlinkD1.x()-DOTWIDTH/2, ARlinkD1.y()-DOTWIDTH/2, + DOTWIDTH, DOTWIDTH); + paint.drawRect(D1linkD2.x()-DOTWIDTH/2, D1linkD2.y()-DOTWIDTH/2, + DOTWIDTH, DOTWIDTH); + paint.drawRect(D2linkRR.x()-DOTWIDTH/2, D2linkRR.y()-DOTWIDTH/2, + DOTWIDTH, DOTWIDTH); + paint.drawRect(RRlinkEnd.x()-DOTWIDTH/2, RRlinkEnd.y()-DOTWIDTH/2, + DOTWIDTH, DOTWIDTH); + paint.drawLine(startlinkAR,ARlinkD1); + paint.drawLine(ARlinkD1, D1linkD2); + paint.drawLine(D1linkD2, D2linkRR); + paint.drawLine(D2linkRR, RRlinkEnd); +} +void QFrameEnvelope::mousePressEvent(QMouseEvent * e) { + //ARlinkD1 + if(e->x()x()>ARlinkD1.x()-DRAGWIDTH + && e->y()y()>ARlinkD1.y()-DRAGWIDTH) + isARlinkD1Edit=true; + //D1linkD2 + if(e->x()x()>D1linkD2.x()-DRAGWIDTH + && e->y()y()>D1linkD2.y()-DRAGWIDTH) + isD1linkD2Edit=true; + //D2linkRR + if(e->x()x()>D2linkRR.x()-DRAGWIDTH + && e->y()y()>D2linkRR.y()-DRAGWIDTH) + isD2linkRREdit=true; + //RRlinkEnd + if(e->x()x()>RRlinkEnd.x()-DRAGWIDTH + && e->y()y()>RRlinkEnd.y()-DRAGWIDTH) + isRRlinkEndEdit=true; +} +void QFrameEnvelope::mouseReleaseEvent(QMouseEvent* /*e*/) { + isARlinkD1Edit=false; + isD1linkD2Edit=false; + isD2linkRREdit=false; + isRRlinkEndEdit=false; +} +void QFrameEnvelope::mouseMoveEvent(QMouseEvent* e) { + if(isARlinkD1Edit) + { + switch(op) { + case 0 : + if(e->x()>ARlinkD1.x()) _deicsOnzeGui->AR1SpinBox->stepDown(); + if(e->x()AR1SpinBox->stepUp(); + break; + case 1 : + if(e->x()>ARlinkD1.x()) _deicsOnzeGui->AR2SpinBox->stepDown(); + if(e->x()AR2SpinBox->stepUp(); + break; + case 2 : + if(e->x()>ARlinkD1.x()) _deicsOnzeGui->AR3SpinBox->stepDown(); + if(e->x()AR3SpinBox->stepUp(); + break; + case 3 : + if(e->x()>ARlinkD1.x()) _deicsOnzeGui->AR4SpinBox->stepDown(); + if(e->x()AR4SpinBox->stepUp(); + break; + default : + break; + } + } + if(isD1linkD2Edit) + { + switch(op) { + case 0 : + if(e->x()>D1linkD2.x()) _deicsOnzeGui->D1R1SpinBox->stepDown(); + if(e->x()D1R1SpinBox->stepUp(); + if(e->y()>D1linkD2.y()) _deicsOnzeGui->D1L1SpinBox->stepDown(); + if(e->y()D1L1SpinBox->stepUp(); + break; + case 1 : + if(e->x()>D1linkD2.x()) _deicsOnzeGui->D1R2SpinBox->stepDown(); + if(e->x()D1R2SpinBox->stepUp(); + if(e->y()>D1linkD2.y()) _deicsOnzeGui->D1L2SpinBox->stepDown(); + if(e->y()D1L2SpinBox->stepUp(); + break; + case 2 : + if(e->x()>D1linkD2.x()) _deicsOnzeGui->D1R3SpinBox->stepDown(); + if(e->x()D1R3SpinBox->stepUp(); + if(e->y()>D1linkD2.y()) _deicsOnzeGui->D1L3SpinBox->stepDown(); + if(e->y()D1L3SpinBox->stepUp(); + break; + case 3 : + if(e->x()>D1linkD2.x()) _deicsOnzeGui->D1R4SpinBox->stepDown(); + if(e->x()D1R4SpinBox->stepUp(); + if(e->y()>D1linkD2.y()) _deicsOnzeGui->D1L4SpinBox->stepDown(); + if(e->y()D1L4SpinBox->stepUp(); + break; + default : + break; + } + } + if(isD2linkRREdit) + { + switch(op) { + case 0 : + if(e->x()>D2linkRR.x() /*&& e->y()D2R1SpinBox->stepDown(); + if(e->x()y()>D2linkRR.y()*/) + _deicsOnzeGui->D2R1SpinBox->stepUp(); + break; + case 1 : + if(e->x()>D2linkRR.x() /*&& e->y()D2R2SpinBox->stepDown(); + if(e->x()y()>D2linkRR.y()*/) + _deicsOnzeGui->D2R2SpinBox->stepUp(); + break; + case 2 : + if(e->x()>D2linkRR.x() /*&& e->y()D2R3SpinBox->stepDown(); + if(e->x()y()>D2linkRR.y()*/) + _deicsOnzeGui->D2R3SpinBox->stepUp(); + break; + case 3 : + if(e->x()>D2linkRR.x() /*&& e->y()D2R4SpinBox->stepDown(); + if(e->x()y()>D2linkRR.y()*/) + _deicsOnzeGui->D2R4SpinBox->stepUp(); + break; + default : + break; + } + } + if(isRRlinkEndEdit) + { + switch(op) { + case 0 : + if(e->x()>RRlinkEnd.x()) _deicsOnzeGui->RR1SpinBox->stepDown(); + if(e->x()RR1SpinBox->stepUp(); + break; + case 1 : + if(e->x()>RRlinkEnd.x()) _deicsOnzeGui->RR2SpinBox->stepDown(); + if(e->x()RR2SpinBox->stepUp(); + break; + case 2 : + if(e->x()>RRlinkEnd.x()) _deicsOnzeGui->RR3SpinBox->stepDown(); + if(e->x()RR3SpinBox->stepUp(); + break; + case 3 : + if(e->x()>RRlinkEnd.x()) _deicsOnzeGui->RR4SpinBox->stepDown(); + if(e->x()RR4SpinBox->stepUp(); + break; + default : + break; + } + } +} +//----------------------------------------------------------- +// env2Points +// assigns the right coordinates to the points +// to draw the envelope +//----------------------------------------------------------- +void QFrameEnvelope::env2Points(int ar, int d1r, int d1l, int d2r, int rr) { + startlinkAR.setY(MAXHEIGHT-PENWIDTH); + startlinkAR.setX(PENWIDTH); + ARlinkD1.setY(PENWIDTH); + ARlinkD1.setX(PENWIDTH+ARWIDTH-(ARWIDTH*ar)/MAXAR); + D1linkD2.setY(PENWIDTH+ + (D1LHEIGHT-2*PENWIDTH-((D1LHEIGHT-2*PENWIDTH)*d1l)/MAXD1L)); + D1linkD2.setX(ARlinkD1.x()+D1RWIDTH-(D1RWIDTH*d1r)/MAXD1R); + D2linkRR.setY(D1linkD2.y() + +((D1LHEIGHT-2*PENWIDTH-D1linkD2.y())*d2r)/MAXD2R); + D2linkRR.setX(D1linkD2.x()+D2RWIDTH-(D2RWIDTH*d2r)/MAXD2R); + RRlinkEnd.setY(MAXHEIGHT-PENWIDTH); + RRlinkEnd.setX(D2linkRR.x() + +(RRWIDTH-PENWIDTH-((RRWIDTH-PENWIDTH)*rr)/MAXRR)); +} + +//----------------------------------------------------------- +// processEvent(const MidiEvent&); +//----------------------------------------------------------- +void DeicsOnzeGui::processEvent(const MidiEvent& ev) { + //Controler + if (ev.type() == ME_CONTROLLER) { + //printf("ME_CONTROLLER\n"); + int id=ev.dataA(); + int ch=ev.channel(); + int val=ev.dataB(); + if(ch == _currentChannel || id == CTRL_CHANNELENABLE) { + switch(id) { + case CTRL_AR: updateAR(0, val); break; + case CTRL_D1R: updateD1R(0, val); break; + case CTRL_D2R: updateD2R(0, val); break; + case CTRL_RR: updateRR(0, val); break; + case CTRL_D1L: updateD1L(0, val); break; + case CTRL_LS: updateLS(0, val); break; + case CTRL_RS: updateRS(0, val); break; + case CTRL_EBS: updateEBS(0, val); break; + case CTRL_AME: updateAME(0, val==1); break; + case CTRL_KVS: updateKVS(0, val); break; + case CTRL_OUT: updateOUT(0, val); break; + case CTRL_RATIO: updateRATIO(0, val); break; + case CTRL_DET: updateDET(0, val); break; + case CTRL_AR+DECAPAR1: updateAR(1, val); break; + case CTRL_D1R+DECAPAR1: updateD1R(1, val); break; + case CTRL_D2R+DECAPAR1: updateD2R(1, val); break; + case CTRL_RR+DECAPAR1: updateRR(1, val); break; + case CTRL_D1L+DECAPAR1: updateD1L(1, val); break; + case CTRL_LS+DECAPAR1: updateLS(1, val); break; + case CTRL_RS+DECAPAR1: updateRS(1, val); break; + case CTRL_EBS+DECAPAR1: updateEBS(1, val); break; + case CTRL_AME+DECAPAR1: updateAME(1, val==1); break; + case CTRL_KVS+DECAPAR1: updateKVS(1, val); break; + case CTRL_OUT+DECAPAR1: updateOUT(1, val); break; + case CTRL_RATIO+DECAPAR1: updateRATIO(1, val); break; + case CTRL_DET+DECAPAR1: updateDET(1, val); break; + case CTRL_AR+2*DECAPAR1: updateAR(2, val); break; + case CTRL_D1R+2*DECAPAR1: updateD1R(2, val); break; + case CTRL_D2R+2*DECAPAR1: updateD2R(2, val); break; + case CTRL_RR+2*DECAPAR1: updateRR(2, val); break; + case CTRL_D1L+2*DECAPAR1: updateD1L(2, val); break; + case CTRL_LS+2*DECAPAR1: updateLS(2, val); break; + case CTRL_RS+2*DECAPAR1: updateRS(2, val); break; + case CTRL_EBS+2*DECAPAR1: updateEBS(2, val); break; + case CTRL_AME+2*DECAPAR1: updateAME(2, val==1); break; + case CTRL_KVS+2*DECAPAR1: updateKVS(2, val); break; + case CTRL_OUT+2*DECAPAR1: updateOUT(2, val); break; + case CTRL_RATIO+2*DECAPAR1: updateRATIO(2, val); break; + case CTRL_DET+2*DECAPAR1: updateDET(2, val); break; + case CTRL_AR+3*DECAPAR1: updateAR(3, val); break; + case CTRL_D1R+3*DECAPAR1: updateD1R(3, val); break; + case CTRL_D2R+3*DECAPAR1: updateD2R(3, val); break; + case CTRL_RR+3*DECAPAR1: updateRR(3, val); break; + case CTRL_D1L+3*DECAPAR1: updateD1L(3, val); break; + case CTRL_LS+3*DECAPAR1: updateLS(3, val); break; + case CTRL_RS+3*DECAPAR1: updateRS(3, val); break; + case CTRL_EBS+3*DECAPAR1: updateEBS(3, val); break; + case CTRL_AME+3*DECAPAR1: updateAME(3, val==1); break; + case CTRL_KVS+3*DECAPAR1: updateKVS(3, val); break; + case CTRL_OUT+3*DECAPAR1: updateOUT(3, val); break; + case CTRL_RATIO+3*DECAPAR1: updateRATIO(3, val); break; + case CTRL_DET+3*DECAPAR1: updateDET(3, val); break; + case CTRL_ALG: updateALG(val); break; + case CTRL_FEEDBACK: updateFEEDBACK(val); break; + case CTRL_SPEED: updateSPEED(val); break; + case CTRL_DELAY: updateDELAY(val); break; + case CTRL_PMODDEPTH: updatePMODDEPTH(val); break; + case CTRL_AMODDEPTH: updateAMODDEPTH(val); break; + case CTRL_SYNC: updateSYNC(val==1); break; + case CTRL_WAVE: updateWAVE(val); break; + case CTRL_PMODSENS: updatePMODSENS(val); break; + case CTRL_AMS: updateAMS(val); break; + case CTRL_TRANSPOSE: updateTRANSPOSE(val); break; + case CTRL_POLYMODE: updatePOLYMODE(val); break; + case CTRL_PBENDRANGE: updatePBENDRANGE(val); break; + case CTRL_PORTAMODE: updatePORTAMODE(val); break; + case CTRL_PORTATIME: updatePORTATIME(val); break; + case CTRL_FCVOLUME: updateFcVolume(val); break; + case CTRL_FSW: + break; + case CTRL_MWPITCH: updateMwPitch(val); break; + case CTRL_MWAMPLITUDE: updateMwAmplitude(val); break; + case CTRL_BCPITCH: updateBcPitch(val); break; + case CTRL_BCAMPLITUDE: updateBcAmplitude(val); break; + case CTRL_BCPITCHBIAS: updateBcPitchBias(val); break; + case CTRL_BCEGBIAS: updateBcEgBias(val); break; + case CTRL_PR1: updatePR1(val); break; + case CTRL_PR2: updatePR2(val); break; + case CTRL_PR3: updatePR3(val); break; + case CTRL_PL1: updatePL1(val); break; + case CTRL_PL2: updatePL2(val); break; + case CTRL_PL3: updatePL3(val); break; + case CTRL_FIX: updateFIX(0, val==1); break; + case CTRL_FIXRANGE: updateFIXRANGE(0, val); break; + case CTRL_OSW: updateOSW(0, val); break; + case CTRL_SHFT: updateSHFT(0, val); break; + case CTRL_FIX+DECAPAR2: updateFIX(1, val==1); break; + case CTRL_FIXRANGE+DECAPAR2: updateFIXRANGE(1, val); break; + case CTRL_OSW+DECAPAR2: updateOSW(1, val); break; + case CTRL_SHFT+DECAPAR2: updateSHFT(1, val); break; + case CTRL_FIX+2*DECAPAR2: updateFIX(2, val==1); break; + case CTRL_FIXRANGE+2*DECAPAR2: updateFIXRANGE(2, val); break; + case CTRL_OSW+2*DECAPAR2: updateOSW(2, val); break; + case CTRL_SHFT+2*DECAPAR2: updateSHFT(2, val); break; + case CTRL_FIX+3*DECAPAR2: updateFIX(3, val==1); break; + case CTRL_FIXRANGE+3*DECAPAR2: updateFIXRANGE(3, val); break; + case CTRL_OSW+3*DECAPAR2: updateOSW(3, val); break; + case CTRL_SHFT+3*DECAPAR2: updateSHFT(3, val); break; + case CTRL_REVERBRATE: /*updateReverbRate(val);*/ break; + case CTRL_FCPITCH: updateFcPitch(val); break; + case CTRL_FCAMPLITUDE: updateFcAmplitude(val); break; + case CTRL_CHANNELENABLE: + if(ch == _currentChannel) updateChannelEnable(val); + break; + case CTRL_CHANNELDETUNE: updateChannelDetune(val); break; + case CTRL_CHANNELPAN: updateChannelPan(val); break; + case CTRL_CHANNELVOLUME: updateChannelVolume(val); break; + case CTRL_NBRVOICES: updateNbrVoices(val); break; + case CTRL_FINEBRIGHTNESS: updateBrightness(val); break; + case CTRL_ATTACK_TIME: updateAttack(val); break; + case CTRL_RELEASE_TIME: updateRelease(val); break; + case CTRL_CHORUS_SEND: updateChannelChorus(val); break; + case CTRL_REVERB_SEND: updateChannelReverb(val); break; + case CTRL_VARIATION_SEND: updateChannelDelay(val); break; + case CTRL_MODULATION: updateModulation(val); break; + case CTRL_PROGRAM : + int hbank = (val & 0xff0000) >> 16; + int lbank = (val & 0xff00) >> 8; + if (hbank > 127) // map "dont care" to 0 + hbank = 0; + if (lbank > 127) + lbank = 0; + int prog = val & 0x7f; + //printf("GUI program : ch = %d, hbank = %d, lbank = %d, prog = %d\n", + // ch, hbank, lbank, prog); + //change the _deicsonze preset + //to update the right preset + _deicsOnze->programSelect(ch, hbank, lbank, prog); + //only display _deicsonze preset + updateSelectPreset(hbank, lbank, prog); + updatePreset(); + break; + } + } + } + // Sysexes + else if (ev.type() == ME_SYSEX) { + //printf("ME_SYSEX\n"); + unsigned char* data = ev.data(); + int cmd = *data; + float f; + switch (cmd) { + case SYSEX_CHORUSACTIV : + updateChorusActiv((bool)data[1]); + break; + case SYSEX_CHORUSRETURN : + updateChorusReturn((int)data[1]); + break; + case SYSEX_REVERBACTIV : + updateReverbActiv((bool)data[1]); + break; + case SYSEX_REVERBRETURN : + updateReverbReturn((int)data[1]); + break; + /*case SYSEX_CHORUS1PAN : + updatePanChorus1((int)data[1]); + break; + case SYSEX_CHORUS1LFOFREQ : + updateLFOFreqChorus1((int)data[1]); + break; + case SYSEX_CHORUS1DEPTH : + updateDepthChorus1((int)data[1]); + break; + case SYSEX_CHORUS2PAN : + updatePanChorus2((int)data[1]); + break; + case SYSEX_CHORUS2LFOFREQ : + updateLFOFreqChorus2((int)data[1]); + break; + case SYSEX_CHORUS2DEPTH : + updateDepthChorus2((int)data[1]); + break;*/ + case SYSEX_DELAYACTIV : + updateDelayActiv((bool)data[1]); + break; + case SYSEX_DELAYRETURN : + updateDelayReturn((int)data[1]); + break; + case SYSEX_DELAYBPM : + memcpy(&f, &data[1], sizeof(float)); + updateDelayBPM(f); + break; + case SYSEX_DELAYBEATRATIO : + memcpy(&f, &data[1], sizeof(float)); + updateDelayBeatRatio(f); + break; + case SYSEX_DELAYFEEDBACK : + memcpy(&f, &data[1], sizeof(float)); + updateDelayFeedback(f); + break; + case SYSEX_DELAYLFOFREQ : + memcpy(&f, &data[1], sizeof(float)); + updateDelayPanLFOFreq(f); + break; + case SYSEX_DELAYLFODEPTH : + memcpy(&f, &data[1], sizeof(float)); + updateDelayPanLFODepth(f); + break; + case SYSEX_QUALITY : + updateQuality((int)data[1]); + break; + case SYSEX_FILTER : + updateFilter((bool)data[1]); + break; + case SYSEX_FONTSIZE : + updateFontSize((int)data[1]); + applyFontSize((int)data[1]); + break; + case SYSEX_MASTERVOL : + updateMasterVolume((int)data[1]); + break; + case SYSEX_SAVECONFIG : + updateSaveConfig((bool)data[1]); + break; + case SYSEX_SAVEONLYUSED : + updateSaveOnlyUsed((bool)data[1]); + break; + case SYSEX_COLORGUI : + tColor->setRgb(data[1], data[2], data[3]); + bColor->setRgb(data[4], data[5], data[6]); + etColor->setRgb(data[7], data[8], data[9]); + ebColor->setRgb(data[10], data[11], data[12]); + setTextColor(reinterpret_cast(*tColor)); + setBackgroundColor(reinterpret_cast(*bColor)); + setEditTextColor(reinterpret_cast(*etColor)); + setEditBackgroundColor(reinterpret_cast(*ebColor)); + setRGBSliders(colorListBox->currentItem()); + break; + case SYSEX_ISINITSET : + updateInitSetCheckBox((bool)data[1]); + break; + case SYSEX_INITSETPATH : + updateInitSetPath(QString((char*)&data[1])); + break; + case SYSEX_ISBACKGROUNDPIX : + updateBackgroundPixCheckBox((bool)data[1]); + if((bool)data[1]) applyBackgroundPix(); + break; + case SYSEX_BACKGROUNDPIXPATH : + updateBackgroundPixPath(QString((char*)&data[1])); + applyBackgroundPix(); + break; + case SYSEX_UPDATESETGUI : + setSet(); + subcategoryListView->clear(); + presetListView->clear(); + updateCategoryName("NONE", false); + hbankSpinBox->setEnabled(false); + updatePreset(); + updateSubcategoryName("NONE", false); + progSpinBox->setEnabled(false); + updatePresetName("INITVOICE", false); + break; + case SYSEX_BUILDGUIREVERB : + buildGuiReverb(); + break; + case SYSEX_BUILDGUICHORUS : + buildGuiChorus(); + break; + case SYSEX_LOADSET : + //printf("LoadSet\n"); + // read the XML file and create DOM tree + /*QString filename = (const char*) (data+2); + QFile deicsonzeFile(filename); + deicsonzeFile.open(IO_ReadOnly); + QDomDocument domTree; + domTree.setContent(&deicsonzeFile); + deicsonzeFile.close(); + QDomNode node = domTree.documentElement(); + + printf("After XML\n"); + while (!node.isNull()) { + QDomElement e = node.toElement(); + if (e.isNull()) + continue; + if (e.tagName() == "deicsOnzeSet") { + QString version = e.attribute(QString("version")); + if (version == "1.0") { + _deicsOnze->_preset=_deicsOnze->_initialPreset;*/ + //read the set + if((bool)data[1]) { + //printf("Mini\n"); + updateSaveOnlyUsed(true); + } + else { + //printf("Huge\n"); + //while(!_deicsOnze->_set->_categoryVector.empty()) + // delete(*_deicsOnze->_set->_categoryVector.begin()); + updateSaveOnlyUsed(false); + } + //_deicsOnze->_set->readSet(node.firstChild()); + //display load preset + setSet(); + /*} + else printf("Wrong set version : %s\n", + version.toLatin1().data()); + } + node = node.nextSibling(); + } + break; + // delete the temporary file created + QString rmfile; + rmfile="rm "; + rmfile+=filename; + system(rmfile); + printf("Finit\n");*/ + } + } +} + +/*! + \fn SimpleSynthGui::readMessage(int) + */ +void DeicsOnzeGui::readMessage(int) +{ + MessGui::readMessage(); +} + +//----------------------------------------------------------- +// num3Digits(int n) +//----------------------------------------------------------- +QString DeicsOnzeGui::num3Digits(int n) { + QString sn=QString::number(n); + return(sn.length()==1?"00"+sn:(sn.length()==2?"0"+sn:sn)); +} + +//----------------------------------------------------------- +// deleteSet +//----------------------------------------------------------- +void DeicsOnzeGui::deleteSetDialog() { + //TODO : maybe to put this in sysex to deicsonze.cpp + for(int c = 0; c < NBRCHANNELS; c++) + _deicsOnze->_preset[c]=_deicsOnze->_initialPreset; + while(!_deicsOnze->_set->_categoryVector.empty()) + delete(*_deicsOnze->_set->_categoryVector.begin()); + setSet(); + //_currentQLVCategory = NULL; + presetListView->clear(); + subcategoryListView->clear(); + updateCategoryName("NONE", false); + hbankSpinBox->setEnabled(false); + updateSubcategoryName("NONE", false); + lbankSpinBox->setEnabled(false); + updatePresetName("INITVOICE", false); + progSpinBox->setEnabled(false); + updatePreset(); +} +//----------------------------------------------------------- +// loadSetDialog +//----------------------------------------------------------- +void DeicsOnzeGui::loadSetDialog() { + QString fileName = + QFileDialog::getOpenFileName( + this, + tr("Load set dialog"), + lastDir, + QString("*.dei") + ); + + // read the XML file and create DOM tree + if(!fileName.isEmpty()) { + QFileInfo fi(fileName); + lastDir = fi.path(); + QFile deicsonzeFile(fileName); + if(!deicsonzeFile.open(QIODevice::ReadOnly)) { + QMessageBox::critical(0, + tr("Critical Error"), + tr("Cannot open file %1").arg(fileName)); + return; + } + QDomDocument domTree; + if (!domTree.setContent(&deicsonzeFile )) { + QMessageBox::critical + (0, tr("Critical Error"), + tr("Parsing error for file %1").arg(fileName)); + deicsonzeFile.close(); + return; + } + deicsonzeFile.close(); + + QDomNode node = domTree.documentElement(); + while (!node.isNull()) { + QDomElement e = node.toElement(); + if (e.isNull()) + continue; + if (e.tagName() == "deicsOnzeSet") { + QString version = e.attribute(QString("version")); + if (version == "1.0") { + for(int c = 0; c < NBRCHANNELS; c++) + _deicsOnze->_preset[c]=_deicsOnze->_initialPreset; + while(!_deicsOnze->_set->_categoryVector.empty()) + delete(*_deicsOnze->_set->_categoryVector.begin()); + _deicsOnze->_set->readSet(node.firstChild()); + //display load preset + setSet(); + subcategoryListView->clear(); + presetListView->clear(); + updateCategoryName("NONE", false); + hbankSpinBox->setEnabled(false); + updatePreset(); + updateSubcategoryName("NONE", false); + progSpinBox->setEnabled(false); + updatePresetName("INITVOICE", false); + } + else printf("unsupported *.dei file version %s\n", + version.toLatin1().data()); + } + else printf("DeicsOnze: %s not supported\n", + e.tagName().toLatin1().data()); + node = node.nextSibling(); + } + } +} + +//----------------------------------------------------------- +// saveSetDialog +//----------------------------------------------------------- +void DeicsOnzeGui::saveSetDialog() { + QString filename = + QFileDialog::getSaveFileName( + this, + tr("Save set dialog"), + lastDir, + QString("*.dei")); + if(!filename.isEmpty()) { + QFileInfo fi(filename); + lastDir = fi.path(); + if(!filename.endsWith(".dei")) filename+=".dei"; + QFile f(filename); + f.open(QIODevice::WriteOnly); + + AL::Xml* xml = new AL::Xml(&f); + xml->header(); + _deicsOnze->_set->writeSet(xml, false); + + f.close(); + } +} + +//----------------------------------------------------------- +// popupMenuCategory +//----------------------------------------------------------- +void DeicsOnzeGui::categoryPopupMenu(const QPoint&) { + QTreeWidgetItem* cat = categoryListView->currentItem(); + QMenu *categoryMenu = new QMenu; + categoryMenu->addAction(tr("New category"), + this, SLOT(newCategoryDialog())); + QAction* deleteItem = categoryMenu->addAction(tr("Delete category"), this, + SLOT(deleteCategoryDialog())); + categoryMenu->addAction(tr("Load category"), + this, SLOT(loadCategoryDialog())); + QAction* saveItem = categoryMenu->addAction(tr("Save category"), this, + SLOT(saveCategoryDialog())); + if(!cat || !categoryListView->isItemSelected(cat)) { + deleteItem->setEnabled(false); + saveItem->setEnabled(false); + } + categoryMenu->addSeparator(); + categoryMenu->addAction(tr("Load set"), + this, SLOT(loadSetDialog()));; + categoryMenu->addAction(tr("Save set"), + this, SLOT(saveSetDialog()));; + categoryMenu->addAction(tr("Delete set"), + this, SLOT(deleteSetDialog()));; + categoryMenu->exec(QCursor::pos()); +} +void DeicsOnzeGui::subcategoryPopupMenu(const QPoint&) { + QTreeWidgetItem* sub = subcategoryListView->currentItem(); + QMenu *subcategoryMenu = new QMenu; + QAction* newItem = + subcategoryMenu->addAction(tr("New subcategory"), this, + SLOT(newSubcategoryDialog())); + QAction* deleteItem = + subcategoryMenu->addAction(tr("Delete subcategory"), + this, SLOT(deleteSubcategoryDialog())); + QAction* loadItem = + subcategoryMenu->addAction(tr("Load subcategory"), this, + SLOT(loadSubcategoryDialog())); + QAction* saveItem = + subcategoryMenu->addAction(tr("Save subcategory"), this, + SLOT(saveSubcategoryDialog())); + if(!sub || !subcategoryListView->isItemSelected(sub)) { + deleteItem->setEnabled(false); + saveItem->setEnabled(false); + } + if(!categoryListView->currentItem() + || !categoryListView->isItemSelected(categoryListView->currentItem())) { + newItem->setEnabled(false); + loadItem->setEnabled(false); + } + subcategoryMenu->exec(QCursor::pos()); +} +void DeicsOnzeGui::presetPopupMenu(const QPoint&) { + QTreeWidgetItem* pre = presetListView->currentItem(); + QMenu *presetMenu = new QMenu; + QAction* newItem = presetMenu->addAction(tr("New preset"), this, + SLOT(newPresetDialog())); + QAction* deleteItem = presetMenu->addAction(tr("Delete preset"), this, + SLOT(deletePresetDialog())); + QAction* loadItem = presetMenu->addAction(tr("Load preset"), this, + SLOT(loadPresetDialog())); + QAction* saveItem = presetMenu->addAction(tr("Save preset"), this, + SLOT(savePresetDialog())); + if(!pre || !presetListView->isItemSelected(pre)) { + deleteItem->setEnabled(false); + saveItem->setEnabled(false); + } + if(!subcategoryListView->currentItem() || + !subcategoryListView->isItemSelected(subcategoryListView->currentItem())){ + newItem->setEnabled(false); + loadItem->setEnabled(false); + } + presetMenu->exec(QCursor::pos()); +} + +//----------------------------------------------------------- +// newCategoryDialog +//----------------------------------------------------------- +void DeicsOnzeGui::newCategoryDialog() { + int nhbank=_deicsOnze->_set->firstFreeHBank(); + if(nhbank==-1) + QMessageBox::information(this, + tr("No more category supported"), + tr("You can not add more categories"), + QMessageBox::Ok); + else { + new Category(_deicsOnze->_set, "NEWCAT", nhbank); + setSet(); + QTreeWidgetItem* ci= + categoryListView->findItems(num3Digits(nhbank+1), Qt::MatchExactly).at(0); + categoryListView->setItemSelected(ci, true); + categoryListView->setCurrentItem(ci); + setCategory(ci); + categoryListView->scrollToItem(ci); + } +} + +//----------------------------------------------------------- +// deleteCategoryDialog +//----------------------------------------------------------- +void DeicsOnzeGui::deleteCategoryDialog() { + QTreeCategory* cat = (QTreeCategory*) categoryListView->currentItem(); + if(cat && categoryListView->isItemSelected(cat)) { + if(!QMessageBox::question( + this, + tr("Delete category"), + tr("Do you really want to delete %1 ?") + .arg(cat->_category->_categoryName.c_str()), + tr("&Yes"), tr("&No"), + QString::null, 0, 1 )) + { + for(int c = 0; c < NBRCHANNELS; c++) + _deicsOnze->_preset[c]=_deicsOnze->_initialPreset; + delete(cat->_category); + delete(cat); + subcategoryListView->clear(); + presetListView->clear(); + updateCategoryName("NONE", false); + hbankSpinBox->setEnabled(false); + updatePreset(); + updateSubcategoryName("NONE", false); + progSpinBox->setEnabled(false); + updatePresetName("INITVOICE", false); + } + } + else QMessageBox::warning(this, tr("No category selected"), + tr("You must first select a category.")); +} + +//----------------------------------------------------------- +// loadCategoryDialog +//----------------------------------------------------------- +void DeicsOnzeGui::loadCategoryDialog() { + QString buffstr; + QString fileName = + QFileDialog::getOpenFileName( + this, + tr("Load category dialog"), + lastDir, + QString("*.dec")); + + // read the XML file and create DOM tree + if(!fileName.isEmpty()) { + QFileInfo fi(fileName); + lastDir = fi.path(); + QFile deicsonzeFile(fileName); + if(!deicsonzeFile.open(QIODevice::ReadOnly)) { + QMessageBox::critical(0, + tr("Critical Error"), + tr("Cannot open file %1").arg(fileName)); + return; + } + QDomDocument domTree; + if (!domTree.setContent(&deicsonzeFile )) { + QMessageBox::critical + (0, tr("Critical Error"), + tr("Parsing error for file %1").arg(fileName)); + deicsonzeFile.close(); + return; + } + deicsonzeFile.close(); + + QDomNode node = domTree.documentElement(); + while (!node.isNull()) { + QDomElement e = node.toElement(); + if (e.isNull()) + continue; + if (e.tagName() == "deicsOnzeCategory") { + QString version = e.attribute(QString("version")); + if (version == "1.0") { + Category* lCategory = new Category(); + lCategory->readCategory(node.firstChild()); + if (!_deicsOnze->_set->isFreeHBank(lCategory->_hbank)) { + if(!QMessageBox::question( + this, + tr("Replace or add"), + tr("%1 is supposed to be affected to the hbank number %2, but there is already one on this slot.\n Do you want to replace it or to add it in the next free slot ?") + .arg((lCategory->_categoryName).c_str()) + .arg(buffstr.setNum(lCategory->_hbank+1)), + tr("&Replace"), tr("&Add"), + QString::null, 0, 1 )) { + delete(_deicsOnze->_set + ->findCategory(lCategory->_hbank)); + lCategory->linkSet(_deicsOnze->_set); + } + else { + int ffhb=_deicsOnze->_set->firstFreeHBank(); + if(ffhb==-1) + QMessageBox::warning + (this, tr("Download error"), + tr("There is no more free category slot.")); + else lCategory->_hbank=ffhb; + lCategory->linkSet(_deicsOnze->_set); + } + } + else lCategory->linkSet(_deicsOnze->_set); + //display category + setSet(); + } + else printf("unsupported *.dec file version %s\n", + version.toLatin1().data()); + } + else printf("DeicsOnze: %s not supported\n", + e.tagName().toLatin1().data()); + node = node.nextSibling(); + } + } +} + +//----------------------------------------------------------- +// saveCategoryDialog +//----------------------------------------------------------- +void DeicsOnzeGui::saveCategoryDialog() { + QTreeCategory* cat = (QTreeCategory*) categoryListView->currentItem(); + if(cat) { + QString filename = + QFileDialog::getSaveFileName( + this, + tr("Save category dialog"), + lastDir, + QString("*.dec")); + + if(!filename.isEmpty()) { + QFileInfo fi(filename); + lastDir = fi.path(); + if(!filename.endsWith(".dec")) filename+=".dec"; + QFile f(filename); + f.open(QIODevice::WriteOnly); + AL::Xml* xml = new AL::Xml(&f); + xml->header(); + cat->_category->writeCategory(xml, false); + + f.close(); + } + } + else QMessageBox::warning(this, tr("No category selected"), + tr("You must first select a category.")); +} + +//----------------------------------------------------------- +// newSubcategoryDialog +//----------------------------------------------------------- +void DeicsOnzeGui::newSubcategoryDialog() { + QTreeCategory* cat = (QTreeCategory*) categoryListView->currentItem(); + if(cat && categoryListView->isItemSelected(cat)) { + int nlbank=cat->_category->firstFreeLBank(); + if(nlbank==-1) + QMessageBox::information(this, + tr("No more subcategory supported"), + tr("You can not add more subcategories"), + QMessageBox::Ok); + else { + new Subcategory(cat->_category, "NEWSUB", nlbank); + setCategory(cat); + QTreeWidgetItem* si= + subcategoryListView->findItems(num3Digits(nlbank+1), + Qt::MatchExactly).at(0); + subcategoryListView->setItemSelected(si, true); + subcategoryListView->setCurrentItem(si); + setSubcategory(si); + subcategoryListView->scrollToItem(si); + } + } +} + +//----------------------------------------------------------- +// deleteSubcategoryDialog +//----------------------------------------------------------- +void DeicsOnzeGui::deleteSubcategoryDialog() { + QTreeSubcategory* sub = + (QTreeSubcategory*) subcategoryListView->currentItem(); + if(sub && subcategoryListView->isItemSelected(sub)) { + if(!QMessageBox::question( + this, + tr("Delete subcategory"), + tr("Do you really want to delete %1 ?") + .arg(sub->_subcategory + ->_subcategoryName.c_str()), + tr("&Yes"), tr("&No"), + QString::null, 0, 1 )) { + for(int c = 0; c < NBRCHANNELS; c++) + _deicsOnze->_preset[c]=_deicsOnze->_initialPreset; + delete(sub->_subcategory); + delete(sub); + presetListView->clear(); + //subcategoryLineEdit->setEnabled(false); + updateSubcategoryName("NONE", false); + lbankSpinBox->setEnabled(false); + updatePreset(); + } + } + else QMessageBox::warning(this, tr("No subcategory selected"), + tr("You must first select a subcategory.")); +} + +//----------------------------------------------------------- +// loadSubcategoryDialog +//----------------------------------------------------------- +void DeicsOnzeGui::loadSubcategoryDialog() { + QTreeCategory* cat = (QTreeCategory*) categoryListView->currentItem(); + QString buffstr; + QString fileName = + QFileDialog::getOpenFileName( + this, + tr("Load subcategory dialog"), + lastDir, + QString("*.des")); + + // read the XML file and create DOM tree + if(!fileName.isEmpty()) { + QFileInfo fi(fileName); + lastDir = fi.path(); + QFile deicsonzeFile(fileName); + if(!deicsonzeFile.open(QIODevice::ReadOnly)) { + QMessageBox::critical(0, + tr("Critical Error"), + tr("Cannot open file %1").arg(fileName)); + return; + } + QDomDocument domTree; + if (!domTree.setContent(&deicsonzeFile )) { + QMessageBox::critical + (0, tr("Critical Error"), + tr("Parsing error for file %1").arg(fileName)); + deicsonzeFile.close(); + return; + } + deicsonzeFile.close(); + + QDomNode node = domTree.documentElement(); + while (!node.isNull()) { + QDomElement e = node.toElement(); + if (e.isNull()) + continue; + if (e.tagName() == "deicsOnzeSubcategory") { + QString version = e.attribute(QString("version")); + if (version == "1.0") { + Subcategory* lSubcategory = new Subcategory(); + lSubcategory->readSubcategory(node.firstChild()); + if (!cat->_category->isFreeLBank(lSubcategory->_lbank)) { + if(!QMessageBox::question( + this, + tr("Replace or add"), + tr("%1 is supposed to be affected to the lbank number %2, but there is already one on this slot.\n Do you want to replace it or to add it in the next free slot ?") + .arg((lSubcategory->_subcategoryName) + .c_str()) + .arg(buffstr.setNum(lSubcategory->_lbank+1)), + tr("&Replace"), tr("&Add"), + QString::null, 0, 1 )) { + delete(cat->_category->findSubcategory(lSubcategory->_lbank)); + lSubcategory->linkCategory(cat->_category); + } + else { + int fflb=cat->_category->firstFreeLBank(); + if(fflb==-1) + QMessageBox::warning + (this, tr("Download error"), + tr("There is no more free subcategory slot.")); + else lSubcategory->_lbank=fflb; + lSubcategory->linkCategory(cat->_category); + } + } + else lSubcategory->linkCategory(cat->_category); + //display subcategory + setCategory(cat); + } + else printf("unsupported *.des file version %s\n", + version.toLatin1().data()); + } + else printf("DeicsOnze: %s not supported\n", + e.tagName().toLatin1().data()); + node = node.nextSibling(); + } + } +} + +//----------------------------------------------------------- +// saveSubcategoryDialog +//----------------------------------------------------------- +void DeicsOnzeGui::saveSubcategoryDialog() { + QTreeSubcategory* sub = + (QTreeSubcategory*) subcategoryListView->currentItem(); + if(sub) { + QString filename = + QFileDialog::getSaveFileName( + this, + tr("Save subcategory dialog"), + lastDir, + QString("*.des")); + + if(!filename.isEmpty()) { + QFileInfo fi(filename); + lastDir = fi.path(); + if(!filename.endsWith(".des")) filename+=".des"; + QFile f(filename); + f.open(QIODevice::WriteOnly); + + AL::Xml* xml = new AL::Xml(&f); + xml->header(); + sub->_subcategory->writeSubcategory(xml, false); + + f.close(); + } + } + else QMessageBox::warning(this, tr("No subcategory selected"), + tr("You must first select a subcategory.")); +} + + +//----------------------------------------------------------- +// newPresetDialog +//----------------------------------------------------------- +void DeicsOnzeGui::newPresetDialog() { + QTreeSubcategory* sub = + (QTreeSubcategory*) subcategoryListView->currentItem(); + if(sub && subcategoryListView->isItemSelected(sub)) { + int nprog=sub->_subcategory->firstFreeProg(); + if(nprog==-1) + QMessageBox::information(this, + tr("No more preset supported"), + tr("You can not add more presets"), + QMessageBox::Ok); + else { + new Preset(sub->_subcategory, nprog); + setSubcategory(sub); + QTreeWidgetItem* pi= + presetListView->findItems(num3Digits(nprog+1), + Qt::MatchExactly).at(0); + presetListView->setItemSelected(pi, true); + presetListView->setCurrentItem(pi); + setPreset(pi); + presetListView->scrollToItem(pi); + } + } +} + +//----------------------------------------------------------- +// deletePresetDialog +//----------------------------------------------------------- +void DeicsOnzeGui::deletePresetDialog() { + QTreePreset* pre = (QTreePreset*) presetListView->currentItem(); + if(pre) { + if(presetListView->isItemSelected(pre)) { + if(!QMessageBox::question( + this, + tr("Delete preset"), + tr("Do you really want to delete %1 ?") + .arg(pre->_preset->name.c_str()), + tr("&Yes"), tr("&No"), + QString::null, 0, 1 )) { + for(int c = 0; c < NBRCHANNELS; c++) + _deicsOnze->_preset[c]=_deicsOnze->_initialPreset; + delete(pre->_preset); + delete(pre); + presetLineEdit->setEnabled(false); + progSpinBox->setEnabled(false); + updatePreset(); + } + } + else QMessageBox::warning(this, tr("No preset selected"), + tr("You must first select a preset.")); + } + else QMessageBox::warning(this, tr("No preset selected"), + tr("You must first select a preset.")); +} + +//----------------------------------------------------------- +// loadPresetDialog +//----------------------------------------------------------- +void DeicsOnzeGui::loadPresetDialog() { + QTreeSubcategory* sub = + (QTreeSubcategory*) subcategoryListView->currentItem(); + QString buffstr; + QString fileName = + QFileDialog::getOpenFileName( + this, + tr("Load preset dialog"), + lastDir, + QString("*.dep")); + + // read the XML file and create DOM tree + if(!fileName.isEmpty()) { + QFileInfo fi(fileName); + lastDir = fi.path(); + QFile deicsonzeFile(fileName); + if(!deicsonzeFile.open(QIODevice::ReadOnly)) { + QMessageBox::critical(0, + tr("Critical Error"), + tr("Cannot open file %1").arg(fileName)); + return; + } + QDomDocument domTree; + if (!domTree.setContent(&deicsonzeFile )) { + QMessageBox::critical + (0, tr("Critical Error"), + tr("Parsing error for file %1").arg(fileName)); + deicsonzeFile.close(); + return; + } + deicsonzeFile.close(); + + QDomNode node = domTree.documentElement(); + while (!node.isNull()) { + QDomElement e = node.toElement(); + if(e.isNull()) + continue; + if(e.tagName() == "deicsOnzePreset") { + QString version = e.attribute(QString("version")); + if (version == "1.0") { + Preset* lPreset = new Preset(); + lPreset->readPreset(node.firstChild()); + if(!sub->_subcategory->isFreeProg(lPreset->prog)) { + if(!QMessageBox::question( + this, + tr("Replace or add"), + tr("%1 is supposed to be affected to the prog number %2, but there is already one on this slot.\n Do you want to replace it or to add it in the next free slot ?") + .arg((lPreset->name).c_str()) + .arg(buffstr.setNum(lPreset->prog+1)), + tr("&Replace"), tr("&Add"), + QString::null, 0, 1 )) { + delete(sub->_subcategory->findPreset(lPreset->prog)); + lPreset->linkSubcategory(sub->_subcategory); + } + else { + int ffp=sub->_subcategory->firstFreeProg(); + if(ffp==-1) + QMessageBox::warning + (this, tr("Download error"), + tr("There is no more free preset slot.")); + else lPreset->prog=ffp; + lPreset->linkSubcategory(sub->_subcategory); + } + } + else lPreset->linkSubcategory(sub->_subcategory); + //display preset + setSubcategory(sub->_subcategory); + } + else printf("unsupported *.dep file version %s\n", + version.toLatin1().data()); + } + else printf("DeicsOnze: %s not supported\n", + e.tagName().toLatin1().data()); + node = node.nextSibling(); + } + } +} + + +//----------------------------------------------------------- +// savePresetDialog +//----------------------------------------------------------- +void DeicsOnzeGui::savePresetDialog() { + QTreePreset* pre = (QTreePreset*) presetListView->currentItem(); + if(pre) { + QString filename = + QFileDialog::getSaveFileName( + this, + tr("Save preset dialog"), + lastDir, + QString("*.dep")); + if(!filename.isEmpty()) { + QFileInfo fi(filename); + lastDir = fi.path(); + if(!filename.endsWith(".dep")) filename+=".dep"; + QFile f(filename); + f.open(QIODevice::WriteOnly); + AL::Xml* xml = new AL::Xml(&f); + + xml->header(); + pre->_preset->writePreset(xml, false); + f.close(); + } + } + else QMessageBox::warning(this, tr("No preset selected"), + tr("You must first select a preset.")); +} + +//----------------------------------------------------------- +// Preset and bank +//----------------------------------------------------------- +void DeicsOnzeGui::setPresetName(const QString& n) { + QTreeWidgetItem* pre = presetListView->currentItem(); + if(pre) { + //TODO : must be changed with SysEx + _deicsOnze->_preset[_currentChannel]->name = n.toAscii().data(); + pre->setText(1,n.toAscii().data()); + } +} +void DeicsOnzeGui::setSubcategoryName(const QString& s) { + QTreeSubcategory* sub = + (QTreeSubcategory*) subcategoryListView->currentItem(); + if(sub) {//must be changed with SysEx + sub->_subcategory->_subcategoryName=s.toAscii().data(); + sub->setText(1, s.toAscii().data()); + } +} +void DeicsOnzeGui::setCategoryName(const QString& c) { + QTreeCategory* cat = (QTreeCategory*) categoryListView->currentItem(); + if(cat) {//must be changed with SysEx + cat->_category->_categoryName=c.toAscii().data(); + cat->setText(1, c.toAscii().data()); + } +} +void DeicsOnzeGui::setHBank(int hb) { + QTreeCategory* cat = (QTreeCategory*) categoryListView->currentItem(); + if(cat) {//must be changed with SysEx + if(!_deicsOnze->_set->isFreeHBank(hb-1)) { + QTreeWidgetItem* qcat; + qcat=categoryListView->findItems(num3Digits(hb), Qt::MatchExactly).at(0); + ((QTreeCategory*)qcat)->_category->_hbank= + cat->_category->_hbank; + qcat->setText(0, num3Digits(((QTreeCategory*)qcat) + ->_category->_hbank+1)); + } + cat->_category->_hbank=hb-1; + cat->setText(0,num3Digits(hb)); + categoryListView->sortItems(0, Qt::AscendingOrder); + categoryListView->scrollToItem(cat); + } +} +void DeicsOnzeGui::setLBank(int lb) {//must be changed with SysEx + QTreeSubcategory* sub = + (QTreeSubcategory*) subcategoryListView->currentItem(); + if(sub) { + Category* currentCat=sub->_subcategory->_category; + if(!currentCat->isFreeLBank(lb-1)) { + QTreeWidgetItem* qsub; + qsub=subcategoryListView->findItems(num3Digits(lb), + Qt::MatchExactly).at(0); + ((QTreeSubcategory*)qsub)->_subcategory->_lbank= + sub->_subcategory->_lbank; + qsub->setText(0, num3Digits(((QTreeSubcategory*)qsub) + ->_subcategory->_lbank+1)); + } + sub->_subcategory->_lbank=lb-1; + sub->setText(0,num3Digits(lb)); + subcategoryListView->sortItems(0, Qt::AscendingOrder); + subcategoryListView->scrollToItem(sub); + } +} +void DeicsOnzeGui::setProg(int pr) {//must be changed with SysEx + QTreePreset* pre = (QTreePreset*) presetListView->currentItem(); + if(pre) { + Subcategory* currentSub=pre->_preset->_subcategory; + if(!currentSub->isFreeProg(pr-1)) { + QTreeWidgetItem* qpre; + qpre=presetListView->findItems(num3Digits(pr), Qt::MatchExactly).at(0); + ((QTreePreset*)qpre)->_preset->prog=pre->_preset->prog; + qpre->setText(0, num3Digits(((QTreePreset*)qpre)->_preset->prog+1)); + } + pre->_preset->prog=pr-1; + pre->setText(0,num3Digits(pr)); + presetListView->sortItems(0,Qt::AscendingOrder); + presetListView->scrollToItem(pre); + } +} +//----------------------------------------------------------- +// load init set +//----------------------------------------------------------- +void DeicsOnzeGui::setIsInitSet(bool b) { + initSetPathLineEdit->setEnabled(b); + initSetBrowsePushButton->setEnabled(b); + unsigned char* message = new unsigned char[2]; + message[0]=SYSEX_ISINITSET; + message[1]=(unsigned char)b; + sendSysex(message, 2); +} +void DeicsOnzeGui::setInitSetPath(const QString& s) { + unsigned char* message = new unsigned char[1+MAXSTRLENGTHINITSETPATH]; + message[0]=SYSEX_INITSETPATH; + strncpy((char*)&message[1], s.toAscii().data(), MAXSTRLENGTHINITSETPATH); + sendSysex(message, 1+MAXSTRLENGTHINITSETPATH); +} +void DeicsOnzeGui::setBrowseInitSetPath() { + QString fileName = + QFileDialog::getOpenFileName( + this, + tr("Browse set dialog"), + lastDir, + QString("*.dei")); + if(!fileName.isEmpty()) { + QFileInfo fi(fileName); + lastDir = fi.path(); + updateInitSetPath(fileName); + setInitSetPath(fileName); + } +} +//----------------------------------------------------------- +// load background pix +//----------------------------------------------------------- +void DeicsOnzeGui::setIsBackgroundPix(bool b) { + if(b && !imagePathLineEdit->text().isEmpty()) applyBackgroundPix(); + else setBackgroundColor(reinterpret_cast(*bColor)); + imagePathLineEdit->setEnabled(b); + imageBrowsePushButton->setEnabled(b); + unsigned char* message = new unsigned char[2]; + message[0]=SYSEX_ISBACKGROUNDPIX; + message[1]=(unsigned char)b; + sendSysex(message, 2); +} +void DeicsOnzeGui::setBackgroundPixPath(const QString& s) { + applyBackgroundPix(); + unsigned char* message = new unsigned char[1+MAXSTRLENGTHBACKGROUNDPIXPATH]; + message[0]=SYSEX_BACKGROUNDPIXPATH; + strncpy((char*)&message[1], s.toAscii().data(), + MAXSTRLENGTHBACKGROUNDPIXPATH); + sendSysex(message, 1+MAXSTRLENGTHBACKGROUNDPIXPATH); +} +void DeicsOnzeGui::setBrowseBackgroundPixPath() { + QString fileName = + QFileDialog::getOpenFileName( + this, + tr("Browse image dialog"), + lastDir, + QString("*.jpg *.png")); + if(!fileName.isEmpty()) { + QFileInfo fi(fileName); + lastDir = fi.path(); + updateBackgroundPixPath(fileName); + setBackgroundPixPath(fileName); + } +} +//----------------------------------------------------------- +// FX +//----------------------------------------------------------- +void DeicsOnzeGui::setChorusActiv(bool a) { + unsigned char* message = new unsigned char[2]; + message[0]=SYSEX_CHORUSACTIV; + message[1]=(unsigned char)a; + sendSysex(message, 2); +} +void DeicsOnzeGui::setChannelChorus(int c) { + sendController(_currentChannel, CTRL_CHORUS_SEND, c); +} +void DeicsOnzeGui::setChorusReturn(int val) { + unsigned char* message = new unsigned char[2]; + message[0]=SYSEX_CHORUSRETURN; + message[1]=(unsigned char)val; + sendSysex(message, 2); +} +void DeicsOnzeGui::setSelectChorusPlugin() { + Plugin* pluginChorus = PluginDialog::getPlugin(this); + if(pluginChorus) { + unsigned char* message = new unsigned char[1+sizeof(Plugin*)]; + message[0]=SYSEX_SELECTCHORUS; + memcpy(&message[1], &pluginChorus, sizeof(Plugin*)); + sendSysex(message, 1+sizeof(Plugin*)); + } +} +/*void DeicsOnzeGui::setPanChorus1(double i) { + unsigned char* message = new unsigned char[2]; + message[0]=SYSEX_CHORUS1PAN; + message[1]=(unsigned char)(i*(double)MAXCHORUSPARAM); + sendSysex(message, 2); +} +void DeicsOnzeGui::setLFOFreqChorus1(double i) { + unsigned char* message = new unsigned char[2]; + message[0]=SYSEX_CHORUS1LFOFREQ; + message[1]=(unsigned char)(i*(double)MAXCHORUSPARAM); + sendSysex(message, 2); +} +void DeicsOnzeGui::setDepthChorus1(double i) { + unsigned char* message = new unsigned char[2]; + message[0]=SYSEX_CHORUS1DEPTH; + message[1]=(unsigned char)(i*(double)MAXCHORUSPARAM); + sendSysex(message, 2); +} +void DeicsOnzeGui::setPanChorus2(double i) { + unsigned char* message = new unsigned char[2]; + message[0]=SYSEX_CHORUS2PAN; + message[1]=(unsigned char)(i*(double)MAXCHORUSPARAM); + sendSysex(message, 2); +} +void DeicsOnzeGui::setLFOFreqChorus2(double i) { + unsigned char* message = new unsigned char[2]; + message[0]=SYSEX_CHORUS2LFOFREQ; + message[1]=(unsigned char)(i*(double)MAXCHORUSPARAM); + sendSysex(message, 2); +} +void DeicsOnzeGui::setDepthChorus2(double i) { + unsigned char* message = new unsigned char[2]; + message[0]=SYSEX_CHORUS2DEPTH; + message[1]=(unsigned char)(i*(double)MAXCHORUSPARAM); + sendSysex(message, 2); + }*/ +void DeicsOnzeGui::setReverbActiv(bool a) { + unsigned char* message = new unsigned char[2]; + message[0]=SYSEX_REVERBACTIV; + message[1]=(unsigned char)a; + sendSysex(message, 2); +} +void DeicsOnzeGui::setChannelReverb(int r) { + sendController(_currentChannel, CTRL_REVERB_SEND, r); +} +void DeicsOnzeGui::setReverbReturn(int val) { + unsigned char* message = new unsigned char[2]; + message[0]=SYSEX_REVERBRETURN; + message[1]=(unsigned char)val; + sendSysex(message, 2); +} +void DeicsOnzeGui::setSelectReverbPlugin() { + Plugin* pluginReverb = PluginDialog::getPlugin(this); + if(pluginReverb) { + unsigned char* message = new unsigned char[1+sizeof(Plugin*)]; + message[0]=SYSEX_SELECTREVERB; + memcpy(&message[1], &pluginReverb, sizeof(Plugin*)); + sendSysex(message, 1+sizeof(Plugin*)); + } +} + +//----------------------------------------------------------- +// Quick Edit +//----------------------------------------------------------- +void DeicsOnzeGui::setChannelVolKnob(double val) { + sendController(_currentChannel, CTRL_CHANNELVOLUME, + (int)(val*(double)MAXCHANNELVOLUME)); +} +void DeicsOnzeGui::setBrightnessKnob(double val) { + sendController(_currentChannel, CTRL_FINEBRIGHTNESS, + (int)(val*(double)MAXFINEBRIGHTNESS)); +} +void DeicsOnzeGui::setModulationKnob(double val) { + sendController(_currentChannel, CTRL_MODULATION, + (int)(val*(double)MAXMODULATION)); +} +void DeicsOnzeGui::setDetuneKnob(double val) { + //channelDetuneSlider->setValue((int)((2.0*val-1.0)*(double)MAXCHANNELDETUNE)); + setChannelDetune((int)((2.0*val-1.0)*(double)MAXCHANNELDETUNE)); +} +void DeicsOnzeGui::setAttackKnob(double val) { + sendController(_currentChannel, CTRL_ATTACK_TIME, + (int)(val*(double)MAXATTACK)); +} +void DeicsOnzeGui::setReleaseKnob(double val) { + sendController(_currentChannel, CTRL_RELEASE_TIME, (int)(val*(double)MAXRELEASE)); +} +//----------------------------------------------------------- +// Global control +//----------------------------------------------------------- +void DeicsOnzeGui::setChannelPan(double mv) { + sendController(_currentChannel, CTRL_CHANNELPAN, + (int)((mv-0.5)*2*(double)MAXCHANNELPAN)); +} +void DeicsOnzeGui::setMasterVolKnob(double mv) { + setMasterVol((int)(mv*(double)MAXMASTERVOLUME)); +} +void DeicsOnzeGui::setMasterVol(int mv) { + unsigned char* message = new unsigned char[2]; + message[0]=SYSEX_MASTERVOL; + message[1]=(unsigned char)mv; + sendSysex(message, 2); +} + +void DeicsOnzeGui::setFeedback(int f) {sendController(_currentChannel, CTRL_FEEDBACK, f);} + +void DeicsOnzeGui::setLfoWave(int lw) {sendController(_currentChannel, CTRL_WAVE, lw);} + +void DeicsOnzeGui::setLfoSpeed(int ls) {sendController(_currentChannel, CTRL_SPEED, ls);} + +void DeicsOnzeGui::setLfoDelay(int ld) {sendController(_currentChannel, CTRL_DELAY, ld);} + +void DeicsOnzeGui::setLfoPModDepth(int lpmd) { + sendController(_currentChannel, CTRL_PMODDEPTH, lpmd); +} + +void DeicsOnzeGui::setLfoPitchSens(int lps) { + sendController(_currentChannel, CTRL_PMODSENS, lps); +} + +void DeicsOnzeGui::setLfoAModDepth(int lamd) { + sendController(_currentChannel, CTRL_AMODDEPTH, lamd); +} +void DeicsOnzeGui::setLfoAmpSens(int las) {sendController(_currentChannel, CTRL_AMS, las);} + +void DeicsOnzeGui::setTranspose(int t) {sendController(_currentChannel, CTRL_TRANSPOSE, t);} + +void DeicsOnzeGui::setChannelDetune(int d) { + sendController(_currentChannel, CTRL_CHANNELDETUNE, d); + updateChannelDetuneKnob(d); +} + +void DeicsOnzeGui::setAlgorithm(int a) { + sendController(_currentChannel, CTRL_ALG, (int) (a==0?FIRST: + (a==1?SECOND: + (a==2?THIRD: + (a==3?FOURTH: + (a==4?FIFTH: + (a==5?SIXTH: + (a==6?SEVENTH:EIGHTH)))))))); +} + +void DeicsOnzeGui::setPitchBendRange(int pbr) { + sendController(_currentChannel, CTRL_PBENDRANGE, pbr); +} + +//--------------------------------------------------------------- +// Pitch Envelope +//--------------------------------------------------------------- +void DeicsOnzeGui::setPL1(int val) { + PitchEg* pe=&_deicsOnze->_preset[_currentChannel]->pitchEg; + pitchEnvelopeGraph->env2Points(val, pe->pl2, pe->pl3, + pe->pr1, pe->pr2, pe->pr3); + pitchEnvelopeGraph->updateEnv(); + sendController(_currentChannel, CTRL_PL1, val); +} +void DeicsOnzeGui::setPL2(int val) { + PitchEg* pe=&_deicsOnze->_preset[_currentChannel]->pitchEg; + pitchEnvelopeGraph->env2Points(pe->pl1, val, pe->pl3, + pe->pr1, pe->pr2, pe->pr3); + pitchEnvelopeGraph->updateEnv(); + sendController(_currentChannel, CTRL_PL2, val); +} +void DeicsOnzeGui::setPL3(int val) { + PitchEg* pe=&_deicsOnze->_preset[_currentChannel]->pitchEg; + pitchEnvelopeGraph->env2Points(pe->pl1, pe->pl2, val, + pe->pr1, pe->pr2, pe->pr3); + pitchEnvelopeGraph->updateEnv(); + sendController(_currentChannel, CTRL_PL3, val); +} +void DeicsOnzeGui::setPR1(int val) { + PitchEg* pe=&_deicsOnze->_preset[_currentChannel]->pitchEg; + pitchEnvelopeGraph->env2Points(pe->pl1, pe->pl2, pe->pl3, + val, pe->pr2, pe->pr3); + pitchEnvelopeGraph->updateEnv(); + sendController(_currentChannel, CTRL_PR1, val); +} +void DeicsOnzeGui::setPR2(int val) { + PitchEg* pe=&_deicsOnze->_preset[_currentChannel]->pitchEg; + pitchEnvelopeGraph->env2Points(pe->pl1, pe->pl2, pe->pl3, + pe->pr1, val, pe->pr3); + pitchEnvelopeGraph->updateEnv(); + sendController(_currentChannel, CTRL_PR2, val); +} +void DeicsOnzeGui::setPR3(int val) { + PitchEg* pe=&_deicsOnze->_preset[_currentChannel]->pitchEg; + pitchEnvelopeGraph->env2Points(pe->pl1, pe->pl2, pe->pl3, + pe->pr1, pe->pr2, val); + pitchEnvelopeGraph->updateEnv(); + sendController(_currentChannel, CTRL_PR3, val); +} +//--------------------------------------------------------------- +// Function +//--------------------------------------------------------------- +void DeicsOnzeGui::setFcVolume(int val){sendController(_currentChannel, CTRL_FCVOLUME, val);} +void DeicsOnzeGui::setFcPitch(int val){sendController(_currentChannel, CTRL_FCPITCH, val);} +void DeicsOnzeGui::setFcAmplitude(int val) { + sendController(_currentChannel, CTRL_FCAMPLITUDE, val); +} +void DeicsOnzeGui::setMwPitch(int val){sendController(_currentChannel, CTRL_MWPITCH, val);} +void DeicsOnzeGui::setMwAmplitude(int val) { + sendController(_currentChannel, CTRL_MWAMPLITUDE, val); +} +void DeicsOnzeGui::setBcPitch(int val){sendController(_currentChannel, CTRL_BCPITCH, val);} +void DeicsOnzeGui::setBcAmplitude(int val) { + sendController(_currentChannel, CTRL_BCAMPLITUDE, val); +} +void DeicsOnzeGui::setBcPitchBias(int val) { + sendController(_currentChannel, CTRL_BCPITCHBIAS, val);} +void DeicsOnzeGui::setBcEgBias(int val) { + sendController(_currentChannel, CTRL_BCEGBIAS, val); +} +void DeicsOnzeGui::setAtPitch(int val){sendController(_currentChannel, CTRL_ATPITCH, val);} +void DeicsOnzeGui::setAtAmplitude(int val) { + sendController(_currentChannel, CTRL_ATAMPLITUDE, val); +} +void DeicsOnzeGui::setAtPitchBias(int val) { + sendController(_currentChannel, CTRL_ATPITCHBIAS, val);} +void DeicsOnzeGui::setAtEgBias(int val) { + sendController(_currentChannel, CTRL_ATEGBIAS, val); +} +void DeicsOnzeGui::setReverbRate(int val) { + sendController(_currentChannel, CTRL_REVERBRATE, val); +} +void DeicsOnzeGui::setPolyMode(int val) { + sendController(_currentChannel, CTRL_POLYMODE, val); +} +void DeicsOnzeGui::setPortFingerFull(int val) { + sendController(_currentChannel, CTRL_PORTAMODE, val); +} +void DeicsOnzeGui::setPortaTime(int val) { + sendController(_currentChannel, CTRL_PORTATIME, val); +} + +//--------------------------------------------------------------- +// envelope controle +//--------------------------------------------------------------- +void DeicsOnzeGui::setAR1(int val) { + Eg* _eg=&(_deicsOnze->_preset[_currentChannel]->eg[0]); + //printf("ar : %d, d1r : %d, d1l : %d, d2r : %d, rr : %d\n", + // val, _eg->d1r, _eg->d1l, _eg->d2r, _eg->rr); + envelopeGraph[0]->env2Points(val, _eg->d1r, _eg->d1l, _eg->d2r, _eg->rr); + envelopeGraph[0]->updateEnv(); + sendController(_currentChannel, CTRL_AR, val); +} +void DeicsOnzeGui::setD1R1(int val) { + Eg* _eg=&(_deicsOnze->_preset[_currentChannel]->eg[0]); + envelopeGraph[0]->env2Points(_eg->ar, val, _eg->d1l, _eg->d2r, _eg->rr); + envelopeGraph[0]->updateEnv(); + sendController(_currentChannel, CTRL_D1R, val); +} +void DeicsOnzeGui::setD1L1(int val) { + Eg* _eg=&(_deicsOnze->_preset[_currentChannel]->eg[0]); + envelopeGraph[0]->env2Points(_eg->ar, _eg->d1r, val, _eg->d2r, _eg->rr); + envelopeGraph[0]->updateEnv(); + sendController(_currentChannel, CTRL_D1L, val); +} +void DeicsOnzeGui::setD2R1(int val) { + Eg* _eg=&(_deicsOnze->_preset[_currentChannel]->eg[0]); + envelopeGraph[0]->env2Points(_eg->ar, _eg->d1r, _eg->d1l, val, _eg->rr); + envelopeGraph[0]->updateEnv(); + sendController(_currentChannel, CTRL_D2R, val); +} +void DeicsOnzeGui::setRR1(int val){ + Eg* _eg=&(_deicsOnze->_preset[_currentChannel]->eg[0]); + envelopeGraph[0]->env2Points(_eg->ar, _eg->d1r, _eg->d1l, _eg->d2r, val); + envelopeGraph[0]->updateEnv(); + sendController(_currentChannel, CTRL_RR, val); +} +void DeicsOnzeGui::setAR2(int val) { + Eg* _eg=&(_deicsOnze->_preset[_currentChannel]->eg[1]); + envelopeGraph[1]->env2Points(val, _eg->d1r, _eg->d1l, _eg->d2r, _eg->rr); + envelopeGraph[1]->updateEnv(); + sendController(_currentChannel, CTRL_AR+DECAPAR1, val); +} +void DeicsOnzeGui::setD1R2(int val) { + Eg* _eg=&(_deicsOnze->_preset[_currentChannel]->eg[1]); + envelopeGraph[1]->env2Points(_eg->ar, val, _eg->d1l, _eg->d2r, _eg->rr); + envelopeGraph[1]->updateEnv(); + sendController(_currentChannel, CTRL_D1R+DECAPAR1, val); +} +void DeicsOnzeGui::setD1L2(int val) { + Eg* _eg=&(_deicsOnze->_preset[_currentChannel]->eg[1]); + envelopeGraph[1]->env2Points(_eg->ar, _eg->d1r, val, _eg->d2r, _eg->rr); + envelopeGraph[1]->updateEnv(); + sendController(_currentChannel, CTRL_D1L+DECAPAR1, val); +} +void DeicsOnzeGui::setD2R2(int val) { + Eg* _eg=&(_deicsOnze->_preset[_currentChannel]->eg[1]); + envelopeGraph[1]->env2Points(_eg->ar, _eg->d1r, _eg->d1l, val, _eg->rr); + envelopeGraph[1]->updateEnv(); + sendController(_currentChannel, CTRL_D2R+DECAPAR1, val); +} +void DeicsOnzeGui::setRR2(int val){ + Eg* _eg=&(_deicsOnze->_preset[_currentChannel]->eg[1]); + envelopeGraph[1]->env2Points(_eg->ar, _eg->d1r, _eg->d1l, _eg->d2r, val); + envelopeGraph[1]->updateEnv(); + sendController(_currentChannel, CTRL_RR+DECAPAR1, val); +} +void DeicsOnzeGui::setAR3(int val) { + Eg* _eg=&(_deicsOnze->_preset[_currentChannel]->eg[2]); + envelopeGraph[2]->env2Points(val, _eg->d1r, _eg->d1l, _eg->d2r, _eg->rr); + envelopeGraph[2]->updateEnv(); + sendController(_currentChannel, CTRL_AR+2*DECAPAR1, val); +} +void DeicsOnzeGui::setD1R3(int val) { + Eg* _eg=&(_deicsOnze->_preset[_currentChannel]->eg[2]); + envelopeGraph[2]->env2Points(_eg->ar, val, _eg->d1l, _eg->d2r, _eg->rr); + envelopeGraph[2]->updateEnv(); + sendController(_currentChannel, CTRL_D1R+2*DECAPAR1, val); +} +void DeicsOnzeGui::setD1L3(int val) { + Eg* _eg=&(_deicsOnze->_preset[_currentChannel]->eg[2]); + envelopeGraph[2]->env2Points(_eg->ar, _eg->d1r, val, _eg->d2r, _eg->rr); + envelopeGraph[2]->updateEnv(); + sendController(_currentChannel, CTRL_D1L+2*DECAPAR1, val); +} +void DeicsOnzeGui::setD2R3(int val) { + Eg* _eg=&(_deicsOnze->_preset[_currentChannel]->eg[2]); + envelopeGraph[2]->env2Points(_eg->ar, _eg->d1r, _eg->d1l, val, _eg->rr); + envelopeGraph[2]->updateEnv(); + sendController(_currentChannel, CTRL_D2R+2*DECAPAR1, val); +} +void DeicsOnzeGui::setRR3(int val){ + Eg* _eg=&(_deicsOnze->_preset[_currentChannel]->eg[2]); + envelopeGraph[2]->env2Points(_eg->ar, _eg->d1r, _eg->d1l, _eg->d2r, val); + envelopeGraph[2]->updateEnv(); + sendController(_currentChannel, CTRL_RR+2*DECAPAR1, val); +} +void DeicsOnzeGui::setAR4(int val) { + Eg* _eg=&(_deicsOnze->_preset[_currentChannel]->eg[3]); + envelopeGraph[3]->env2Points(val, _eg->d1r, _eg->d1l, _eg->d2r, _eg->rr); + envelopeGraph[3]->updateEnv(); + sendController(_currentChannel, CTRL_AR+3*DECAPAR1, val); +} +void DeicsOnzeGui::setD1R4(int val) { + Eg* _eg=&(_deicsOnze->_preset[_currentChannel]->eg[3]); + envelopeGraph[3]->env2Points(_eg->ar, val, _eg->d1l, _eg->d2r, _eg->rr); + envelopeGraph[3]->updateEnv(); + sendController(_currentChannel, CTRL_D1R+3*DECAPAR1, val); +} +void DeicsOnzeGui::setD1L4(int val) { + Eg* _eg=&(_deicsOnze->_preset[_currentChannel]->eg[3]); + envelopeGraph[3]->env2Points(_eg->ar, _eg->d1r, val, _eg->d2r, _eg->rr); + envelopeGraph[3]->updateEnv(); + sendController(_currentChannel, CTRL_D1L+3*DECAPAR1, val); +} +void DeicsOnzeGui::setD2R4(int val) { + Eg* _eg=&(_deicsOnze->_preset[_currentChannel]->eg[3]); + envelopeGraph[3]->env2Points(_eg->ar, _eg->d1r, _eg->d1l, val, _eg->rr); + envelopeGraph[3]->updateEnv(); + sendController(_currentChannel, CTRL_D2R+3*DECAPAR1, val); +} +void DeicsOnzeGui::setRR4(int val){ + Eg* _eg=&(_deicsOnze->_preset[_currentChannel]->eg[3]); + envelopeGraph[3]->env2Points(_eg->ar, _eg->d1r, _eg->d1l, _eg->d2r, val); + envelopeGraph[3]->updateEnv(); + sendController(_currentChannel, CTRL_RR+3*DECAPAR1, val); +} + +//-------------------------------------------------------------- +// set Scaling +//-------------------------------------------------------------- +void DeicsOnzeGui::setLS1(int val){sendController(_currentChannel, CTRL_LS, val);} +void DeicsOnzeGui::setRS1(int val){sendController(_currentChannel, CTRL_RS, val);} +void DeicsOnzeGui::setLS2(int val){sendController(_currentChannel, CTRL_LS+DECAPAR1, val);} +void DeicsOnzeGui::setRS2(int val){sendController(_currentChannel, CTRL_RS+DECAPAR1, val);} +void DeicsOnzeGui::setLS3(int val){sendController(_currentChannel, CTRL_LS+2*DECAPAR1, val);} +void DeicsOnzeGui::setRS3(int val){sendController(_currentChannel, CTRL_RS+2*DECAPAR1, val);} +void DeicsOnzeGui::setLS4(int val){sendController(_currentChannel, CTRL_LS+3*DECAPAR1, val);} +void DeicsOnzeGui::setRS4(int val){sendController(_currentChannel, CTRL_RS+3*DECAPAR1, val);} + +//-------------------------------------------------------------- +// set Volume +//-------------------------------------------------------------- +void DeicsOnzeGui::setVol1(int val){sendController(_currentChannel, CTRL_OUT, val);} +void DeicsOnzeGui::setVol2(int val){sendController(_currentChannel, CTRL_OUT+DECAPAR1, val);} +void DeicsOnzeGui::setVol3(int val){sendController(_currentChannel,CTRL_OUT+2*DECAPAR1,val);} +void DeicsOnzeGui::setVol4(int val){sendController(_currentChannel,CTRL_OUT+3*DECAPAR1,val);} + +//-------------------------------------------------------------- +// set Ratio and Frequency +//-------------------------------------------------------------- +void DeicsOnzeGui::setCoarseRatio1(int val) { + sendController(_currentChannel, CTRL_RATIO, val*100+FineRatio1SpinBox->value()); +} +void DeicsOnzeGui::setFineRatio1(int val) { + sendController(_currentChannel, CTRL_RATIO, val+CoarseRatio1SpinBox->value()*100); +} +void DeicsOnzeGui::setFreq1(int val) { + sendController(_currentChannel,CTRL_FIXRANGE,val*100);} +void DeicsOnzeGui::setFix1(bool f) { + sendController(_currentChannel, CTRL_FIX, (f==false?0:1));} +void DeicsOnzeGui::setCoarseRatio2(int val) { + sendController(_currentChannel, CTRL_RATIO+DECAPAR1, val*100+FineRatio2SpinBox->value()); +} +void DeicsOnzeGui::setFineRatio2(int val) { + sendController(_currentChannel,CTRL_RATIO+DECAPAR1,val+CoarseRatio2SpinBox->value()*100); +} +void DeicsOnzeGui::setFreq2(int val) { + sendController(_currentChannel,CTRL_FIXRANGE+DECAPAR2,val*100);} +void DeicsOnzeGui::setFix2(bool f) { + sendController(_currentChannel, CTRL_FIX+DECAPAR2, (f==false?0:1));} +void DeicsOnzeGui::setCoarseRatio3(int val) { + sendController(_currentChannel,CTRL_RATIO+2*DECAPAR1,val*100+FineRatio3SpinBox->value()); +} +void DeicsOnzeGui::setFineRatio3(int val) { + sendController(_currentChannel,CTRL_RATIO+2*DECAPAR1, + val+CoarseRatio3SpinBox->value()*100); +} +void DeicsOnzeGui::setFreq3(int val) { + sendController(_currentChannel,CTRL_FIXRANGE+2*DECAPAR2,val*100);} +void DeicsOnzeGui::setFix3(bool f) { + sendController(_currentChannel, CTRL_FIX+2*DECAPAR2, (f==false?0:1));} +void DeicsOnzeGui::setCoarseRatio4(int val) { + sendController(_currentChannel,CTRL_RATIO+3*DECAPAR1,val*100+FineRatio4SpinBox->value()); +} +void DeicsOnzeGui::setFineRatio4(int val) { + sendController(_currentChannel,CTRL_RATIO+3*DECAPAR1, + val+CoarseRatio4SpinBox->value()*100); +} +void DeicsOnzeGui::setFreq4(int val) { + sendController(_currentChannel,CTRL_FIXRANGE+3*DECAPAR2,val*100);} +void DeicsOnzeGui::setFix4(bool f) { + sendController(_currentChannel, CTRL_FIX+3*DECAPAR2, (f==false?0:1));} + +//-------------------------------------------------------------- +// set Sensitivity +//-------------------------------------------------------------- +void DeicsOnzeGui::setAME1(bool val) {sendController(_currentChannel, CTRL_AME, val);} +void DeicsOnzeGui::setEBS1(int val) {sendController(_currentChannel, CTRL_EBS, val);} +void DeicsOnzeGui::setKVS1(int val) {sendController(_currentChannel, CTRL_KVS, val);} +void DeicsOnzeGui::setAME2(bool val) {sendController(_currentChannel,CTRL_AME+DECAPAR1,val);} +void DeicsOnzeGui::setEBS2(int val) {sendController(_currentChannel,CTRL_EBS+DECAPAR1,val);} +void DeicsOnzeGui::setKVS2(int val) {sendController(_currentChannel,CTRL_KVS+DECAPAR1,val);} +void DeicsOnzeGui::setAME3(bool val) { + sendController(_currentChannel,CTRL_AME+2*DECAPAR1,val);} +void DeicsOnzeGui::setEBS3(int val) { + sendController(_currentChannel, CTRL_EBS+2*DECAPAR1, val);} +void DeicsOnzeGui::setKVS3(int val) { + sendController(_currentChannel, CTRL_KVS+2*DECAPAR1, val);} +void DeicsOnzeGui::setAME4(bool val) { + sendController(_currentChannel, CTRL_AME+3*DECAPAR1, val);} +void DeicsOnzeGui::setEBS4(int val) { + sendController(_currentChannel, CTRL_EBS+3*DECAPAR1, val);} +void DeicsOnzeGui::setKVS4(int val) { + sendController(_currentChannel, CTRL_KVS+3*DECAPAR1, val);} + +//-------------------------------------------------------------- +// set detune +//-------------------------------------------------------------- +void DeicsOnzeGui::setDET1(int val){sendController(_currentChannel, CTRL_DET, val);} +void DeicsOnzeGui::setDET2(int val){sendController(_currentChannel, CTRL_DET+DECAPAR1, val);} +void DeicsOnzeGui::setDET3(int val){sendController(_currentChannel,CTRL_DET+2*DECAPAR1,val);} +void DeicsOnzeGui::setDET4(int val){sendController(_currentChannel,CTRL_DET+3*DECAPAR1,val);} + +//-------------------------------------------------------------- +// set WaveForm +//-------------------------------------------------------------- +void DeicsOnzeGui::setWaveForm1(int w) { + sendController(_currentChannel, CTRL_OSW, w); +} +void DeicsOnzeGui::setWaveForm2(int w) { + sendController(_currentChannel, CTRL_OSW+DECAPAR2, w); +} +void DeicsOnzeGui::setWaveForm3(int w) { + sendController(_currentChannel, CTRL_OSW+2*DECAPAR2, w); +} +void DeicsOnzeGui::setWaveForm4(int w) { + sendController(_currentChannel, CTRL_OSW+3*DECAPAR2, w); +} +//-------------------------------------------------------------- +// set delay +//-------------------------------------------------------------- +void DeicsOnzeGui::setActivDelay(bool a) { + unsigned char* message = new unsigned char[2]; + message[0]=SYSEX_DELAYACTIV; + message[1]=(unsigned char)a; + sendSysex(message, 2); +} +void DeicsOnzeGui::setDelayReturn(int r) { + unsigned char* message = new unsigned char[2]; + message[0]=SYSEX_DELAYRETURN; + message[1]=(unsigned char)r; + sendSysex(message, 2); +} +void DeicsOnzeGui::setChannelDelay(int d) { + sendController(_currentChannel, CTRL_VARIATION_SEND, (unsigned char)d); +} +//void DeicsOnzeGui::setDelayTime(int t) { +// unsigned char* message = new unsigned char[2]; +// message[0]=SYSEX_DELAYTIME; +// message[1]=(unsigned char)t; +// sendSysex(message, 2); +// updateDelayTime(t); +//} +void DeicsOnzeGui::setDelayBPM(double t) { + //int it = (int)(((t - MINDELAYTIME) / (MAXDELAYTIME - MINDELAYTIME))*255.0); + unsigned char* message = new unsigned char[sizeof(float)+1]; + message[0]=SYSEX_DELAYBPM; + float f = (float)t; + memcpy(&message[1], &f, sizeof(float)); + message[1]=(unsigned char)f; + sendSysex(message, sizeof(float)+1); + //updateDelayTime(it); +} +void DeicsOnzeGui::setDelayBeatRatio(double t) { + unsigned char* message = new unsigned char[sizeof(float)+1]; + message[0]=SYSEX_DELAYBEATRATIO; + float f = (float)t; + memcpy(&message[1], &f, sizeof(float)); + message[1]=(unsigned char)f; + sendSysex(message, sizeof(float)+1); +} +//void DeicsOnzeGui::setDelayFeedback(int f) { +// unsigned char* message = new unsigned char[2]; +// message[0]=SYSEX_DELAYFEEDBACK; +// message[1]=(unsigned char)f; +// sendSysex(message, 2); +// updateDelayFeedback(f); +//} +void DeicsOnzeGui::setDelayFeedback(double t) { + //int idf = (int)(f*128.0+128.0); + unsigned char* message = new unsigned char[sizeof(float)+1]; + message[0]=SYSEX_DELAYFEEDBACK; + float f = (float)t; + memcpy(&message[1], &f, sizeof(float)); + sendSysex(message, sizeof(float)+1); + //updateDelayFeedback(idf); +} +//void DeicsOnzeGui::setDelayPanLFOFreq(int pf) { +// unsigned char* message = new unsigned char[2]; +// message[0]=SYSEX_DELAYLFOFREQ; +// message[1]=(unsigned char)pf; +// sendSysex(message, 2); +// updateDelayPanLFOFreq(pf); +//} +void DeicsOnzeGui::setDelayPanLFOFreq(double pf) { + //int ipf = (int)(((pf - MINFREQ) / (MAXFREQ - MINFREQ))*255.0); + unsigned char* message = new unsigned char[sizeof(float)+1]; + message[0]=SYSEX_DELAYLFOFREQ; + float f = (float)pf; + memcpy(&message[1], &f, sizeof(float)); + sendSysex(message, sizeof(float)+1); + //updateDelayPanLFOFreq(ipf); +} +//void DeicsOnzeGui::setDelayPanLFODepth(int pd) { +// unsigned char* message = new unsigned char[2]; +// message[0]=SYSEX_DELAYLFODEPTH; +// message[1]=(unsigned char)pd; +// sendSysex(message, 2); +// updateDelayPanLFODepth(pd); +//} +void DeicsOnzeGui::setDelayPanLFODepth(double pd) { + //int ipd = (int)(pd*255.0); + unsigned char* message = new unsigned char[sizeof(float)+1]; + message[0]=SYSEX_DELAYLFODEPTH; + float f = (float)pd; + memcpy(&message[1], &f, sizeof(float)); + sendSysex(message, sizeof(float)+1); + //updateDelayPanLFODepth(ipd); +} + + +//-------------------------------------------------------------- +// setSet +// Display the set, that is the category list +//-------------------------------------------------------------- +void DeicsOnzeGui::setSet() { + categoryListView->clear(); + hbankSpinBox->setEnabled(false); + categoryLineEdit->setEnabled(false); + for(std::vector::iterator + i=_deicsOnze->_set->_categoryVector.begin(); + i!=_deicsOnze->_set->_categoryVector.end(); i++) + (void) new QTreeCategory + (categoryListView, num3Digits((*i)->_hbank+1), + (*i)->_categoryName.c_str(), *i); + categoryListView->resizeColumnToContents(0); + categoryListView->sortItems(0,Qt::AscendingOrder); +} + +//-------------------------------------------------------------- +// setCategory +//-------------------------------------------------------------- +void DeicsOnzeGui::setCategory(Category* cat) { + subcategoryListView->clear(); + lbankSpinBox->setEnabled(false); + subcategoryLineEdit->setEnabled(false); + for(std::vector::iterator i=cat->_subcategoryVector.begin(); + i!=cat->_subcategoryVector.end(); i++) + (void) new QTreeSubcategory(subcategoryListView, + num3Digits((*i)->_lbank+1), + (*i)->_subcategoryName.c_str(),*i); + subcategoryListView->resizeColumnToContents(0); + subcategoryListView->sortItems(0,Qt::AscendingOrder); +} +void DeicsOnzeGui::setCategory(QTreeWidgetItem* cat) { + QTreeCategory* ccat = (QTreeCategory*) categoryListView->currentItem(); + if(cat) { + categoryLineEdit->setEnabled(true); + hbankSpinBox->setEnabled(true); + categoryLineEdit + ->setText(((QTreeCategory*)cat)->_category->_categoryName.c_str()); + hbankSpinBox->setValue(((QTreeCategory*)cat)->_category->_hbank+1); + ccat=(QTreeCategory*)cat; + setCategory(ccat->_category); + } +} + +//-------------------------------------------------------------- +// setSubcategory +//-------------------------------------------------------------- +void DeicsOnzeGui::setSubcategory(Subcategory* sub) { + presetListView->clear(); + progSpinBox->setEnabled(false); + presetLineEdit->setEnabled(false); + for(std::vector::iterator i=sub->_presetVector.begin(); + i!=sub->_presetVector.end(); i++) + (void) new QTreePreset(presetListView, + num3Digits((*i)->prog+1), + (*i)->name.c_str(),*i); + presetListView->resizeColumnToContents(0); + presetListView->sortItems(0,Qt::AscendingOrder); +} +void DeicsOnzeGui::setSubcategory(QTreeWidgetItem* sub) { + QTreeSubcategory* csub = + (QTreeSubcategory*) subcategoryListView->currentItem(); + if(sub) { + subcategoryLineEdit->setEnabled(true); + lbankSpinBox->setEnabled(true); + subcategoryLineEdit->setText(((QTreeSubcategory*)sub) + ->_subcategory->_subcategoryName.c_str()); + lbankSpinBox->setValue(((QTreeSubcategory*)sub) + ->_subcategory->_lbank+1); + csub=(QTreeSubcategory*)sub; + setSubcategory(csub->_subcategory); + } +} +//-------------------------------------------------------------- +// setPreset +//-------------------------------------------------------------- +void DeicsOnzeGui::setPreset(QTreeWidgetItem* pre) { + if(pre) { + QTreePreset* cpre=(QTreePreset*)pre; + updatePresetName(cpre->_preset->name.c_str(), true); + updateProg(cpre->_preset->prog, true); + int prog = cpre->_preset->prog; + int lbank = cpre->_preset->_subcategory->_lbank; + int hbank = cpre->_preset->_subcategory->_category->_hbank; + setEnabledPreset(true); + updatePreset(cpre->_preset); + sendController(_currentChannel, CTRL_PROGRAM, (hbank<<16)+(lbank<<8)+prog); + } +} +//-------------------------------------------------------------- +// update the gui +//-------------------------------------------------------------- +void DeicsOnzeGui::setEnabledPreset(bool b) { + if(_enabledPreset!=b) { + FeedbackGroupBox->setEnabled(b); + LFOGroupBox->setEnabled(b); + pitchEnvGroupBox->setEnabled(b); + ModulationMatrixGroupBox->setEnabled(b); + Op1Tab->setEnabled(b); + Op2Tab->setEnabled(b); + Op3Tab->setEnabled(b); + Op4Tab->setEnabled(b); + FunctionsTab->setEnabled(b); + chorusTab->setEnabled(b); + reverbTab->setEnabled(b); + + _enabledPreset=b; + } +} +void DeicsOnzeGui::updateChannelEnable(bool e) { + updateChannelCheckBox(e); + updateEnabledChannel(e); +} +void DeicsOnzeGui::updateEnabledChannel(bool e) { + numberVoicesLabel->setEnabled(e); + nbrVoicesSpinBox->setEnabled(e); + channelCtrlGroupBox->setEnabled(e); + deicsOnzeTabWidget->setEnabled(e); +} +void DeicsOnzeGui::updateNbrVoices(int val) { + nbrVoicesSpinBox->blockSignals(true); + nbrVoicesSpinBox->setValue(val); + nbrVoicesSpinBox->blockSignals(false); +} +void DeicsOnzeGui::updateMasterVolume(int val) { + double d = (double)val/(double)MAXMASTERVOLUME; + //printf("D = %d, %f\n", val, d); + masterVolKnob->blockSignals(true); + masterVolKnob->setValue(d); + masterVolKnob->blockSignals(false); +} +//void DeicsOnzeGui::updateMidiInCh(int val) { + //MidiInChComboBox->blockSignals(true); + //MidiInChComboBox->setCurrentIndex(val); + //MidiInChComboBox->blockSignals(false); +//} +void DeicsOnzeGui::updateQuality(int val) { + qualityComboBox->blockSignals(true); + qualityComboBox->setCurrentIndex(val); + qualityComboBox->blockSignals(false); +} +void DeicsOnzeGui::updateFilter(bool f) { + filterCheckBox->blockSignals(true); + filterCheckBox->setChecked(f); + filterCheckBox->blockSignals(false); +} +void DeicsOnzeGui::updateFontSize(int val) { + fontSizeSpinBox->blockSignals(true); + fontSizeSpinBox->setValue(val); + fontSizeSpinBox->blockSignals(false); +} +//FX +void DeicsOnzeGui::updateChorusActiv(bool a) { + chorusActivCheckBox->blockSignals(true); + chorusActivCheckBox->setChecked(a); + chorusActivCheckBox->blockSignals(false); +} +void DeicsOnzeGui::updateChannelChorus(int c) { + chChorusSlider->blockSignals(true); + chChorusSlider->setValue(c); + chChorusSlider->blockSignals(false); + chChorusSpinBox->blockSignals(true); + chChorusSpinBox->setValue(c); + chChorusSpinBox->blockSignals(false); +} +void DeicsOnzeGui::updateChorusReturn(int r) { + returnChorusSlider->blockSignals(true); + returnChorusSlider->setValue(r); + returnChorusSlider->blockSignals(false); +} +/*void DeicsOnzeGui::updatePanChorus1(int c) { + panChorus1Knob->blockSignals(true); + panChorus1Knob->setValue((double)c/(double)MAXCHORUSPARAM); + panChorus1Knob->blockSignals(false); +} +void DeicsOnzeGui::updateLFOFreqChorus1(int c) { + LFOFreqChorus1Knob->blockSignals(true); + LFOFreqChorus1Knob->setValue((double)c/(double)MAXCHORUSPARAM); + LFOFreqChorus1Knob->blockSignals(false); +} +void DeicsOnzeGui::updateDepthChorus1(int c) { + depthChorus1Knob->blockSignals(true); + depthChorus1Knob->setValue((double)c/(double)MAXCHORUSPARAM); + depthChorus1Knob->blockSignals(false); +} +void DeicsOnzeGui::updatePanChorus2(int c) { + panChorus2Knob->blockSignals(true); + panChorus2Knob->setValue((double)c/(double)MAXCHORUSPARAM); + panChorus2Knob->blockSignals(false); +} +void DeicsOnzeGui::updateLFOFreqChorus2(int c) { + LFOFreqChorus2Knob->blockSignals(true); + LFOFreqChorus2Knob->setValue((double)c/(double)MAXCHORUSPARAM); + LFOFreqChorus2Knob->blockSignals(false); +} +void DeicsOnzeGui::updateDepthChorus2(int c) { + depthChorus2Knob->blockSignals(true); + depthChorus2Knob->setValue((double)c/(double)MAXCHORUSPARAM); + depthChorus2Knob->blockSignals(false); + }*/ +void DeicsOnzeGui::updateReverbActiv(bool a) { + reverbActivCheckBox->blockSignals(true); + reverbActivCheckBox->setChecked(a); + reverbActivCheckBox->blockSignals(false); +} +void DeicsOnzeGui::updateChannelReverb(int r) { + chReverbSlider->blockSignals(true); + chReverbSlider->setValue(r); + chReverbSlider->blockSignals(false); + chReverbSpinBox->blockSignals(true); + chReverbSpinBox->setValue(r); + chReverbSpinBox->blockSignals(false); +} +void DeicsOnzeGui::updateReverbReturn(int r) { + returnReverbSlider->blockSignals(true); + returnReverbSlider->setValue(r); + returnReverbSlider->blockSignals(false); +} +void DeicsOnzeGui::updateLadspaReverbLineEdit(QString s) { + selectLadspaReverbLineEdit->blockSignals(true); + selectLadspaReverbLineEdit->setText(s); + selectLadspaReverbLineEdit->blockSignals(false); +} +void DeicsOnzeGui::updateLadspaChorusLineEdit(QString s) { + selectLadspaChorusLineEdit->blockSignals(true); + selectLadspaChorusLineEdit->setText(s); + selectLadspaChorusLineEdit->blockSignals(false); +} + +void DeicsOnzeGui::updateDelayActiv(bool a) { + delayActivCheckBox->blockSignals(true); + delayActivCheckBox->setChecked(a); + delayActivCheckBox->blockSignals(false); +} +void DeicsOnzeGui::updateChannelDelay(int r) { + chDelaySlider->blockSignals(true); + chDelaySlider->setValue(r); + chDelaySlider->blockSignals(false); + chDelaySpinBox->blockSignals(true); + chDelaySpinBox->setValue(r); + chDelaySpinBox->blockSignals(false); +} +void DeicsOnzeGui::updateDelayReturn(int r) { + delayReturnSlider->blockSignals(true); + delayReturnSlider->setValue(r); + delayReturnSlider->blockSignals(false); +} +void DeicsOnzeGui::updateDelayPanLFOFreq(float plf) { + delayPanLFOFreqKnob->blockSignals(true); + delayPanLFOFreqKnob->setValue((double)plf); + delayPanLFOFreqKnob->blockSignals(false); + delayPanLFOFreqFloatentry->blockSignals(true); + delayPanLFOFreqFloatentry->setValue((double)plf); + delayPanLFOFreqFloatentry->blockSignals(false); +} +void DeicsOnzeGui::updateDelayBPM(float dt) { + delayBPMKnob->blockSignals(true); + delayBPMKnob->setValue((double)dt); + delayBPMKnob->blockSignals(false); + delayBPMFloatentry->blockSignals(true); + delayBPMFloatentry->setValue((double)dt); + delayBPMFloatentry->blockSignals(false); +} +void DeicsOnzeGui::updateDelayBeatRatio(float dt) { + delayBeatRatioKnob->blockSignals(true); + delayBeatRatioKnob->setValue((double)dt); + delayBeatRatioKnob->blockSignals(false); + delayBeatRatioFloatentry->blockSignals(true); + delayBeatRatioFloatentry->setValue((double)dt); + delayBeatRatioFloatentry->blockSignals(false); +} +void DeicsOnzeGui::updateDelayFeedback(float df) { + delayFeedbackKnob->blockSignals(true); + delayFeedbackKnob->setValue((double)df); + delayFeedbackKnob->blockSignals(false); + delayFeedbackFloatentry->blockSignals(true); + delayFeedbackFloatentry->setValue((double)df); + delayFeedbackFloatentry->blockSignals(false); +} +void DeicsOnzeGui::updateDelayPanLFODepth(float dpd) { + delayPanLFODepthKnob->blockSignals(true); + delayPanLFODepthKnob->setValue((double)dpd); + delayPanLFODepthKnob->blockSignals(false); + delayPanLFODepthFloatentry->blockSignals(true); + delayPanLFODepthFloatentry->setValue((double)dpd); + delayPanLFODepthFloatentry->blockSignals(false); +} + +void DeicsOnzeGui::applyFontSize(int fs) { + QFont f = font(); + f.setPointSize(fs); + setFont(f); +} +void DeicsOnzeGui::updateSaveConfig(bool usc) { + saveConfigCheckBox->blockSignals(true); + saveConfigCheckBox->setChecked(usc); + saveConfigCheckBox->blockSignals(false); +} +void DeicsOnzeGui::updateSaveOnlyUsed(bool usou) { + hugeSaveRadioButton->blockSignals(true); + hugeSaveRadioButton->setChecked(!usou); + hugeSaveRadioButton->blockSignals(false); + minSaveRadioButton->blockSignals(true); + minSaveRadioButton->setChecked(usou); + minSaveRadioButton->blockSignals(false); +} +//Pitch Envelope +void DeicsOnzeGui::updatePL1(int val) { + PL1SpinBox->blockSignals(true); + PL1SpinBox->setValue(val); + PL1SpinBox->blockSignals(false); +} +void DeicsOnzeGui::updatePL2(int val) { + PL2SpinBox->blockSignals(true); + PL2SpinBox->setValue(val); + PL2SpinBox->blockSignals(false); +} +void DeicsOnzeGui::updatePL3(int val) { + PL3SpinBox->blockSignals(true); + PL3SpinBox->setValue(val); + PL3SpinBox->blockSignals(false); +} +void DeicsOnzeGui::updatePR1(int val) { + PR1SpinBox->blockSignals(true); + PR1SpinBox->setValue(val); + PR1SpinBox->blockSignals(false); +} +void DeicsOnzeGui::updatePR2(int val) { + PR2SpinBox->blockSignals(true); + PR2SpinBox->setValue(val); + PR2SpinBox->blockSignals(false); +} +void DeicsOnzeGui::updatePR3(int val) { + PR3SpinBox->blockSignals(true); + PR3SpinBox->setValue(val); + PR3SpinBox->blockSignals(false); +} +//Function +void DeicsOnzeGui::updateFcVolume(int val) { + fcVolumeSpinBox->blockSignals(true); + fcVolumeSpinBox->setValue(val); + fcVolumeSpinBox->blockSignals(false); + fcVolumeSlider->blockSignals(true); + fcVolumeSlider->setValue(val); + fcVolumeSlider->blockSignals(false); +} +void DeicsOnzeGui::updateFcPitch(int val) { + fcPitchSpinBox->blockSignals(true); + fcPitchSpinBox->setValue(val); + fcPitchSpinBox->blockSignals(false); + fcPitchSlider->blockSignals(true); + fcPitchSlider->setValue(val); + fcPitchSlider->blockSignals(false); +} +void DeicsOnzeGui::updateFcAmplitude(int val) { + fcAmplitudeSpinBox->blockSignals(true); + fcAmplitudeSpinBox->setValue(val); + fcAmplitudeSpinBox->blockSignals(false); + fcAmplitudeSlider->blockSignals(true); + fcAmplitudeSlider->setValue(val); + fcAmplitudeSlider->blockSignals(false); +} +void DeicsOnzeGui::updateMwPitch(int val) { + mwPitchSpinBox->blockSignals(true); + mwPitchSpinBox->setValue(val); + mwPitchSpinBox->blockSignals(false); + mwPitchSlider->blockSignals(true); + mwPitchSlider->setValue(val); + mwPitchSlider->blockSignals(false); +} +void DeicsOnzeGui::updateMwAmplitude(int val) { + mwAmplitudeSpinBox->blockSignals(true); + mwAmplitudeSpinBox->setValue(val); + mwAmplitudeSpinBox->blockSignals(false); + mwAmplitudeSlider->blockSignals(true); + mwAmplitudeSlider->setValue(val); + mwAmplitudeSlider->blockSignals(false); +} +void DeicsOnzeGui::updateBcPitch(int val) { + bcPitchSpinBox->blockSignals(true); + bcPitchSpinBox->setValue(val); + bcPitchSpinBox->blockSignals(false); + bcPitchSlider->blockSignals(true); + bcPitchSlider->setValue(val); + bcPitchSlider->blockSignals(false); +} +void DeicsOnzeGui::updateBcAmplitude(int val) { + bcAmplitudeSpinBox->blockSignals(true); + bcAmplitudeSpinBox->setValue(val); + bcAmplitudeSpinBox->blockSignals(false); + bcAmplitudeSlider->blockSignals(true); + bcAmplitudeSlider->setValue(val); + bcAmplitudeSlider->blockSignals(false); +} +void DeicsOnzeGui::updateBcPitchBias(int val) { + bcPitchBiasSpinBox->blockSignals(true); + bcPitchBiasSpinBox->setValue(val); + bcPitchBiasSpinBox->blockSignals(false); + bcPitchBiasSlider->blockSignals(true); + bcPitchBiasSlider->setValue(val); + bcPitchBiasSlider->blockSignals(false); +} +void DeicsOnzeGui::updateBcEgBias(int val) { + bcEgBiasSpinBox->blockSignals(true); + bcEgBiasSpinBox->setValue(val); + bcEgBiasSpinBox->blockSignals(false); + bcEgBiasSlider->blockSignals(true); + bcEgBiasSlider->setValue(val); + bcEgBiasSlider->blockSignals(false); +} +void DeicsOnzeGui::updateAtPitch(int val) { + atPitchSpinBox->blockSignals(true); + atPitchSpinBox->setValue(val); + atPitchSpinBox->blockSignals(false); + atPitchSlider->blockSignals(true); + atPitchSlider->setValue(val); + atPitchSlider->blockSignals(false); +} +void DeicsOnzeGui::updateAtAmplitude(int val) { + atAmplitudeSpinBox->blockSignals(true); + atAmplitudeSpinBox->setValue(val); + atAmplitudeSpinBox->blockSignals(false); + atAmplitudeSlider->blockSignals(true); + atAmplitudeSlider->setValue(val); + atAmplitudeSlider->blockSignals(false); +} +void DeicsOnzeGui::updateAtPitchBias(int val) { + atPitchBiasSpinBox->blockSignals(true); + atPitchBiasSpinBox->setValue(val); + atPitchBiasSpinBox->blockSignals(false); + atPitchBiasSlider->blockSignals(true); + atPitchBiasSlider->setValue(val); + atPitchBiasSlider->blockSignals(false); +} +void DeicsOnzeGui::updateAtEgBias(int val) { + atEgBiasSpinBox->blockSignals(true); + atEgBiasSpinBox->setValue(val); + atEgBiasSpinBox->blockSignals(false); + atEgBiasSlider->blockSignals(true); + atEgBiasSlider->setValue(val); + atEgBiasSlider->blockSignals(false); +} +//void DeicsOnzeGui::updateReverbRate(int val) { + //reverbSpinBox->blockSignals(true); + //reverbSpinBox->setValue(val); + //reverbSpinBox->blockSignals(false); + //reverbSlider->blockSignals(true); + //reverbSlider->setValue(val); + //reverbSlider->blockSignals(false); +//} +//Envelope +void DeicsOnzeGui::updateAR(int op, int val) { + Eg* _eg=&(_deicsOnze->_preset[_currentChannel]->eg[op]); + envelopeGraph[op]->env2Points(val, _eg->d1r, _eg->d1l, _eg->d2r, _eg->rr); + envelopeGraph[op]->updateEnv(); + switch(op) { + case 0: + AR1SpinBox->blockSignals(true); + AR1SpinBox->setValue(val); + AR1SpinBox->blockSignals(false); + break; + case 1: + AR2SpinBox->blockSignals(true); + AR2SpinBox->setValue(val); + AR2SpinBox->blockSignals(false); + break; + case 2: + AR3SpinBox->blockSignals(true); + AR3SpinBox->setValue(val); + AR3SpinBox->blockSignals(false); + break; + case 3: + AR4SpinBox->blockSignals(true); + AR4SpinBox->setValue(val); + AR4SpinBox->blockSignals(false); + break; + default: printf("DeicsOnzeGui::updateAR : Error switch\n"); + } +} + +void DeicsOnzeGui::updateD1R(int op, int val) { + Eg* _eg=&(_deicsOnze->_preset[_currentChannel]->eg[op]); + envelopeGraph[op]->env2Points(_eg->ar, val, _eg->d1l, _eg->d2r, _eg->rr); + envelopeGraph[op]->updateEnv(); + switch(op) { + case 0: + D1R1SpinBox->blockSignals(true); + D1R1SpinBox->setValue(val); + D1R1SpinBox->blockSignals(false); + break; + case 1: + D1R2SpinBox->blockSignals(true); + D1R2SpinBox->setValue(val); + D1R2SpinBox->blockSignals(false); + break; + case 2: + D1R3SpinBox->blockSignals(true); + D1R3SpinBox->setValue(val); + D1R3SpinBox->blockSignals(false); + break; + case 3: + D1R4SpinBox->blockSignals(true); + D1R4SpinBox->setValue(val); + D1R4SpinBox->blockSignals(false); + break; + default: printf("DeicsOnzeGui::updateD1R : Error switch\n"); + } +} +void DeicsOnzeGui::updateD2R(int op, int val) { + Eg* _eg=&(_deicsOnze->_preset[_currentChannel]->eg[op]); + envelopeGraph[op]->env2Points(_eg->ar, _eg->d1r, _eg->d1l, val, _eg->rr); + envelopeGraph[op]->updateEnv(); + switch(op) { + case 0: + D2R1SpinBox->blockSignals(true); + D2R1SpinBox->setValue(val); + D2R1SpinBox->blockSignals(false); + break; + case 1: + D2R2SpinBox->blockSignals(true); + D2R2SpinBox->setValue(val); + D2R2SpinBox->blockSignals(false); + break; + case 2: + D2R3SpinBox->blockSignals(true); + D2R3SpinBox->setValue(val); + D2R3SpinBox->blockSignals(false); + break; + case 3: + D2R4SpinBox->blockSignals(true); + D2R4SpinBox->setValue(val); + D2R4SpinBox->blockSignals(false); + break; + default: printf("DeicsOnzeGui::updateD2R : Error switch\n"); + } +} +void DeicsOnzeGui::updateRR(int op, int val) { + Eg* _eg=&(_deicsOnze->_preset[_currentChannel]->eg[op]); + envelopeGraph[op]->env2Points(_eg->ar, _eg->d1r, _eg->d1l, _eg->d2r, val); + envelopeGraph[op]->updateEnv(); + switch(op) { + case 0: + RR1SpinBox->blockSignals(true); + RR1SpinBox->setValue(val); + RR1SpinBox->blockSignals(false); + break; + case 1: + RR2SpinBox->blockSignals(true); + RR2SpinBox->setValue(val); + RR2SpinBox->blockSignals(false); + break; + case 2: + RR3SpinBox->blockSignals(true); + RR3SpinBox->setValue(val); + RR3SpinBox->blockSignals(false); + break; + case 3: + RR4SpinBox->blockSignals(true); + RR4SpinBox->setValue(val); + RR4SpinBox->blockSignals(false); + break; + default: printf("DeicsOnzeGui::updateRR : Error switch\n"); + } +} +void DeicsOnzeGui::updateD1L(int op, int val) { + Eg* _eg=&(_deicsOnze->_preset[_currentChannel]->eg[op]); + envelopeGraph[op]->env2Points(_eg->ar, _eg->d1r, val, _eg->d2r, _eg->rr); + envelopeGraph[op]->updateEnv(); + switch(op) { + case 0: + D1L1SpinBox->blockSignals(true); + D1L1SpinBox->setValue(val); + D1L1SpinBox->blockSignals(false); + break; + case 1: + D1L2SpinBox->blockSignals(true); + D1L2SpinBox->setValue(val); + D1L2SpinBox->blockSignals(false); + break; + case 2: + D1L3SpinBox->blockSignals(true); + D1L3SpinBox->setValue(val); + D1L3SpinBox->blockSignals(false); + break; + case 3: + D1L4SpinBox->blockSignals(true); + D1L4SpinBox->setValue(val); + D1L4SpinBox->blockSignals(false); + break; + default: printf("DeicsOnzeGui::updateD1L : Error switch\n"); + } +} +void DeicsOnzeGui::updateLS(int op, int val) { + switch(op) { + case 0: + LS1Slider->blockSignals(true); + LS1Slider->setValue(val); + LS1Slider->blockSignals(false); + LS1SpinBox->blockSignals(true); + LS1SpinBox->setValue(val); + LS1SpinBox->blockSignals(false); + break; + case 1: + LS2Slider->blockSignals(true); + LS2Slider->setValue(val); + LS2Slider->blockSignals(false); + LS2SpinBox->blockSignals(true); + LS2SpinBox->setValue(val); + LS2SpinBox->blockSignals(false); + break; + case 2: + LS3Slider->blockSignals(true); + LS3Slider->setValue(val); + LS3Slider->blockSignals(false); + LS3SpinBox->blockSignals(true); + LS3SpinBox->setValue(val); + LS3SpinBox->blockSignals(false); + break; + case 3: + LS4Slider->blockSignals(true); + LS4Slider->setValue(val); + LS4Slider->blockSignals(false); + LS4SpinBox->blockSignals(true); + LS4SpinBox->setValue(val); + LS4SpinBox->blockSignals(false); + break; + default: printf("DeicsOnzeGui::updateLS : Error switch\n"); + } +} +void DeicsOnzeGui::updateRS(int op, int val) { + switch(op) { + case 0: + RS1Slider->blockSignals(true); + RS1Slider->setValue(val); + RS1Slider->blockSignals(false); + RS1SpinBox->blockSignals(true); + RS1SpinBox->setValue(val); + RS1SpinBox->blockSignals(false); + break; + case 1: + RS2Slider->blockSignals(true); + RS2Slider->setValue(val); + RS2Slider->blockSignals(false); + RS2SpinBox->blockSignals(true); + RS2SpinBox->setValue(val); + RS2SpinBox->blockSignals(false); + break; + case 2: + RS3Slider->blockSignals(true); + RS3Slider->setValue(val); + RS3Slider->blockSignals(false); + RS3SpinBox->blockSignals(true); + RS3SpinBox->setValue(val); + RS3SpinBox->blockSignals(false); + break; + case 3: + RS4Slider->blockSignals(true); + RS4Slider->setValue(val); + RS4Slider->blockSignals(false); + RS4SpinBox->blockSignals(true); + RS4SpinBox->setValue(val); + RS4SpinBox->blockSignals(false); + break; + default: printf("DeicsOnzeGui::updateRS : Error switch\n"); + } +} +void DeicsOnzeGui::updateEBS(int op, int val) { + switch(op) { + case 0: + EBS1Slider->blockSignals(true); + EBS1Slider->setValue(val); + EBS1Slider->blockSignals(false); + EBS1SpinBox->blockSignals(true); + EBS1SpinBox->setValue(val); + EBS1SpinBox->blockSignals(false); + break; + case 1: + EBS2Slider->blockSignals(true); + EBS2Slider->setValue(val); + EBS2Slider->blockSignals(false); + EBS2SpinBox->blockSignals(true); + EBS2SpinBox->setValue(val); + EBS2SpinBox->blockSignals(false); + break; + case 2: + EBS3Slider->blockSignals(true); + EBS3Slider->setValue(val); + EBS3Slider->blockSignals(false); + EBS3SpinBox->blockSignals(true); + EBS3SpinBox->setValue(val); + EBS3SpinBox->blockSignals(false); + break; + case 3: + EBS4Slider->blockSignals(true); + EBS4Slider->setValue(val); + EBS4Slider->blockSignals(false); + EBS4SpinBox->blockSignals(true); + EBS4SpinBox->setValue(val); + EBS4SpinBox->blockSignals(false); + break; + default: printf("DeicsOnzeGui::updateEBS : Error switch\n"); + } +} +void DeicsOnzeGui::updateAME(int op, bool val) { + switch(op) { + case 0: + AME1CheckBox->blockSignals(true); + AME1CheckBox->setChecked(val); + AME1CheckBox->blockSignals(false); + break; + case 1: + AME2CheckBox->blockSignals(true); + AME2CheckBox->setChecked(val); + AME2CheckBox->blockSignals(false); + break; + case 2: + AME3CheckBox->blockSignals(true); + AME3CheckBox->setChecked(val); + AME3CheckBox->blockSignals(false); + break; + case 3: + AME4CheckBox->blockSignals(true); + AME4CheckBox->setChecked(val); + AME4CheckBox->blockSignals(false); + break; + default: printf("DeicsOnzeGui::updateAME : Error switch\n"); + } +} +void DeicsOnzeGui::updateKVS(int op, int val) { + switch(op) { + case 0: + KVS1Slider->blockSignals(true); + KVS1Slider->setValue(val); + KVS1Slider->blockSignals(false); + KVS1SpinBox->blockSignals(true); + KVS1SpinBox->setValue(val); + KVS1SpinBox->blockSignals(false); + break; + case 1: + KVS2Slider->blockSignals(true); + KVS2Slider->setValue(val); + KVS2Slider->blockSignals(false); + KVS2SpinBox->blockSignals(true); + KVS2SpinBox->setValue(val); + KVS2SpinBox->blockSignals(false); + break; + case 2: + KVS3Slider->blockSignals(true); + KVS3Slider->setValue(val); + KVS3Slider->blockSignals(false); + KVS3SpinBox->blockSignals(true); + KVS3SpinBox->setValue(val); + KVS3SpinBox->blockSignals(false); + break; + case 3: + KVS4Slider->blockSignals(true); + KVS4Slider->setValue(val); + KVS4Slider->blockSignals(false); + KVS4SpinBox->blockSignals(true); + KVS4SpinBox->setValue(val); + KVS4SpinBox->blockSignals(false); + break; + default: printf("DeicsOnzeGui::updateKVS : Error switch\n"); + } +} +void DeicsOnzeGui::updateOUT(int op, int val) { + switch(op) { + case 0: + OUT1Slider->blockSignals(true); + OUT1Slider->setValue(val); + OUT1Slider->blockSignals(false); + OUT1SpinBox->blockSignals(true); + OUT1SpinBox->setValue(val); + OUT1SpinBox->blockSignals(false); + break; + case 1: + OUT2Slider->blockSignals(true); + OUT2Slider->setValue(val); + OUT2Slider->blockSignals(false); + OUT2SpinBox->blockSignals(true); + OUT2SpinBox->setValue(val); + OUT2SpinBox->blockSignals(false); + break; + case 2: + OUT3Slider->blockSignals(true); + OUT3Slider->setValue(val); + OUT3Slider->blockSignals(false); + OUT3SpinBox->blockSignals(true); + OUT3SpinBox->setValue(val); + OUT3SpinBox->blockSignals(false); + break; + case 3: + OUT4Slider->blockSignals(true); + OUT4Slider->setValue(val); + OUT4Slider->blockSignals(false); + OUT4SpinBox->blockSignals(true); + OUT4SpinBox->setValue(val); + OUT4SpinBox->blockSignals(false); + break; + default: printf("DeicsOnzeGui::updateOUT : Error switch\n"); + } +} +void DeicsOnzeGui::updateRATIO(int op, int val) { + switch(op) { + case 0: + CoarseRatio1SpinBox->blockSignals(true); + CoarseRatio1SpinBox->setValue(val/100); + CoarseRatio1SpinBox->blockSignals(false); + FineRatio1SpinBox->blockSignals(true); + FineRatio1SpinBox->setValue(val%100); + FineRatio1SpinBox->blockSignals(false); + break; + case 1: + CoarseRatio2SpinBox->blockSignals(true); + CoarseRatio2SpinBox->setValue(val/100); + CoarseRatio2SpinBox->blockSignals(false); + FineRatio2SpinBox->blockSignals(true); + FineRatio2SpinBox->setValue(val%100); + FineRatio2SpinBox->blockSignals(false); + break; + case 2: + CoarseRatio3SpinBox->blockSignals(true); + CoarseRatio3SpinBox->setValue(val/100); + CoarseRatio3SpinBox->blockSignals(false); + FineRatio3SpinBox->blockSignals(true); + FineRatio3SpinBox->setValue(val%100); + FineRatio3SpinBox->blockSignals(false); + break; + case 3: + CoarseRatio4SpinBox->blockSignals(true); + CoarseRatio4SpinBox->setValue(val/100); + CoarseRatio4SpinBox->blockSignals(false); + FineRatio4SpinBox->blockSignals(true); + FineRatio4SpinBox->setValue(val%100); + FineRatio4SpinBox->blockSignals(false); + break; + default: printf("DeicsOnzeGui::updateRATIO : Error switch\n"); + } +} +void DeicsOnzeGui::updateDET(int op, int val) { + switch(op) { + case 0: + DET1Slider->blockSignals(true); + DET1Slider->setValue(val); + DET1Slider->blockSignals(false); + DET1SpinBox->blockSignals(true); + DET1SpinBox->setValue(val); + DET1SpinBox->blockSignals(false); + break; + case 1: + DET2Slider->blockSignals(true); + DET2Slider->setValue(val); + DET2Slider->blockSignals(false); + DET2SpinBox->blockSignals(true); + DET2SpinBox->setValue(val); + DET2SpinBox->blockSignals(false); + break; + case 2: + DET3Slider->blockSignals(true); + DET3Slider->setValue(val); + DET3Slider->blockSignals(false); + DET3SpinBox->blockSignals(true); + DET3SpinBox->setValue(val); + DET3SpinBox->blockSignals(false); + break; + case 3: + DET4Slider->blockSignals(true); + DET4Slider->setValue(val); + DET4Slider->blockSignals(false); + DET4SpinBox->blockSignals(true); + DET4SpinBox->setValue(val); + DET4SpinBox->blockSignals(false); + break; + default: printf("DeicsOnzeGui::updateDET : Error switch\n"); + } +} +void DeicsOnzeGui::updateALG(int val) { + algorithmComboBox->blockSignals(true); + algorithmComboBox->setCurrentIndex(val); + algorithmComboBox->blockSignals(false); +} +void DeicsOnzeGui::updateFEEDBACK(int val) { + feedbackSlider->blockSignals(true); + feedbackSlider->setValue(val); + feedbackSlider->blockSignals(false); + feedbackSpinBox->blockSignals(true); + feedbackSpinBox->setValue(val); + feedbackSpinBox->blockSignals(false); +} +void DeicsOnzeGui::updateSPEED(int val) { + LFOSpeedSlider->blockSignals(true); + LFOSpeedSlider->setValue(val); + LFOSpeedSlider->blockSignals(false); + LFOSpeedSpinBox->blockSignals(true); + LFOSpeedSpinBox->setValue(val); + LFOSpeedSpinBox->blockSignals(false); +} +void DeicsOnzeGui::updateDELAY(int val) { + LFODelaySlider->blockSignals(true); + LFODelaySlider->setValue(val); + LFODelaySlider->blockSignals(false); + LFODelaySpinBox->blockSignals(true); + LFODelaySpinBox->setValue(val); + LFODelaySpinBox->blockSignals(false); +} +void DeicsOnzeGui::updatePMODDEPTH(int val) { + PModDepthSlider->blockSignals(true); + PModDepthSlider->setValue(val); + PModDepthSlider->blockSignals(false); + PModDepthSpinBox->blockSignals(true); + PModDepthSpinBox->setValue(val); + PModDepthSpinBox->blockSignals(false); +} +void DeicsOnzeGui::updateAMODDEPTH(int val) { + AModDepthSlider->blockSignals(true); + AModDepthSlider->setValue(val); + AModDepthSlider->blockSignals(false); + AModDepthSpinBox->blockSignals(true); + AModDepthSpinBox->setValue(val); + AModDepthSpinBox->blockSignals(false); +} +void DeicsOnzeGui::updateSYNC(bool val) { + LFOSyncCheckBox->blockSignals(true); + LFOSyncCheckBox->setChecked(val); + LFOSyncCheckBox->blockSignals(false); +} +void DeicsOnzeGui::updateWAVE(int val) { + LFOWaveComboBox->blockSignals(true); + LFOWaveComboBox->setCurrentIndex(val); + LFOWaveComboBox->blockSignals(false); +} +void DeicsOnzeGui::updatePMODSENS(int val) { + PModSensSlider->blockSignals(true); + PModSensSlider->setValue(val); + PModSensSlider->blockSignals(false); + PModSensSpinBox->blockSignals(true); + PModSensSpinBox->setValue(val); + PModSensSpinBox->blockSignals(false); +} +void DeicsOnzeGui::updateAMS(int val) { + AModSensSlider->blockSignals(true); + AModSensSlider->setValue(val); + AModSensSlider->blockSignals(false); + AModSensSpinBox->blockSignals(true); + AModSensSpinBox->setValue(val); + AModSensSpinBox->blockSignals(false); +} +void DeicsOnzeGui::updateTRANSPOSE(int val) { + transposeSlider->blockSignals(true); + transposeSlider->setValue(val); + transposeSlider->blockSignals(false); + transposeSpinBox->blockSignals(true); + transposeSpinBox->setValue(val); + transposeSpinBox->blockSignals(false); +} +void DeicsOnzeGui::updatePOLYMODE(int val) { + polyMonoComboBox->blockSignals(true); + polyMonoComboBox->setCurrentIndex(val); + polyMonoComboBox->blockSignals(false); +} +void DeicsOnzeGui::updatePBENDRANGE(int val) { + pitchBendRangeSlider->blockSignals(true); + pitchBendRangeSlider->setValue(val); + pitchBendRangeSlider->blockSignals(false); + pitchBendRangeSpinBox->blockSignals(true); + pitchBendRangeSpinBox->setValue(val); + pitchBendRangeSpinBox->blockSignals(false); +} +void DeicsOnzeGui::updatePORTAMODE(int val) { + PortFingerFullComboBox->blockSignals(true); + PortFingerFullComboBox->setCurrentIndex(val); + PortFingerFullComboBox->blockSignals(false); +} +void DeicsOnzeGui::updatePORTATIME(int val) { + PortamentoTimeSlider->blockSignals(true); + PortamentoTimeSlider->setValue(val); + PortamentoTimeSlider->blockSignals(false); + PortamentoTimeSpinBox->blockSignals(true); + PortamentoTimeSpinBox->setValue(val); + PortamentoTimeSpinBox->blockSignals(false); +} +void DeicsOnzeGui::updateFIX(int op, bool val) { + switch(op) { + case 0: + Fix1CheckBox->blockSignals(true); + Fix1CheckBox->setChecked(val); + Fix1CheckBox->blockSignals(false); + FineRatio1SpinBox->blockSignals(true); + FineRatio1SpinBox->setEnabled(!val); + FineRatio1SpinBox->blockSignals(false); + CoarseRatio1SpinBox->blockSignals(true); + CoarseRatio1SpinBox->setEnabled(!val); + CoarseRatio1SpinBox->blockSignals(false); + break; + case 1: + Fix2CheckBox->blockSignals(true); + Fix2CheckBox->setChecked(val); + Fix2CheckBox->blockSignals(false); + FineRatio2SpinBox->blockSignals(true); + FineRatio2SpinBox->setEnabled(!val); + FineRatio2SpinBox->blockSignals(false); + CoarseRatio2SpinBox->blockSignals(true); + CoarseRatio2SpinBox->setEnabled(!val); + CoarseRatio2SpinBox->blockSignals(false); + break; + case 2: + Fix3CheckBox->blockSignals(true); + Fix3CheckBox->setChecked(val); + Fix3CheckBox->blockSignals(false); + FineRatio3SpinBox->blockSignals(true); + FineRatio3SpinBox->setEnabled(!val); + FineRatio3SpinBox->blockSignals(false); + CoarseRatio3SpinBox->blockSignals(true); + CoarseRatio3SpinBox->setEnabled(!val); + CoarseRatio3SpinBox->blockSignals(false); + break; + case 3: + Fix4CheckBox->blockSignals(true); + Fix4CheckBox->setChecked(val); + Fix4CheckBox->blockSignals(false); + FineRatio4SpinBox->blockSignals(true); + FineRatio4SpinBox->setEnabled(!val); + FineRatio4SpinBox->blockSignals(false); + CoarseRatio4SpinBox->blockSignals(true); + CoarseRatio4SpinBox->setEnabled(!val); + CoarseRatio4SpinBox->blockSignals(false); + break; + default: printf("DeicsOnzeGui::updateFIX : error switch\n"); + } +} +void DeicsOnzeGui::updateFIXRANGE(int op, int val) { + switch(op) { + case 0: + Freq1SpinBox->blockSignals(true); + Freq1SpinBox->setValue(val/100); + //val/100 because it is still a coarse display + Freq1SpinBox->blockSignals(false); + break; + case 1: + Freq2SpinBox->blockSignals(true); + Freq2SpinBox->setValue(val/100); + Freq2SpinBox->blockSignals(false); + break; + case 2: + Freq3SpinBox->blockSignals(true); + Freq3SpinBox->setValue(val/100); + Freq3SpinBox->blockSignals(false); + break; + case 3: + Freq4SpinBox->blockSignals(true); + Freq4SpinBox->setValue(val/100); + Freq4SpinBox->blockSignals(false); + break; + default: printf("DeicsOnzeGui::updateFIXRANGE : error switch\n"); + } +} +void DeicsOnzeGui::updateOSW(int op, int val) { + switch(op) { + case 0: + WaveForm1ComboBox->blockSignals(true); + WaveForm1ComboBox->setCurrentIndex(val); + WaveForm1ComboBox->blockSignals(false); + break; + case 1: + WaveForm2ComboBox->blockSignals(true); + WaveForm2ComboBox->setCurrentIndex(val); + WaveForm2ComboBox->blockSignals(false); + break; + case 2: + WaveForm3ComboBox->blockSignals(true); + WaveForm3ComboBox->setCurrentIndex(val); + WaveForm3ComboBox->blockSignals(false); + break; + case 3: + WaveForm4ComboBox->blockSignals(true); + WaveForm4ComboBox->setCurrentIndex(val); + WaveForm4ComboBox->blockSignals(false); + break; + default: printf("DeicsOnzeGui::updateOSW : Error switch\n"); + } +} +void DeicsOnzeGui::updateSHFT(int op, int val) { + switch(op) { + case 0: + EGS1ComboBox->blockSignals(true); + EGS1ComboBox->setCurrentIndex(val); + EGS1ComboBox->blockSignals(false); + break; + case 1: + EGS2ComboBox->blockSignals(true); + EGS2ComboBox->setCurrentIndex(val); + EGS2ComboBox->blockSignals(false); + break; + case 2: + EGS3ComboBox->blockSignals(true); + EGS3ComboBox->setCurrentIndex(val); + EGS3ComboBox->blockSignals(false); + break; + case 3: + EGS4ComboBox->blockSignals(true); + EGS4ComboBox->setCurrentIndex(val); + EGS4ComboBox->blockSignals(false); + break; + default: printf("DeicsOnzeGui::updateSHFT : Error switch\n"); + } +} +void DeicsOnzeGui::updateChannelDetune(int val) { + updateChannelDetuneKnob(val); + //updateChannelDetuneSlider(val); +} +void DeicsOnzeGui::updateChannelDetuneKnob(int val) { + detuneKnob->blockSignals(true); + detuneKnob->setValue((((double)val)/((double)MAXCHANNELDETUNE))/2.0+0.5); + detuneKnob->blockSignals(false); +} +//void DeicsOnzeGui::updateChannelDetuneSlider(int val) { + //channelDetuneSlider->blockSignals(true); + //channelDetuneSlider->setValue(val); + //channelDetuneSlider->blockSignals(false); + //channelDetuneSpinBox->blockSignals(true); + //channelDetuneSpinBox->setValue(val); + //channelDetuneSpinBox->blockSignals(false); +//} +void DeicsOnzeGui::updateChannelVolume(int val) { + channelVolumeKnob->blockSignals(true); + channelVolumeKnob->setValue(((double)val)/(double)MAXCHANNELVOLUME); + channelVolumeKnob->blockSignals(false); +} +void DeicsOnzeGui::updateCategoryName(QString cn, bool enable) { + categoryLineEdit->setEnabled(enable); + categoryLineEdit->blockSignals(true); + categoryLineEdit->setText(cn); + categoryLineEdit->blockSignals(false); +} +void DeicsOnzeGui::updateSubcategoryName(QString sn, bool enable) { + subcategoryLineEdit->setEnabled(enable); + subcategoryLineEdit->blockSignals(true); + subcategoryLineEdit->setText(sn); + subcategoryLineEdit->blockSignals(false); +} +void DeicsOnzeGui::updatePresetName(QString pn) { + //presetNameLineEdit->blockSignals(true); + //presetNameLineEdit->setText(pn); + //presetNameLineEdit->blockSignals(false); + //presetNameLabel->setText(pn); + presetLineEdit->blockSignals(true); + presetLineEdit->setText(pn); + presetLineEdit->blockSignals(false); +} +void DeicsOnzeGui::updatePresetName(QString pn, bool enable) { + presetLineEdit->setEnabled(enable); + //presetNameLineEdit->setEnabled(enable); + updatePresetName(pn); +} +void DeicsOnzeGui::updateHBank(int n, bool enable) { + hbankSpinBox->setEnabled(enable); + hbankSpinBox->blockSignals(true); + hbankSpinBox->setValue(n+1); + hbankSpinBox->blockSignals(false); +} +void DeicsOnzeGui::updateLBank(int n, bool enable) { + lbankSpinBox->setEnabled(enable); + lbankSpinBox->blockSignals(true); + lbankSpinBox->setValue(n+1); + lbankSpinBox->blockSignals(false); +} +void DeicsOnzeGui::updateProg(int n, bool enable) { + progSpinBox->setEnabled(enable); + progSpinBox->blockSignals(true); + progSpinBox->setValue(n+1); + progSpinBox->blockSignals(false); +} +void DeicsOnzeGui::updateInitSetCheckBox(bool b) { + initSetCheckBox->blockSignals(true); + initSetCheckBox->setChecked(b); + initSetCheckBox->blockSignals(false); + initSetPathLineEdit->setEnabled(b); + initSetBrowsePushButton-> setEnabled(b); +} +void DeicsOnzeGui::updateInitSetPath(QString s) { + initSetPathLineEdit->blockSignals(true); + initSetPathLineEdit->setText(s); + initSetPathLineEdit->blockSignals(false); +} +void DeicsOnzeGui::updateBackgroundPixCheckBox(bool b) { + imageCheckBox->blockSignals(true); + imageCheckBox->setChecked(b); + imageCheckBox->blockSignals(false); + imagePathLineEdit->setEnabled(b); + imageBrowsePushButton-> setEnabled(b); +} +void DeicsOnzeGui::updateBackgroundPixPath(QString s) { + imagePathLineEdit->blockSignals(true); + imagePathLineEdit->setText(s); + imagePathLineEdit->blockSignals(false); +} +void DeicsOnzeGui::applyBackgroundPix() { + QPalette p = this->palette(); + QPixmap pixmap = QPixmap(imagePathLineEdit->text()); + p.setBrush((this)->backgroundRole(), QBrush(pixmap)); + (this)->setPalette(p); +} +void DeicsOnzeGui::updateChannelPan(int val) { + channelPanKnob->blockSignals(true); + channelPanKnob->setValue((((double)val/(double)MAXCHANNELPAN)+1.0)/2.0); + channelPanKnob->blockSignals(false); + //channelPanSpinBox->blockSignals(true); + //channelPanSpinBox->setValue(val); + //channelPanSpinBox->blockSignals(false); +} +void DeicsOnzeGui::updateBrightness(int val) { + brightnessKnob->blockSignals(true); + brightnessKnob->setValue((double)val/((double)MAXFINEBRIGHTNESS)); + brightnessKnob->blockSignals(false); +} +void DeicsOnzeGui::updateModulation(int val) { + modulationKnob->blockSignals(true); + modulationKnob->setValue((double)val/((double)MAXMODULATION)); + modulationKnob->blockSignals(false); +} +void DeicsOnzeGui::updateAttack(int val) { + attackKnob->blockSignals(true); + attackKnob->setValue((double)val/((double)MAXATTACK)); + attackKnob->blockSignals(false); +} +void DeicsOnzeGui::updateRelease(int val) { + releaseKnob->blockSignals(true); + releaseKnob->setValue((double)val/((double)MAXRELEASE)); + releaseKnob->blockSignals(false); +} +void DeicsOnzeGui::updateQuickEdit() { + updateChannelVolume(_deicsOnze->getChannelVol(_currentChannel)); + updateChannelPan(_deicsOnze->getChannelPan(_currentChannel)); + updateBrightness(_deicsOnze->getChannelBrightness(_currentChannel)); + updateModulation(_deicsOnze->getChannelModulation(_currentChannel)); + updateChannelDetune(_deicsOnze->getChannelDetune(_currentChannel)); + updateAttack(_deicsOnze->getChannelAttack(_currentChannel)); + updateRelease(_deicsOnze->getChannelRelease(_currentChannel)); + updateChannelReverb(_deicsOnze->getChannelReverb(_currentChannel)); + updateChannelChorus(_deicsOnze->getChannelChorus(_currentChannel)); + updateChannelDelay(_deicsOnze->getChannelDelay(_currentChannel)); +} +//-------------------------------------------------------------- +// updatePreset +//-------------------------------------------------------------- +void DeicsOnzeGui::updatePreset(Preset* p) { + //TODO : why updateMasterVolume + //updateMasterVolume(_deicsOnze->getMasterVol()); //to change + updatePresetName(p->name.c_str()); + updateFEEDBACK(p->feedback); + updateWAVE((int)p->lfo.wave); + updateSPEED(p->lfo.speed); + updateDELAY(p->lfo.delay); + updatePMODDEPTH(p->lfo.pModDepth); + updatePMODSENS(p->sensitivity.pitch); + updateAMODDEPTH(p->lfo.aModDepth); + updateAMS(p->sensitivity.amplitude); + updateTRANSPOSE(p->function.transpose); + updateALG((int)p->algorithm); + updatePBENDRANGE(p->function.pBendRange); + //pitch envelope + PitchEg* pe=&(p->pitchEg); + pitchEnvelopeGraph + ->env2Points(pe->pl1, pe->pl2, pe->pl3, pe->pr1, pe->pr2, pe->pr3); + pitchEnvelopeGraph->updateEnv(); + updatePL1(pe->pl1); + updatePL2(pe->pl2); + updatePL3(pe->pl3); + updatePR1(pe->pr1); + updatePR2(pe->pr2); + updatePR3(pe->pr3); + //function + updateFcVolume(p->function.fcVolume); + updateFcPitch(p->function.fcPitch); + updateFcAmplitude(p->function.fcAmplitude); + updateMwPitch(p->function.mwPitch); + updateMwAmplitude(p->function.mwAmplitude); + updateBcPitch(p->function.bcPitch); + updateBcAmplitude(p->function.bcAmplitude); + updateBcPitchBias(p->function.bcPitchBias); + updateBcEgBias(p->function.bcEgBias); + updateAtPitch(p->function.atPitch); + updateAtAmplitude(p->function.atAmplitude); + updateAtPitchBias(p->function.atPitchBias); + updateAtEgBias(p->function.atEgBias); + //updateReverbRate(p->function.reverbRate); + updatePOLYMODE((int)p->function.mode); + updatePORTAMODE((int)p->function.portamento); + updatePORTATIME((int)p->function.portamentoTime); + for(int k=0; keg[k]); + envelopeGraph[k] + ->env2Points(_eg->ar, _eg->d1r, _eg->d1l, _eg->d2r, _eg->rr); + envelopeGraph[k]->updateEnv(); + updateAR(k, _eg->ar); + updateD1R(k, _eg->d1r); + updateD1L(k, _eg->d1l); + updateD2R(k, _eg->d2r); + updateRR(k, _eg->rr); + //scaling + updateLS(k, p->scaling.level[k]); + updateRS(k, p->scaling.rate[k]); + //Volume + updateOUT(k, p->outLevel[k]); + //Ratio and Frequency + updateRATIO(k, (int)(100*p->frequency[k].ratio)); + updateFIXRANGE(k, (int)(100*p->frequency[k].freq)); + updateFIX(k, p->frequency[k].isFix); + //Sensitivity + updateAME(k, p->sensitivity.ampOn[k]); + updateEBS(k, p->sensitivity.egBias[k]); + updateKVS(k, p->sensitivity.keyVelocity[k]); + //detune + updateDET(k, p->detune[k]); + //Waveform + updateOSW(k, (int)p->oscWave[0]); + } +} +/*void DeicsOnzeGui::updateCurrentChannel() { + updateBrightness(_deicsOnze->_global.channel[_currentChannel].brightness); + updateModulation(_deicsOnze->_global.channel[_currentChannel].modulation); + updateChannelDetune(_deicsOnze->_global.channel[_currentChannel].detune); + updateAttack(_deicsOnze->_global.channel[_currentChannel].attack); + updateRelease(_deicsOnze->_global.channel[_currentChannel].release); + }*/ +void DeicsOnzeGui::updatePreset() { + updatePreset(_deicsOnze->_preset[_currentChannel]); +} + +void DeicsOnzeGui::updateSelectPreset(int hbank, int lbank, int prog) { + //QTreeWidgetItem* cat = categoryListView->currentItem(); + //QTreeWidgetItem* sub = subcategoryListView->currentItem(); + QTreeWidgetItem* pre = presetListView->currentItem(); + //select category, subcategory, preset + //category + QList qlcat = + categoryListView->findItems(num3Digits(hbank+1), Qt::MatchExactly); + QTreeWidgetItem* qcat = qlcat.empty()? NULL:qlcat.at(0); + //if the category is different than the last one then select the new one + //if(!cat || !qcat || qcat!= cat) { + if(qcat) { + categoryListView->setItemSelected(qcat, true); + categoryListView->setCurrentItem(qcat); + categoryListView->scrollToItem(qcat); + setEnabledPreset(true); + } + else { + updateCategoryName(QString("NONE"), false); + updateHBank(hbank, false); + categoryListView->clearSelection(); + subcategoryListView->clear(); + setEnabledPreset(false); + } + //} + //subcategory + //if(cat) { + QList qlsub = + subcategoryListView->findItems(num3Digits(lbank+1), Qt::MatchExactly); + QTreeWidgetItem* qsub = qlsub.empty()? NULL:qlsub.at(0); + // if(!sub || qsub!=sub) { + if(qsub) { + subcategoryListView->setItemSelected(qsub, true); + subcategoryListView->setCurrentItem(qsub); + subcategoryListView->scrollToItem(qsub); + setEnabledPreset(true); + } + else { + updateSubcategoryName(QString("NONE"), false); + updateLBank(lbank, false); + subcategoryListView->clearSelection(); + presetListView->clear(); + setEnabledPreset(false); + } + // } + //} + //else { + // updateSubcategoryName(QString("NONE"), false); + // updateLBank(lbank, false); + // subcategoryListView->clearSelection(); + // presetListView->clear(); + // setEnabledPreset(false); + //} + //preset + //if(sub) { + QList qlpre = + presetListView->findItems(num3Digits(prog+1), Qt::MatchExactly); + QTreeWidgetItem* qpre = qlpre.empty()? NULL:qlpre.at(0); + if(qpre) { + presetListView->blockSignals(true); + presetListView->setItemSelected(qpre, true); + presetListView->setCurrentItem(qpre); + presetListView->blockSignals(false); + presetListView->scrollToItem(qpre); + updatePresetName(qpre->text(1), true); + updateProg(prog, true); + pre=(QTreePreset*) qpre; + setEnabledPreset(true); + } + else { + updatePresetName(QString("INITVOICE"), false); + updateProg(prog, false); + presetListView->clearSelection(); + setEnabledPreset(false); + } + //} + //else { + // updatePresetName(QString("INITVOICE"), false); + // updateProg(prog, false); + // presetListView->clearSelection(); + // setEnabledPreset(false); + //} +} + diff --git a/attic/muse_qt4_evolution/synti/deicsonze/deicsonzegui.h b/attic/muse_qt4_evolution/synti/deicsonze/deicsonzegui.h new file mode 100644 index 00000000..236b4a9f --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/deicsonzegui.h @@ -0,0 +1,562 @@ +//=========================================================================== +// +// DeicsOnze an emulator of the YAMAHA DX11 synthesizer +// +// Version 0.5.5 +// +// deicsonzegui.h +// +// +// Copyright (c) 2004-2006 Nil Geisweiller +// +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA or point your web browser to http://www.gnu.org. +//=========================================================================== + +#ifndef __DEICSONZEGUI_H +#define __DEICSONZEGUI_H + +#include "deicsonze.h" + +#include "deicsonzepreset.h" +#include "ui_deicsonzegui.h" +#include "libsynti/gui.h" +#include "awl/floatentry.h" +#include "awl/slider.h" +#include "awl/checkbox.h" + +using Awl::FloatEntry; +using Awl::Slider; +using Awl::CheckBox; + +//Envelope Gui constants +#define XOFFSET 2 +#define YOFFSET 2 +#define PENWIDTH 2 +#define DOTWIDTH 3 +#define DRAGWIDTH 6 //size of the mousetracking threshold +//pitch envelope constants +#define WALLWIDTH 6 +#define PR1WIDTH (width()/3-9) +#define PR2WIDTH PR1WIDTH +#define PR3WIDTH PR1WIDTH +#define PL1HEIGHT (height()-4) +#define PL2HEIGHT PL1HEIGHT +#define PL3HEIGHT PL1HEIGHT +#define MAXPWIDTH PR1WIDTH+WALLWIDTH+PR2WIDTH+WALLWIDTH+PR3WIDTH+WALLWIDTH+PR1WIDTH +#define MAXPHEIGHT PL1HEIGHT +#define STEPVALUE 10 +//amplitude envelope constants +#define ARWIDTH (width()/4-1) +#define D1RWIDTH ARWIDTH +#define D1LHEIGHT (height()-2) +#define D2RWIDTH ARWIDTH +#define RRWIDTH ARWIDTH +#define MAXWIDTH ARWIDTH+D1RWIDTH+D1RWIDTH+RRWIDTH +#define MAXHEIGHT D1LHEIGHT + +//COLOR +#define TCOLOR QColor(0, 0, 0) //text color +#define BCOLOR QColor(210, 180, 90) //background color +#define ETCOLOR QColor(0, 150, 0) //edit text color +#define EBCOLOR QColor(255, 255, 30) //edit background color + +class DeicsOnze; +class QFramePitchEnvelope; +class QFrameEnvelope; + +class QTreeCategory:public QTreeWidgetItem { + public: + Category* _category; + QTreeCategory(QTreeWidget* p, QString shbank, QString l, Category* c) + :QTreeWidgetItem(p) { + setText(0, shbank); + setText(1, l); + _category=c; + }; +}; + +class QTreeSubcategory:public QTreeWidgetItem { + public: + Subcategory* _subcategory; + QTreeSubcategory(QTreeWidget* p, QString slbank, + QString l, Subcategory* s) + :QTreeWidgetItem(p) { + setText(0, slbank); + setText(1, l); + _subcategory=s; + }; +}; + +class QTreePreset:public QTreeWidgetItem { + public: + Preset* _preset; + QTreePreset(QTreeWidget* pa, QString sprog, QString l, Preset* p) + :QTreeWidgetItem(pa) { + setText(0, sprog); + setText(1, l); + _preset=p; + }; +}; + +//--------------------------------------------------------- +// DeicsOnzeGui +//--------------------------------------------------------- +class DeicsOnzeGui : public QDialog, public Ui::DeicsOnzeGuiBase, public MessGui { + bool _enabledPreset; + + QFramePitchEnvelope* pitchEnvelopeGraph; + QFrameEnvelope* envelopeGraph[NBROP]; + + QWidget* _chorusSuperWidget; + QWidget* _reverbSuperWidget; + std::vector _chorusSliderVector; + std::vector _chorusFloatEntryVector; + std::vector _chorusCheckBoxVector; + std::vector _reverbSliderVector; + std::vector _reverbFloatEntryVector; + std::vector _reverbCheckBoxVector; + + Q_OBJECT + QString lastDir; + private slots: + void readMessage(int); + void setEnabledChannel(bool); + void setChangeChannel(int); + void setPanic(); + void setResCtrl(); + void setNbrVoices(int); + void setSaveOnlyUsed(bool); + void setSaveOnlyUsedComp(bool); + void setSaveConfig(bool); +// void setMidiInCh(int); //to change + void setQuality(const QString&); + void setFilter(bool); + void setFontSize(int); + void saveConfiguration(); + void saveDefaultConfiguration(); + void loadConfiguration(); + void loadConfiguration(QString s); + //load init set + void setIsInitSet(bool); + void setInitSetPath(const QString&); + void setBrowseInitSetPath(); + //load init set + void setIsBackgroundPix(bool); + void setBackgroundPixPath(const QString&); + void setBrowseBackgroundPixPath(); + //FX + void setChorusActiv(bool a); + void setChannelChorus(int c); + void setChorusReturn(int al); + void setSelectChorusPlugin(); + void setReverbCheckBox(double v, int i); + void setChorusCheckBox(double v, int i); + void setReverbActiv(bool a); + void setChannelReverb(int r); + void setReverbReturn(int val); + void setSelectReverbPlugin(); + void setReverbFloatEntry(double v, int i); + void setReverbSlider(double v, int i); + void setChorusFloatEntry(double v, int i); + void setChorusSlider(double v, int i); + //quick edit + void setChannelVolKnob(double val); + void setChannelPan(double val); + void setBrightnessKnob(double val); + void setModulationKnob(double val); + void setDetuneKnob(double val); + void setAttackKnob(double val); + void setReleaseKnob(double val); + //Color + void setRedColor(int); + void setGreenColor(int); + void setBlueColor(int); + void setRGBSliders(QListWidgetItem*); + void setTextColor(const QColor &); + void setBackgroundColor(const QColor &); + void setEditTextColor(const QColor &); + void setEditBackgroundColor(const QColor &); + //New Delete Load Save + void deleteSetDialog(); + void loadSetDialog(); + void saveSetDialog(); + void deleteCategoryDialog(); + void newCategoryDialog(); + void loadCategoryDialog(); + void saveCategoryDialog(); + void deleteSubcategoryDialog(); + void newSubcategoryDialog(); + void loadSubcategoryDialog(); + void saveSubcategoryDialog(); + void newPresetDialog(); + void loadPresetDialog(); + void deletePresetDialog(); + void savePresetDialog(); + //popupMenu + void categoryPopupMenu(const QPoint&); + void subcategoryPopupMenu(const QPoint&); + void presetPopupMenu(const QPoint&); + //Preset and bank + void setPresetName(const QString&); + void setSubcategoryName(const QString&); + void setCategoryName(const QString&); + void setHBank(int); + void setLBank(int); + void setProg(int); + //Global + void setMasterVolKnob(double); + void setMasterVol(int); + void setFeedback(int); + void setLfoWave(int); + void setLfoSpeed(int); + void setLfoDelay(int); + void setLfoPModDepth(int); + void setLfoPitchSens(int); + void setLfoAModDepth(int); + void setLfoAmpSens(int); + void setTranspose(int); + void setChannelDetune(int); + void setAlgorithm(int); + void setPitchBendRange(int); + //Pitch Envelope + void setPL1(int); + void setPL2(int); + void setPL3(int); + void setPR1(int); + void setPR2(int); + void setPR3(int); + //Function + void setFcVolume(int); + void setFcPitch(int); + void setFcAmplitude(int); + void setMwPitch(int); + void setMwAmplitude(int); + void setBcPitch(int); + void setBcAmplitude(int); + void setBcPitchBias(int); + void setBcEgBias(int); + void setAtPitch(int); + void setAtAmplitude(int); + void setAtPitchBias(int); + void setAtEgBias(int); + void setReverbRate(int); + void setPolyMode(int); + void setPortFingerFull(int); + void setPortaTime(int); + //envelope + void setAR1(int val); + void setD1R1(int val); + void setD1L1(int val); + void setD2R1(int val); + void setRR1(int val); + void setAR2(int val); + void setD1R2(int val); + void setD1L2(int val); + void setD2R2(int val); + void setRR2(int val); + void setAR3(int val); + void setD1R3(int val); + void setD1L3(int val); + void setD2R3(int val); + void setRR3(int val); + void setAR4(int val); + void setD1R4(int val); + void setD1L4(int val); + void setD2R4(int val); + void setRR4(int val); + //scaling + void setLS1(int val); + void setRS1(int val); + void setLS2(int val); + void setRS2(int val); + void setLS3(int val); + void setRS3(int val); + void setLS4(int val); + void setRS4(int val); + //vol + void setVol1(int val); + void setVol2(int val); + void setVol3(int val); + void setVol4(int val); + //Ratio and Frequency + void setCoarseRatio1(int val); + void setFineRatio1(int val); + void setFreq1(int val); + void setFix1(bool f); + void setCoarseRatio2(int val); + void setFineRatio2(int val); + void setFreq2(int val); + void setFix2(bool f); + void setCoarseRatio3(int val); + void setFineRatio3(int val); + void setFreq3(int val); + void setFix3(bool f); + void setCoarseRatio4(int val); + void setFineRatio4(int val); + void setFreq4(int val); + void setFix4(bool f); + //Sensitivity + void setAME1(bool val); + void setEBS1(int val); + void setKVS1(int val); + void setAME2(bool val); + void setEBS2(int val); + void setKVS2(int val); + void setAME3(bool val); + void setEBS3(int val); + void setKVS3(int val); + void setAME4(bool val); + void setEBS4(int val); + void setKVS4(int val); + //detune + void setDET1(int val); + void setDET2(int val); + void setDET3(int val); + void setDET4(int val); + //WaveForm + void setWaveForm1(int); + void setWaveForm2(int); + void setWaveForm3(int); + void setWaveForm4(int); + //Delay + void setActivDelay(bool); + void setDelayReturn(int); + void setChannelDelay(int); + //void setDelayTime(int); + void setDelayBPM(double); + void setDelayBeatRatio(double); + //void setDelayFeedback(int); + void setDelayFeedback(double); + //void setDelayPanLFOFreq(int); + void setDelayPanLFOFreq(double); + //void setDelayPanLFODepth(int); + void setDelayPanLFODepth(double); + //category subcategory preset + void setSet(void); //display the set, that is the category list + void setCategory(Category*); + void setCategory(QTreeWidgetItem*); + void setSubcategory(Subcategory*); + void setSubcategory(QTreeWidgetItem*); + void setPreset(QTreeWidgetItem*); + public: + virtual void processEvent(const MidiEvent&); + void updateSelectPreset(int hbank, int lbank, int prog); + //update the gui + void setEnabledPreset(bool b); + void updateChannelCheckBox(bool b); + void updateEnabledChannel(bool e);//put enabled the display concerning channel and preset + void updateChannelEnable(bool e);//update channel enable + void updateMasterVolume(int val); + void updateNbrVoices(int val); + //void updateMidiInCh(int val); //to change + void updateQuality(int val); + void updateFilter(bool f); + void updateFontSize(int fs); + void applyFontSize(int fs); + void updateSaveOnlyUsed(bool); + void updateSaveConfig(bool); + //FX + void updateChorusActiv(bool a); + void updateChannelChorus(int c); + void updateChorusReturn(int r); + void updateReverbActiv(bool a); + void updateChannelReverb(int r); + void updateReverbReturn(int r); + void updateLadspaReverbLineEdit(QString s); + void updateLadspaChorusLineEdit(QString s); + void updateDelayActiv(bool a); + void updateChannelDelay(int r); + void updateDelayReturn(int r); + void updateDelayPanLFOFreq(float plf); + void updateDelayBPM(float dt); + void updateDelayBeatRatio(float dt); + void updateDelayFeedback(float df); + void updateDelayPanLFODepth(float dpd); + void addPluginCheckBox(int index, QString text, bool toggled, + QWidget* parent, QGridLayout* grid, bool isReverb); + void addPluginIntSlider(int index, QString text, double min, double max, + double val, QWidget* parent, QGridLayout* grid, + bool isReverb); + void addPluginSlider(int index, QString text, bool isLog, double min, + double max, double val, QWidget* parent, + QGridLayout* grid, bool isReverb); + void buildGuiReverb(); + void buildGuiChorus(); + void updateReverbSlider(double v, int i); + void updateReverbFloatEntry(double v, int i); + void updateChorusSlider(double v, int i); + void updateChorusFloatEntry(double v, int i); + //update load init set + void updateInitSetCheckBox(bool); + void updateInitSetPath(QString); + //update background pix + void updateBackgroundPixCheckBox(bool); + void updateBackgroundPixPath(QString); + void applyBackgroundPix(); + //update quick edit + void updateChannelPan(int val); + void updateBrightness(int val); + void updateModulation(int val); + void updateAttack(int val); + void updateRelease(int val); + void updateQuickEdit(); + //update pitch envelope + void updatePL1(int val); + void updatePL2(int val); + void updatePL3(int val); + void updatePR1(int val); + void updatePR2(int val); + void updatePR3(int val); + //update function + void updateFcVolume(int val); + void updateFcPitch(int val); + void updateFcAmplitude(int val); + void updateMwPitch(int val); + void updateMwAmplitude(int val); + void updateBcPitch(int val); + void updateBcAmplitude(int val); + void updateBcPitchBias(int val); + void updateBcEgBias(int val); + void updateAtPitch(int val); + void updateAtAmplitude(int val); + void updateAtPitchBias(int val); + void updateAtEgBias(int val); + //void updateReverbRate(int val); + //update envelope + void updateAR(int op, int val); + void updateD1R(int op, int val); + void updateD2R(int op, int val); + void updateRR(int op, int val); + void updateD1L(int op, int val); + //update scale + void updateLS(int op, int val); + void updateRS(int op, int val); + void updateEBS(int op, int val); + void updateAME(int op, bool val); + void updateKVS(int op, int val); + void updateOUT(int op, int val); + void updateRATIO(int op, int val); + void updateDET(int op, int val); + //update global + void updateALG(int val); + void updateFEEDBACK(int val); + void updateSPEED(int val); + void updateDELAY(int val); + void updatePMODDEPTH(int val); + void updateAMODDEPTH(int val); + void updateSYNC(bool val); + void updateWAVE(int val); + void updatePMODSENS(int val); + void updateAMS(int val); + void updateTRANSPOSE(int val); + void updatePOLYMODE(int val); + void updatePBENDRANGE(int val); + void updatePORTAMODE(int val); + void updatePORTATIME(int val); + void updateFIX(int op, bool val); + void updateFIXRANGE(int op, int val); + void updateOSW(int op, int val); + void updateSHFT(int op, int val); + void updateChannelDetune(int val); + void updateChannelDetuneKnob(int val); + //void updateChannelDetuneSlider(int val); + void updateChannelVolume(int val); + void updateCategoryName(QString cn, bool enable); + void updateSubcategoryName(QString sn, bool enable); + void updatePresetName(QString pn, bool enable); + void updatePresetName(QString pn); + void updateHBank(int hbank, bool enable); + void updateLBank(int lbank, bool enable); + void updateProg(int prog, bool enable); + void updatePreset(Preset* p); + void updatePreset(void); //update gui following the current preset + //void updateCurrentChannel(); //update gui channel attributes + QString num3Digits(int); + DeicsOnzeGui(DeicsOnze*); + + int _currentChannel; + + QColor* tColor; //text color + QColor* bColor; //background color + QColor* etColor;//edit text color + QColor* ebColor;//edit background color + QColor* curColor;//current color + + DeicsOnze* _deicsOnze; +}; + +class QFramePitchEnvelope:private QFrame { + QPoint startlinkP1, //first point + P1linkP2, //point linking P1 to P2 + P2linkP3, //point linking P2 to P3 + P3linkEnd; //point linking P3 to End + bool isStartlinkP1Edit; + bool isP1linkP2Edit; + bool isP2linkP3Edit; + bool isP3linkEndEdit; + public: + DeicsOnzeGui* _deicsOnzeGui; + QFramePitchEnvelope(QWidget* parent, DeicsOnzeGui* dog):QFrame(parent){ + _deicsOnzeGui = dog; + isStartlinkP1Edit=false; + isP1linkP2Edit=false; + isP2linkP3Edit=false; + isP3linkEndEdit=false; + }; + void env2Points(int pl1, int pl2, int pl3, int pr1, int pr2, int pr3); + void updateEnv(void) {update();}; + protected: + void paintEvent(QPaintEvent* e); + void mouseMoveEvent(QMouseEvent* e); + void mousePressEvent(QMouseEvent * e); + void mouseReleaseEvent(QMouseEvent * e); +}; + +class QFrameEnvelope:private QFrame { + unsigned char op; //operator number, between 0 and 3 + QPoint startlinkAR, //first point + ARlinkD1, //point linking AR to D1 + D1linkD2, //point linking D1 to D2 + D2linkRR, //point linking D2 to RR + RRlinkEnd; //last point + bool isARlinkD1Edit; + bool isD1linkD2Edit; + bool isD2linkRREdit; + bool isRRlinkEndEdit; + public: + DeicsOnzeGui* _deicsOnzeGui; + QFrameEnvelope(QWidget* parent, DeicsOnzeGui* dog, unsigned char k):QFrame(parent){ + _deicsOnzeGui = dog; + isARlinkD1Edit=false; + isD1linkD2Edit=false; + isD2linkRREdit=false; + isRRlinkEndEdit=false; + op = k; + //setGeometry(XOFFSET, YOFFSET, XOFFSET+MAXWIDTH, MAXHEIGHT); + //setMouseTracking(true); + }; + void env2Points(int ar, int d1r, int d1l, int d2r, int rr); + void updateEnv(void) {update();}; + protected: + void paintEvent(QPaintEvent* e); + void mouseMoveEvent(QMouseEvent* e); + void mousePressEvent(QMouseEvent * e); + void mouseReleaseEvent(QMouseEvent * e); +}; + +#endif /* __DEICSONZEGUI_H */ diff --git a/attic/muse_qt4_evolution/synti/deicsonze/deicsonzegui.ui b/attic/muse_qt4_evolution/synti/deicsonze/deicsonzegui.ui new file mode 100644 index 00000000..6b91cf49 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/deicsonzegui.ui @@ -0,0 +1,10237 @@ + + Nil Geisweiller + DeicsOnzeGuiBase + + + + 0 + 0 + 728 + 568 + + + + DeicsOnze + + + false + + + false + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + + 0 + 0 + + + + ArrowCursor + + + + + + false + + + QTabWidget::Rounded + + + 0 + + + + &Preset + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + false + + + Program numerous + + + 1 + + + 128 + + + + + + + false + + + INITVOICE + + + 12 + + + + + + + Qt::CustomContextMenu + + + false + + + + LBank + + + + + Subcategory + + + + + + + + false + + + Bank numerous + + + 1 + + + 128 + + + + + + + false + + + NONE + + + 12 + + + + + + + false + + + NONE + + + 12 + + + + + + + false + + + Bank numerous + + + 1 + + + 128 + + + + + + + Qt::CustomContextMenu + + + Qt::LeftToRight + + + false + + + QFrame::StyledPanel + + + QFrame::Sunken + + + 1 + + + 0 + + + false + + + true + + + 2 + + + + HBank + + + + + Category + + + + + + + + Qt::CustomContextMenu + + + false + + + + Prog + + + + + Preset + + + + + + + + + Sans Serif + 8 + 50 + false + false + false + false + + + + QFrame::NoFrame + + + QFrame::Plain + + + DeicsOnze v0.5.5 Copyright (c) 2004-2006 Nil Geisweiller. Published under GPL licence. + + + + + + + + &Global + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + Pitch Envelope + + + + 10 + + + 10 + + + 10 + + + 10 + + + 6 + + + 6 + + + + + QFrame::Box + + + QFrame::Sunken + + + PL3 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + PL2 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + PL1 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + PR1 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + PR2 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + PR3 + + + + + + + PointingHandCursor + + + true + + + QFrame::StyledPanel + + + QFrame::Sunken + + + + + + + Pitch modulation depth + + + 99 + + + 2 + + + 50 + + + + + + + Pitch modulation depth + + + 99 + + + 2 + + + 50 + + + + + + + Pitch modulation depth + + + 99 + + + 2 + + + 50 + + + + + + + Pitch modulation depth + + + 99 + + + 3 + + + 0 + + + + + + + Pitch modulation depth + + + 99 + + + 3 + + + 0 + + + + + + + Pitch modulation depth + + + 99 + + + 3 + + + 0 + + + + + + + + + + LFO + + + + 10 + + + 10 + + + 10 + + + 10 + + + 6 + + + 6 + + + + + PointingHandCursor + + + LFO Sync + + + + + + + Pitch modulation sensitivity + + + 7 + + + + + + + PointingHandCursor + + + Pitch Modulation Sensitivity + + + 7 + + + 1 + + + 1 + + + Qt::Horizontal + + + + + + + PointingHandCursor + + + LFO Delay + + + 99 + + + 1 + + + 1 + + + Qt::Horizontal + + + + + + + LFO delay + + + 99 + + + + + + + LFO speed + + + 99 + + + + + + + Amplitude modulation depth + + + 99 + + + + + + + Pitch modulation depth + + + 99 + + + + + + + Amplitude modulation sensitivity + + + 7 + + + + + + + PointingHandCursor + + + Amplitude Modulation Sensitivity + + + 3 + + + 1 + + + 1 + + + Qt::Horizontal + + + + + + + QFrame::Box + + + QFrame::Sunken + + + AMS + + + + + + + PointingHandCursor + + + LFO Waveform + + + + 38 + 16 + + + + + + + + pics/sawUp.png + + + + + + + + pics/square.png + + + + + + + + pics/triangl.png + + + + + + + + pics/SHold.png + + + + + + + + PointingHandCursor + + + Pitch Modulation Depth + + + 99 + + + 1 + + + 1 + + + Qt::Horizontal + + + + + + + QFrame::Box + + + QFrame::Sunken + + + PMD + + + + + + + PointingHandCursor + + + LFO Speed + + + 99 + + + 1 + + + 1 + + + Qt::Horizontal + + + + + + + PointingHandCursor + + + Pitch Modulation Depth + + + 99 + + + 1 + + + 1 + + + Qt::Horizontal + + + + + + + QFrame::Box + + + QFrame::Sunken + + + AMD + + + + + + + QFrame::Box + + + QFrame::Sunken + + + Speed + + + + + + + QFrame::Box + + + QFrame::Sunken + + + Delay + + + + + + + QFrame::Box + + + QFrame::Sunken + + + PMS + + + + + + + + + + true + + + Modulation Matrix + + + + 10 + + + 10 + + + 10 + + + 10 + + + 6 + + + 6 + + + + + PointingHandCursor + + + Modulation Matrix + + + <b>Algorithm 1</b> : <i>Op 1</i> modulated by <i>Op 2</i> modulated by <i>Op 3</i> modulated by <i>Op 4</i><br> +<b>Algorithm 2</b> : <i>Op 1</i> modulated by <i>Op 2</i> modulated by both <i>Op 3</i> and <i>Op 4</i><br> +<b>Algorithm 3</b> : <i>Op 1</i> modulated by both <i>Op 4</i> and <i>Op 2</i> modulated by <i>Op 3</i><br> +<b>Algorithm 4</b> : <i>Op 1</i> modulated by both <i>Op 2</i> and <i>Op 3</i> modulated by <i>Op 4</i><br> +<b>Algorithm 5</b> : (<i>Op 1</i> modulated by <i>Op 2</i>) add to (<i>Op 3</i> modulated by <i>Op 4</i>) <br> +<b>Algorithm 6</b> : addition of the three <i>Op 1, 2, 3</i> all modulated by <i>Op 4</i><br> +<b>Algorithm 7</b> : addition of the three <i>Op 1, 2, 3</i> with <i>Op 3</i> modulated by <i>Op 4</i><br> +<b>Algorithm 8</b> : addition of the four <i>Op 1, 2, 3, 4</i> + + + + 160 + 32 + + + + + + + + pics/algo1.png + + + + + + + + pics/algo3.png + + + + + + + + pics/algo3.png + + + + + + + + pics/algo4.png + + + + + + + + pics/algo5.png + + + + + + + + pics/algo6.png + + + + + + + + pics/algo7.png + + + + + + + + pics/algo8.png + + + + + + + + + + + + + + Op4 Feedback + + + + 6 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + PointingHandCursor + + + Feedback level of the operator 4 + + + 7 + + + 1 + + + 1 + + + Qt::Horizontal + + + + + + + Feedback level of the operator 4 + + + 7 + + + + + + + + + + Transpose + + + + 6 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + PointingHandCursor + + + Transpose + + + -24 + + + 24 + + + 1 + + + Qt::Horizontal + + + + + + + Transpose + + + -24 + + + 99 + + + + + + + + + + + Op &1 + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + Scaling 1 + + + + 10 + + + 10 + + + 10 + + + 10 + + + 6 + + + 6 + + + + + QFrame::Box + + + QFrame::Sunken + + + LS1 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + RS1 + + + + + + + PointingHandCursor + + + Rate Scaling + + + Attack Rate of the operator 1 + + + 3 + + + 1 + + + 1 + + + 0 + + + Qt::Vertical + + + + + + + PointingHandCursor + + + Level Scaling + + + Attack Rate of the operator 1 + + + 99 + + + 1 + + + 1 + + + 0 + + + Qt::Vertical + + + + + + + Level Scaling + + + 99 + + + + + + + Rate Scaling + + + 3 + + + + + + + + + + Amplitude Envelope 1 + + + + 10 + + + 10 + + + 10 + + + 10 + + + 6 + + + 6 + + + + + QFrame::Box + + + QFrame::Sunken + + + RR1 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + D1R1 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + D1L1 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + D2R1 + + + + + + + Release Rate + + + 15 + + + + + + + 2° Decay Rate + + + 31 + + + + + + + 1° Decay Level + + + 15 + + + + + + + 1° Decay Rate + + + 31 + + + + + + + Attack Rate + + + 31 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + AR1 + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + true + + + QFrame::StyledPanel + + + QFrame::Sunken + + + + + + + + + + Detune, OSCWave, EGShift 1 + + + + 10 + + + 10 + + + 10 + + + 10 + + + 6 + + + 6 + + + + + QFrame::Box + + + QFrame::Sunken + + + DET1 + + + + + + + Detune + + + -3 + + + 3 + + + + + + + PointingHandCursor + + + Detune + + + Attack Rate of the operator 1 + + + -3 + + + 3 + + + 1 + + + 1 + + + 0 + + + Qt::Horizontal + + + + + + + false + + + PointingHandCursor + + + EG Shift + + + + 96dB + + + + + 48dB + + + + + 24dB + + + + + 12dB + + + + + + + + PointingHandCursor + + + Wave form + + + Wave form 1 = <i>sin(<b>t</b>)</i><br> +Wave form 2 = <i>sin(<b>t</b>)*abs(sin(<b>t</b>))</i><br> +Wave form 3 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>) else 0</i><br> +Wave form 4 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>)*abs(sin(<b>t</b>)) else 0</i><br> +Wave form 5 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>) else 0</i><br> +Wave form 6 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*abs(sin(2*<b>t</b>)) else 0</i><br> +Wave form 7 = <i>if <b>t</b>&#060 pi then abs(sin(2*<b>t</b>)) else 0</i><br> +Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*sin(2*<b>t</b>) else 0</i> + + + + 48 + 16 + + + + + + + + pics/wave1.png + + + + + + + + pics/wave2.png + + + + + + + + pics/wave3.png + + + + + + + + pics/wave4.png + + + + + + + + pics/wave5.png + + + + + + + + pics/wave6.png + + + + + + + + pics/wave7.png + + + + + + + + pics/wave8.png + + + + + + + + + + + Sensitivity 1 + + + + 10 + + + 10 + + + 10 + + + 10 + + + 6 + + + 6 + + + + + QFrame::Box + + + QFrame::Sunken + + + KVS1 + + + + + + + PointingHandCursor + + + Amplitude Modulation Enable + + + AME1 + + + + + + + Keyboard Velocity Sensitivity + + + 7 + + + + + + + PointingHandCursor + + + false + + + Key Velocity Sensitivity + + + 7 + + + 1 + + + 1 + + + Qt::Horizontal + + + + + + + QFrame::Box + + + QFrame::Sunken + + + EBS1 + + + + + + + PointingHandCursor + + + EG Bias Sensitivity + + + 7 + + + 1 + + + 1 + + + Qt::Horizontal + + + + + + + Eg Bias Sensitivity + + + 7 + + + + + + + + + + Frequency 1 + + + + 6 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + QFrame::Box + + + QFrame::Sunken + + + Coarse 1 + + + + + + + Coarse Ratio + + + + + + + QFrame::Box + + + QFrame::Sunken + + + Fine 1 + + + + + + + Fine Ratio + + + + + + + QFrame::Box + + + QFrame::Sunken + + + Freq 1 + + + + + + + false + + + Fixed Frequency + + + 32000 + + + + + + + true + + + PointingHandCursor + + + Toggle Fix Frequency + + + FIX + + + + + + + + + + OUT 1 + + + + 6 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + Output Volume + + + 99 + + + + + + + PointingHandCursor + + + Volume + + + + + + 99 + + + 1 + + + 1 + + + 0 + + + Qt::Vertical + + + + + + + + + + + Op &2 + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + Amplitude Envelope 2 + + + + 10 + + + 10 + + + 10 + + + 10 + + + 6 + + + 6 + + + + + Attack Rate + + + 31 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + D1R2 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + D1L2 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + D2R2 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + RR2 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + AR2 + + + + + + + Release Rate + + + 15 + + + + + + + 2° Decay Rate + + + 31 + + + + + + + 1° Decay Level + + + 15 + + + + + + + 1° Decay Rate + + + 31 + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + true + + + QFrame::StyledPanel + + + QFrame::Sunken + + + + + + + + + + Frequency 2 + + + + 6 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + QFrame::Box + + + QFrame::Sunken + + + Coarse 2 + + + + + + + Coarse Ratio + + + + + + + QFrame::Box + + + QFrame::Sunken + + + Fine 2 + + + + + + + Fine Ratio + + + + + + + QFrame::Box + + + QFrame::Sunken + + + Freq 2 + + + + + + + false + + + Fixed Frequency + + + 32000 + + + + + + + true + + + PointingHandCursor + + + Toggle Fix Frequency + + + FIX + + + + + + + + + + Scaling 2 + + + + 10 + + + 10 + + + 10 + + + 10 + + + 6 + + + 6 + + + + + QFrame::Box + + + QFrame::Sunken + + + LS2 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + RS2 + + + + + + + PointingHandCursor + + + Level Scaling + + + Attack Rate of the operator 1 + + + 99 + + + 1 + + + 0 + + + Qt::Vertical + + + 1 + + + + + + + PointingHandCursor + + + Rate Scaling + + + Attack Rate of the operator 1 + + + 3 + + + 1 + + + 0 + + + Qt::Vertical + + + + + + + Level Scaling + + + 99 + + + + + + + Rate Scaling + + + 3 + + + + + + + + + + OUT 2 + + + + 6 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + Output Volume + + + 99 + + + + + + + PointingHandCursor + + + Volume + + + + + + 99 + + + 1 + + + 0 + + + Qt::Vertical + + + + + + + + + + Detune, OSCWave, EGShift 2 + + + + 10 + + + 10 + + + 10 + + + 10 + + + 6 + + + 6 + + + + + QFrame::Box + + + QFrame::Sunken + + + DET2 + + + + + + + Detune + + + -3 + + + 3 + + + + + + + PointingHandCursor + + + Detune + + + Attack Rate of the operator 1 + + + -3 + + + 3 + + + 1 + + + 0 + + + Qt::Horizontal + + + + + + + false + + + PointingHandCursor + + + EG Shift + + + + 96dB + + + + + 48dB + + + + + 24dB + + + + + 12dB + + + + + + + + PointingHandCursor + + + Wave form + + + Wave form 1 = <i>sin(<b>t</b>)</i><br> +Wave form 2 = <i>sin(<b>t</b>)*abs(sin(<b>t</b>))</i><br> +Wave form 3 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>) else 0</i><br> +Wave form 4 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>)*abs(sin(<b>t</b>)) else 0</i><br> +Wave form 5 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>) else 0</i><br> +Wave form 6 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*abs(sin(2*<b>t</b>)) else 0</i><br> +Wave form 7 = <i>if <b>t</b>&#060 pi then abs(sin(2*<b>t</b>)) else 0</i><br> +Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*sin(2*<b>t</b>) else 0</i> + + + + 48 + 16 + + + + + + + + pics/wave1.png + + + + + + + + pics/wave2.png + + + + + + + + pics/wave3.png + + + + + + + + pics/wave4.png + + + + + + + + pics/wave5.png + + + + + + + + pics/wave6.png + + + + + + + + pics/wave7.png + + + + + + + + pics/wave8.png + + + + + + + + + + + Sensitivity 2 + + + + 10 + + + 10 + + + 10 + + + 10 + + + 6 + + + 6 + + + + + QFrame::Box + + + QFrame::Sunken + + + EBS2 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + KVS2 + + + + + + + PointingHandCursor + + + Amplitude Modulation Enable + + + AME2 + + + + + + + PointingHandCursor + + + false + + + Key Velocity Sensitivity + + + 7 + + + 1 + + + Qt::Horizontal + + + + + + + Keyboard Velocity Sensitivity + + + 7 + + + + + + + PointingHandCursor + + + EG Bias Sensitivity + + + 7 + + + 1 + + + Qt::Horizontal + + + + + + + Eg Bias Sensitivity + + + 7 + + + + + + + + + + + Op &3 + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + Amplitude Envelope 3 + + + + 10 + + + 10 + + + 10 + + + 10 + + + 6 + + + 6 + + + + + Attack Rate + + + 31 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + D1R3 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + D1L3 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + D2R3 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + RR3 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + AR3 + + + + + + + Release Rate + + + 15 + + + + + + + 2° Decay Rate + + + 31 + + + + + + + 1° Decay Level + + + 15 + + + + + + + 1° Decay Rate + + + 31 + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + true + + + QFrame::StyledPanel + + + QFrame::Sunken + + + + + + + + + + Scaling 3 + + + + 10 + + + 10 + + + 10 + + + 10 + + + 6 + + + 6 + + + + + QFrame::Box + + + QFrame::Sunken + + + LS3 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + RS3 + + + + + + + PointingHandCursor + + + Level Scaling + + + Attack Rate of the operator 1 + + + 99 + + + 1 + + + 0 + + + Qt::Vertical + + + + + + + PointingHandCursor + + + Rate Scaling + + + Attack Rate of the operator 1 + + + 3 + + + 1 + + + 0 + + + Qt::Vertical + + + + + + + Level Scaling + + + 99 + + + + + + + Rate Scaling + + + 3 + + + + + + + + + + OUT 3 + + + + 6 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + Output Volume + + + 99 + + + + + + + PointingHandCursor + + + Volume + + + + + + 99 + + + 1 + + + 0 + + + Qt::Vertical + + + + + + + + + + Frequency 3 + + + + 6 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + QFrame::Box + + + QFrame::Sunken + + + Coarse 3 + + + + + + + ArrowCursor + + + Coarse Ratio + + + + + + + QFrame::Box + + + QFrame::Sunken + + + Fine 3 + + + + + + + ArrowCursor + + + Fine Ratio + + + + + + + QFrame::Box + + + QFrame::Sunken + + + Freq 3 + + + + + + + false + + + Fixed Frequency + + + 32000 + + + + + + + true + + + PointingHandCursor + + + Toggle Fix Frequency + + + FIX + + + + + + + + + + Detune, OSCWave, EGShift 3 + + + + 10 + + + 10 + + + 10 + + + 10 + + + 6 + + + 6 + + + + + QFrame::Box + + + QFrame::Sunken + + + DET3 + + + + + + + Detune + + + -3 + + + 3 + + + + + + + PointingHandCursor + + + Detune + + + Attack Rate of the operator 1 + + + -3 + + + 3 + + + 1 + + + 0 + + + Qt::Horizontal + + + + + + + false + + + PointingHandCursor + + + EG Shift + + + + 96dB + + + + + 48dB + + + + + 24dB + + + + + 12dB + + + + + + + + PointingHandCursor + + + Wave form + + + Wave form 1 = <i>sin(<b>t</b>)</i><br> +Wave form 2 = <i>sin(<b>t</b>)*abs(sin(<b>t</b>))</i><br> +Wave form 3 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>) else 0</i><br> +Wave form 4 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>)*abs(sin(<b>t</b>)) else 0</i><br> +Wave form 5 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>) else 0</i><br> +Wave form 6 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*abs(sin(2*<b>t</b>)) else 0</i><br> +Wave form 7 = <i>if <b>t</b>&#060 pi then abs(sin(2*<b>t</b>)) else 0</i><br> +Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*sin(2*<b>t</b>) else 0</i> + + + + 48 + 16 + + + + + + + + pics/wave1.png + + + + + + + + pics/wave2.png + + + + + + + + pics/wave3.png + + + + + + + + pics/wave4.png + + + + + + + + pics/wave5.png + + + + + + + + pics/wave6.png + + + + + + + + pics/wave7.png + + + + + + + + pics/wave8.png + + + + + + + + + + + Sensitivity 3 + + + + 10 + + + 10 + + + 10 + + + 10 + + + 6 + + + 6 + + + + + QFrame::Box + + + QFrame::Sunken + + + EBS3 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + KVS3 + + + + + + + PointingHandCursor + + + Amplitude Modulation Enable + + + AME3 + + + + + + + PointingHandCursor + + + false + + + Key Velocity Sensitivity + + + 7 + + + 1 + + + Qt::Horizontal + + + + + + + Keyboard Velocity Sensitivity + + + 7 + + + + + + + PointingHandCursor + + + EG Bias Sensitivity + + + 7 + + + 1 + + + Qt::Horizontal + + + + + + + Eg Bias Sensitivity + + + 7 + + + + + + + + + + + Op &4 + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + amplitude Envelope 4 + + + + 10 + + + 10 + + + 10 + + + 10 + + + 6 + + + 6 + + + + + Attack Rate + + + 31 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + AR4 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + D1R4 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + D1L4 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + D2R4 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + RR4 + + + + + + + Release Rate + + + 15 + + + + + + + 2° Decay Rate + + + 31 + + + + + + + 1° Decay Level + + + 15 + + + + + + + 1° Decay Rate + + + 31 + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + true + + + QFrame::StyledPanel + + + QFrame::Sunken + + + + + + + + + + Frequency 4 + + + + 6 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + QFrame::Box + + + QFrame::Sunken + + + Coarse 4 + + + + + + + Coarse Ratio + + + + + + + QFrame::Box + + + QFrame::Sunken + + + Fine 4 + + + + + + + Fine Ratio + + + + + + + QFrame::Box + + + QFrame::Sunken + + + Freq 4 + + + + + + + false + + + Fixed Frequency + + + 32000 + + + + + + + true + + + PointingHandCursor + + + Toggle Fix Frequency + + + FIX + + + + + + + + + + Scaling 4 + + + + 10 + + + 10 + + + 10 + + + 10 + + + 6 + + + 6 + + + + + QFrame::Box + + + QFrame::Sunken + + + LS4 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + RS4 + + + + + + + PointingHandCursor + + + Level Scaling + + + Attack Rate of the operator 1 + + + 99 + + + 1 + + + 0 + + + Qt::Vertical + + + + + + + PointingHandCursor + + + Rate Scaling + + + Attack Rate of the operator 1 + + + 3 + + + 1 + + + 0 + + + Qt::Vertical + + + + + + + Level Scaling + + + 99 + + + + + + + Rate Scaling + + + 3 + + + + + + + + + + OUT 4 + + + + 6 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + Output Volume + + + 99 + + + + + + + PointingHandCursor + + + Volume + + + + + + 99 + + + 1 + + + 0 + + + Qt::Vertical + + + + + + + + + + Detune, OSCWave, EGShift 4 + + + + 10 + + + 10 + + + 10 + + + 10 + + + 6 + + + 6 + + + + + QFrame::Box + + + QFrame::Sunken + + + DET4 + + + + + + + Detune + + + -3 + + + 3 + + + + + + + PointingHandCursor + + + Detune + + + Attack Rate of the operator 1 + + + -3 + + + 3 + + + 1 + + + 0 + + + Qt::Horizontal + + + + + + + false + + + PointingHandCursor + + + EG Shift + + + + 96dB + + + + + 48dB + + + + + 24dB + + + + + 12dB + + + + + + + + PointingHandCursor + + + Wave form + + + Wave form 1 = <i>sin(<b>t</b>)</i><br> +Wave form 2 = <i>sin(<b>t</b>)*abs(sin(<b>t</b>))</i><br> +Wave form 3 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>) else 0</i><br> +Wave form 4 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>)*abs(sin(<b>t</b>)) else 0</i><br> +Wave form 5 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>) else 0</i><br> +Wave form 6 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*abs(sin(2*<b>t</b>)) else 0</i><br> +Wave form 7 = <i>if <b>t</b>&#060 pi then abs(sin(2*<b>t</b>)) else 0</i><br> +Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*sin(2*<b>t</b>) else 0</i> + + + + 48 + 16 + + + + + + + + pics/wave1.png + + + + + + + + pics/wave2.png + + + + + + + + pics/wave3.png + + + + + + + + pics/wave4.png + + + + + + + + pics/wave5.png + + + + + + + + pics/wave6.png + + + + + + + + pics/wave7.png + + + + + + + + pics/wave8.png + + + + + + + + + + + Sensitivity 4 + + + + 10 + + + 10 + + + 10 + + + 10 + + + 6 + + + 6 + + + + + QFrame::Box + + + QFrame::Sunken + + + EBS4 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + KVS4 + + + + + + + PointingHandCursor + + + Amplitude Modulation Enable + + + AME4 + + + + + + + PointingHandCursor + + + false + + + Key Velocity Sensitivity + + + 7 + + + 1 + + + Qt::Horizontal + + + + + + + Keyboard Velocity Sensitivity + + + 7 + + + + + + + PointingHandCursor + + + EG Bias Sensitivity + + + 7 + + + 1 + + + Qt::Horizontal + + + + + + + Eg Bias Sensitivity + + + 7 + + + + + + + + + + + &Func + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + + 16777215 + 80 + + + + Delay Pan Depth + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + + 48 + 16777215 + + + + + + + + + + + + + + + 16777215 + 80 + + + + Delay Pan LFO Freq + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + 1.137891684385393 + + + 0.100000000000000 + + + 10.000000000000000 + + + true + + + + + + + + 48 + 16777215 + + + + 0.100000000000000 + + + 10.000000000000000 + + + + + + + + + + + 16777215 + 80 + + + + Delay Ch Send Level + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + 127 + + + + + + + PointingHandCursor + + + Channel Chorus + + + 127 + + + Qt::Horizontal + + + + + + + + + + + 16777215 + 80 + + + + Delay Feedback + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + 0.000000000000000 + + + -1.000000000000000 + + + + + + + + 48 + 16777215 + + + + -1.000000000000000 + + + + + + + + + + + 16777215 + 80 + + + + Delay On/Off, Return Level + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + PointingHandCursor + + + On + + + + + + + 255 + + + 128 + + + Qt::Horizontal + + + + + + + + + + + 16777215 + 80 + + + + Delay Beat Ratio + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + 1.000000000000000 + + + 0.125000000000000 + + + 2.000000000000000 + + + + + + + + 48 + 16777215 + + + + 0.010000000000000 + + + 2.000000000000000 + + + + + + + + + + + 16777215 + 80 + + + + Delay BPM + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + 100.000000000000000 + + + 60.000000000000000 + + + 255.000000000000000 + + + + + + + + 48 + 16777215 + + + + 6 + + + 60.000000000000000 + + + 255.000000000000000 + + + + + + + + + + 0 + + + + Foot Control + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + Pitch Bend Range + + + 99 + + + + + + + Pitch Bend Range + + + 99 + + + + + + + Pitch Bend Range + + + 99 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + Pitch + + + + + + + PointingHandCursor + + + Pitch Bend Range + + + 0 + + + 99 + + + 1 + + + 0 + + + Qt::Horizontal + + + + + + + PointingHandCursor + + + Pitch Bend Range + + + 0 + + + 99 + + + 1 + + + 0 + + + Qt::Horizontal + + + + + + + QFrame::Box + + + QFrame::Sunken + + + Amplitude + + + + + + + QFrame::Box + + + QFrame::Sunken + + + Volume + + + + + + + PointingHandCursor + + + Pitch Bend Range + + + 0 + + + 99 + + + 1 + + + 0 + + + Qt::Horizontal + + + + + + + + Modulation Wheel + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + Pitch Bend Range + + + 99 + + + + + + + PointingHandCursor + + + Pitch Bend Range + + + 0 + + + 99 + + + 1 + + + 0 + + + Qt::Horizontal + + + + + + + Pitch Bend Range + + + 99 + + + + + + + PointingHandCursor + + + Pitch Bend Range + + + 0 + + + 99 + + + 1 + + + 0 + + + Qt::Horizontal + + + + + + + QFrame::Box + + + QFrame::Sunken + + + Amplitude + + + + + + + QFrame::Box + + + QFrame::Sunken + + + Pitch + + + + + + + + Breath Control + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + PointingHandCursor + + + Pitch Bend Range + + + 0 + + + 50 + + + 1 + + + 0 + + + Qt::Horizontal + + + + + + + Pitch Bend Range + + + 50 + + + + + + + Pitch Bend Range + + + 99 + + + + + + + Pitch Bend Range + + + 99 + + + + + + + Pitch Bend Range + + + 99 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + Pitch + + + + + + + QFrame::Box + + + QFrame::Sunken + + + Pitch Bias + + + + + + + QFrame::Box + + + QFrame::Sunken + + + Envelope Bias + + + + + + + QFrame::Box + + + QFrame::Sunken + + + Amplitude + + + + + + + PointingHandCursor + + + Pitch Bend Range + + + 0 + + + 99 + + + 1 + + + 0 + + + Qt::Horizontal + + + + + + + PointingHandCursor + + + Pitch Bend Range + + + 0 + + + 99 + + + 1 + + + 0 + + + Qt::Horizontal + + + + + + + PointingHandCursor + + + Pitch Bend Range + + + 0 + + + 99 + + + 1 + + + 0 + + + Qt::Horizontal + + + + + + + + After Touch + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + QFrame::Box + + + QFrame::Sunken + + + Pitch + + + + + + + Pitch Bend Range + + + 99 + + + + + + + PointingHandCursor + + + Pitch Bend Range + + + 0 + + + 99 + + + 1 + + + 0 + + + Qt::Horizontal + + + + + + + Pitch Bend Range + + + 50 + + + + + + + PointingHandCursor + + + Pitch Bend Range + + + 0 + + + 50 + + + 1 + + + 0 + + + Qt::Horizontal + + + + + + + Pitch Bend Range + + + 99 + + + + + + + Pitch Bend Range + + + 99 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + Pitch Bias + + + + + + + QFrame::Box + + + QFrame::Sunken + + + Amplitude + + + + + + + QFrame::Box + + + QFrame::Sunken + + + Envelope Bias + + + + + + + PointingHandCursor + + + Pitch Bend Range + + + 0 + + + 99 + + + 1 + + + 0 + + + Qt::Horizontal + + + + + + + PointingHandCursor + + + Pitch Bend Range + + + 0 + + + 99 + + + 1 + + + 0 + + + Qt::Horizontal + + + + + + + + + + + Phony Mode + + + + 6 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + true + + + PointingHandCursor + + + + POLY + + + + + MONO + + + + + + + + + + + Pitch Bend Range + + + + 6 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + PointingHandCursor + + + Pitch Bend Range + + + 0 + + + 12 + + + 1 + + + 0 + + + Qt::Horizontal + + + + + + + Pitch Bend Range + + + 12 + + + + + + + + + + Potamento + + + + 6 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + true + + + PointingHandCursor + + + Portamento Mode + + + + FINGER + + + + + FULL + + + + + + + + QFrame::Box + + + QFrame::Sunken + + + PT + + + + + + + true + + + PointingHandCursor + + + Portamento Time + + + 0 + + + 99 + + + 1 + + + 0 + + + Qt::Horizontal + + + + + + + true + + + Portamento Time + + + 99 + + + + + + + + + + + C&horus + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + Chorus Parameters + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + + + + + 16777215 + 80 + + + + Channel send level + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + 127 + + + + + + + PointingHandCursor + + + Channel Chorus + + + 127 + + + Qt::Horizontal + + + + + + + + + + + 16777215 + 80 + + + + On/Off and Return level + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + PointingHandCursor + + + On + + + + + + + 255 + + + 128 + + + Qt::Horizontal + + + + + + + + + + + 16777215 + 80 + + + + Select LADSPA plugin + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + Change plugin + + + + + + + true + + + + + + + + + + + &Reverb + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + + 16777215 + 80 + + + + On/Off and Return level + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + PointingHandCursor + + + On + + + + + + + 255 + + + 128 + + + Qt::Horizontal + + + + + + + + + + + 16777215 + 80 + + + + Select LADSPA plugin + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + Change plugin + + + + + + + true + + + + + + + + + + + 16777215 + 80 + + + + Channel send level + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + 127 + + + + + + + PointingHandCursor + + + Channel Chorus + + + 127 + + + Qt::Horizontal + + + + + + + + + + Reverb Parameters + + + + + + + + &Config + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + Font Size + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + 1 + + + 32 + + + 9 + + + + + + + + + + Quality + + + + 6 + + + 9 + + + 9 + + + 9 + + + 9 + + + + + true + + + + High + + + + + Middle + + + + + Low + + + + + Ultra low + + + + + + + + true + + + Filter + + + + + + + + + + Save Mode (into the song) + + + + 6 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + PointingHandCursor + + + Save only the used presets + + + true + + + + + + + PointingHandCursor + + + Save the entire set + + + + + + + PointingHandCursor + + + Save the configuration + + + true + + + + + + + + + + Configuration File + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + true + + + Save... + + + + + + + true + + + Load... + + + + + + + Save as default + + + + + + + + + + Colors + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + + 0 + 0 + + + + + 0 + 20 + + + + true + + + QFrame::StyledPanel + + + QFrame::Sunken + + + + + + + + Text + + + + + Background + + + + + Edit Text + + + + + Edit Background + + + + + + + + Red + + + 255 + + + + + + + PointingHandCursor + + + Blue + + + 255 + + + Qt::Horizontal + + + + + + + PointingHandCursor + + + Green + + + 255 + + + Qt::Horizontal + + + + + + + PointingHandCursor + + + Red + + + Qt::LeftToRight + + + 255 + + + Qt::Horizontal + + + QSlider::NoTicks + + + + + + + Blue + + + 255 + + + + + + + Green + + + 255 + + + + + + + QFrame::Box + + + QFrame::Sunken + + + Blue + + + + + + + QFrame::Box + + + QFrame::Sunken + + + Green + + + + + + + QFrame::Box + + + QFrame::Sunken + + + Red + + + + + + + + + + Set Path + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + Image in the background : + + + false + + + + + + + 128 + + + + + + + false + + + Browse... + + + + + + + 128 + + + + + + + Browse... + + + + + + + Load the set at the initialization : + + + true + + + + + + + + + + + + + + + 1000 + 20 + + + + + + + + + 0 + 0 + 0 + + + + + + + 207 + 207 + 207 + + + + + + + 237 + 237 + 237 + + + + + + + 231 + 231 + 231 + + + + + + + 121 + 125 + 121 + + + + + + + 166 + 166 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 207 + 207 + 207 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 255 + 0 + 255 + + + + + + + 231 + 231 + 231 + + + + + + + + + 0 + 0 + 0 + + + + + + + 207 + 207 + 207 + + + + + + + 237 + 237 + 237 + + + + + + + 231 + 231 + 231 + + + + + + + 121 + 125 + 121 + + + + + + + 166 + 166 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 207 + 207 + 207 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 255 + 0 + 255 + + + + + + + 231 + 231 + 231 + + + + + + + + + 121 + 125 + 121 + + + + + + + 207 + 207 + 207 + + + + + + + 237 + 237 + 237 + + + + + + + 231 + 231 + 231 + + + + + + + 121 + 125 + 121 + + + + + + + 166 + 166 + 166 + + + + + + + 121 + 125 + 121 + + + + + + + 255 + 255 + 255 + + + + + + + 121 + 125 + 121 + + + + + + + 207 + 207 + 207 + + + + + + + 207 + 207 + 207 + + + + + + + 0 + 0 + 0 + + + + + + + 121 + 125 + 121 + + + + + + + 207 + 207 + 207 + + + + + + + 0 + 0 + 255 + + + + + + + 255 + 0 + 255 + + + + + + + 231 + 231 + 231 + + + + + + + + + Sans Serif + 10 + 75 + false + true + false + false + + + + Set Brightness, Detune, Attack and Release of the current channel to default + + + Res. Ctrl + + + + + + + + 1000 + 20 + + + + + + + + + 0 + 0 + 0 + + + + + + + 207 + 207 + 207 + + + + + + + 237 + 237 + 237 + + + + + + + 231 + 231 + 231 + + + + + + + 121 + 125 + 121 + + + + + + + 166 + 166 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 207 + 207 + 207 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 255 + 0 + 255 + + + + + + + 231 + 231 + 231 + + + + + + + + + 0 + 0 + 0 + + + + + + + 207 + 207 + 207 + + + + + + + 237 + 237 + 237 + + + + + + + 231 + 231 + 231 + + + + + + + 121 + 125 + 121 + + + + + + + 166 + 166 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 207 + 207 + 207 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 255 + 0 + 255 + + + + + + + 231 + 231 + 231 + + + + + + + + + 121 + 125 + 121 + + + + + + + 207 + 207 + 207 + + + + + + + 237 + 237 + 237 + + + + + + + 231 + 231 + 231 + + + + + + + 121 + 125 + 121 + + + + + + + 166 + 166 + 166 + + + + + + + 121 + 125 + 121 + + + + + + + 255 + 255 + 255 + + + + + + + 121 + 125 + 121 + + + + + + + 207 + 207 + 207 + + + + + + + 207 + 207 + 207 + + + + + + + 0 + 0 + 0 + + + + + + + 121 + 125 + 121 + + + + + + + 207 + 207 + 207 + + + + + + + 0 + 0 + 255 + + + + + + + 255 + 0 + 255 + + + + + + + 231 + 231 + 231 + + + + + + + + + Sans Serif + 10 + 75 + false + true + false + false + + + + Cut all notes off + + + Panic! + + + + + + + + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + true + + + Number of Voices + + + 1 + + + 64 + + + 8 + + + + + + + QFrame::StyledPanel + + + Number of voices + + + Qt::AlignCenter + + + + + + + Enable + + + true + + + + + + + 1 + + + 16 + + + + + + + QFrame::StyledPanel + + + Channel + + + Qt::AlignCenter + + + + + + + + + + QFrame::StyledPanel + + + Vol + + + Qt::AlignCenter + + + + + + + + 40 + 40 + + + + -28.144332654385916 + + + 0.000000000000000 + + + 1.000000000000000 + + + 0.100000000000000 + + + 0.200000000000000 + + + false + + + + + + + + 96 + 16 + + + + Channel Ctrl + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + + + 6 + + + + + PointingHandCursor + + + 0.000000000000000 + + + 1.000000000000000 + + + 0.100000000000000 + + + 0.200000000000000 + + + false + + + + + + + QFrame::StyledPanel + + + Release + + + Qt::AlignCenter + + + + + + + + 32 + 32 + + + + PointingHandCursor + + + + + + + QFrame::StyledPanel + + + Attack + + + Qt::AlignCenter + + + + + + + + 32 + 32 + + + + PointingHandCursor + + + + + + + QFrame::StyledPanel + + + Detune + + + Qt::AlignCenter + + + + + + + + 32 + 32 + + + + PointingHandCursor + + + + + + + QFrame::StyledPanel + + + Brightness + + + Qt::AlignCenter + + + + + + + + 32 + 32 + + + + PointingHandCursor + + + + + + + QFrame::StyledPanel + + + Modulation + + + Qt::AlignCenter + + + + + + + + 32 + 32 + + + + PointingHandCursor + + + + + + + QFrame::StyledPanel + + + Pan + + + Qt::AlignCenter + + + + + + + QFrame::StyledPanel + + + Volume + + + Qt::AlignCenter + + + + + + + + 32 + 32 + + + + PointingHandCursor + + + 1.000000000000000 + + + 0.100000000000000 + + + 0.200000000000000 + + + 270 + + + 6 + + + + + + + + + + + + Awl::VolKnob + Awl::Knob +
awl/volknob.h
+
+ + Awl::Knob + QWidget +
awl/knob.h
+
+ + Awl::FloatEntry + QLineEdit +
awl/floatentry.h
+
+
+ + deicsOnzeTabWidget + presetLineEdit + feedbackSlider + LFOSyncCheckBox + PModSensSlider + LFOWaveComboBox + AModSensSlider + PModDepthSlider + AModDepthSlider + LFOSpeedSlider + LFODelaySlider + algorithmComboBox + LS1Slider + RS1Slider + OUT1Slider + Fix1CheckBox + AME1CheckBox + EBS1Slider + DET1Slider + KVS1Slider + WaveForm1ComboBox + EGS1ComboBox + LS2Slider + RS2Slider + OUT2Slider + AME2CheckBox + EBS2Slider + DET2Slider + KVS2Slider + WaveForm2ComboBox + EGS2ComboBox + LS3Slider + RS3Slider + OUT3Slider + AME3CheckBox + EBS3Slider + DET3Slider + KVS3Slider + WaveForm3ComboBox + EGS3ComboBox + LS4Slider + RS4Slider + OUT4Slider + AME4CheckBox + EBS4Slider + DET4Slider + KVS4Slider + WaveForm4ComboBox + EGS4ComboBox + subcategoryLineEdit + categoryLineEdit + lbankSpinBox + progSpinBox + feedbackSpinBox + PModSensSpinBox + AModSensSpinBox + PModDepthSpinBox + AModDepthSpinBox + LFOSpeedSpinBox + LFODelaySpinBox + CoarseRatio1SpinBox + FineRatio1SpinBox + Freq1SpinBox + LS1SpinBox + RS1SpinBox + OUT1SpinBox + EBS1SpinBox + KVS1SpinBox + DET1SpinBox + AR1SpinBox + D1R1SpinBox + D1L1SpinBox + D2R1SpinBox + RR1SpinBox + Fix2CheckBox + Freq2SpinBox + CoarseRatio2SpinBox + FineRatio2SpinBox + LS2SpinBox + RS2SpinBox + OUT2SpinBox + EBS2SpinBox + KVS2SpinBox + DET2SpinBox + AR2SpinBox + D1R2SpinBox + D1L2SpinBox + D2R2SpinBox + RR2SpinBox + Fix3CheckBox + CoarseRatio3SpinBox + FineRatio3SpinBox + Freq3SpinBox + AR3SpinBox + D1R3SpinBox + D1L3SpinBox + D2R3SpinBox + RR3SpinBox + LS3SpinBox + RS3SpinBox + OUT3SpinBox + EBS3SpinBox + KVS3SpinBox + DET3SpinBox + Fix4CheckBox + CoarseRatio4SpinBox + FineRatio4SpinBox + Freq4SpinBox + LS4SpinBox + RS4SpinBox + OUT4SpinBox + EBS4SpinBox + KVS4SpinBox + DET4SpinBox + AR4SpinBox + D1R4SpinBox + D1L4SpinBox + D2R4SpinBox + RR4SpinBox + + + + + feedbackSlider + valueChanged(int) + feedbackSpinBox + setValue(int) + + + 111 + 114 + + + 111 + 114 + + + + + feedbackSpinBox + valueChanged(int) + feedbackSlider + setValue(int) + + + 111 + 114 + + + 111 + 114 + + + + + PModSensSlider + valueChanged(int) + PModSensSpinBox + setValue(int) + + + 111 + 114 + + + 111 + 114 + + + + + PModSensSpinBox + valueChanged(int) + PModSensSlider + setValue(int) + + + 111 + 114 + + + 111 + 114 + + + + + AModSensSlider + valueChanged(int) + AModSensSpinBox + setValue(int) + + + 111 + 114 + + + 111 + 114 + + + + + AModSensSpinBox + valueChanged(int) + AModSensSlider + setValue(int) + + + 111 + 114 + + + 111 + 114 + + + + + PModDepthSpinBox + valueChanged(int) + PModDepthSlider + setValue(int) + + + 111 + 114 + + + 111 + 114 + + + + + AModDepthSpinBox + valueChanged(int) + AModDepthSlider + setValue(int) + + + 111 + 114 + + + 111 + 114 + + + + + LFOSpeedSlider + valueChanged(int) + LFOSpeedSpinBox + setValue(int) + + + 111 + 114 + + + 111 + 114 + + + + + LFOSpeedSpinBox + valueChanged(int) + LFOSpeedSlider + setValue(int) + + + 111 + 114 + + + 111 + 114 + + + + + LFODelaySlider + valueChanged(int) + LFODelaySpinBox + setValue(int) + + + 111 + 114 + + + 111 + 114 + + + + + LFODelaySpinBox + valueChanged(int) + LFODelaySlider + setValue(int) + + + 111 + 114 + + + 111 + 114 + + + + + PModDepthSlider + valueChanged(int) + PModDepthSpinBox + setValue(int) + + + 111 + 114 + + + 111 + 114 + + + + + Fix1CheckBox + toggled(bool) + Freq1SpinBox + setEnabled(bool) + + + 110 + 109 + + + 110 + 109 + + + + + Fix1CheckBox + toggled(bool) + FineRatio1SpinBox + setDisabled(bool) + + + 110 + 109 + + + 110 + 109 + + + + + Fix1CheckBox + toggled(bool) + CoarseRatio1SpinBox + setDisabled(bool) + + + 110 + 109 + + + 110 + 109 + + + + + OUT1Slider + valueChanged(int) + OUT1SpinBox + setValue(int) + + + 66 + 109 + + + 96 + 109 + + + + + OUT1SpinBox + valueChanged(int) + OUT1Slider + setValue(int) + + + 96 + 109 + + + 66 + 109 + + + + + LS1Slider + valueChanged(int) + LS1SpinBox + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + LS1SpinBox + valueChanged(int) + LS1Slider + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + RS1Slider + valueChanged(int) + RS1SpinBox + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + RS1SpinBox + valueChanged(int) + RS1Slider + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + DET1Slider + valueChanged(int) + DET1SpinBox + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + DET1SpinBox + valueChanged(int) + DET1Slider + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + EBS1Slider + valueChanged(int) + EBS1SpinBox + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + EBS1SpinBox + valueChanged(int) + EBS1Slider + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + KVS1Slider + valueChanged(int) + KVS1SpinBox + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + KVS1SpinBox + valueChanged(int) + KVS1Slider + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + Fix2CheckBox + toggled(bool) + Freq2SpinBox + setEnabled(bool) + + + 110 + 109 + + + 110 + 109 + + + + + Fix2CheckBox + toggled(bool) + FineRatio2SpinBox + setDisabled(bool) + + + 110 + 109 + + + 110 + 109 + + + + + Fix2CheckBox + toggled(bool) + CoarseRatio2SpinBox + setDisabled(bool) + + + 110 + 109 + + + 110 + 109 + + + + + OUT2SpinBox + valueChanged(int) + OUT2Slider + setValue(int) + + + 96 + 109 + + + 66 + 109 + + + + + LS2Slider + valueChanged(int) + LS2SpinBox + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + LS2SpinBox + valueChanged(int) + LS2Slider + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + RS2Slider + valueChanged(int) + RS2SpinBox + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + RS2SpinBox + valueChanged(int) + RS2Slider + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + DET2Slider + valueChanged(int) + DET2SpinBox + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + DET2SpinBox + valueChanged(int) + DET2Slider + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + EBS2SpinBox + valueChanged(int) + EBS2Slider + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + EBS2Slider + valueChanged(int) + EBS2SpinBox + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + KVS2Slider + valueChanged(int) + KVS2SpinBox + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + KVS2SpinBox + valueChanged(int) + KVS2Slider + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + Fix3CheckBox + toggled(bool) + Freq3SpinBox + setEnabled(bool) + + + 110 + 109 + + + 110 + 109 + + + + + Fix3CheckBox + toggled(bool) + FineRatio3SpinBox + setDisabled(bool) + + + 110 + 109 + + + 110 + 109 + + + + + Fix3CheckBox + toggled(bool) + CoarseRatio3SpinBox + setDisabled(bool) + + + 110 + 109 + + + 110 + 109 + + + + + OUT3Slider + valueChanged(int) + OUT3SpinBox + setValue(int) + + + 66 + 109 + + + 96 + 109 + + + + + OUT3SpinBox + valueChanged(int) + OUT3Slider + setValue(int) + + + 96 + 109 + + + 66 + 109 + + + + + LS3Slider + valueChanged(int) + LS3SpinBox + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + LS3SpinBox + valueChanged(int) + LS3Slider + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + RS3Slider + valueChanged(int) + RS3SpinBox + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + RS3SpinBox + valueChanged(int) + RS3Slider + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + DET3Slider + valueChanged(int) + DET3SpinBox + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + DET3SpinBox + valueChanged(int) + DET3Slider + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + EBS3Slider + valueChanged(int) + EBS3SpinBox + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + EBS3SpinBox + valueChanged(int) + EBS3Slider + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + KVS3Slider + valueChanged(int) + KVS3SpinBox + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + KVS3SpinBox + valueChanged(int) + KVS3Slider + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + Fix4CheckBox + toggled(bool) + Freq4SpinBox + setEnabled(bool) + + + 110 + 109 + + + 110 + 109 + + + + + Fix4CheckBox + toggled(bool) + FineRatio4SpinBox + setDisabled(bool) + + + 110 + 109 + + + 110 + 109 + + + + + Fix4CheckBox + toggled(bool) + CoarseRatio4SpinBox + setDisabled(bool) + + + 110 + 109 + + + 110 + 109 + + + + + OUT4Slider + valueChanged(int) + OUT4SpinBox + setValue(int) + + + 66 + 109 + + + 96 + 109 + + + + + OUT4SpinBox + valueChanged(int) + OUT4Slider + setValue(int) + + + 96 + 109 + + + 66 + 109 + + + + + LS4Slider + valueChanged(int) + LS4SpinBox + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + LS4SpinBox + valueChanged(int) + LS4Slider + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + RS4Slider + valueChanged(int) + RS4SpinBox + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + RS4SpinBox + valueChanged(int) + RS4Slider + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + DET4Slider + valueChanged(int) + DET4SpinBox + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + DET4SpinBox + valueChanged(int) + DET4Slider + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + EBS4Slider + valueChanged(int) + EBS4SpinBox + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + EBS4SpinBox + valueChanged(int) + EBS4Slider + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + KVS4Slider + valueChanged(int) + KVS4SpinBox + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + KVS4SpinBox + valueChanged(int) + KVS4Slider + setValue(int) + + + 110 + 109 + + + 110 + 109 + + + + + redSlider + valueChanged(int) + redSpinBox + setValue(int) + + + 111 + 114 + + + 111 + 114 + + + + + redSpinBox + valueChanged(int) + redSlider + setValue(int) + + + 111 + 114 + + + 111 + 114 + + + + + greenSlider + valueChanged(int) + greenSpinBox + setValue(int) + + + 111 + 114 + + + 111 + 114 + + + + + greenSpinBox + valueChanged(int) + greenSlider + setValue(int) + + + 111 + 114 + + + 111 + 114 + + + + + blueSlider + valueChanged(int) + blueSpinBox + setValue(int) + + + 111 + 114 + + + 111 + 114 + + + + + blueSpinBox + valueChanged(int) + blueSlider + setValue(int) + + + 111 + 114 + + + 111 + 114 + + + + + fcVolumeSlider + valueChanged(int) + fcVolumeSpinBox + setValue(int) + + + 285 + 155 + + + 494 + 158 + + + + + fcVolumeSpinBox + valueChanged(int) + fcVolumeSlider + setValue(int) + + + 494 + 158 + + + 285 + 155 + + + + + fcPitchSlider + valueChanged(int) + fcPitchSpinBox + setValue(int) + + + 285 + 180 + + + 494 + 177 + + + + + fcPitchSpinBox + valueChanged(int) + fcPitchSlider + setValue(int) + + + 494 + 177 + + + 285 + 180 + + + + + fcAmplitudeSpinBox + valueChanged(int) + fcAmplitudeSlider + setValue(int) + + + 494 + 216 + + + 285 + 219 + + + + + fcAmplitudeSlider + valueChanged(int) + fcAmplitudeSpinBox + setValue(int) + + + 285 + 219 + + + 494 + 216 + + + + + pitchBendRangeSlider + valueChanged(int) + pitchBendRangeSpinBox + setValue(int) + + + 486 + 483 + + + 538 + 486 + + + + + pitchBendRangeSpinBox + valueChanged(int) + pitchBendRangeSlider + setValue(int) + + + 538 + 486 + + + 486 + 483 + + + + + PortamentoTimeSlider + valueChanged(int) + PortamentoTimeSpinBox + setValue(int) + + + 293 + 483 + + + 345 + 486 + + + + + PortamentoTimeSpinBox + valueChanged(int) + PortamentoTimeSlider + setValue(int) + + + 345 + 486 + + + 293 + 483 + + + + + mwPitchSlider + valueChanged(int) + mwPitchSpinBox + setValue(int) + + + 224 + 168 + + + 539 + 171 + + + + + mwAmplitudeSpinBox + valueChanged(int) + mwAmplitudeSlider + setValue(int) + + + 539 + 223 + + + 224 + 220 + + + + + mwAmplitudeSlider + valueChanged(int) + mwAmplitudeSpinBox + setValue(int) + + + 224 + 220 + + + 539 + 223 + + + + + mwPitchSpinBox + valueChanged(int) + mwPitchSlider + setValue(int) + + + 539 + 171 + + + 224 + 168 + + + + + bcPitchSlider + valueChanged(int) + bcPitchSpinBox + setValue(int) + + + 248 + 147 + + + 539 + 150 + + + + + bcAmplitudeSlider + valueChanged(int) + bcAmplitudeSpinBox + setValue(int) + + + 248 + 178 + + + 539 + 181 + + + + + bcPitchBiasSlider + valueChanged(int) + bcPitchBiasSpinBox + setValue(int) + + + 248 + 209 + + + 539 + 212 + + + + + bcEgBiasSlider + valueChanged(int) + bcEgBiasSpinBox + setValue(int) + + + 248 + 240 + + + 539 + 243 + + + + + bcPitchSpinBox + valueChanged(int) + bcPitchSlider + setValue(int) + + + 539 + 150 + + + 248 + 147 + + + + + bcEgBiasSpinBox + valueChanged(int) + bcEgBiasSlider + setValue(int) + + + 539 + 243 + + + 248 + 240 + + + + + atPitchSlider + valueChanged(int) + atPitchSpinBox + setValue(int) + + + 248 + 147 + + + 539 + 150 + + + + + atAmplitudeSpinBox + valueChanged(int) + atAmplitudeSlider + setValue(int) + + + 539 + 181 + + + 248 + 178 + + + + + atAmplitudeSlider + valueChanged(int) + atAmplitudeSpinBox + setValue(int) + + + 248 + 178 + + + 539 + 181 + + + + + atPitchBiasSlider + valueChanged(int) + atPitchBiasSpinBox + setValue(int) + + + 248 + 209 + + + 539 + 212 + + + + + atPitchBiasSpinBox + valueChanged(int) + atPitchBiasSlider + setValue(int) + + + 539 + 212 + + + 248 + 209 + + + + + atEgBiasSlider + valueChanged(int) + atEgBiasSpinBox + setValue(int) + + + 248 + 240 + + + 539 + 243 + + + + + atPitchSpinBox + valueChanged(int) + atPitchSlider + setValue(int) + + + 539 + 150 + + + 248 + 147 + + + + + atEgBiasSpinBox + valueChanged(int) + atEgBiasSlider + setValue(int) + + + 539 + 243 + + + 248 + 240 + + + + + bcPitchSpinBox + valueChanged(int) + bcPitchSlider + setValue(int) + + + 539 + 150 + + + 248 + 147 + + + + + bcAmplitudeSpinBox + valueChanged(int) + bcAmplitudeSlider + setValue(int) + + + 539 + 181 + + + 248 + 178 + + + + + bcPitchBiasSpinBox + valueChanged(int) + bcPitchBiasSlider + setValue(int) + + + 539 + 212 + + + 248 + 209 + + + + + bcEgBiasSpinBox + valueChanged(int) + bcEgBiasSlider + setValue(int) + + + 539 + 243 + + + 248 + 240 + + + + + OUT2Slider + valueChanged(int) + OUT2SpinBox + setValue(int) + + + 66 + 109 + + + 96 + 109 + + + + + chChorusSlider + valueChanged(int) + chChorusSpinBox + setValue(int) + + + 487 + 149 + + + 539 + 152 + + + + + chChorusSpinBox + valueChanged(int) + chChorusSlider + setValue(int) + + + 539 + 152 + + + 487 + 149 + + + + + chReverbSlider + valueChanged(int) + chReverbSpinBox + setValue(int) + + + 487 + 149 + + + 539 + 152 + + + + + chReverbSpinBox + valueChanged(int) + chReverbSlider + setValue(int) + + + 539 + 152 + + + 487 + 149 + + + + + transposeSlider + valueChanged(int) + transposeSpinBox + setValue(int) + + + 111 + 114 + + + 111 + 114 + + + + + transposeSpinBox + valueChanged(int) + transposeSlider + setValue(int) + + + 111 + 114 + + + 111 + 114 + + + + + chDelaySlider + valueChanged(int) + chDelaySpinBox + setValue(int) + + + 351 + 319 + + + 403 + 322 + + + + + chDelaySpinBox + valueChanged(int) + chDelaySlider + setValue(int) + + + 403 + 322 + + + 351 + 319 + + + + + delayPanLFOFreqKnob + valueChanged(double,int) + delayPanLFOFreqFloatentry + setValue(double) + + + 477 + 308 + + + 498 + 308 + + + + + delayPanLFOFreqFloatentry + valueChanged(double,int) + delayPanLFOFreqKnob + setValue(double) + + + 497 + 319 + + + 477 + 326 + + + + + delayBPMKnob + valueChanged(double,int) + delayBPMFloatentry + setValue(double) + + + 84 + 389 + + + 104 + 393 + + + + + delayBPMFloatentry + valueChanged(double,int) + delayBPMKnob + setValue(double) + + + 121 + 404 + + + 78 + 409 + + + + + delayBeatRatioKnob + valueChanged(double,int) + delayBeatRatioFloatentry + setValue(double) + + + 212 + 386 + + + 252 + 392 + + + + + delayBeatRatioFloatentry + valueChanged(double,int) + delayBeatRatioKnob + setValue(double) + + + 271 + 398 + + + 228 + 411 + + + + + delayFeedbackKnob + valueChanged(double,int) + delayFeedbackFloatentry + setValue(double) + + + 347 + 388 + + + 368 + 393 + + + + + delayFeedbackFloatentry + valueChanged(double,int) + delayFeedbackKnob + setValue(double) + + + 379 + 405 + + + 352 + 409 + + + + + delayPanLFODepthKnob + valueChanged(double,int) + delayPanLFODepthFloatentry + setValue(double) + + + 464 + 387 + + + 507 + 396 + + + + + delayPanLFODepthFloatentry + valueChanged(double,int) + delayPanLFODepthKnob + setValue(double) + + + 518 + 407 + + + 471 + 409 + + + + +
diff --git a/attic/muse_qt4_evolution/synti/deicsonze/deicsonzeplugin.cpp b/attic/muse_qt4_evolution/synti/deicsonze/deicsonzeplugin.cpp new file mode 100644 index 00000000..14c45ab9 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/deicsonzeplugin.cpp @@ -0,0 +1,499 @@ +//=========================================================================== +// +// DeicsOnze an emulator of the YAMAHA DX11 synthesizer +// +// Version 0.5.5 +// +// +// +// +// Copyright (c) 2004-2006 Nil Geisweiller +// +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA or point your web browser to http://www.gnu.org. +//=========================================================================== + +#include "deicsonzeplugin.h" +#include "plugin.h" +#include "plugingui.h" +#include "ctrl.h" +#include "fastlog.h" +#include "muse/midi.h" +#include "awl/floatentry.h" +#include "awl/slider.h" +#include "awl/checkbox.h" + +using Awl::FloatEntry; +using Awl::Slider; +using Awl::CheckBox; + +class PluginDialog; + +void DeicsOnze::initPluginReverb(Plugin* pluginReverb) { + //init plugin + if(_pluginIReverb) delete(_pluginIReverb); + _pluginIReverb = new PluginI(NULL); + + _pluginIReverb->initPluginInstance(pluginReverb, 2); + + for(int i = 0; i < pluginReverb->parameter(); i++) { + Ctrl* c = new Ctrl(); + c->setCurVal((float)pluginReverb->defaultValue(i)); + _pluginIReverb->setControllerList(c); + //setReverbParam(i, pluginReverb->defaultValue(i)); + } + + //send build gui to the gui + char data; + data = SYSEX_BUILDGUIREVERB; + MidiEvent evSysex(0,ME_SYSEX,(const unsigned char*)&data, 1); + _gui->writeEvent(evSysex); +} + +void DeicsOnze::initPluginChorus(Plugin* pluginChorus) { + if(_pluginIChorus) delete(_pluginIChorus); + _pluginIChorus = new PluginI(NULL); + + _pluginIChorus->initPluginInstance(pluginChorus, 2); + + for(int i = 0; i < pluginChorus->parameter(); i++) { + Ctrl* c = new Ctrl(); + c->setCurVal((float)pluginChorus->defaultValue(i)); + _pluginIChorus->setControllerList(c); + //setChorusParam(i, pluginChorus->defaultValue(i)); +} + + //send build gui to the gui + char data; + data = SYSEX_BUILDGUICHORUS; + MidiEvent evSysex(0,ME_SYSEX,(const unsigned char*)&data, 1); + _gui->writeEvent(evSysex); +} + +void DeicsOnze::initPluginDelay(Plugin* pluginDelay) { + if(_pluginIDelay) delete(_pluginIDelay); + _pluginIDelay = new PluginI(NULL); + + _pluginIDelay->initPluginInstance(pluginDelay, 2); + + for(int i = 0; i < pluginDelay->parameter(); i++) { + Ctrl* c = new Ctrl(); + c->setCurVal((float)pluginDelay->defaultValue(i)); + _pluginIDelay->setControllerList(c); + //setChorusParam(i, pluginDelay->defaultValue(i)); + } + setDelayDryWet(1); + + float f; + char dataDelayBPM[sizeof(float)+1]; + dataDelayBPM[0] = SYSEX_DELAYBPM; + f = getDelayBPM(); + memcpy(&dataDelayBPM[1], &f, sizeof(float)); + MidiEvent evSysexDelayBPM(0,ME_SYSEX, + (const unsigned char*)dataDelayBPM, + sizeof(float)+1); + _gui->writeEvent(evSysexDelayBPM); + char dataDelayBeatRatio[sizeof(float)+1]; + dataDelayBeatRatio[0] = SYSEX_DELAYBEATRATIO; + f = getDelayBeatRatio(); + memcpy(&dataDelayBeatRatio[1], &f, sizeof(float)); + MidiEvent evSysexDelayBeatRatio(0,ME_SYSEX, + (const unsigned char*)dataDelayBeatRatio, + sizeof(float)+1); + _gui->writeEvent(evSysexDelayBeatRatio); + char dataDelayFeedback[sizeof(float)+1]; + dataDelayFeedback[0] = SYSEX_DELAYFEEDBACK; + f = getDelayFeedback(); + memcpy(&dataDelayFeedback[1], &f, sizeof(float)); + MidiEvent evSysexDelayFeedback(0,ME_SYSEX, + (const unsigned char*)dataDelayFeedback, + sizeof(float)+1); + _gui->writeEvent(evSysexDelayFeedback); + char dataDelayLFOFreq[sizeof(float)+1]; + dataDelayLFOFreq[0] = SYSEX_DELAYLFOFREQ; + f = getDelayLFOFreq(); + memcpy(&dataDelayLFOFreq[1], &f, sizeof(float)); + MidiEvent evSysexDelayLFOFreq(0,ME_SYSEX, + (const unsigned char*)dataDelayLFOFreq, + sizeof(float)+1); + _gui->writeEvent(evSysexDelayLFOFreq); + char dataDelayLFODepth[sizeof(float)+1]; + dataDelayLFODepth[0] = SYSEX_DELAYLFODEPTH; + f = getDelayLFODepth(); + memcpy(&dataDelayLFODepth, &f, sizeof(float)+1); + MidiEvent evSysexDelayLFODepth(0,ME_SYSEX, + (const unsigned char*)dataDelayLFODepth, + sizeof(float)+1); + _gui->writeEvent(evSysexDelayLFODepth); +} + +void DeicsOnze::setReverbParam(int index, double val) { + if(_pluginIReverb) _pluginIReverb->controller(index)->setCurVal((float)val); + else printf("Warning : no DeicsOnze reverb loaded\n"); +} +void DeicsOnze::setChorusParam(int index, double val) { + if(_pluginIChorus) _pluginIChorus->controller(index)->setCurVal((float)val); + else printf("Warning : no DeicsOnze chorus loaded\n"); +} + +double DeicsOnze::getReverbParam(int index) { + if(_pluginIReverb) return _pluginIReverb->controller(index)->curVal().f; + else { + return 0.0; + printf("Warning : no DeicsOnze reverb loaded\n"); + } +} + +double DeicsOnze::getChorusParam(int index) { + if(_pluginIChorus) return _pluginIChorus->controller(index)->curVal().f; + else { + return 0.0; + printf("Warning : no DeicsOnze chorus loaded\n"); + } +} + +void DeicsOnzeGui::addPluginCheckBox(int index, QString text, bool toggled, + QWidget* parent, QGridLayout* grid, + bool isReverb) { + CheckBox* cb = new CheckBox(parent); + cb->setId(index); + cb->setText(text); + cb->setChecked(toggled); + grid->addWidget(cb, index, 0); + //push on vectors + if(isReverb) { + _reverbSliderVector.push_back(NULL); + _reverbFloatEntryVector.push_back(NULL); + _reverbCheckBoxVector.push_back(cb); + } + else { + _chorusSliderVector.push_back(NULL); + _chorusFloatEntryVector.push_back(NULL); + _chorusCheckBoxVector.push_back(cb); + } + //connect slots + if(isReverb) { + connect(cb, SIGNAL(valueChanged(double, int)), + this, SLOT(setReverbCheckBox(double, int))); + } + else { + connect(cb, SIGNAL(valueChanged(double, int)), + this, SLOT(setChorusCheckBox(double, int))); + } +} + +void DeicsOnzeGui::addPluginIntSlider(int index, QString text, double min, + double max, double val, QWidget* parent, + QGridLayout* grid, bool isReverb) { + addPluginSlider(index, text, false, min, max, val, parent, grid, isReverb); +} + +void DeicsOnzeGui::addPluginSlider(int index, QString text, bool isLog, + double min, double max, double val, + QWidget* parent, QGridLayout* grid, + bool isReverb) { + QLabel* l = new QLabel(text, parent); + grid->addWidget(l, index, 0); + FloatEntry* f = new FloatEntry(parent); + f->setValue(val); + f->setMinValue(min); + f->setMaxValue(max); + f->setMaximumWidth(72); + grid->addWidget(f, index, 1); + Slider* s = new Slider(parent); + s->setId(index); + s->setLog(isLog); + s->setLogRange(min, max); + s->setValue(val); + s->setOrientation(Qt::Horizontal); + //s->setFixedHeight(h); + s->setLineStep((min-max)/100.0); + s->setPageStep((min-max)/10.0); + grid->addWidget(s, index, 2); + //push on vectors + if(isReverb) { + _reverbSliderVector.push_back(s); + _reverbFloatEntryVector.push_back(f); + _reverbCheckBoxVector.push_back(NULL); + } + else { + _chorusSliderVector.push_back(s); + _chorusFloatEntryVector.push_back(f); + _chorusCheckBoxVector.push_back(NULL); + } + //connect slots + if(isReverb) { + connect(f, SIGNAL(valueChanged(double, int)), + this, SLOT(setReverbFloatEntry(double, int))); + connect(s, SIGNAL(valueChanged(double, int)), + this, SLOT(setReverbSlider(double, int))); + } + else { + connect(f, SIGNAL(valueChanged(double, int)), + this, SLOT(setChorusFloatEntry(double, int))); + connect(s, SIGNAL(valueChanged(double, int)), + this, SLOT(setChorusSlider(double, int))); + } +} + +void DeicsOnzeGui::buildGuiReverb() { + PluginI* plugI = _deicsOnze->_pluginIReverb; + QString name = plugI->name(); + name.resize(name.size()-2); + updateLadspaReverbLineEdit(name); + //build super layout + if(parametersReverbGroupBox->layout()) + delete(parametersReverbGroupBox->layout()); + QGridLayout* superLayout = new QGridLayout(parametersReverbGroupBox); + parametersReverbGroupBox->setLayout(superLayout); + //build super widget + if(_reverbSuperWidget) delete(_reverbSuperWidget); + _reverbSuperWidget = new QWidget(parametersReverbGroupBox); + superLayout->addWidget(_reverbSuperWidget); + //build grid + QGridLayout* grid = new QGridLayout(_reverbSuperWidget); + _reverbSuperWidget->setLayout(grid); + grid->setSpacing(0); + //init vectors + if(!_reverbSliderVector.empty()) _reverbSliderVector.clear(); + if(!_reverbFloatEntryVector.empty()) _reverbFloatEntryVector.clear(); + if(!_reverbCheckBoxVector.empty()) _reverbCheckBoxVector.clear(); + //build sliders + for(int i = 0; i < plugI->plugin()->parameter(); i++) { + double min, max, val; + plugI->range(i, &min, &max); + val = _deicsOnze->getReverbParam(i); + if(plugI->isBool(i)) + addPluginCheckBox(i, plugI->getParameterName(i), val > 0.0, + _reverbSuperWidget, grid, true); + else if(plugI->isInt(i)) { + addPluginIntSlider(i, plugI->getParameterName(i), rint(min), rint(max), + rint(val), _reverbSuperWidget, grid, true); + } + else { + addPluginSlider(i, plugI->getParameterName(i), plugI->isLog(i), + min, max, val, _reverbSuperWidget, grid, true); + } + } + //update colors of the new sliders (and the whole gui actually) + setEditTextColor(reinterpret_cast(*etColor)); + setEditBackgroundColor(reinterpret_cast(*ebColor)); +} + +void DeicsOnzeGui::buildGuiChorus() { + PluginI* plugI = _deicsOnze->_pluginIChorus; + QString name = plugI->name(); + name.resize(name.size()-2); + updateLadspaChorusLineEdit(name); + //build super layout + if(parametersChorusGroupBox->layout()) + delete(parametersChorusGroupBox->layout()); + QGridLayout* superLayout = new QGridLayout(parametersChorusGroupBox); + parametersChorusGroupBox->setLayout(superLayout); + //build super widget + if(_chorusSuperWidget) delete(_chorusSuperWidget); + _chorusSuperWidget = new QWidget(parametersChorusGroupBox); + superLayout->addWidget(_chorusSuperWidget); + //build grid + QGridLayout* grid = new QGridLayout(_chorusSuperWidget); + _chorusSuperWidget->setLayout(grid); + grid->setSpacing(2); + //init vectors + if(!_chorusSliderVector.empty()) _chorusSliderVector.clear(); + if(!_chorusFloatEntryVector.empty()) _chorusFloatEntryVector.clear(); + if(!_chorusCheckBoxVector.empty()) _chorusCheckBoxVector.clear(); + //build sliders + for(int i = 0; i < plugI->plugin()->parameter(); i++) { + double min, max, val; + plugI->range(i, &min, &max); + val = _deicsOnze->getChorusParam(i); + if(plugI->isBool(i)) + addPluginCheckBox(i, plugI->getParameterName(i), val > 0.0, + _chorusSuperWidget, grid, false); + else if(plugI->isInt(i)) { + addPluginIntSlider(i, plugI->getParameterName(i), rint(min), rint(max), + rint(val), _chorusSuperWidget, grid, false); + } + else { + addPluginSlider(i, plugI->getParameterName(i), plugI->isLog(i), + min, max, val, _chorusSuperWidget, grid, false); + } + } + //update colors of the new sliders (and the whole gui actually) + setEditTextColor(reinterpret_cast(*etColor)); + setEditBackgroundColor(reinterpret_cast(*ebColor)); +} + +//setReverbCheckBox is used, by the way, to send the value +//of the parameter because it sends a double and does not +//change any thing +void DeicsOnzeGui::setReverbCheckBox(double v, int i) { + float f = (float)v; + unsigned char* message = new unsigned char[2+sizeof(float)]; + message[0]=SYSEX_REVERBPARAM; + if(i<256) { + message[1]=(unsigned char)i; + memcpy(&message[2], &f, sizeof(float)); + sendSysex(message, 2+sizeof(float)); + } + else printf("setReverbCheckBox Error : cannot send controller upper than 225\n"); +} + +//setChorusCheckBox is used, by the way, to send the value +//of the parameter because it sends a double and does not +//change any thing +void DeicsOnzeGui::setChorusCheckBox(double v, int i) { + float f = (float)v; + unsigned char* message = new unsigned char[2+sizeof(float)]; + message[0]=SYSEX_CHORUSPARAM; + if(i<256) { + message[1]=(unsigned char)i; + memcpy(&message[2], &f, sizeof(float)); + sendSysex(message, 2+sizeof(float)); + } + else printf("setChorusCheckBox Error : cannot send controller upper than 225\n"); +} + +void DeicsOnzeGui::setReverbFloatEntry(double v, int i) { + if(_deicsOnze->_pluginIReverb) { + if(_deicsOnze->_pluginIReverb->isInt(i)) v = rint(v); + updateReverbFloatEntry(v, i); + updateReverbSlider(v, i); + setReverbCheckBox(v, i); //because this send the SYSEX + } + else printf("Warning : no DeicsOnze reverb loaded\n"); +} +void DeicsOnzeGui::setReverbSlider(double v, int i) { + if(_deicsOnze->_pluginIReverb) { + if(_deicsOnze->_pluginIReverb->isInt(i)) v = rint(v); + updateReverbFloatEntry(v, i); + updateReverbSlider(v, i); + setReverbCheckBox(v, i); //because this send the SYSEX + } + else printf("Warning : no DeicsOnze reverb loaded\n"); +} +void DeicsOnzeGui::setChorusFloatEntry(double v, int i) { + if(_deicsOnze->_pluginIReverb) { + if(_deicsOnze->_pluginIChorus->isInt(i)) v = rint(v); + updateChorusFloatEntry(v, i); + updateChorusSlider(v, i); + setChorusCheckBox(v, i); //because this send the SYSEX + } + else printf("Warning : no DeicsOnze chorus loaded\n"); +} +void DeicsOnzeGui::setChorusSlider(double v, int i) { + if(_deicsOnze->_pluginIReverb) { + if(_deicsOnze->_pluginIChorus->isInt(i)) v = rint(v); + updateChorusSlider(v, i); + updateChorusFloatEntry(v, i); + setChorusCheckBox(v, i); //because this send the SYSEX + } + else printf("Warning : no DeicsOnze chorus loaded\n"); +} + +//updates +void DeicsOnzeGui::updateReverbSlider(double v, int i) { + if(i < (int)_reverbSliderVector.size() && _reverbSliderVector[i]) { + _reverbSliderVector[i]->blockSignals(true); + _reverbSliderVector[i]->setValue(v); + _reverbSliderVector[i]->blockSignals(false); + } +} +void DeicsOnzeGui::updateReverbFloatEntry(double v, int i) { + if(i < (int)_reverbFloatEntryVector.size() && _reverbFloatEntryVector[i]) { + _reverbFloatEntryVector[i]->blockSignals(true); + _reverbFloatEntryVector[i]->setValue(v); + _reverbFloatEntryVector[i]->blockSignals(false); + } +} +void DeicsOnzeGui::updateChorusSlider(double v, int i) { + if(i < (int)_reverbSliderVector.size() && _reverbSliderVector[i]) { + _chorusSliderVector[i]->blockSignals(true); + _chorusSliderVector[i]->setValue(v); + _chorusSliderVector[i]->blockSignals(false); + } +} +void DeicsOnzeGui::updateChorusFloatEntry(double v, int i) { + if(i < (int)_chorusFloatEntryVector.size() && _chorusFloatEntryVector[i]) { + _chorusFloatEntryVector[i]->blockSignals(true); + _chorusFloatEntryVector[i]->setValue(v); + _chorusFloatEntryVector[i]->blockSignals(false); + } +} + +//------------------------------------------------------------- +// set Delay +//------------------------------------------------------------- +void DeicsOnze::setDelayBPM(float val) { + if(_pluginIDelay) _pluginIDelay->controller(0)->setCurVal(val); + else printf("Warning : no DeicsOnze delay loaded\n"); +} +void DeicsOnze::setDelayBeatRatio(float val) { + if(_pluginIDelay) _pluginIDelay->controller(1)->setCurVal(val); + else printf("Warning : no DeicsOnze delay loaded\n"); +} +float DeicsOnze::getDelayBPM() { + if(_pluginIDelay) return _pluginIDelay->controller(0)->curVal().f; + else { + printf("Warning : no DeicsOnze delay loaded\n"); + return 0.0; + } +} +float DeicsOnze::getDelayBeatRatio() { + if(_pluginIDelay) return _pluginIDelay->controller(1)->curVal().f; + else { + printf("Warning : no DeicsOnze delay loaded\n"); + return 0.0; + } +} +void DeicsOnze::setDelayFeedback(float val) { + if(_pluginIDelay) return _pluginIDelay->controller(2)->setCurVal(val); + else printf("Warning : no DeicsOnze delay loaded\n"); +} +float DeicsOnze::getDelayFeedback() { + if(_pluginIDelay) return _pluginIDelay->controller(2)->curVal().f; + else { + printf("Warning : no DeicsOnze delay loaded\n"); + return 0.0; + } +} +void DeicsOnze::setDelayLFOFreq(float val) { + if(_pluginIDelay) _pluginIDelay->controller(3)->setCurVal(val); + else printf("Warning : no DeicsOnze delay loaded\n"); +} +float DeicsOnze::getDelayLFOFreq() { + if(_pluginIDelay) return _pluginIDelay->controller(3)->curVal().f; + else { + printf("Warning : no DeicsOnze delay loaded\n"); + return 0.0; + } +} +void DeicsOnze::setDelayLFODepth(float val) { + if(_pluginIDelay) _pluginIDelay->controller(4)->setCurVal(val); + else printf("Warning : no DeicsOnze delay loaded\n"); +} +float DeicsOnze::getDelayLFODepth() { + if(_pluginIDelay) return _pluginIDelay->controller(4)->curVal().f; + else { + printf("Warning : no DeicsOnze delay loaded\n"); + return 0.0; + } +} +void DeicsOnze::setDelayDryWet(float val) { + if(_pluginIDelay) _pluginIDelay->controller(5)->setCurVal(val); + else printf("Warning : no DeicsOnze delay loaded\n"); +} diff --git a/attic/muse_qt4_evolution/synti/deicsonze/deicsonzeplugin.h b/attic/muse_qt4_evolution/synti/deicsonze/deicsonzeplugin.h new file mode 100644 index 00000000..d9527e23 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/deicsonzeplugin.h @@ -0,0 +1,40 @@ +//=========================================================================== +// +// DeicsOnze an emulator of the YAMAHA DX11 synthesizer +// +// Version 0.5.5 +// +// +// +// +// Copyright (c) 2004-2006 Nil Geisweiller +// +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA or point your web browser to http://www.gnu.org. +//=========================================================================== + +#ifndef __DEICSONZEPLUGIN_H +#define __DEICSONZEPLUGIN_H + +#include "deicsonze.h" +#include "deicsonzegui.h" +#include "plugins/pandelay/pandelaymodel.h" + +class DeicsOnze; +class DeicsOnzeGui; + +#endif diff --git a/attic/muse_qt4_evolution/synti/deicsonze/deicsonzepreset.cpp b/attic/muse_qt4_evolution/synti/deicsonze/deicsonzepreset.cpp new file mode 100644 index 00000000..ef114014 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/deicsonzepreset.cpp @@ -0,0 +1,1194 @@ +//=========================================================================== +// +// DeicsOnze an emulator of the YAMAHA DX11 synthesizer +// +// Version 0.5.5 +// +// deicsonzepreset.cpp +// +// +// Copyright (c) 2004-2006 Nil Geisweiller +// +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA or point your web browser to http://www.gnu.org. +//=========================================================================== + +#include "deicsonzepreset.h" +#include +#include + +//----------------------------------------------------------- +// Constructor destructor +//----------------------------------------------------------- +Preset::Preset() {_subcategory=NULL;_isUsed=false;initPreset();} +Preset::Preset(Subcategory* sub) { + _subcategory=sub; + _isUsed=false; + initPreset(); + if(sub) sub->_presetVector.push_back(this); +} +Preset::Preset(Subcategory* sub, int pr) { + _subcategory=sub; + _isUsed=false; + initPreset(); + prog=pr; + if(sub) sub->_presetVector.push_back(this); +} +Preset::~Preset() { + if(_subcategory) { + std::vector::iterator iB=_subcategory->_presetVector.begin(); + std::vector::iterator iE=_subcategory->_presetVector.end(); + std::vector::iterator iP=std::find(iB, iE, this); + if(iP!=iE) _subcategory->_presetVector.erase(iP); + else printf("Error : preset %s not found\n", name.c_str()); + } +} +//---------------------------------------------------------- +// setIsUsed(bool b) +// set the flag _isUsed and transmit in the parents +//---------------------------------------------------------- +void Preset::setIsUsed(bool b) { + if(!_isUsed) { + _isUsed=b; + if(_subcategory) { + _subcategory->_isUsed=b; + if(_subcategory->_category) { + _subcategory->_category->_isUsed=b; + } + } + } +} +//---------------------------------------------------------- +// getHBankLBankProg +// return the hbank, lbank and prog of the preset +// warning : if there is not subcategory of category +// the value l or h are let unchanged +//---------------------------------------------------------- +void Preset::getHBankLBankProg(int* h, int* l, int* p) { + *p = prog; + if(_subcategory) { + *l = _subcategory->_lbank; + if(_subcategory->_category) *h = _subcategory->_category->_hbank; + } +} +//---------------------------------------------------------- +// linkSubcategory +// links the preset to a subcategory parent and erase itself +// from the last subcategory if not NULL +//---------------------------------------------------------- +void Preset::linkSubcategory(Subcategory* sub) { + if(_subcategory) { + std::vector pv=_subcategory->_presetVector; + std::vector::iterator iP=find(pv.begin(),pv.end(),this); + if(iP!=pv.end()) pv.erase(iP); + else printf("Error linkSubcategory: preset %s not found\n", + name.c_str()); + } + _subcategory=sub; + if(sub) sub->_presetVector.push_back(this); +} +//---------------------------------------------------------- +// linkCategory +// links the subcategory to a category parent and erase itself +// from the last category if not NULL +//---------------------------------------------------------- +void Subcategory::linkCategory(Category* cat) { + if(_category) { + std::vector sv=_category->_subcategoryVector; + std::vector::iterator iS=find(sv.begin(),sv.end(),this); + if(iS!=sv.end()) sv.erase(iS); + else printf("Error linkCategory: preset %s not found\n", + _subcategoryName.c_str()); + } + _category=cat; + if(cat) cat->_subcategoryVector.push_back(this); +} + + +//---------------------------------------------------------- +// linkSet +// links the category to a set parent (there is always only one set) +//---------------------------------------------------------- +void Category::linkSet(Set* s) { + _set=s; + if(s) s->_categoryVector.push_back(this); +} + +//---------------------------------------------------------- +// Subcategory constructor and destruction +//---------------------------------------------------------- +Subcategory::Subcategory() {_category=NULL;} +Subcategory::Subcategory(Category* cat) { + _category=cat; + _isUsed=false; + if(cat) cat->_subcategoryVector.push_back(this); +} +Subcategory::Subcategory(const std::string name) { + _category=NULL; + _isUsed=false; + _subcategoryName=name; +} +Subcategory::Subcategory(Category* cat, const std::string name, int lbank) { + _category=cat; + _isUsed=false; + _subcategoryName=name; + _lbank=lbank; + if(cat) cat->_subcategoryVector.push_back(this); +} +Subcategory::~Subcategory() { + while(!_presetVector.empty()) delete(*_presetVector.begin()); + if(_category) { + std::vector::iterator + iB=_category->_subcategoryVector.begin(); + std::vector::iterator + iE=_category->_subcategoryVector.end(); + std::vector::iterator iS=std::find(iB, iE, this); + if(iS!=iE) _category->_subcategoryVector.erase(iS); + else printf("Error : subcategory %s not found\n", + _subcategoryName.c_str()); + } +} + +//-------------------------------------------------------- +// Category constructor destructor +//-------------------------------------------------------- +Category::Category() {_set=NULL;_isUsed=false;} +Category::Category(Set* s) { + _set=s; + _isUsed=false; + if(s) s->_categoryVector.push_back(this); +} +Category::Category(Set* s,const std::string name, int hbank) { + _set=s; + _isUsed=false; + _categoryName=name; + _hbank=hbank; + if(s) s->_categoryVector.push_back(this); +} +Category::~Category() { + while(!_subcategoryVector.empty()) delete(*_subcategoryVector.begin()); + if(_set) { + std::vector::iterator iB=_set->_categoryVector.begin(); + std::vector::iterator iE=_set->_categoryVector.end(); + std::vector::iterator iC=std::find(iB, iE, this); + if(iC!=iE) _set->_categoryVector.erase(iC); + else printf("Error : category %s not found\n", _categoryName.c_str()); + } +} + +//--------------------------------------------------------- +// initPreset +// put the preset in the initial state as defined by YAMAHA +//--------------------------------------------------------- +void Preset::initPreset() { + //algorithm + algorithm=FIRST; + //feedeback + feedback=0; + //lfo + lfo.wave=TRIANGL; + lfo.speed=35; + lfo.delay=0; + lfo.pModDepth=0; + lfo.aModDepth=0; + lfo.sync=false; + //sensitivity + sensitivity.pitch=6; + sensitivity.amplitude=0; + sensitivity.ampOn[0]=false; + sensitivity.ampOn[1]=false; + sensitivity.ampOn[2]=false; + sensitivity.ampOn[3]=false; + sensitivity.egBias[0]=0; + sensitivity.egBias[1]=0; + sensitivity.egBias[2]=0; + sensitivity.egBias[3]=0; + sensitivity.keyVelocity[0]=0; + sensitivity.keyVelocity[1]=0; + sensitivity.keyVelocity[2]=0; + sensitivity.keyVelocity[3]=0; + //frequency + frequency[0].ratio=1.0; + frequency[1].ratio=1.0; + frequency[2].ratio=1.0; + frequency[3].ratio=1.0; + frequency[0].isFix=false; + frequency[1].isFix=false; + frequency[2].isFix=false; + frequency[3].isFix=false; + frequency[0].freq=255.0; + frequency[1].freq=255.0; + frequency[2].freq=255.0; + frequency[3].freq=255.0; + //oscWave + oscWave[0]=W1; + oscWave[1]=W1; + oscWave[2]=W1; + oscWave[3]=W1; + //detune + detune[0]=0; + detune[1]=0; + detune[2]=0; + detune[3]=0; + //eg + eg[0].ar=31; + eg[1].ar=31; + eg[2].ar=31; + eg[3].ar=31; + eg[0].d1r=31; + eg[1].d1r=31; + eg[2].d1r=31; + eg[3].d1r=31; + eg[0].d1l=15; + eg[1].d1l=15; + eg[2].d1l=15; + eg[3].d1l=15; + eg[0].d2r=0; + eg[1].d2r=0; + eg[2].d2r=0; + eg[3].d2r=0; + eg[0].rr=15; + eg[1].rr=15; + eg[2].rr=15; + eg[3].rr=15; + eg[0].egShift=VOF; + eg[1].egShift=VOF; + eg[2].egShift=VOF; + eg[3].egShift=VOF; + //pitchEg + pitchEg.pr1=99; + pitchEg.pr2=99; + pitchEg.pr3=99; + pitchEg.pl1=50; + pitchEg.pl2=50; + pitchEg.pl3=50; + //outLevel + outLevel[0]=90; + outLevel[1]=0; + outLevel[2]=0; + outLevel[3]=0; + //scaling + scaling.rate[0]=0; + scaling.rate[1]=0; + scaling.rate[2]=0; + scaling.rate[3]=0; + scaling.level[0]=0; + scaling.level[1]=0; + scaling.level[2]=0; + scaling.level[3]=0; + //function + function.transpose=0; + function.mode=POLY; + function.pBendRange=4; + function.portamento=FULL; + function.portamentoTime=0; + function.fcVolume=40; + function.fcPitch=0; + function.fcAmplitude=0; + function.mwPitch=50; + function.mwAmplitude=0; + function.bcPitch=0; + function.bcAmplitude=0; + function.bcPitchBias=0; + function.bcEgBias=0; + function.atPitch=0; + function.atAmplitude=0; + function.atPitchBias=0; + function.atEgBias=0; + function.reverbRate=0; + //globalDetune=0; + //Name + name="INITVOICE"; +} +//--------------------------------------------------------- +// Preset::merge +// copy the preset +//--------------------------------------------------------- +void Preset::merge(Preset* p) { + if(p) { + //algorithm + algorithm=p->algorithm; + //feedeback + feedback=p->feedback; + //lfo + lfo.wave=p->lfo.wave; + lfo.speed=p->lfo.speed; + lfo.delay=p->lfo.delay; + lfo.pModDepth=p->lfo.pModDepth; + lfo.aModDepth=p->lfo.aModDepth; + lfo.sync=p->lfo.sync; + //sensitivity + sensitivity.pitch=p->sensitivity.pitch; + sensitivity.amplitude=p->sensitivity.amplitude; + for(int k=0; ksensitivity.ampOn[k]; + sensitivity.egBias[k]=p->sensitivity.egBias[k]; + sensitivity.keyVelocity[k]=p->sensitivity.keyVelocity[k]; + //frequency + frequency[k].ratio=p->frequency[k].ratio; + frequency[k].isFix=p->frequency[k].isFix; + frequency[k].freq=p->frequency[k].freq; + //oscWave + oscWave[k]=p->oscWave[k]; + //detune + detune[k]=p->detune[k]; + //eg + eg[k].ar=p->eg[k].ar; + eg[k].d1r=p->eg[k].d1r; + eg[k].d1l=p->eg[k].d1l; + eg[k].d2r=p->eg[k].d2r; + eg[k].rr=p->eg[k].rr; + eg[k].egShift=p->eg[k].egShift; + //outLevel + outLevel[k]=p->outLevel[k]; + //scaling + scaling.rate[k]=p->scaling.rate[k]; + scaling.level[k]=p->scaling.level[k]; + } + //pitchEg + pitchEg.pr1=p->pitchEg.pr1; + pitchEg.pr2=p->pitchEg.pr2; + pitchEg.pr3=p->pitchEg.pr3; + pitchEg.pl1=p->pitchEg.pl1; + pitchEg.pl2=p->pitchEg.pl2; + pitchEg.pl3=p->pitchEg.pl3; + //function + function.transpose=p->function.transpose; + function.mode=p->function.mode; + function.pBendRange=p->function.pBendRange; + function.portamento=p->function.portamento; + function.portamentoTime=p->function.portamentoTime; + function.fcVolume=p->function.fcVolume; + function.fcPitch=p->function.fcPitch; + function.fcAmplitude=p->function.fcAmplitude; + function.mwPitch=p->function.mwPitch; + function.mwAmplitude=p->function.mwAmplitude; + function.bcPitch=p->function.bcPitch; + function.bcAmplitude=p->function.bcAmplitude; + function.bcPitchBias=p->function.bcPitchBias; + function.bcEgBias=p->function.bcEgBias; + function.atPitch=p->function.atPitch; + function.atAmplitude=p->function.atAmplitude; + function.atPitchBias=p->function.atPitchBias; + function.atEgBias=p->function.atEgBias; + function.reverbRate=p->function.reverbRate; + //globalDetune=p->globalDetune; + //Name + name=p->name; + } +} +//--------------------------------------------------------- +// findPreset +// return the first preset corresponding of hbank, lbank, prog +//--------------------------------------------------------- +Preset* Subcategory::findPreset(int prog) { + std::vector::iterator pvi; + for(pvi=_presetVector.begin(); pvi!=_presetVector.end(); pvi++) { + if((*pvi)->prog==prog) return(*pvi); + } + return NULL; +} +Preset* Category::findPreset(int lbank, int prog) { + Subcategory* s=findSubcategory(lbank); + if(s) { + Preset* p=s->findPreset(prog); + if(p) return(p); + } + return(NULL); +} +Preset* Set::findPreset(int hbank, int lbank, int prog) { + Category* c=findCategory(hbank); + if(c) { + Preset* p=c->findPreset(lbank, prog); + if(p) return(p); + } + return NULL; +} + +//--------------------------------------------------------- +// isFreeHBank, firstFreeHBank -1 otherwise +//--------------------------------------------------------- +bool Set::isFreeHBank(int hbank) { + if(findCategory(hbank)) return(false); + else return(true); +} +int Set::firstFreeHBank() { + for(int hbank=0; hbank<128; hbank++) if(isFreeHBank(hbank)) return(hbank); + return(-1); +} +//-------------------------------------------------------------- +// Set::merge +//-------------------------------------------------------------- +void Set::merge(Category* c) { + if(isFreeHBank(c->_hbank)) c->linkSet(this); + else { + Category* cFromSet=findCategory(c->_hbank); + cFromSet->_categoryName=c->_categoryName; + for(std::vector::iterator + i=c->_subcategoryVector.begin(); + i!=c->_subcategoryVector.end(); i++) cFromSet->merge(*i); + //delete(c); + } +} + +bool Category::isFreeLBank(int lbank) { + if(findSubcategory(lbank)) return(false); + else return(true); +} +int Category::firstFreeLBank() { + for(int lbank=0; lbank<128; lbank++) if(isFreeLBank(lbank)) return(lbank); + return(-1); +} +//-------------------------------------------------------------- +// Category::merge +//-------------------------------------------------------------- +void Category::merge(Subcategory* s) { + if(isFreeLBank(s->_lbank)) s->linkCategory(this); + else { + Subcategory* sFromCat=findSubcategory(s->_lbank); + sFromCat->_subcategoryName=s->_subcategoryName; + for(std::vector::iterator + i=s->_presetVector.begin(); + i!=s->_presetVector.end(); i++) sFromCat->merge(*i); + //delete(s); + } +} +//--------------------------------------------------------- +// Category::unlink +// unlink the subcategories, so don't delete them when delete +//--------------------------------------------------------- +void Category::unlink() { + while(!_subcategoryVector.empty()) + _subcategoryVector.erase(_subcategoryVector.begin()); +} + +bool Subcategory::isFreeProg(int pr) { + if(findPreset(pr)) return(false); + else return(true); +} +int Subcategory::firstFreeProg() { + for(int pr=0; pr<128; pr++) if(isFreeProg(pr)) return(pr); + return(-1); +} +//--------------------------------------------------------- +// Subcategory::unlink +// unlink the presets, so don't delete them when delete +//--------------------------------------------------------- +void Subcategory::unlink() { + while(!_presetVector.empty()) _presetVector.erase(_presetVector.begin()); +} + +//--------------------------------------------------------- +// findSubcategory +// take hbank and lbank and return the subcategory corresponding, +// NULL if doesn't exist +//--------------------------------------------------------- +Subcategory* Set::findSubcategory(int hbank, int lbank) { + Category* c = findCategory(hbank); + Subcategory* s; + if(c) { + s = c->findSubcategory(lbank); + return s; + } + else return NULL; +} + +//--------------------------------------------------------- +// findCategory +// takes hbank a category and return the first category, +// NULL if doesn't exist +//--------------------------------------------------------- +Category* Set::findCategory(int hbank) { + std::vector::iterator cvi; + for(cvi=_categoryVector.begin(); cvi!=_categoryVector.end(); cvi++) + if((*cvi)->_hbank==hbank) return(*cvi); + return(NULL); +} +//--------------------------------------------------------- +// findSubcategory +// takes lbank a subcategory and return the subcategory +// NULL if doesn't exist +//--------------------------------------------------------- +Subcategory* Category::findSubcategory(int lbank) { + std::vector::iterator svi; + for(svi=_subcategoryVector.begin(); svi!=_subcategoryVector.end(); svi++) + if((*svi)->_lbank==lbank) return(*svi); + return(NULL); +} +//-------------------------------------------------------------- +// Subcategory::merge +//-------------------------------------------------------------- +void Subcategory::merge(Preset* p) { + if(isFreeProg(p->prog)) p->linkSubcategory(this); + else { + Preset* pFromSub=findPreset(p->prog); + pFromSub->merge(p); + } +} + +//--------------------------------------------------------- +// readSet +//--------------------------------------------------------- +void Set::readSet(QDomNode setNode) { + while(!setNode.isNull()) { + QDomElement setEl = setNode.toElement(); + if (setEl.isNull()) + continue; + if (setEl.tagName() == "setName") + _setName=setEl.text().toAscii().data(); + if (setEl.tagName() == "deicsOnzeCategory") { + //load category + QString version = setEl.attribute(QString("version")); + if (version == "1.0") { + Category* lCategory = new Category(); + lCategory->readCategory(setNode.firstChild()); + //printf("Ready to merge!\n"); + merge(lCategory); + } + } + setNode = setNode.nextSibling(); + } +} + +//--------------------------------------------------------- +// writeSet +//--------------------------------------------------------- +void Set::writeSet(AL::Xml* xml, bool onlyUsed) { + xml->stag("deicsOnzeSet version=\"1.0\""); + xml->tag("setName", QString(_setName.c_str())); + for(std::vector::iterator i=_categoryVector.begin(); + i!=_categoryVector.end(); i++) (*i)->writeCategory(xml, onlyUsed); + xml->etag("deicsOnzeSet"); +} + +//--------------------------------------------------------- +// readCategory +//--------------------------------------------------------- +void Category::readCategory(QDomNode catNode) { + while(!catNode.isNull()) { + QDomElement catEl = catNode.toElement(); + if (catEl.isNull()) + continue; + if (catEl.tagName() == "categoryName") + _categoryName=catEl.text().toAscii().data(); + if (catEl.tagName() == "hbank") + _hbank=catEl.text().toInt(); + if (catEl.tagName() == "deicsOnzeSubcategory") { + //load Subcategory + QString version = catEl.attribute(QString("version")); + if (version == "1.0") { + Subcategory* lSubcategory = new Subcategory(this); + lSubcategory->readSubcategory(catNode.firstChild()); + } + } + catNode = catNode.nextSibling(); + } +} + +//--------------------------------------------------------- +// writeCategory +//--------------------------------------------------------- +void Category::writeCategory(AL::Xml* xml, bool onlyUsed) { + if((!onlyUsed || _isUsed)) { + xml->stag("deicsOnzeCategory version=\"1.0\""); + xml->tag("categoryName", QString(_categoryName.c_str())); + xml->tag("hbank", _hbank); + for(std::vector::iterator i=_subcategoryVector.begin(); + i!=_subcategoryVector.end(); i++) + (*i)->writeSubcategory(xml, onlyUsed); + xml->etag("deicsOnzeCategory"); + } +} + +//--------------------------------------------------------- +// readSubcategory +//--------------------------------------------------------- +void Subcategory::readSubcategory(QDomNode subNode) { + while(!subNode.isNull()) { + QDomElement subEl = subNode.toElement(); + if (subEl.isNull()) + continue; + if (subEl.tagName() == "subcategoryName") + _subcategoryName=subEl.text().toAscii().data(); + if (subEl.tagName() == "lbank") + _lbank=subEl.text().toInt(); + if (subEl.tagName() == "deicsOnzePreset") { + //load preset + QString version = subEl.attribute(QString("version")); + if (version == "1.0") { + Preset* lPreset = new Preset(this); + lPreset->readPreset(subNode.firstChild()); + } + } + subNode = subNode.nextSibling(); + } +} + +//--------------------------------------------------------- +// writeSubcategory +//--------------------------------------------------------- +void Subcategory::writeSubcategory(AL::Xml* xml, bool onlyUsed) { + if((!onlyUsed || _isUsed)) { + xml->stag("deicsOnzeSubcategory version=\"1.0\""); + xml->tag("subcategoryName", QString(_subcategoryName.c_str())); + xml->tag("lbank", _lbank); + for(std::vector::iterator i=_presetVector.begin(); + i!=_presetVector.end(); i++) (*i)->writePreset(xml, onlyUsed); + xml->etag("deicsOnzeSubcategory"); + } +} + +//--------------------------------------------------------- +// readPreset +//--------------------------------------------------------- +void Preset::readPreset(QDomNode presetNode) { + while(!presetNode.isNull()) { + QDomElement presetEl = presetNode.toElement(); + if (presetEl.isNull()) + continue; + //algorithm + if(presetEl.tagName()==ALGSTR) + algorithm=(presetEl.text()=="FIRST"? FIRST: + (presetEl.text()=="SECOND"? SECOND: + (presetEl.text()=="THIRD"? THIRD: + (presetEl.text()=="FOURTH"? FOURTH: + (presetEl.text()=="FIFTH"? FIFTH: + (presetEl.text()=="SIXTH"? SIXTH: + (presetEl.text()=="SEVENTH"? SEVENTH:EIGHTH))))))); + //feedback + else if(presetEl.tagName()==FEEDBACKSTR) + feedback=presetEl.text().toInt(); + //quick edit + //else if(presetEl.tagName()==FINEBRIGHTNESSSTR) + // brightness=presetEl.text().toInt(); + //else if(presetEl.tagName()==MODULATIONSTR) + // modulation=(unsigned char)presetEl.text().toInt(); + //else if(presetEl.tagName()==GLOBALDETUNESTR) + // globalDetune=presetEl.text().toInt(); + //else if(presetEl.tagName()==ATTACKSTR) + // attack=presetEl.text().toInt(); + //else if(presetEl.tagName()==RELEASESTR) + // release=presetEl.text().toInt(); + //lfo + else if(presetEl.tagName()=="lfo") { + QDomNode lfoNode = presetNode.firstChild(); + while(!lfoNode.isNull()) { + QDomElement lfoEl = lfoNode.toElement(); + if (lfoEl.isNull()) + continue; + if(lfoEl.tagName()==WAVESTR) + lfo.wave=(lfoEl.text()=="SAWUP"? SAWUP: + (lfoEl.text()=="SQUARE"? SQUARE: + (lfoEl.text()=="TRIANGL"? TRIANGL:SHOLD))); + else if(lfoEl.tagName()==SPEEDSTR) + lfo.speed=lfoEl.text().toInt(); + else if(lfoEl.tagName()==DELAYSTR) + lfo.delay=lfoEl.text().toInt(); + else if(lfoEl.tagName()==PMODDEPTHSTR) + lfo.pModDepth=lfoEl.text().toInt(); + else if(lfoEl.tagName()==AMODDEPTHSTR) + lfo.aModDepth=lfoEl.text().toInt(); + else if(lfoEl.tagName()==SYNCSTR) + lfo.sync=(lfoEl.text()=="on"? true:false); + lfoNode = lfoNode.nextSibling(); + } + } + //sensitivity + else if(presetEl.tagName()=="sensitivity") { + QDomNode sensitivityNode = presetNode.firstChild(); + while(!sensitivityNode.isNull()) { + QDomElement sensitivityEl = sensitivityNode.toElement(); + if (sensitivityEl.isNull()) + continue; + QString st=sensitivityEl.tagName(); + if(st==PMODSENSSTR) + sensitivity.pitch=sensitivityEl.text().toInt(); + else if(st==AMSSTR) + sensitivity.amplitude=sensitivityEl.text().toInt(); + else if(st.contains(AMESTR, Qt::CaseSensitive)) { + int op = (st.remove(AMESTR, Qt::CaseSensitive)).toInt()-1; + sensitivity.ampOn[op]=(sensitivityEl.text()=="on"? true:false); + } + else if(st.contains(EBSSTR, Qt::CaseSensitive)) { + int op = (st.remove(EBSSTR, Qt::CaseSensitive)).toInt()-1; + sensitivity.egBias[op]=sensitivityEl.text().toInt(); + } + else if(st.contains(KVSSTR, Qt::CaseSensitive)) { + int op = (st.remove(KVSSTR, Qt::CaseSensitive)).toInt()-1; + sensitivity.keyVelocity[op]=sensitivityEl.text().toInt(); + } + sensitivityNode =sensitivityNode.nextSibling(); + } + } + //frequency + else if(presetEl.tagName()=="frequency") { + QDomNode frequencyNode = presetNode.firstChild(); + while(!frequencyNode.isNull()) { + QDomElement frequencyEl = frequencyNode.toElement(); + if (frequencyEl.isNull()) + continue; + QString ft = frequencyEl.tagName(); + if(ft.contains(RATIOSTR, Qt::CaseSensitive)) { + int op = (ft.remove(RATIOSTR, Qt::CaseSensitive)).toInt()-1; + frequency[op].ratio=frequencyEl.text().toDouble(); + } + else if(ft.contains(FIXSTR, Qt::CaseSensitive)) { + int op = (ft.remove(FIXSTR, Qt::CaseSensitive)).toInt()-1; + frequency[op].isFix=(frequencyEl.text()=="yes"?true:false); + } + else if(ft.contains(FIXRANGESTR, Qt::CaseSensitive)) { + int op= (ft.remove(FIXRANGESTR, Qt::CaseSensitive)).toInt()-1; + frequency[op].freq=frequencyEl.text().toDouble(); + } + frequencyNode =frequencyNode.nextSibling(); + } + } + //oscWave + else if(presetEl.tagName().contains(OSWSTR, Qt::CaseSensitive)) { + int op=(presetEl.tagName().remove(OSWSTR, Qt::CaseSensitive)).toInt()-1; + oscWave[op]=(presetEl.text()=="W1"? W1: + (presetEl.text()=="W2"?W2: + (presetEl.text()=="W3"?W3: + (presetEl.text()=="W4"?W4: + (presetEl.text()=="W5"?W5: + (presetEl.text()=="W6"?W6: + (presetEl.text()=="W7"?W7:W8))))))); + + } + //detune + else if(presetEl.tagName().contains(DETSTR, Qt::CaseSensitive)) { + int op=(presetEl.tagName().remove(DETSTR, Qt::CaseSensitive)).toInt()-1; + detune[op]=presetEl.text().toInt(); + } + //eg + else if(presetEl.tagName()=="eg") { + QDomNode egNode = presetNode.firstChild(); + while(!egNode.isNull()) { + QDomElement egEl = egNode.toElement(); + if (egEl.isNull()) + continue; + QString et=egEl.tagName(); + if(et.contains(ARSTR, Qt::CaseSensitive)) { + int op=(et.remove(ARSTR, Qt::CaseSensitive)).toInt()-1; + eg[op].ar=egEl.text().toInt(); + } + else if(et.contains(D1RSTR, Qt::CaseSensitive)) { + int op=(et.remove(D1RSTR, Qt::CaseSensitive)).toInt()-1; + eg[op].d1r=egEl.text().toInt(); + } + else if(et.contains(D1LSTR, Qt::CaseSensitive)) { + int op = (et.remove(D1LSTR, Qt::CaseSensitive)).toInt()-1; + eg[op].d1l=egEl.text().toInt(); + } + else if(et.contains(D2RSTR, Qt::CaseSensitive)) { + int op=(et.remove(D2RSTR, Qt::CaseSensitive)).toInt()-1; + eg[op].d2r=egEl.text().toInt(); + } + else if(et.contains(RRSTR, Qt::CaseSensitive)) { + int op=(et.remove(RRSTR, Qt::CaseSensitive)).toInt()-1; + eg[op].rr=egEl.text().toInt(); + } + else if(et.contains(SHFTSTR, Qt::CaseSensitive)) { + int op=(et.remove(SHFTSTR, Qt::CaseSensitive)).toInt()-1; + eg[op].egShift=(egEl.text()=="VOF"?VOF: + (egEl.text()=="V48"?V48: + (egEl.text()=="V24"?V24:V12))); + } + egNode =egNode.nextSibling(); + } + } + //pitchEg + else if(presetEl.tagName()=="pitchEg") { + QDomNode pitchEgNode = presetNode.firstChild(); + while(!pitchEgNode.isNull()) { + QDomElement pitchEgEl = pitchEgNode.toElement(); + if (pitchEgEl.isNull()) + continue; + QString pt=pitchEgEl.tagName(); + if(pt==PR1STR) pitchEg.pr1=pitchEgEl.text().toInt(); + else if(pt==PR2STR) pitchEg.pr2=pitchEgEl.text().toInt(); + else if(pt==PR3STR) pitchEg.pr3=pitchEgEl.text().toInt(); + else if(pt==PL1STR) pitchEg.pl1=pitchEgEl.text().toInt(); + else if(pt==PL2STR) pitchEg.pl2=pitchEgEl.text().toInt(); + else if(pt==PL3STR) pitchEg.pl3=pitchEgEl.text().toInt(); + pitchEgNode=pitchEgNode.nextSibling(); + } + } + //outLevel + else if(presetEl.tagName().contains(OUTSTR, Qt::CaseSensitive)) { + int op=(presetEl.tagName().remove(OUTSTR, Qt::CaseSensitive)).toInt()-1; + outLevel[op]=presetEl.text().toInt(); + } + //scaling + else if(presetEl.tagName()=="scaling") { + QDomNode scalingNode = presetNode.firstChild(); + while(!scalingNode.isNull()) { + QDomElement scalingEl = scalingNode.toElement(); + if (scalingEl.isNull()) + continue; + QString st=scalingEl.tagName(); + if(st.contains(RSSTR, Qt::CaseSensitive)) { + int op=(st.remove(RSSTR, Qt::CaseSensitive)).toInt()-1; + scaling.rate[op]=scalingEl.text().toInt(); + } + else if(st.contains(LSSTR, Qt::CaseSensitive)) { + int op=(st.remove(LSSTR, Qt::CaseSensitive)).toInt()-1; + scaling.level[op]=scalingEl.text().toInt(); + } + scalingNode =scalingNode.nextSibling(); + } + } + //function + else if(presetEl.tagName()=="function") { + QDomNode functionNode = presetNode.firstChild(); + while(!functionNode.isNull()) { + QDomElement functionEl = functionNode.toElement(); + if (functionEl.isNull()) + continue; + QString ft=functionEl.tagName(); + if(ft==TRANSPOSESTR) + function.transpose=functionEl.text().toInt(); + else if(ft==POLYMODESTR) + function.mode=(functionEl.text()=="POLY"?POLY:MONO); + else if(ft==PBENDRANGESTR) + function.pBendRange=functionEl.text().toInt(); + else if(ft==PORTAMODESTR) + function.portamento= + functionEl.text()=="FINGER"?FINGER:FULL; + else if(ft==PORTATIMESTR) + function.portamentoTime=functionEl.text().toInt(); + else if(ft==FSWSTR) + function.footSw=(functionEl.text()=="POR"?POR:SUS); + else if(ft==FCVOLUMESTR) + function.fcVolume=functionEl.text().toInt(); + else if(ft==FCPITCHSTR) + function.fcPitch=functionEl.text().toInt(); + else if(ft==FCAMPLITUDESTR) + function.fcAmplitude=functionEl.text().toInt(); + else if(ft==MWPITCHSTR) + function.mwPitch=functionEl.text().toInt(); + else if(ft==MWAMPLITUDESTR) + function.mwAmplitude=functionEl.text().toInt(); + else if(ft==BCPITCHSTR) + function.bcPitch=functionEl.text().toInt(); + else if(ft==BCAMPLITUDESTR) + function.bcAmplitude=functionEl.text().toInt(); + else if(ft==BCPITCHBIASSTR) + function.bcPitchBias=functionEl.text().toInt(); + else if(ft==BCEGBIASSTR) + function.bcEgBias=functionEl.text().toInt(); + else if(ft==ATPITCHSTR) + function.atPitch=functionEl.text().toInt(); + else if(ft==ATAMPLITUDESTR) + function.atAmplitude=functionEl.text().toInt(); + else if(ft==ATPITCHBIASSTR) + function.atPitchBias=functionEl.text().toInt(); + else if(ft==ATEGBIASSTR) + function.atEgBias=functionEl.text().toInt(); + else if(ft==REVERBRATESTR) + function.reverbRate=functionEl.text().toInt(); + functionNode=functionNode.nextSibling(); + } + } + //globalDetune + //else if(presetEl.tagName()=="globalDetune") + // globalDetune=presetEl.text().toInt(); + //Names + else if(presetEl.tagName()=="name") + name=presetEl.text().toAscii().data(); + //prog + else if(presetEl.tagName()=="prog") + prog=presetEl.text().toInt(); + presetNode = presetNode.nextSibling(); + } +} + +//--------------------------------------------------------- +// witePreset +//--------------------------------------------------------- +void Preset::writePreset(AL::Xml* xml, bool onlyUsed) { + char s[MAXCHARTAG]; + if((!onlyUsed || _isUsed)) { + xml->stag("deicsOnzePreset version=\"1.0\""); + + //algorithm + xml->tag(ALGSTR, QString((algorithm==FIRST? "FIRST": + (algorithm==SECOND? "SECOND": + (algorithm==THIRD? "THIRD": + (algorithm==FOURTH? "FOURTH": + (algorithm==FIFTH? "FIFTH": + (algorithm==SIXTH? "SIXTH": + (algorithm==SEVENTH? "SEVENTH": + "EIGHTH"))))))))); + //feedback + xml->tag(FEEDBACKSTR, feedback); + //quick edit + //xml->tag(FINEBRIGHTNESSSTR, brightness); + //xml->tag(MODULATIONSTR, (int)modulation); + //xml->tag(GLOBALDETUNESTR, globalDetune); + //xml->tag(ATTACKSTR, attack); + //xml->tag(RELEASESTR, release); + //lfo + xml->stag("lfo"); + xml->tag(WAVESTR, QString((lfo.wave==SAWUP? "SAWUP": + (lfo.wave==SQUARE? "SQUARE": + (lfo.wave==TRIANGL? "TRIANGL":"SHOLD"))))); + xml->tag(SPEEDSTR, lfo.speed); + xml->tag(DELAYSTR, lfo.delay); + xml->tag(PMODDEPTHSTR, lfo.pModDepth); + xml->tag(AMODDEPTHSTR, lfo.aModDepth); + xml->tag(SYNCSTR, QString((lfo.sync==true? "on":"off"))); + xml->etag("lfo"); + //sensitivity + xml->stag("sensitivity"); + xml->tag(PMODSENSSTR, sensitivity.pitch); + xml->tag(AMSSTR, sensitivity.amplitude); + for(int i=0; itag(s, QString((sensitivity.ampOn[i]==true? "on":"off"))); + } + for(int i=0; itag(s, sensitivity.egBias[i]); + } + for(int i=0; itag(s, sensitivity.keyVelocity[i]); + } + xml->etag("sensitivity"); + //frequency + xml->stag("frequency"); + for(int i=0; itag(s, frequency[i].ratio); + } + for(int i=0; itag(s, QString((frequency[i].isFix==true? "yes":"no"))); + } + for(int i=0; itag(s, frequency[i].freq); + } + xml->etag("frequency"); + //oscWave + for(int i=0; itag(s, QString((oscWave[i]==W1?"W1": + (oscWave[i]==W2?"W2": + (oscWave[i]==W3?"W3": + (oscWave[i]==W4?"W4": + (oscWave[i]==W5?"W5": + (oscWave[i]==W6?"W6": + (oscWave[i]==W7?"W7":"W8"))))))))); + } + //detune + for(int i=0; itag(s, detune[i]); + } + //eg + xml->stag("eg"); + for(int i=0; itag(s, eg[i].ar); + } + for(int i=0; itag(s, eg[i].d1r); + } + for(int i=0; itag(s, eg[i].d1l); + } + for(int i=0; itag(s, eg[i].d2r); + } + for(int i=0; itag(s, eg[i].rr); + } + for(int i=0; itag(s, QString((eg[i].egShift==VOF?"VOF": + (eg[i].egShift==V48?"V48": + (eg[i].egShift==V24?"V24":"V12"))))); + } + xml->etag("eg"); + //pitchEg + xml->stag("pitchEg"); + xml->tag(PR1STR,pitchEg.pr1); + xml->tag(PR2STR,pitchEg.pr2); + xml->tag(PR3STR,pitchEg.pr3); + xml->tag(PL1STR,pitchEg.pl1); + xml->tag(PL2STR,pitchEg.pl2); + xml->tag(PL3STR,pitchEg.pl3); + xml->etag("pitchEg"); + //outLevel + for(int i=0; itag(s, outLevel[i]); + } + //scaling + xml->stag("scaling"); + for(int i=0; itag(s, scaling.rate[i]); + } + for(int i=0; itag(s, scaling.level[i]); + } + xml->etag("scaling"); + //function + xml->stag("function"); + xml->tag(TRANSPOSESTR, function.transpose); + xml->tag(POLYMODESTR, QString((function.mode==POLY? "POLY":"MONO"))); + xml->tag(PBENDRANGESTR, function.pBendRange); + xml->tag(PORTAMODESTR, QString((function.portamento==FINGER? + "FINGER":"FULL"))); + xml->tag(PORTATIMESTR, function.portamentoTime); + xml->tag(FSWSTR, QString((function.footSw==POR? "POR":"SUS"))); + xml->tag(FCVOLUMESTR, function.fcVolume); + xml->tag(FCPITCHSTR, function.fcPitch); + xml->tag(FCAMPLITUDESTR, function.fcAmplitude); + xml->tag(MWPITCHSTR, function.mwPitch); + xml->tag(MWAMPLITUDESTR, function.mwAmplitude); + xml->tag(BCPITCHSTR, function.bcPitch); + xml->tag(BCAMPLITUDESTR, function.bcAmplitude); + xml->tag(BCPITCHBIASSTR, function.bcPitchBias); + xml->tag(BCEGBIASSTR, function.bcEgBias); + xml->tag(ATPITCHSTR, function.atPitch); + xml->tag(ATAMPLITUDESTR, function.atAmplitude); + xml->tag(ATPITCHBIASSTR, function.atPitchBias); + xml->tag(ATEGBIASSTR, function.atEgBias); + xml->tag(REVERBRATESTR, function.reverbRate); + xml->etag("function"); + //globalDetune + //xml->tag("globalDetune", globalDetune); + //preset name + xml->tag("name", QString(name.c_str())); + //bank prog + xml->tag("prog",prog); + + xml->etag("deicsOnzePreset"); + } +} + +//--------------------------------------------------------- +// printPreset +//--------------------------------------------------------- + +void Preset::printPreset() +{ + printf("\n"); + printf("Algorithm : %d, Feedback : %d\n", algorithm, feedback); + printf("LFO : "); + switch(lfo.wave) + { + case(SAWUP) : printf("SAWUP ,"); break; + case(SQUARE) : printf("SQUARE ,"); break; + case(TRIANGL) : printf("TRIANGL ,"); break; + case(SHOLD) : printf("SHOLD ,"); break; + default : printf("No defined, "); break; + } + printf("Speed : %d, Delay : %d, PModD : %d, AModD : %d, ", + lfo.speed, lfo.delay, lfo.pModDepth, lfo.aModDepth); + if(lfo.sync) printf("Sync\n"); else printf("Not Sync\n"); + printf("LFO Pitch Sensitivity : %d, LFO Amplitude Sensitivity : %d\n", + sensitivity.pitch, sensitivity.amplitude); + for(int i=0; i::iterator i=_presetVector.begin(); + i!=_presetVector.end(); i++) (*i)->printPreset(); +} + +void Category::printCategory() { + std::cout << " " << _categoryName << "\n"; + for(unsigned int i=0; i<_subcategoryVector.size(); i++) + _subcategoryVector[i]->printSubcategory(); +} + +void Set::printSet() { + std::cout << _setName << "\n"; + for(unsigned int i=0; i<_categoryVector.size(); i++) + _categoryVector[i]->printCategory(); +} diff --git a/attic/muse_qt4_evolution/synti/deicsonze/deicsonzepreset.h b/attic/muse_qt4_evolution/synti/deicsonze/deicsonzepreset.h new file mode 100644 index 00000000..d0cbdfab --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/deicsonzepreset.h @@ -0,0 +1,563 @@ +//=========================================================================== +// +// DeicsOnze an emulator of the YAMAHA DX11 synthesizer +// +// Version 0.5.5 +// +// deicsonzepreset.h +// +// +// Copyright (c) 2004-2006 Nil Geisweiller +// +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA or point your web browser to http://www.gnu.org. +//=========================================================================== + +#ifndef __DEICSONZEPRESET_H +#define __DEICSONZEPRESET_H + +#include +#include "al/xml.h" + +#define NBROP 4 //do not change +#define MAXCHARTAG 64 + +#define PROG_NBR 128 +#define LBANK_NBR 128 +#define HBANK_NBR 128 + +//--------------------------------------------------------- +// define strings of the parameter names for load save and ctrl interface +// number of ctrl +// following the internal DX11 organization (c.f T81Z manual) +//--------------------------------------------------------- +#define CTRLOFFSET 0x100 +#define DECAPAR1 13 +#define ARSTR "AR" +#define ARLONGSTR "AttackRate" +#define CTRL_AR 0+CTRLOFFSET +#define MAXAR 31 +#define D1RSTR "D1R" +#define D1RLONGSTR "Decay1Rate" +#define CTRL_D1R 1+CTRLOFFSET +#define MAXD1R 31 +#define D2RSTR "D2R" +#define D2RLONGSTR "Decay2Rate" +#define CTRL_D2R 2+CTRLOFFSET +#define MAXD2R 31 +#define RRSTR "RR" +#define RRLONGSTR "ReleaseRate" +#define CTRL_RR 3+CTRLOFFSET +#define MAXRR 15 +#define D1LSTR "D1L" +#define D1LLONGSTR "Decay1Level" +#define CTRL_D1L 4+CTRLOFFSET +#define MAXD1L 15 +#define LSSTR "LS" +#define LSLONGSTR "LevelScaling" +#define CTRL_LS 5+CTRLOFFSET +#define MAXLS 99 +#define RSSTR "RS" +#define RSLONGSTR "RateScaling" +#define CTRL_RS 6+CTRLOFFSET +#define MAXRS 3 +#define EBSSTR "EBS" +#define EBSLONGSTR "EGBiasSensitivity" +#define CTRL_EBS 7+CTRLOFFSET +#define MAXEBS 7 +#define AMESTR "AME" +#define AMELONGSTR "AmplitudeModulationEnable" +#define CTRL_AME 8+CTRLOFFSET +#define KVSSTR "KVS" +#define KVSLONGSTR "KeyVelocitySensitivity" +#define CTRL_KVS 9+CTRLOFFSET +#define MAXKVS 7 +#define OUTSTR "OUT" +#define OUTLONGSTR "OperatorOutputLevel" +#define CTRL_OUT 10+CTRLOFFSET +#define MAXOUT 99 +#define RATIOSTR "Ratio" +#define RATIOLONGSTR "Ratio" +#define CTRL_RATIO 11+CTRLOFFSET +#define MAXRATIO 64 +#define DETSTR "DET" +#define DETLONGSTR "Detune" +#define CTRL_DET 12+CTRLOFFSET +#define MAXDET 3 +#define ALGSTR "ALG" +#define ALGLONGSTR "Algorithm" +#define CTRL_ALG 52+CTRLOFFSET +#define MAXALG 7 +#define FEEDBACKSTR "Feedback" +#define CTRL_FEEDBACK 53+CTRLOFFSET +#define MAXFEEDBACK 7 +#define SPEEDSTR "Speed" +#define SPEEDLONGSTR "LFOSpeed" +#define CTRL_SPEED 54+CTRLOFFSET +#define MAXSPEED 99 +#define DELAYSTR "Delay" //TODO LFOD +#define DELAYLONGSTR "LFODelay" +#define CTRL_DELAY 55+CTRLOFFSET +#define MAXDELAY 99 +#define PMODDEPTHSTR "PModDepth" +#define PMODDEPTHLONGSTR "PitchModulationDepth" +#define CTRL_PMODDEPTH 56+CTRLOFFSET +#define MAXPMODDEPTH 99 +#define AMODDEPTHSTR "AModDepth" +#define AMODDEPTHLONGSTR "AmplitudeModulationDepth" +#define CTRL_AMODDEPTH 57+CTRLOFFSET +#define MAXAMODDEPTH 99 +#define SYNCSTR "Sync" +#define SYNCLONGSTR "LFOSync" +#define CTRL_SYNC 58+CTRLOFFSET +#define WAVESTR "Wave" +#define WAVELONGSTR "LFOWave" +#define CTRL_WAVE 59+CTRLOFFSET +#define MAXWAVE 3 +#define PMODSENSSTR "PModSens" +#define PMODSENSLONGSTR "PitchModulationSensitivity" +#define CTRL_PMODSENS 60+CTRLOFFSET +#define MAXPMODSENS 7 +#define AMSSTR "AMS" +#define AMSLONGSTR "AmplitudeModulationSensitivity" +#define CTRL_AMS 61+CTRLOFFSET +#define MAXAMS 3 +#define TRANSPOSESTR "Transpose" +#define CTRL_TRANSPOSE 62+CTRLOFFSET +#define MAXTRANSPOSE 24 +#define POLYMODESTR "PolyMode" +#define CTRL_POLYMODE 63+CTRLOFFSET +#define PBENDRANGESTR "PBendRange" +#define PBENDRANGELONGSTR "PitchBendRange" +#define CTRL_PBENDRANGE 64+CTRLOFFSET +#define MAXPBENDRANGE 12 +#define PORTAMODESTR "PortaMode" +#define PORTAMODELONGSTR "PortamentoMode" +#define CTRL_PORTAMODE 65+CTRLOFFSET +#define PORTATIMESTR "PortaTime" +#define PORTATIMELONGSTR "PortamentoTime" +#define CTRL_PORTATIME 66+CTRLOFFSET +#define MAXPROTATIME 99 +#define FCVOLUMESTR "FCVolume" +#define FCVOLUMELONGSTR "FootControllerVolume" +#define CTRL_FCVOLUME 67+CTRLOFFSET +#define MAXFCVOLUME 99 +#define FSWSTR "FSW" +#define FSWLONGSTR "FootSwitch" +#define CTRL_FSW 68+CTRLOFFSET +#define MAXFSW 99 +#define MWPITCHSTR "MWPitch" +#define MWPITCHLONGSTR "ModulationWheelPitch" +#define CTRL_MWPITCH 71+CTRLOFFSET +#define MAXMWPITCH 99 +#define MWAMPLITUDESTR "MWAmplitude" +#define MWAMPLITUDELONGSTR "ModulationWheelAmplitude" +#define CTRL_MWAMPLITUDE 72+CTRLOFFSET +#define MAXMWAMPLITUDE 99 +#define BCPITCHSTR "BCPitch" +#define BCPITCHLONGSTR "BreathControlPitch" +#define CTRL_BCPITCH 73+CTRLOFFSET +#define MAXBCPITCH 99 +#define BCAMPLITUDESTR "BCAmplitude" +#define BCAMPLITUDELONGSTR "BreathControlAmplitude" +#define CTRL_BCAMPLITUDE 74+CTRLOFFSET +#define MAXBCAMPLITUDE 99 +#define BCPITCHBIASSTR "BCPitchBias" +#define BCPITCHBIASLONGSTR "BreathControlPitchBias" +#define CTRL_BCPITCHBIAS 75+CTRLOFFSET +#define MAXBCPITCHBIAS 50 +#define BCEGBIASSTR "BCEGBias" +#define BCEGBIASLONGSTR "BreathControlEGBias" +#define CTRL_BCEGBIAS 76+CTRLOFFSET +#define MAXBCEGBIAS 99 +#define MIDATTACK 64 +#define ATPITCHSTR "ATPitch" +#define ATPITCHLONGSTR "AfterTouchPitch" +#define CTRL_ATPITCH 77+CTRLOFFSET +#define MAXATPITCH 99 +#define ATAMPLITUDESTR "ATAmplitude" +#define ATAMPLITUDELONGSTR "AfterTouchAmplitude" +#define CTRL_ATAMPLITUDE 78+CTRLOFFSET +#define MAXATAMPLITUDE 99 +#define ATPITCHBIASSTR "ATPitchBias" +#define ATPITCHBIASLONGSTR "AfterTouchPitchBias" +#define CTRL_ATPITCHBIAS 79+CTRLOFFSET +#define MAXATPITCHBIAS 50 +#define ATEGBIASSTR "ATEGBias" +#define ATEGBIASLONGSTR "AfterTouchEGBias" +#define CTRL_ATEGBIAS 80+CTRLOFFSET +#define MAXATEGBIAS 99 +#define PR1STR "PR1" +#define PR1LONGSTR "PitchRateEG1" +#define CTRL_PR1 81+CTRLOFFSET +#define MAXPR 99 +#define PR2STR "PR2" +#define PR2LONGSTR "PitchRateEG2" +#define CTRL_PR2 82+CTRLOFFSET +#define PR3STR "PR3" +#define PR3LONGSTR "PitchRateEG3" +#define CTRL_PR3 83+CTRLOFFSET +#define PL1STR "PL1" +#define PL1LONGSTR "PitchLevelEG1" +#define CTRL_PL1 84+CTRLOFFSET +#define MAXPL 99 +#define PL2STR "PL2" +#define PL2LONGSTR "PitchLevelEG2" +#define CTRL_PL2 85+CTRLOFFSET +#define PL3STR "PL3" +#define PL3LONGSTR "PitchLevelEG3" +#define CTRL_PL3 86+CTRLOFFSET +#define DECAPAR2 5 +#define FIXSTR "FIX" +#define FIXLONGSTR "FixedFrequency" +#define CTRL_FIX 100+CTRLOFFSET +#define FIXRANGESTR "FixRange" +#define FIXRANGELONGSTR "FixedFrequencyRange" +#define CTRL_FIXRANGE 101+CTRLOFFSET +#define MAXFIXRANGE 255 +#define OSWSTR "OSW" +#define OSWLONGSTR "OperatorWaveform" +#define CTRL_OSW 103+CTRLOFFSET +#define MAXOSW 7 +#define SHFTSTR "SHFT" +#define SHFTLONGSTR "EGShift" +#define CTRL_SHFT 104+CTRLOFFSET +#define MAXSHFT 3 +#define REVERBRATESTR "ReverbRate" +#define CTRL_REVERBRATE 120+CTRLOFFSET +#define MAXREVERBRATE 7 +#define FCPITCHSTR "FCPitch" +#define FCPITCHLONGSTR "FootControllerPitch" +#define CTRL_FCPITCH 121+CTRLOFFSET +#define MAXFCPITCH 99 +#define FCAMPLITUDESTR "FCAmplitude" +#define FCAMPLITUDELONGSTR "FootControllerAmplitude" +#define CTRL_FCAMPLITUDE 122+CTRLOFFSET +#define MAXFCAMPLITUDE 99 +#define CHANNELPANSTR "ChannelPan" +#define CTRL_CHANNELPAN 123+CTRLOFFSET +#define MAXCHANNELPAN 127 +#define CHANNELDETUNESTR "ChannelDetune" +#define CTRL_CHANNELDETUNE 124+CTRLOFFSET +#define MAXCHANNELDETUNE 63 +#define CHANNELVOLUMESTR "ChannelVolume" +#define CTRL_CHANNELVOLUME 125+CTRLOFFSET +#define MAXCHANNELVOLUME 255 +#define FINEBRIGHTNESSSTR "FineBrightness" +#define CTRL_FINEBRIGHTNESS 126+CTRLOFFSET +#define MAXFINEBRIGHTNESS 4095 +#define MIDFINEBRIGHTNESS (MAXFINEBRIGHTNESS+1)/2 +#define BRIGHTNESSSTR "Brightness" +#define MAXBRIGHTNESS 127 +#define MIDBRIGHTNESS 64 +#define MAXMODULATION 127 +#define MODULATIONSTR "Modulation" +#define ATTACKSTR "Attack" +#define MAXATTACK 127 +#define MIDATTACK 64 +#define RELEASESTR "Attack" +#define MAXRELEASE 127 +#define MIDRELEASE 64 +#define NBRVOICESSTR "NumberOfVoices" +#define MINNBRVOICES 1 +#define CTRL_NBRVOICES 127+CTRLOFFSET +#define CHANNELENABLESTR "ChannelEnable" +#define MAXCHANNELENABLE 1 +#define MINCHANNELENABLE 0 +#define CTRL_CHANNELENABLE 128+CTRLOFFSET + +class Preset; +class Subcategory; +class Category; +class Set; + +//--------------------------------------------------------- +// Algorithm +//--------------------------------------------------------- + +enum Algorithm { + FIRST, // Op 0 modulated by Op 1 modulated by Op 2 modulated by Op3 + SECOND, // Op 0 modulated by Op 1 modulated by both Op 2 and Op 3 + THIRD, // Op 0 modulated by both Op 3 and Op 1 modulated by Op 2 + FOURTH, // Op 0 modulated by both Op 1 and Op 2 modulated by Op 3 + FIFTH, // (Op 0 modulated by Op 1) add to (Op 2 modulated by Op 3) + SIXTH, // addition of the three Op 0, 1, 2 all modulated by Op 3 + SEVENTH, // addition of the three Op 0, 1, 2 with 2 modulated by Op3 + EIGHTH // addition of the four Op 0, 1, 2, 3 +}; + +//--------------------------------------------------------- +// Wave of the low frequency modulation +//--------------------------------------------------------- +enum Wave { + SAWUP, + SQUARE, + TRIANGL, + SHOLD +}; + +//--------------------------------------------------------- +// Lfo, low frequency modulation +//--------------------------------------------------------- +struct Lfo { + Wave wave; + unsigned char speed; //0 to 99 + unsigned char delay; //0 to 99 + unsigned char pModDepth; //0 to 99 + unsigned char aModDepth; //0 to 99 + bool sync; +}; + +//--------------------------------------------------------- +// Sensitivity +// of the frequency and amplitude of the lfo +// and the key velocity +//--------------------------------------------------------- +struct Sensitivity { + unsigned char pitch; //0 to 7 + unsigned char amplitude; //0 to 3 + bool ampOn[NBROP]; + unsigned char egBias[NBROP]; //O to 7 + unsigned char keyVelocity[NBROP]; //0 to 7 +}; + +//--------------------------------------------------------- +// Frequency +//--------------------------------------------------------- +struct Frequency { + double ratio; + bool isFix; //if isFix no ratio but frequency + double freq; +}; + +//--------------------------------------------------------- +// OscWave +//--------------------------------------------------------- +enum OscWave { + W1, //sine wave + W2, //sine² relative + W3, //half sine + W4, //half sine² relative + W5, + W6, + W7, + W8 +}; + +enum egShiftValue {VOF, V48, V24, V12}; + +//--------------------------------------------------------- +// Eg +// Envelope +//--------------------------------------------------------- +struct Eg { + unsigned char ar; //0 to 31 speed attack + unsigned char d1r; //0 to 31 speed decay + unsigned char d1l; //0 to 15 level sustain + unsigned char d2r; //0 to 31 speed of sustain + unsigned char rr; //1 to 15 + egShiftValue egShift; +}; + +//--------------------------------------------------------- +// PitchEg +//--------------------------------------------------------- +struct PitchEg { + unsigned char pr1;//0 to 99 + unsigned char pr2;//0 to 99 + unsigned char pr3;//0 to 99 + unsigned char pl1;//0 to 99 + unsigned char pl2;//0 to 99 + unsigned char pl3;//0 to 99 +}; + +//--------------------------------------------------------- +// Scaling +//--------------------------------------------------------- +struct Scaling { + unsigned char rate[NBROP];//0 to 3 + unsigned char level[NBROP];//0 to 99 +}; + +//--------------------------------------------------------- +// Mode +//--------------------------------------------------------- +enum Mode { + POLY, + MONO +}; + +//--------------------------------------------------------- +// Portamento +//--------------------------------------------------------- +enum Portamento { + FINGER, + FULL +}; + +//--------------------------------------------------------- +// FootSw +//--------------------------------------------------------- +enum FootSw { + POR, + SUS +}; +//--------------------------------------------------------- +// Function +//--------------------------------------------------------- +struct Function { + int transpose; + Mode mode; + unsigned char pBendRange;//0 to 12 + Portamento portamento; + unsigned char portamentoTime;//0 to 99 + FootSw footSw; + unsigned char fcVolume;//0 to 99 + unsigned char fcPitch;//0 to 99 + unsigned char fcAmplitude;//0 to 99 + unsigned char mwPitch;//0 to 99 + unsigned char mwAmplitude;//0 to 99 + unsigned char bcPitch;//0 to 99 + unsigned char bcAmplitude;//0 to 99 + signed char bcPitchBias;//-50 to 50 + unsigned char bcEgBias;//0 to 99 + unsigned char atPitch;//0 to 99 + unsigned char atAmplitude;//0 to 99 + signed char atPitchBias;//-50 to 50 + unsigned char atEgBias;//0 to 99 + signed char reverbRate;//O=off, 1 to 7 +}; + +//--------------------------------------------------------- +// Preset class +//--------------------------------------------------------- + +class Preset { + public: + Subcategory* _subcategory; //subcategory parent + bool _isUsed; //false if the preset has never been used or modified, + //in this case the preset is not going to be + //save with the project + //Attributes + Algorithm algorithm; + unsigned char feedback; //0 to 7 + Lfo lfo; + Sensitivity sensitivity; + Frequency frequency[NBROP]; + OscWave oscWave[NBROP]; + signed char detune[NBROP]; //-3 to 3 + Eg eg[NBROP]; + PitchEg pitchEg; + unsigned char outLevel[NBROP]; //0 to 99 + Scaling scaling; + Function function; + //int globalDetune; //-31 to 31 //now to the channel + std::string name; + //unsigned char modulation; //0 to 127 + int prog; //0 to 127 + //Methods + void printPreset(); + void initPreset(); + void readPreset(QDomNode qdn); + void writePreset(AL::Xml* xml, bool onlyUsed); + void linkSubcategory(Subcategory* sub); + void merge(Preset* p); //copy the data of p in the preset + void setIsUsed(bool b); //set flag _isUsed and transmit in the parents + void getHBankLBankProg(int* h, int* l, int* p); //return the hbank, lbank and prog of the preset + //Constructor destructor + Preset(); + Preset(Subcategory* sub); + Preset(Subcategory* sub, int prog); + ~Preset(); +}; + +//--------------------------------------------------------------- +// Bank, organized by a tree of category, subcategory, preset +//--------------------------------------------------------------- +class Subcategory { + public: + Category* _category;//parent category + bool _isUsed; //false if the subcategory has never been used or modified, + //in this case the subcategory is not going to be + //save with the project + std::string _subcategoryName; + int _lbank; //0 to 127 + std::vector _presetVector; + Preset* findPreset(int prog); + void readSubcategory(QDomNode subNode); + void writeSubcategory(AL::Xml* xml, bool onlyUsed); + void printSubcategory(); + void linkCategory(Category* cat); + void unlink(); + bool isFreeProg(int prog); + int firstFreeProg(); + void merge(Preset*); + //Constructor destructor + Subcategory(); + Subcategory(Category* cat); + Subcategory(const std::string name); + Subcategory(Category* cat, const std::string name, int lbank); + ~Subcategory(); +}; + +class Category { + public: + Set* _set;//parent set + bool _isUsed; //false if the category has never been used or modified, + //in this case the category is not going to be + //save with the project + std::string _categoryName; + int _hbank; //0 to 127 + std::vector _subcategoryVector; + Subcategory* findSubcategory(int lbank); + Preset* findPreset(int lbank, int prog); + void readCategory(QDomNode catNode); + void writeCategory(AL::Xml* xml, bool onlyUsed); + void printCategory(); + void linkSet(Set* s); + void unlink(); + bool isFreeLBank(int lbank); + int firstFreeLBank(); //return -1 if no free + void merge(Subcategory*); + //Constructor Destructor + Category(); + Category(Set* s); + Category(Set* s,const std::string name, int hbank); + ~Category(); +}; + +class Set { + public: + std::string _setName; + std::vector _categoryVector; + Preset* findPreset(int hbank, int lbank, int prog); + Subcategory* findSubcategory(int hbank, int lbank); + Category* findCategory(int hbank); + void readSet(QDomNode setNode); + void writeSet(AL::Xml* xml, bool onlyUsed); + void printSet(); + bool isFreeHBank(int hbank); + int firstFreeHBank(); + void merge(Category*); + //Constructor Destructor + Set(const std::string name){_setName=name;} + ~Set() { + while(!_categoryVector.empty()) delete(*_categoryVector.begin()); + } +}; + +#endif /* __DEICSONZE_H */ diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/SHold.fig b/attic/muse_qt4_evolution/synti/deicsonze/pics/SHold.fig new file mode 100644 index 00000000..2e1d2431 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/SHold.fig @@ -0,0 +1,12 @@ +#FIG 3.2 +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 8 + 720 968 855 968 855 1035 990 1035 990 900 1125 900 + 1125 945 1260 945 diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/SHold.png b/attic/muse_qt4_evolution/synti/deicsonze/pics/SHold.png new file mode 100644 index 00000000..b500ca67 Binary files /dev/null and b/attic/muse_qt4_evolution/synti/deicsonze/pics/SHold.png differ diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/algo1.fig b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo1.fig new file mode 100644 index 00000000..f90714b7 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo1.fig @@ -0,0 +1,31 @@ +#FIG 3.2 +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +6 2070 1530 4275 1890 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 2430 1665 2655 1665 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3015 1665 3240 1665 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3600 1665 3825 1665 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 4185 1665 4275 1665 4275 1890 4006 1890 4006 1800 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 2070 1530 2430 1530 2430 1800 2070 1800 2070 1530 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 2655 1530 3015 1530 3015 1800 2655 1800 2655 1530 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 3240 1530 3600 1530 3600 1800 3240 1800 3240 1530 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 3825 1530 4185 1530 4185 1800 3825 1800 3825 1530 +4 0 0 50 -1 0 12 0.0000 4 180 336 2093 1718 Op1\001 +4 0 0 50 -1 0 12 0.0000 4 180 336 2677 1718 Op2\001 +4 0 0 50 -1 0 12 0.0000 4 180 336 3262 1718 Op3\001 +4 0 0 50 -1 0 12 0.0000 4 180 336 3847 1718 Op4\001 +-6 diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/algo1.png b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo1.png new file mode 100644 index 00000000..1347af71 Binary files /dev/null and b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo1.png differ diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/algo2.fig b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo2.fig new file mode 100644 index 00000000..d0dbea38 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo2.fig @@ -0,0 +1,29 @@ +#FIG 3.2 +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 2475 1710 2700 1710 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3060 1710 3195 1710 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 + 3285 1530 3195 1530 3195 1800 3285 1800 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 2115 1575 2475 1575 2475 1845 2115 1845 2115 1575 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 2700 1575 3060 1575 3060 1845 2700 1845 2700 1575 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 3285 1665 3645 1665 3645 1890 3285 1890 3285 1665 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 3285 1440 3645 1440 3645 1665 3285 1665 3285 1440 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 3645 1800 3735 1800 3735 1935 3465 1935 3465 1890 +4 0 0 50 -1 0 12 0.0000 4 150 315 3307 1590 Op3\001 +4 0 0 50 -1 0 12 0.0000 4 150 315 3315 1822 Op4\001 +4 0 0 50 -1 0 12 0.0000 4 165 315 2138 1762 Op1\001 +4 0 0 50 -1 0 12 0.0000 4 150 315 2722 1762 Op2\001 diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/algo2.png b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo2.png new file mode 100644 index 00000000..7d623227 Binary files /dev/null and b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo2.png differ diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/algo3.fig b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo3.fig new file mode 100644 index 00000000..9efaa53f --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo3.fig @@ -0,0 +1,29 @@ +#FIG 3.2 +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3060 1575 3285 1575 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 2475 1710 2610 1710 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 3060 1800 3150 1800 3150 1935 2880 1935 2880 1890 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 + 2700 1530 2610 1530 2610 1800 2700 1800 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 3285 1440 3645 1440 3645 1710 3285 1710 3285 1440 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 2700 1665 3060 1665 3060 1890 2700 1890 2700 1665 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 2700 1440 3060 1440 3060 1665 2700 1665 2700 1440 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 2115 1575 2475 1575 2475 1845 2115 1845 2115 1575 +4 0 0 50 -1 0 12 0.0000 4 150 315 2722 1590 Op2\001 +4 0 0 50 -1 0 12 0.0000 4 150 315 2730 1822 Op4\001 +4 0 0 50 -1 0 12 0.0000 4 150 315 3307 1627 Op3\001 +4 0 0 50 -1 0 12 0.0000 4 165 315 2138 1762 Op1\001 diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/algo3.png b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo3.png new file mode 100644 index 00000000..b091cc16 Binary files /dev/null and b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo3.png differ diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/algo4.fig b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo4.fig new file mode 100644 index 00000000..26d12f54 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo4.fig @@ -0,0 +1,29 @@ +#FIG 3.2 +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 2475 1710 2610 1710 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 + 2700 1530 2610 1530 2610 1800 2700 1800 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 2700 1665 3060 1665 3060 1890 2700 1890 2700 1665 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 2700 1440 3060 1440 3060 1665 2700 1665 2700 1440 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 2115 1575 2475 1575 2475 1845 2115 1845 2115 1575 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 3285 1620 3645 1620 3645 1890 3285 1890 3285 1620 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 3645 1755 3735 1755 3735 1530 3465 1530 3465 1620 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3060 1755 3285 1755 +4 0 0 50 -1 0 12 0.0000 4 150 315 2722 1590 Op2\001 +4 0 0 50 -1 0 12 0.0000 4 150 315 2730 1822 Op3\001 +4 0 0 50 -1 0 12 0.0000 4 165 315 2138 1762 Op1\001 +4 0 0 50 -1 0 12 0.0000 4 150 315 3307 1807 Op4\001 diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/algo4.png b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo4.png new file mode 100644 index 00000000..de0e6d26 Binary files /dev/null and b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo4.png differ diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/algo5.fig b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo5.fig new file mode 100644 index 00000000..63731eba --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo5.fig @@ -0,0 +1,34 @@ +#FIG 3.2 +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +6 2115 1575 2475 1845 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 2115 1575 2475 1575 2475 1845 2115 1845 2115 1575 +4 0 0 50 -1 0 12 0.0000 4 165 315 2138 1762 Op1\001 +-6 +6 3330 1575 4320 1935 +6 3870 1575 4320 1935 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 3870 1575 4230 1575 4230 1845 3870 1845 3870 1575 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 4230 1710 4320 1710 4320 1935 4050 1935 4050 1845 +4 0 0 50 -1 0 12 0.0000 4 150 315 3892 1762 Op4\001 +-6 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3690 1710 3870 1710 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 3330 1575 3690 1575 3690 1845 3330 1845 3330 1575 +4 0 0 50 -1 0 12 0.0000 4 150 315 3353 1762 Op3\001 +-6 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 2475 1710 2655 1710 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 2655 1575 3015 1575 3015 1845 2655 1845 2655 1575 +4 0 0 50 -1 0 12 0.0000 4 150 315 2678 1762 Op2\001 +4 0 0 50 -1 0 12 0.0000 4 75 105 3127 1763 +\001 diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/algo5.png b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo5.png new file mode 100644 index 00000000..2e41a1db Binary files /dev/null and b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo5.png differ diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/algo6.fig b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo6.fig new file mode 100644 index 00000000..4e23b8fa --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo6.fig @@ -0,0 +1,37 @@ +#FIG 3.2 +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +6 2115 1575 2475 1845 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 2115 1575 2475 1575 2475 1845 2115 1845 2115 1575 +4 0 0 50 -1 0 12 0.0000 4 165 315 2138 1762 Op1\001 +-6 +6 3195 1575 3555 1845 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 3195 1575 3555 1575 3555 1845 3195 1845 3195 1575 +4 0 0 50 -1 0 12 0.0000 4 150 315 3218 1762 Op3\001 +-6 +6 3825 1575 4275 1935 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 3825 1575 4185 1575 4185 1845 3825 1845 3825 1575 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 4185 1710 4275 1710 4275 1935 4005 1935 4005 1845 +4 0 0 50 -1 0 12 0.0000 4 150 315 3847 1762 Op4\001 +-6 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 2655 1575 3015 1575 3015 1845 2655 1845 2655 1575 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3825 1710 3555 1710 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 + 3690 1710 3690 1530 2835 1530 2835 1575 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 2835 1530 2295 1530 2295 1575 +4 0 0 50 -1 0 12 0.0000 4 150 315 2678 1762 Op2\001 +4 0 0 50 -1 0 12 0.0000 4 75 105 3060 1755 +\001 +4 0 0 50 -1 0 12 0.0000 4 75 105 2520 1755 +\001 diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/algo6.png b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo6.png new file mode 100644 index 00000000..80de4a94 Binary files /dev/null and b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo6.png differ diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/algo7.fig b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo7.fig new file mode 100644 index 00000000..6d0fe501 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo7.fig @@ -0,0 +1,35 @@ +#FIG 3.2 +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +6 2115 1575 2475 1845 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 2115 1575 2475 1575 2475 1845 2115 1845 2115 1575 +4 0 0 50 -1 0 12 0.0000 4 165 315 2138 1762 Op1\001 +-6 +6 2745 1575 3105 1845 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 2745 1575 3105 1575 3105 1845 2745 1845 2745 1575 +4 0 0 50 -1 0 12 0.0000 4 150 315 2768 1762 Op2\001 +-6 +6 3375 1575 3735 1845 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 3375 1575 3735 1575 3735 1845 3375 1845 3375 1575 +4 0 0 50 -1 0 12 0.0000 4 150 315 3398 1762 Op3\001 +-6 +6 3915 1575 4365 1935 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 3915 1575 4275 1575 4275 1845 3915 1845 3915 1575 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 4275 1710 4365 1710 4365 1935 4095 1935 4095 1845 +4 0 0 50 -1 0 12 0.0000 4 150 315 3937 1762 Op4\001 +-6 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3735 1710 3915 1710 +4 0 0 50 -1 0 12 0.0000 4 75 105 2565 1755 +\001 +4 0 0 50 -1 0 12 0.0000 4 75 105 3195 1755 +\001 diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/algo7.png b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo7.png new file mode 100644 index 00000000..0cdda327 Binary files /dev/null and b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo7.png differ diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/algo8.fig b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo8.fig new file mode 100644 index 00000000..8bf9dcc9 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo8.fig @@ -0,0 +1,34 @@ +#FIG 3.2 +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +6 2115 1575 2475 1845 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 2115 1575 2475 1575 2475 1845 2115 1845 2115 1575 +4 0 0 50 -1 0 12 0.0000 4 165 315 2138 1762 Op1\001 +-6 +6 2745 1575 3105 1845 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 2745 1575 3105 1575 3105 1845 2745 1845 2745 1575 +4 0 0 50 -1 0 12 0.0000 4 150 315 2768 1762 Op2\001 +-6 +6 3375 1575 3735 1845 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 3375 1575 3735 1575 3735 1845 3375 1845 3375 1575 +4 0 0 50 -1 0 12 0.0000 4 150 315 3398 1762 Op3\001 +-6 +6 4005 1575 4455 1935 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 4005 1575 4365 1575 4365 1845 4005 1845 4005 1575 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 4365 1710 4455 1710 4455 1935 4185 1935 4185 1845 +4 0 0 50 -1 0 12 0.0000 4 150 315 4027 1762 Op4\001 +-6 +4 0 0 50 -1 0 12 0.0000 4 75 105 2565 1755 +\001 +4 0 0 50 -1 0 12 0.0000 4 75 105 3195 1755 +\001 +4 0 0 50 -1 0 12 0.0000 4 75 105 3825 1755 +\001 diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/algo8.png b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo8.png new file mode 100644 index 00000000..17ca60d7 Binary files /dev/null and b/attic/muse_qt4_evolution/synti/deicsonze/pics/algo8.png differ diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/sawUp.fig b/attic/muse_qt4_evolution/synti/deicsonze/pics/sawUp.fig new file mode 100644 index 00000000..2c701818 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/sawUp.fig @@ -0,0 +1,13 @@ +#FIG 3.2 +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +6 450 720 990 855 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 450 855 720 720 720 855 990 720 990 855 +-6 diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/sawUp.png b/attic/muse_qt4_evolution/synti/deicsonze/pics/sawUp.png new file mode 100644 index 00000000..d0541858 Binary files /dev/null and b/attic/muse_qt4_evolution/synti/deicsonze/pics/sawUp.png differ diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/square.fig b/attic/muse_qt4_evolution/synti/deicsonze/pics/square.fig new file mode 100644 index 00000000..0adb802e --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/square.fig @@ -0,0 +1,14 @@ +#FIG 3.2 +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +6 540 540 1080 675 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 10 + 540 608 540 540 675 540 675 675 810 675 810 540 + 945 540 945 675 1080 675 1080 608 +-6 diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/square.png b/attic/muse_qt4_evolution/synti/deicsonze/pics/square.png new file mode 100644 index 00000000..f2293267 Binary files /dev/null and b/attic/muse_qt4_evolution/synti/deicsonze/pics/square.png differ diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/triangl.fig b/attic/muse_qt4_evolution/synti/deicsonze/pics/triangl.fig new file mode 100644 index 00000000..95970995 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/triangl.fig @@ -0,0 +1,13 @@ +#FIG 3.2 +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +6 360 630 900 765 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 6 + 360 698 428 630 563 765 698 630 833 765 900 698 +-6 diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/triangl.png b/attic/muse_qt4_evolution/synti/deicsonze/pics/triangl.png new file mode 100644 index 00000000..c0937be9 Binary files /dev/null and b/attic/muse_qt4_evolution/synti/deicsonze/pics/triangl.png differ diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/wave1.fig b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave1.fig new file mode 100644 index 00000000..9cf6f065 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave1.fig @@ -0,0 +1,29 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 1650 1350 2325 1500 +2 1 0 1 -1 -1 10 0 -1 0.000 0 0 0 0 0 100 + 1658 1424 1665 1415 1670 1406 1678 1397 1684 1388 1692 1380 + 1697 1373 1704 1367 1711 1361 1718 1357 1724 1353 1731 1351 + 1738 1350 1745 1350 1751 1352 1758 1354 1765 1358 1770 1363 + 1778 1368 1784 1375 1792 1382 1797 1390 1804 1399 1811 1408 + 1818 1418 1824 1427 1831 1436 1837 1445 1845 1454 1850 1463 + 1858 1471 1864 1477 1871 1484 1877 1489 1884 1493 1891 1496 + 1898 1498 1904 1499 1911 1498 1918 1497 1925 1494 1931 1490 + 1937 1485 1945 1479 1950 1472 1958 1465 1964 1456 1971 1447 + 1977 1439 1984 1429 1991 1420 1998 1411 2003 1401 2011 1392 + 2017 1384 2025 1376 2030 1370 2037 1364 2044 1359 2051 1355 + 2057 1352 2064 1350 2071 1350 2078 1351 2084 1353 2091 1356 + 2098 1360 2103 1365 2111 1371 2117 1379 2125 1386 2130 1395 + 2137 1403 2144 1413 2151 1422 2157 1432 2164 1441 2170 1450 + 2178 1458 2183 1466 2191 1474 2197 1481 2204 1486 2210 1491 + 2217 1495 2224 1497 2231 1499 2237 1499 2244 1497 2251 1496 + 2258 1492 2264 1487 2270 1482 2278 1476 2283 1468 2291 1461 + 2297 1452 2304 1443 2310 1434 2317 1424 +-6 diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/wave1.gnuplot b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave1.gnuplot new file mode 100644 index 00000000..ff4aa2ed --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave1.gnuplot @@ -0,0 +1,2 @@ +set terminal fig +plot [0:4*pi] sin(x) diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/wave1.png b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave1.png new file mode 100644 index 00000000..009aa7f7 Binary files /dev/null and b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave1.png differ diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/wave2.fig b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave2.fig new file mode 100644 index 00000000..2da89e13 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave2.fig @@ -0,0 +1,31 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 1650 1350 2325 1500 +2 1 0 1 -1 -1 10 0 -1 0.000 0 0 0 0 0 2 + 2079 1350 2079 1353 +2 1 0 1 -1 -1 10 0 -1 0.000 0 0 0 0 0 100 + 1658 1425 1665 1423 1670 1419 1678 1414 1685 1407 1692 1398 + 1697 1389 1704 1380 1711 1371 1719 1363 1724 1357 1731 1353 + 1738 1350 1743 1351 1751 1353 1758 1358 1765 1365 1770 1373 + 1777 1382 1784 1391 1792 1401 1797 1409 1804 1415 1811 1421 + 1818 1424 1824 1425 1831 1426 1838 1431 1845 1436 1850 1444 + 1857 1453 1865 1462 1872 1472 1877 1480 1884 1487 1891 1494 + 1899 1497 1904 1499 1911 1498 1918 1495 1923 1489 1930 1483 + 1938 1473 1945 1465 1950 1455 1957 1446 1964 1438 1971 1431 + 1977 1427 1984 1425 1991 1425 1998 1422 2003 1417 2011 1411 + 2018 1403 2025 1394 2030 1385 2037 1375 2044 1367 2052 1359 + 2057 1354 2064 1351 2071 1350 2076 1351 2084 1355 2091 1361 + 2098 1369 2103 1377 2110 1387 2118 1396 2125 1405 2130 1412 + 2137 1419 2144 1422 2151 1425 2157 1425 2164 1428 2171 1433 + 2178 1440 2183 1448 2190 1457 2198 1467 2205 1476 2210 1484 + 2217 1491 2224 1496 2232 1499 2237 1499 2244 1497 2251 1493 + 2256 1486 2263 1478 2271 1469 2278 1459 2283 1451 2290 1442 + 2297 1435 2304 1429 2310 1425 2317 1425 +-6 diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/wave2.gnuplot b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave2.gnuplot new file mode 100644 index 00000000..01e57a9b --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave2.gnuplot @@ -0,0 +1,2 @@ +set terminal fig +plot [0:4*pi] sin(x)*abs(sin(x)) diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/wave2.png b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave2.png new file mode 100644 index 00000000..5f4daaee Binary files /dev/null and b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave2.png differ diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/wave3.fig b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave3.fig new file mode 100644 index 00000000..5051c2ef --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave3.fig @@ -0,0 +1,29 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 1650 1350 2325 1500 +2 1 0 1 -1 -1 10 0 -1 0.000 0 0 0 0 0 100 + 1658 1496 1665 1478 1671 1458 1678 1442 1685 1424 1691 1408 + 1697 1396 1704 1382 1711 1372 1718 1362 1724 1358 1731 1352 + 1738 1350 1745 1352 1751 1352 1758 1358 1765 1364 1772 1374 + 1777 1386 1784 1398 1791 1412 1797 1428 1804 1446 1811 1462 + 1818 1482 1824 1496 1831 1496 1838 1496 1845 1496 1851 1496 + 1857 1496 1864 1496 1871 1496 1877 1496 1884 1496 1891 1496 + 1898 1496 1904 1496 1911 1496 1918 1496 1925 1496 1931 1496 + 1938 1496 1944 1496 1950 1496 1957 1496 1964 1496 1971 1496 + 1977 1496 1984 1496 1991 1486 1998 1468 2004 1450 2011 1432 + 2018 1418 2025 1402 2030 1388 2037 1378 2044 1368 2051 1360 + 2057 1354 2064 1352 2071 1350 2078 1352 2084 1354 2091 1362 + 2098 1370 2105 1380 2110 1392 2117 1406 2124 1420 2130 1438 + 2137 1454 2144 1472 2151 1492 2157 1496 2164 1496 2171 1496 + 2178 1496 2184 1496 2191 1496 2197 1496 2204 1496 2210 1496 + 2217 1496 2224 1496 2231 1496 2237 1496 2244 1496 2251 1496 + 2258 1496 2264 1496 2271 1496 2277 1496 2283 1496 2290 1496 + 2297 1496 2304 1496 2310 1496 2317 1496 +-6 diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/wave3.gnuplot b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave3.gnuplot new file mode 100644 index 00000000..e97c06b8 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave3.gnuplot @@ -0,0 +1,2 @@ +set terminal fig +plot [0:4*pi] [-1:1] (x2*pi && x<3*pi))?sin(x):0 diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/wave3.png b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave3.png new file mode 100644 index 00000000..6e0ada6d Binary files /dev/null and b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave3.png differ diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/wave4.fig b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave4.fig new file mode 100644 index 00000000..cb54e0e6 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave4.fig @@ -0,0 +1,29 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 1650 1350 2325 1500 +2 1 0 1 -1 -1 10 0 -1 0.000 0 0 0 0 0 100 + 1658 1495 1665 1493 1671 1486 1678 1475 1685 1461 1691 1444 + 1697 1426 1704 1408 1711 1390 1718 1375 1724 1363 1731 1354 + 1738 1350 1745 1351 1751 1356 1758 1366 1765 1379 1772 1394 + 1777 1412 1784 1431 1791 1448 1797 1465 1804 1479 1811 1489 + 1818 1494 1824 1495 1831 1495 1838 1495 1845 1495 1851 1495 + 1857 1495 1864 1495 1871 1495 1877 1495 1884 1495 1891 1495 + 1898 1495 1904 1495 1911 1495 1918 1495 1925 1495 1931 1495 + 1938 1495 1944 1495 1950 1495 1957 1495 1964 1495 1971 1495 + 1977 1495 1984 1495 1991 1495 1998 1490 2004 1481 2011 1469 + 2018 1453 2025 1435 2030 1417 2037 1399 2044 1383 2051 1369 + 2057 1358 2064 1352 2071 1350 2078 1353 2084 1361 2091 1372 + 2098 1386 2105 1403 2110 1421 2117 1440 2124 1457 2130 1472 + 2137 1484 2144 1492 2151 1495 2157 1495 2164 1495 2171 1495 + 2178 1495 2184 1495 2191 1495 2197 1495 2204 1495 2210 1495 + 2217 1495 2224 1495 2231 1495 2237 1495 2244 1495 2251 1495 + 2258 1495 2264 1495 2271 1495 2277 1495 2283 1495 2290 1495 + 2297 1495 2304 1495 2310 1495 2317 1495 +-6 diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/wave4.gnuplot b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave4.gnuplot new file mode 100644 index 00000000..bf7b43c9 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave4.gnuplot @@ -0,0 +1,2 @@ +set terminal fig +plot [0:4*pi] [-1:1] (x2*pi && x<3*pi))?sin(x)*abs(sin(x)):0 diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/wave4.png b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave4.png new file mode 100644 index 00000000..f104e06c Binary files /dev/null and b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave4.png differ diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/wave5.fig b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave5.fig new file mode 100644 index 00000000..5d60ea7e --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave5.fig @@ -0,0 +1,29 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 1650 1350 2325 1500 +2 1 0 1 -1 -1 10 0 -1 0.000 0 0 0 0 0 100 + 1658 1425 1665 1406 1671 1388 1678 1373 1685 1361 1691 1353 + 1697 1350 1704 1352 1711 1358 1718 1368 1724 1382 1731 1399 + 1738 1417 1745 1436 1751 1454 1758 1470 1765 1484 1772 1493 + 1777 1498 1784 1498 1791 1494 1797 1485 1804 1472 1811 1456 + 1818 1438 1824 1425 1831 1425 1838 1425 1845 1425 1851 1425 + 1857 1425 1864 1425 1871 1425 1877 1425 1884 1425 1891 1425 + 1898 1425 1904 1425 1911 1425 1918 1425 1925 1425 1931 1425 + 1938 1425 1944 1425 1950 1425 1957 1425 1964 1425 1971 1425 + 1977 1425 1984 1425 1991 1415 1998 1397 2004 1380 2011 1367 + 2018 1357 2025 1351 2030 1350 2037 1354 2044 1363 2051 1375 + 2057 1390 2064 1408 2071 1427 2078 1446 2084 1463 2091 1477 + 2098 1489 2105 1496 2110 1499 2117 1497 2124 1490 2130 1479 + 2137 1465 2144 1448 2151 1429 2157 1425 2164 1425 2171 1425 + 2178 1425 2184 1425 2191 1425 2197 1425 2204 1425 2210 1425 + 2217 1425 2224 1425 2231 1425 2237 1425 2244 1425 2251 1425 + 2258 1425 2264 1425 2271 1425 2277 1425 2283 1425 2290 1425 + 2297 1425 2304 1425 2310 1425 2317 1425 +-6 diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/wave5.gnuplot b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave5.gnuplot new file mode 100644 index 00000000..066cb3d4 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave5.gnuplot @@ -0,0 +1,2 @@ +set terminal fig +plot [0:4*pi] [-1:1] (x2*pi && x<3*pi))?sin(2*x):0 diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/wave5.png b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave5.png new file mode 100644 index 00000000..003af248 Binary files /dev/null and b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave5.png differ diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/wave6.fig b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave6.fig new file mode 100644 index 00000000..5bad4b67 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave6.fig @@ -0,0 +1,29 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 1650 1350 2325 1500 +2 1 0 1 -1 -1 10 0 -1 0.000 0 0 0 0 0 100 + 1658 1425 1665 1420 1671 1407 1678 1389 1685 1371 1691 1357 + 1697 1350 1704 1353 1711 1365 1718 1382 1724 1401 1731 1416 + 1738 1424 1745 1426 1751 1436 1758 1453 1765 1472 1772 1488 + 1777 1497 1784 1498 1791 1490 1797 1474 1804 1455 1811 1438 + 1818 1427 1824 1425 1831 1425 1838 1425 1845 1425 1851 1425 + 1857 1425 1864 1425 1871 1425 1877 1425 1884 1425 1891 1425 + 1898 1425 1904 1425 1911 1425 1918 1425 1925 1425 1931 1425 + 1938 1425 1944 1425 1950 1425 1957 1425 1964 1425 1971 1425 + 1977 1425 1984 1425 1991 1423 1998 1414 2004 1398 2011 1380 + 2018 1363 2025 1352 2030 1350 2037 1358 2044 1373 2051 1391 + 2057 1409 2064 1421 2071 1425 2078 1430 2084 1444 2091 1462 + 2098 1480 2105 1494 2110 1499 2117 1495 2124 1482 2130 1464 + 2137 1446 2144 1432 2151 1425 2157 1425 2164 1425 2171 1425 + 2178 1425 2184 1425 2191 1425 2197 1425 2204 1425 2210 1425 + 2217 1425 2224 1425 2231 1425 2237 1425 2244 1425 2251 1425 + 2258 1425 2264 1425 2271 1425 2277 1425 2283 1425 2290 1425 + 2297 1425 2304 1425 2310 1425 2317 1425 +-6 diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/wave6.gnuplot b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave6.gnuplot new file mode 100644 index 00000000..e1eed2e5 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave6.gnuplot @@ -0,0 +1,2 @@ +set terminal fig +plot [0:4*pi] [-1:1] (x2*pi && x<3*pi))?sin(2*x)*abs(sin(2*x)):0 diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/wave6.png b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave6.png new file mode 100644 index 00000000..08e717ce Binary files /dev/null and b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave6.png differ diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/wave7.fig b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave7.fig new file mode 100644 index 00000000..b5ad0ea2 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave7.fig @@ -0,0 +1,29 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 1650 1350 2325 1500 +2 1 0 1 -1 -1 10 0 -1 0.000 0 0 0 0 0 100 + 1658 1495 1665 1459 1671 1425 1678 1395 1685 1372 1691 1357 + 1697 1350 1704 1353 1711 1364 1718 1385 1724 1413 1731 1446 + 1738 1482 1745 1472 1751 1437 1758 1405 1765 1380 1772 1361 + 1777 1352 1784 1351 1791 1360 1797 1377 1804 1402 1811 1433 + 1818 1468 1824 1495 1831 1495 1838 1495 1845 1495 1851 1495 + 1857 1495 1864 1495 1871 1495 1877 1495 1884 1495 1891 1495 + 1898 1495 1904 1495 1911 1495 1918 1495 1925 1495 1931 1495 + 1938 1495 1944 1495 1950 1495 1957 1495 1964 1495 1971 1495 + 1977 1495 1984 1495 1991 1477 1998 1441 2004 1409 2011 1382 + 2018 1363 2025 1353 2030 1351 2037 1359 2044 1375 2051 1399 + 2057 1428 2064 1463 2071 1491 2078 1454 2084 1421 2091 1392 + 2098 1370 2105 1355 2110 1350 2117 1354 2124 1367 2130 1388 + 2137 1417 2144 1450 2151 1486 2157 1495 2164 1495 2171 1495 + 2178 1495 2184 1495 2191 1495 2197 1495 2204 1495 2210 1495 + 2217 1495 2224 1495 2231 1495 2237 1495 2244 1495 2251 1495 + 2258 1495 2264 1495 2271 1495 2277 1495 2283 1495 2290 1495 + 2297 1495 2304 1495 2310 1495 2317 1495 +-6 diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/wave7.gnuplot b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave7.gnuplot new file mode 100644 index 00000000..294b2423 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave7.gnuplot @@ -0,0 +1,2 @@ +set terminal fig +plot [0:4*pi] [-1:1] (x2*pi && x<3*pi))?abs(sin(2*x)):0 diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/wave7.png b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave7.png new file mode 100644 index 00000000..44e5928f Binary files /dev/null and b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave7.png differ diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/wave8.fig b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave8.fig new file mode 100644 index 00000000..017deb5b --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave8.fig @@ -0,0 +1,29 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 1650 1350 2325 1500 +2 1 0 1 -1 -1 10 0 -1 0.000 0 0 0 0 0 100 + 1658 1495 1665 1486 1671 1461 1678 1426 1685 1390 1691 1363 + 1697 1350 1704 1356 1711 1379 1718 1412 1724 1448 1731 1479 + 1738 1494 1745 1492 1751 1472 1758 1440 1765 1403 1772 1372 + 1777 1353 1784 1352 1791 1369 1797 1399 1804 1435 1811 1469 + 1818 1490 1824 1495 1831 1495 1838 1495 1845 1495 1851 1495 + 1857 1495 1864 1495 1871 1495 1877 1495 1884 1495 1891 1495 + 1898 1495 1904 1495 1911 1495 1918 1495 1925 1495 1931 1495 + 1938 1495 1944 1495 1950 1495 1957 1495 1964 1495 1971 1495 + 1977 1495 1984 1495 1991 1493 1998 1475 2004 1444 2011 1408 + 2018 1375 2025 1354 2030 1351 2037 1366 2044 1394 2051 1431 + 2057 1465 2064 1489 2071 1495 2078 1484 2084 1457 2091 1421 + 2098 1386 2105 1361 2110 1350 2117 1358 2124 1383 2130 1417 + 2137 1453 2144 1481 2151 1495 2157 1495 2164 1495 2171 1495 + 2178 1495 2184 1495 2191 1495 2197 1495 2204 1495 2210 1495 + 2217 1495 2224 1495 2231 1495 2237 1495 2244 1495 2251 1495 + 2258 1495 2264 1495 2271 1495 2277 1495 2283 1495 2290 1495 + 2297 1495 2304 1495 2310 1495 2317 1495 +-6 diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/wave8.gnuplot b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave8.gnuplot new file mode 100644 index 00000000..e86332c7 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave8.gnuplot @@ -0,0 +1,2 @@ +set terminal fig +plot [0:4*pi] [-1:1] (x2*pi && x<3*pi))?sin(2*x)*sin(2*x):0 diff --git a/attic/muse_qt4_evolution/synti/deicsonze/pics/wave8.png b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave8.png new file mode 100644 index 00000000..6df0dda5 Binary files /dev/null and b/attic/muse_qt4_evolution/synti/deicsonze/pics/wave8.png differ diff --git a/attic/muse_qt4_evolution/synti/fluid/CMakeLists.txt b/attic/muse_qt4_evolution/synti/fluid/CMakeLists.txt new file mode 100644 index 00000000..e51ea9c6 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/fluid/CMakeLists.txt @@ -0,0 +1,50 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +QT4_WRAP_CPP ( fluid_mocs fluidgui.h ) +QT4_WRAP_UI ( fluid_uis fluidgui.ui ) + +add_library ( fluid SHARED + fluid.cpp + fluidgui.cpp + fluidgui.h + ${fluid_mocs} + ${fluid_uis} + ) + +target_link_libraries( fluid synti ) + +# - tell cmake to name target fluid.so instead of +# libfluid.so +# - use precompiled header files +# +set_target_properties ( fluid + PROPERTIES PREFIX "" + COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all-pic.h" + LINK_FLAGS "-L${FLUID_LIBDIR} ${FLUID_LIB}" + ) +target_link_libraries(fluid + synti + ${QT_LIBRARIES} + ${FLUID_LIB} + ) + +install_targets ( /${CMAKE_INSTALL_LIBDIR}/${MusE_INSTALL_NAME}/synthi/ fluid ) + diff --git a/attic/muse_qt4_evolution/synti/fluid/fluid.cpp b/attic/muse_qt4_evolution/synti/fluid/fluid.cpp new file mode 100644 index 00000000..601b1899 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/fluid/fluid.cpp @@ -0,0 +1,518 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: fluid.cpp,v 1.21 2005/11/23 13:55:32 wschweer Exp $ +// +// This file is derived from fluid Synth and modified +// for MusE. +// Parts of fluid are derived from Smurf Sound Font Editor. +// Parts of Smurf Sound Font Editor are derived from +// awesfx utilities +// Smurf: Copyright (C) 1999-2000 Josh Green +// fluid: Copyright (C) 2001 Peter Hanappe +// MusE: Copyright (C) 2001 Werner Schweer +// awesfx: Copyright (C) 1996-1999 Takashi Iwai +//========================================================= + +#include "muse/midictrl.h" +#include "fluid.h" +#include "fluidgui.h" + +//--------------------------------------------------------- +// instantiate +//--------------------------------------------------------- + +static Mess* instantiate(int sr, const char* name) + { + ISynth* synth = new ISynth(); + synth->setSampleRate(sr); + if (synth->init(name)) { + delete synth; + synth = 0; + } + return synth; + } + +//--------------------------------------------------------- +// MESS +//--------------------------------------------------------- + +extern "C" { + static MESS descriptor = { + "fluid", + "Werner Schweer", + "0.1", // fluid version string + MESS_MAJOR_VERSION, MESS_MINOR_VERSION, + instantiate, + }; + const MESS* mess_descriptor() { return &descriptor; } + } + +//--------------------------------------------------------- +// ISynth +//--------------------------------------------------------- + +ISynth::ISynth() + : Mess(2) + { + _busy = false; + sfont = 0; + _gmMode = false; // General Midi Mode + _fluidsynth = 0; + initBuffer = 0; + initLen = 0; + fontId = -1; + } + +//--------------------------------------------------------- +// playNote +// return true if busy +//--------------------------------------------------------- + +bool ISynth::playNote(int channel, int pitch, int velo) + { + if (_busy) { +// printf("fluid: playNote(): busy!\n"); + return true; + } + if (velo) { + int err = fluid_synth_noteon(_fluidsynth, channel, pitch, velo); + if (err) { + printf("ISynth: noteon error, channel %d pitch %d<%s>\n", + channel, pitch, fluid_synth_error(_fluidsynth)); + } + } + else + fluid_synth_noteoff(_fluidsynth, channel, pitch); + return false; + } + +//--------------------------------------------------------- +// setController +// return true if busy +//--------------------------------------------------------- + +bool ISynth::setController(int ch, int ctrl, int val) + { + if (_busy) { +// printf("fluid: setController(%d,%d,%d): busy!\n", ch, ctrl, val); + return true; + } + switch(ctrl) { + case CTRL_PROGRAM: + { + int hbank = (val & 0xff0000) >> 16; + int lbank = (val & 0xff00) >> 8; + if (hbank > 127) // map "dont care" to 0 + hbank = 0; + if (lbank > 127) + lbank = 0; + if (lbank == 127 || ch == 9) // drum HACK + lbank = 128; + int prog = val & 0x7f; + fluid_synth_program_select(_fluidsynth, ch, + hbank, lbank, prog); + } + break; + + case CTRL_PITCH: + fluid_synth_pitch_bend (_fluidsynth, ch, val); + break; + + default: +// printf("controller %x val %x\n", ctrl & 0x3fff, val); + fluid_synth_cc(_fluidsynth, ch, ctrl & 0x3fff, val); + break; + } + return false; + } + +//--------------------------------------------------------- +// sysex +// 7e 7f 09 01 GM on +// 7e 7f 09 02 GM off +// 7f 7f 04 01 ll hh Master Volume (ll-low byte, hh-high byte) +// 7c 00 01 nn ... replace Soundfont (nn-ascii char of path +// 7c 00 02 nn ... add Soundfont +// 7c 00 03 nn ... remove Soundfont +// +// return true if busy +//--------------------------------------------------------- + +bool ISynth::sysex(int len, const unsigned char* data) + { + if (_busy) { +// printf("fluid: sysex(): busy!\n"); + return true; + } + if (len >= 4) { + //--------------------------------------------- + // Universal Non Realtime + //--------------------------------------------- + + if (data[0] == 0x7e) { + if (data[1] == 0x7f) { // device Id + if (data[2] == 0x9) { // GM + if (data[3] == 0x1) { + gmOn(true); + return false; + } + else if (data[3] == 0x2) { + gmOn(false); + return false; + } + } + } + } + + //--------------------------------------------- + // Universal Realtime + //--------------------------------------------- + + else if (data[0] == 0x7f) { + if (data[1] == 0x7f) { // device Id + if ((data[2] == 0x4) && (data[3] == 0x1)) { + float v = (data[5]*128 + data[4])/32767.0; + fluid_synth_set_gain(_fluidsynth, v); + return false; + } + } + } + + //--------------------------------------------- + // MusE Soft Synth + //--------------------------------------------- + + else if (data[0] == 0x7c) { + int n = len - 3; + if (n < 1) { + printf("fluid: bad sysEx:\n"); + return false; + } + char buffer[n+1]; + memcpy(buffer, (char*)data+3, n); + buffer[n] = 0; + if (data[1] == 0) { // fluid + if (data[2] == 1) { // load sound font + sysexSoundFont(SF_REPLACE, buffer); + return false; + } + else if (data[2] == 2) { // load sound font + sysexSoundFont(SF_ADD, buffer); + return false; + } + else if (data[2] == 3) { // load sound font + sysexSoundFont(SF_REMOVE, buffer); + return false; + } + } + } + else if (data[0] == 0x41) { // roland + if (data[1] == 0x10 && data[2] == 0x42 && data[3] == 0x12 + && data[4] == 0x40 && data[5] == 00 && data[6] == 0x7f + && data[7] == 0x41) { + // gs on + gmOn(true); + return false; + } + } + } + printf("fluid: unknown sysex received, len %d:\n", len); + for (int i = 0; i < len; ++i) + printf("%02x ", data[i]); + printf("\n"); + return false; + } + +//--------------------------------------------------------- +// gmOn +//--------------------------------------------------------- + +void ISynth::gmOn(bool flag) + { + _gmMode = flag; + allNotesOff(); + } + +//--------------------------------------------------------- +// allNotesOff +// stop all notes +//--------------------------------------------------------- + +void ISynth::allNotesOff() + { + for (int ch = 0; ch < 16; ++ch) { + fluid_synth_cc(_fluidsynth, ch, 0x7b, 0); // all notes off + } + } + +//--------------------------------------------------------- +// guiVisible +//--------------------------------------------------------- + +bool ISynth::guiVisible() const + { + return gui->isVisible(); + } + +//--------------------------------------------------------- +// showGui +//--------------------------------------------------------- + +void ISynth::showGui(bool flag) + { + gui->setShown(flag); + } + +//--------------------------------------------------------- +// ~ISynth +//--------------------------------------------------------- + +ISynth::~ISynth() + { + // TODO delete settings + if (_fluidsynth) + delete_fluid_synth(_fluidsynth); + if (initBuffer) + delete [] initBuffer; + } + +//--------------------------------------------------------- +// process +//--------------------------------------------------------- + +void ISynth::process(float** ports, int offset, int n) + { + if (!_busy) { + // + // get and process all pending events from the + // synthesizer GUI + // + while (gui->fifoSize()) + processEvent(gui->readEvent()); + fluid_synth_write_float(_fluidsynth, n, ports[0], + offset, 1, ports[1], offset, 1); + } + // printf("%f %f\n", *ports[0], *(ports[0]+1)); + } + +//--------------------------------------------------------- +// getPatchName +//--------------------------------------------------------- + +const char* ISynth::getPatchName(int /*ch*/, int val, int) const + { + int hbank = (val & 0xff0000) >> 16; + int lbank = (val & 0xff00) >> 8; + if (hbank > 127) + hbank = 0; + if (lbank > 127) + lbank = 0; + if (lbank == 127) // drum HACK + lbank = 128; + int prog = val & 0x7f; + char* name = "---"; + + if (_busy) { + printf("fluid: getPatchName(): busy!\n"); + return name; + } + fluid_font = fluid_synth_get_sfont_by_id(_fluidsynth, hbank); + if (fluid_font) { + fluid_preset_t* preset = (*fluid_font->get_preset)(fluid_font, lbank, prog); + if (preset) + name = (*preset->get_name)(preset); + else + fprintf(stderr, "no fluid preset for bank %d prog %d\n", + lbank, prog); + } + else + fprintf(stderr, "ISynth::getPatchName(): no fluid font id=%d found\n", hbank); + return name; + } + +//--------------------------------------------------------- +// getNextPatch +//--------------------------------------------------------- + +const MidiPatch* ISynth::getPatchInfo(int ch, const MidiPatch* p) const + { + if (_busy) { + printf("fluid: getPatchInfo(): busy!\n"); + return 0; + } + if (p == 0) { + // get font at font stack index 0 + fluid_font = fluid_synth_get_sfont(_fluidsynth, 0); + if (fluid_font == 0) + return 0; + (*fluid_font->iteration_start)(fluid_font); + } + fluid_preset_t preset; + + while ((*fluid_font->iteration_next)(fluid_font, &preset)) { + patch.hbank = fluid_sfont_get_id(fluid_font); + int bank = (*preset.get_banknum)(&preset); + if (ch == 9 && bank != 128) // show only drums for channel 10 + continue; + if (bank == 128) + bank = 127; + patch.typ = 0; + patch.name = (*preset.get_name)(&preset); + patch.lbank = bank; + patch.prog = (*preset.get_num)(&preset); + return &patch; + } + return 0; + } + +//--------------------------------------------------------- +// getInitData +// construct an initialization string which can be used +// as a sysex to restore current state +//--------------------------------------------------------- + +void ISynth::getInitData(int* len, const unsigned char** data) + { + if (sfont == 0) { + *len = 0; + return; + } + int n = 4 + strlen(sfont); + if (n > initLen) { + if (initBuffer) + delete [] initBuffer; + initBuffer = new unsigned char[n]; + } + initBuffer[0] = 0x7c; + initBuffer[1] = 0x00; + initBuffer[2] = SF_REPLACE; + strcpy((char*)(initBuffer+3), sfont); + *len = n; + *data = initBuffer; + } + +//--------------------------------------------------------- +// sysexSoftfont +//--------------------------------------------------------- + +void ISynth::sysexSoundFont(SfOp op, const char* data) + { + char c = 'x'; + allNotesOff(); + switch(op) { + case SF_REMOVE: + break; + case SF_REPLACE: + case SF_ADD: + if (sfont && (strcmp(sfont, data) == 0)) { + fprintf(stderr, "fluid: font already loaded\n"); + break; + } + if (_busy) { + fprintf(stderr, "fluid: busy!\n"); + break; + } + _busy = true; + if (sfont) + delete[] sfont; + sfont = new char[strlen(data)+1]; + strcpy(sfont, data); + _busy = true; + write(writeFd, &c, 1); + break; + } + } + +//--------------------------------------------------------- +// fontLoad +// helper thread to load soundfont in the +// background +//--------------------------------------------------------- + +static void* helper(void* t) + { + ISynth* is = (ISynth*) t; + is->noRTHelper(); + pthread_exit(0); + } + +//------------------------------------ +// noRTHelper +//--------------------------------------------------------- + +void ISynth::noRTHelper() + { + for (;;) { + char c; + int n = read(readFd, &c, 1); + if (n != 1) { + perror("ISynth::read ipc failed\n"); + continue; + } + int id = getFontId(); + if (id != -1) { + fprintf(stderr, "ISynth: unload old font\n"); + fluid_synth_sfunload(synth(), (unsigned)id, true); + } + int rv = fluid_synth_sfload(synth(), getFont(), true); + if (rv == -1) { + fprintf(stderr, "ISynth: sfload %s failed\n", + fluid_synth_error(synth())); + } + else { + setFontId(rv); + fprintf(stderr, "ISynth: sfont %s loaded as %d\n ", + getFont(), rv); + } + fluid_synth_set_gain(synth(), 1.0); //? + _busy = false; + } + } + +//--------------------------------------------------------- +// init +// return true on error +//--------------------------------------------------------- + +bool ISynth::init(const char* name) + { + fluid_settings_t* settings; + settings = new_fluid_settings(); + fluid_settings_setnum(settings, "synth.sample-rate", float(sampleRate())); + + _fluidsynth = new_fluid_synth(settings); + + //--------------------------------------- + // create non realtime helper thread + // create message channels + // + int filedes[2]; // 0 - reading 1 - writing + if (pipe(filedes) == -1) { + perror("ISynth::thread:creating pipe"); + return true; + } + readFd = filedes[0]; + writeFd = filedes[1]; + + pthread_attr_t* attributes = (pthread_attr_t*) malloc(sizeof(pthread_attr_t)); + pthread_attr_init(attributes); + if (pthread_create(&helperThread, attributes, ::helper, this)) + perror("creating thread failed:"); + pthread_attr_destroy(attributes); + + char* p = getenv("DEFAULT_SOUNDFONT"); + if (p) { + sfont = new char[strlen(p)+1]; + strcpy(sfont, p); + char c = 'x'; + _busy = true; + write(writeFd, &c, 1); + } + + gui = new FLUIDGui; + gui->hide(); // to avoid flicker during MusE startup + gui->setWindowTitle(QString(name)); + return false; + } + diff --git a/attic/muse_qt4_evolution/synti/fluid/fluid.h b/attic/muse_qt4_evolution/synti/fluid/fluid.h new file mode 100644 index 00000000..af8ff3a1 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/fluid/fluid.h @@ -0,0 +1,80 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: fluid.h,v 1.8 2005/11/23 13:55:32 wschweer Exp $ +// +// This file is derived from fluid Synth and modified +// for MusE. +// Parts of fluid are derived from Smurf Sound Font Editor. +// Parts of Smurf Sound Font Editor are derived from +// awesfx utilities +// Smurf: Copyright (C) 1999-2000 Josh Green +// fluid: Copyright (C) 2001 Peter Hanappe +// MusE: Copyright (C) 2001 Werner Schweer +// awesfx: Copyright (C) 1996-1999 Takashi Iwai +//========================================================= + +#ifndef _SYNTH_H +#define _SYNTH_H + +#include +#include "libsynti/mess.h" + +enum SfOp { SF_REPLACE = 1, SF_ADD, SF_REMOVE }; +class FLUIDGui; + +//--------------------------------------------------------- +// ISynth +//--------------------------------------------------------- + +class ISynth : public Mess { + bool _busy; + bool _gmMode; + + unsigned char* initBuffer; + int initLen; + + fluid_synth_t* _fluidsynth; + char* sfont; + mutable fluid_sfont_t* fluid_font; + int fontId; + + int readFd, writeFd; + + mutable MidiPatch patch; + + pthread_t helperThread; + FLUIDGui* gui; + + void gmOn(bool); + void sysexSoundFont(SfOp op, const char* data); + + void allNotesOff(); + void resetAllController(int); + + virtual void process(float**, int, int); + virtual bool playNote(int channel, int pitch, int velo); + virtual bool setController(int, int, int); + virtual bool sysex(int len, const unsigned char* p); + virtual const char* getPatchName (int, int, int) const; + virtual const MidiPatch* getPatchInfo(int, const MidiPatch *) const; + virtual void getInitData(int*, const unsigned char**); + + virtual bool guiVisible() const; + virtual void showGui(bool); + virtual bool hasGui() const { return true; } + + public: + ISynth(); + ~ISynth(); + + fluid_synth_t* synth() { return _fluidsynth; } + const fluid_synth_t* synth() const { return _fluidsynth; } + char* getFont() const { return sfont; } + void setFontId(int id) { fontId = id; } + int getFontId() const { return fontId; } + bool init(const char* name); + void noRTHelper(); + }; + +#endif /* _SYNTH_H */ diff --git a/attic/muse_qt4_evolution/synti/fluid/fluidgui.cpp b/attic/muse_qt4_evolution/synti/fluid/fluidgui.cpp new file mode 100644 index 00000000..aea6e38a --- /dev/null +++ b/attic/muse_qt4_evolution/synti/fluid/fluidgui.cpp @@ -0,0 +1,68 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: fluidgui.cpp,v 1.10 2005/11/23 13:55:32 wschweer Exp $ +// +// This is a simple GUI implemented with QT for +// fluid software synthesizer. +// +// (C) Copyright 2001-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include "fluidgui.h" +#include "muse/midi.h" + +//--------------------------------------------------------- +// FLUIDGui +//--------------------------------------------------------- + +FLUIDGui::FLUIDGui() + : QDialog(0), MessGui() + { + setupUi(this); + connect(fdialogButton, SIGNAL(clicked()), SLOT(soundFontFileDialog())); + connect(loadButton, SIGNAL(clicked()), SLOT(loadFont())); + } + +//--------------------------------------------------------- +// loadFont +// sysex f0 lenH lenM lenL 7c 00 01 name +//--------------------------------------------------------- + +void FLUIDGui::loadFont() + { + if (pathEntry->text().isEmpty()) + return; + QFileInfo fi(pathEntry->text()); + if (!fi.exists()) { + QString s = QString("SoundFont ") + pathEntry->text() + QString(" does not exists"); + QMessageBox::critical(this, tr("FLUID: open Soundfile"), s); + return; + } + const char* path = pathEntry->text().toLatin1().data(); + int len = strlen(path) + 1 + 3; + unsigned char buffer[len]; + int k = 0; + buffer[k++] = 0x7c; + buffer[k++] = 0x00; // fluid + buffer[k++] = 0x01; // load sound font + strcpy((char*)(&buffer[k]), path); + sendSysex(buffer, len); + } + +//--------------------------------------------------------- +// soundFontFileDialog +//--------------------------------------------------------- + +void FLUIDGui::soundFontFileDialog() + { + QString s = QFileDialog::getOpenFileName( + this, + tr("Fluid: select Sound Font"), + ".", + QString("*.[Ss][Ff]2")); + if (!s.isEmpty()) { + pathEntry->setText(s); + } + } + diff --git a/attic/muse_qt4_evolution/synti/fluid/fluidgui.h b/attic/muse_qt4_evolution/synti/fluid/fluidgui.h new file mode 100644 index 00000000..3b42280f --- /dev/null +++ b/attic/muse_qt4_evolution/synti/fluid/fluidgui.h @@ -0,0 +1,31 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: fluidgui.h,v 1.3 2005/10/04 21:37:44 lunar_shuttle Exp $ +// +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __GUI_H__ +#define __GUI_H + +#include "ui_fluidgui.h" +#include "libsynti/gui.h" + +//--------------------------------------------------------- +// FLUIDGui +//--------------------------------------------------------- + +class FLUIDGui : public QDialog, public Ui::FLUIDGuiBase, public MessGui { + + Q_OBJECT + + private slots: + void soundFontFileDialog(); + void loadFont(); + + public: + FLUIDGui(); + }; + +#endif diff --git a/attic/muse_qt4_evolution/synti/fluid/fluidgui.ui b/attic/muse_qt4_evolution/synti/fluid/fluidgui.ui new file mode 100644 index 00000000..dde416d2 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/fluid/fluidgui.ui @@ -0,0 +1,115 @@ + + + + + FLUIDGuiBase + + + + 0 + 0 + 318 + 228 + + + + Form1 + + + + 8 + + + 6 + + + + + Soundfont + + + + + + + 0 + + + 6 + + + + + + + + + + + + + + + + + + + + Qt::Vertical + + + + 230 + 20 + + + + + + + + 0 + + + 6 + + + + + + 5 + 0 + 0 + 0 + + + + Load + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 20 + 20 + + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/synti/fluidsynth/CMakeLists.txt b/attic/muse_qt4_evolution/synti/fluidsynth/CMakeLists.txt new file mode 100644 index 00000000..5fdc3533 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/fluidsynth/CMakeLists.txt @@ -0,0 +1,51 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +QT4_WRAP_CPP ( fluidsynth_mocs fluidsynthgui.h ) +QT4_WRAP_UI ( fluidsynth_uis fluidsynthgui.ui ) + +add_library ( fluidsynth SHARED + fluidsynti.cpp + fluidsynthgui.cpp + fluidsynthgui.h + ${fluidsynth_mocs} + ${fluidsynth_uis} + ) + +target_link_libraries( fluidsynth synti ) + +# - tell cmake to name target fluidsynth.so instead of +# libfluidsynth.so +# - use precompiled header files +# +set_target_properties ( fluidsynth + PROPERTIES PREFIX "" + COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all-pic.h" + LINK_FLAGS "-L${FLUID_LIBDIR} ${FLUID_LIB}" + ) + +target_link_libraries(fluidsynth + synti + ${QT_LIBRARIES} + ${FLUID_LIB} + ) + +install_targets ( /${CMAKE_INSTALL_LIBDIR}/${MusE_INSTALL_NAME}/synthi/ fluidsynth ) + diff --git a/attic/muse_qt4_evolution/synti/fluidsynth/README.txt b/attic/muse_qt4_evolution/synti/fluidsynth/README.txt new file mode 100644 index 00000000..7764edb6 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/fluidsynth/README.txt @@ -0,0 +1,45 @@ +README.txt +---------- + +Graphical frontend and built-in softsynth (MusE Experimental Soft Synth) for MusE, based on Fluidsynth +(http://www.fluidsynth.org). + +Features: +--------- +- Loading/unloading of soundfonts +- Easy control of fluidsynth's send effects and their parameters +- Mapping of soundfonts to fluidsynth channels +- Stores all settings in the current project file and automatically loads all effect parameters, + soundfonts, channel settings and presets when re-opening the project. +- Makes it possible to use several soundfonts in one single fluidsynth instance (thereby reducing CPU usage since they share + the same send effects) + + +Changelog/History +----------------- +040524 +- Err... Fount out that this changelog is neglected. See ../../Changelog.txt instead. +031019 +- Bugfixes and changes in storing/retrieving init parameters (Mathias Lundgren) +031009 +- Unloading of soundfonts works (Mathias Lundgren) +- Last dir stored in project-file (Mathias Lundgren) +- Ordinary controller-events enabled (Mathias Lundgren) +031008 +- Mapping of soundfonts to fluidchannels and selection of patches implemented. (Mathias Lundgren) +- Permanent storage of channels & patches. Extended GUI. (Mathias Lundgren) +031002 +- Various communication problems fixed between GUI and client (Mathias Lundgren) +- Storage of synth parameters and soundfonts enabled (Mathias Lundgren/Robert Jonsson) + +0309xx +- Problem with loading of soundfonts resulting in Jack timeout fixed by moving loading of soundfonts to separate thread. (Robert Jonsson) + +Original code written by Robert Ham (no information about the history of his work) + + +Known problems/TODO: +-------------------------------------------------------------- +* Turning on the chorus and/or modifying chorus parameters locks the client. +* Illegal chorus parameters can be sent to fluidsynth. +* Drum patches (lbank=128) not implemented yet diff --git a/attic/muse_qt4_evolution/synti/fluidsynth/TODO b/attic/muse_qt4_evolution/synti/fluidsynth/TODO new file mode 100644 index 00000000..e941e1e9 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/fluidsynth/TODO @@ -0,0 +1,13 @@ + TODO + +o preset loading/saving +o configuration loading/saving +o soundfont information display +o remembering the last directory that was dealt with +o change gui<->synth communication to nrpns + + DONE + +o get all controllers working +o soundfont stack operations +o patch name retrieval diff --git a/attic/muse_qt4_evolution/synti/fluidsynth/fluidsynthgui.cpp b/attic/muse_qt4_evolution/synti/fluidsynth/fluidsynthgui.cpp new file mode 100644 index 00000000..42f812b5 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/fluidsynth/fluidsynthgui.cpp @@ -0,0 +1,596 @@ +/* + * MusE FLUID Synth softsynth plugin + * + * Copyright (C) 2004 Mathias Lundgren (lunar_shuttle@users.sourcforge.net) + * + * $Id: fluidsynthgui.cpp,v 1.19 2006/01/06 22:48:09 wschweer Exp $ + * + */ + +#include "fluidsynthgui.h" +#include "fluidsynti.h" +#include +#include "muse/midi.h" +#include "xpm/buttondown.xpm" + + +//#define MUSE_FLUID_DEBUG false + +FluidSynthGui::FluidSynthGui() + : MessGui() + { + setupUi(this); + //Connect socketnotifier to fifo + QSocketNotifier* s = new QSocketNotifier(readFd, QSocketNotifier::Read); + connect(s, SIGNAL(activated(int)), SLOT(readMessage(int))); + connect (Push, SIGNAL (clicked()), SLOT(loadClicked())); + + pendingFont = ""; + + //channelListView->setColumnWidthMode(FS_CHANNEL_COL, Q3ListView::Maximum); + //channelListView->setColumnWidthMode(FS_SF_ID_COL,Q3ListView::Maximum); + ReverbFrame->setEnabled(true); + ChorusFrame->setEnabled(true); + + if (!FS_DEBUG) + dumpInfoButton->hide(); + + connect(Gain, SIGNAL(valueChanged(int)), SLOT(changeGain(int))); + connect(dumpInfoButton , SIGNAL(clicked()), SLOT(dumpInfo())); + + connect(channelTreeWidget, SIGNAL(itemPressed(QTreeWidgetItem*,int)), + this, SLOT(channelItemClicked(QTreeWidgetItem*,int))); + connect(sfTreeWidget, SIGNAL(itemPressed(QTreeWidgetItem*,int)), + this, SLOT(sfItemClicked(QTreeWidgetItem*,int))); + + connect(Reverb, SIGNAL (toggled(bool)), SLOT(toggleReverb(bool))); + connect(ReverbLevel, SIGNAL (valueChanged (int)), SLOT(changeReverbLevel(int))); + connect(ReverbRoomSize, SIGNAL (valueChanged (int)), SLOT(changeReverbRoomSize(int))); + connect(ReverbDamping, SIGNAL (valueChanged (int)), SLOT(changeReverbDamping(int))); + connect(ReverbWidth, SIGNAL (valueChanged (int)), SLOT(changeReverbWidth(int))); + + connect (Pop, SIGNAL (clicked()), SLOT(popClicked())); + connect(Chorus, SIGNAL (toggled (bool)), SLOT(toggleChorus (bool))); + connect(ChorusNumber, SIGNAL (valueChanged (int)), SLOT(changeChorusNumber (int))); + connect(ChorusType, SIGNAL (activated (int)), SLOT(changeChorusType (int))); + connect(ChorusSpeed, SIGNAL (valueChanged (int)), SLOT(changeChorusSpeed (int))); + connect(ChorusDepth, SIGNAL (valueChanged (int)), SLOT(changeChorusDepth (int))); + connect(ChorusLevel, SIGNAL (valueChanged (int)), SLOT(changeChorusLevel (int))); + + //Clear channels + for (int i=0; iclear(); //Clear the listview + stack.clear(); //Clear the stack since we're starting over again + + while (count) { + FluidGuiSoundFont font; + filename_len = strlen((const char*)cp) + 1; + font.name = (const char*)cp; + font.id = *(cp + filename_len); + chunk_len = filename_len + FS_SFDATALEN; + stack.push_front(font); + cp += chunk_len; //Move to next chunk + count--; + } + updateSoundfontTreeWidget(); + updateChannelTreeWidget(); + break; + } + case FS_SEND_CHANNELINFO: { + byte* chptr = (data+1); + for (int i=0; i< FS_MAX_NR_OF_CHANNELS; i++) { + byte id = *chptr; + byte channel = *(chptr+1); + channels[channel] = id; + chptr+=2; + } + updateChannelTreeWidget(); + + break; + } + case FS_SEND_DRUMCHANNELINFO: { + byte* drumchptr = (data+1); + for (int i=0; isignalsBlocked(); + Gain->blockSignals(true); + // Update Gain-slider without causing it to respond to it's own signal (and send another msg to the synth) + Gain->setValue(val); + Gain->blockSignals(sb); + break; + } + case FS_REVERB_ON: { + bool sb = Reverb->signalsBlocked(); + Reverb->blockSignals(true); + Reverb->setChecked(val); + Reverb->blockSignals(sb); + break; + } + case FS_REVERB_LEVEL: { + bool sb = ReverbLevel->signalsBlocked(); + ReverbLevel->blockSignals(true); + ReverbLevel->setValue(val); + ReverbLevel->blockSignals(sb); + break; + } + case FS_REVERB_DAMPING: { + bool sb = ReverbDamping->signalsBlocked(); + ReverbDamping->blockSignals(true); + ReverbDamping->setValue(val); + ReverbDamping->blockSignals(sb); + break; + } + case FS_REVERB_ROOMSIZE: { + bool sb = ReverbRoomSize->signalsBlocked(); + ReverbRoomSize->blockSignals(true); + ReverbRoomSize->setValue(val); + ReverbRoomSize->blockSignals(sb); + break; + } + case FS_REVERB_WIDTH: { + bool sb = ReverbWidth->signalsBlocked(); + ReverbWidth->blockSignals(true); + ReverbWidth->setValue(val); + ReverbWidth->blockSignals(sb); + break; + } + case FS_CHORUS_ON: { + Chorus->blockSignals(true); + Chorus->setChecked(val); + Chorus->blockSignals(false); + break; + } + case FS_CHORUS_SPEED: { + ChorusSpeed->blockSignals(true); + ChorusSpeed->setValue(val); + ChorusSpeed->blockSignals(false); + break; + } + case FS_CHORUS_NUM: { + ChorusNumber->blockSignals(true); + ChorusNumber->setValue(val); + ChorusNumber->blockSignals(false); + break; + } + case FS_CHORUS_TYPE: { + ChorusType->blockSignals(true); + ChorusType->setCurrentIndex(val); + ChorusType->blockSignals(false); + break; + } + case FS_CHORUS_DEPTH: { + ChorusDepth->blockSignals(true); + ChorusDepth->setValue(val); + ChorusDepth->blockSignals(false); + break; + } + case FS_CHORUS_LEVEL: { + ChorusLevel->blockSignals(true); + ChorusLevel->setValue(val); + ChorusLevel->blockSignals(false); + break; + } + default: + if (FS_DEBUG) + printf("FluidSynthGui::processEvent() : Unknown controller sent to gui: %x\n",id); + break; + } + } + else + if (FS_DEBUG) + printf("FluidSynthGui::processEvent - unknown event of type %dreceived from synth.\n", ev.type()); + } + +//--------------------------------------------------------- +// readMessage +//--------------------------------------------------------- +void FluidSynthGui::readMessage(int) + { + MessGui::readMessage(); + } + +//--------------------------------------------------------- +// updateChannels +//--------------------------------------------------------- +void FluidSynthGui::updateChannelTreeWidget() + { + if (FS_DEBUG) + printf("FluidSynthGui::updateChannelListView\n"); + channelTreeWidget->clear(); + QIcon btndown = QIcon(buttondown_xpm); + + QTreeWidgetItem* header = new QTreeWidgetItem(); + header->setText(FS_CHANNEL_COL, "Channel"); + header->setText(FS_SF_ID_COL, "Soundfont"); + header->setText(FS_DRUM_CHANNEL_COL, "Drum Chnl"); + channelTreeWidget->setHeaderItem(header); + + for (int i=0; isetText(FS_CHANNEL_COL, chanstr); + qlvNewItem->setIcon(FS_SF_ID_COL, btndown); + qlvNewItem->setText(FS_SF_ID_COL, sfidstr); + qlvNewItem->setIcon(FS_DRUM_CHANNEL_COL, btndown); + qlvNewItem->setText(FS_DRUM_CHANNEL_COL, drumchanstr); + } + } + +//--------------------------------------------------------- +// updateSoundfontTreeWidget +//--------------------------------------------------------- +void FluidSynthGui::updateSoundfontTreeWidget() + { + sfTreeWidget->clear(); //Clear the listview + + QTreeWidgetItem* header = new QTreeWidgetItem(); + header->setText(FS_ID_COL, "ID"); + header->setText(FS_SFNAME_COL, "Fontname"); + sfTreeWidget->setHeaderItem(header); + + for (std::list::iterator it = stack.begin(); it != stack.end(); it++) { + QTreeWidgetItem* qlvNewItem; + + qlvNewItem = new QTreeWidgetItem(sfTreeWidget); + QString qsid = QString("%1").arg(it->id); + qlvNewItem->setText(FS_ID_COL, qsid); + qlvNewItem->setText(FS_SFNAME_COL, QString(it->name)); + } + //sfTreeWidget->sort(); + } + +//--------------------------------------------------------- +// changeGain +//--------------------------------------------------------- +void FluidSynthGui::changeGain(int value) + { + sendController(0, FS_GAIN, value); + } + + +//--------------------------------------------------------- +// dumpInfoButton +//--------------------------------------------------------- +void FluidSynthGui::dumpInfo() + { + byte data[1]; + data[0] = FS_DUMP_INFO; + sendSysex(data, 1); + } + +//--------------------------------------------------------- +// getSoundFontName +//--------------------------------------------------------- + +QString FluidSynthGui::getSoundFontName(int id) + { + QString name = NULL; + for (std::list::iterator it = stack.begin(); it != stack.end(); it++) { + if (id == it->id) { + name = it->name; + continue; + } + } + return name; + } + +//--------------------------------------------------------- +// channelItemClicked +// change channel parameters like soundfont / drumchannel on/off +//--------------------------------------------------------- + +void FluidSynthGui::channelItemClicked(QTreeWidgetItem* item, int col) + { + // + // Soundfont ID column + // + if (col == FS_SF_ID_COL) { + QMenu* popup = new QMenu(this); + QPoint ppt = channelTreeWidget->visualItemRect(item).bottomLeft(); + QTreeWidget* treeWidget = item->treeWidget(); + ppt += QPoint(treeWidget->header()->sectionPosition(col), treeWidget->header()->height()); + ppt = treeWidget->mapToGlobal(ppt); + + int i = 0; + for (std::list::reverse_iterator it = stack.rbegin(); it != stack.rend(); it++) { + i++; + QAction* a = popup->addAction(it->name); + a->setData(i); + } + + int lastindex = i+1; + QAction* a = popup->addAction("unspecified"); + a->setData(lastindex); + a = popup->exec(ppt, 0); + if (a) { + int index = a->data().toInt(); + byte sfid; + QString fontname; + if (index == lastindex) { + sfid = FS_UNSPECIFIED_ID; + fontname = "unspecified"; //Actually, it's not possible to reset fluid-channels as for now, + } //so this is just a dummy that makes the synth block any events for the channel + else { + sfid = getSoundFontId(a->text()); + fontname = getSoundFontName(sfid); + } + byte channel = atoi(item->text(FS_CHANNEL_COL).toLatin1().data()) - 1; + sendChannelChange(sfid, channel); + item->setText(FS_SF_ID_COL, fontname); + } + delete popup; + } + // + // Drumchannel column: + // + else if (col == FS_DRUM_CHANNEL_COL) { + QMenu* popup = new QMenu(this); + QPoint ppt = channelTreeWidget->visualItemRect(item).bottomLeft(); + QTreeWidget* treeWidget = item->treeWidget(); + ppt += QPoint(treeWidget->header()->sectionPosition(col), treeWidget->header()->height()); + ppt = treeWidget->mapToGlobal(ppt); + QAction* a = popup->addAction("Yes"); + a->setData(1); + a = popup->addAction("No"); + a->setData(0); + byte channel = atoi(item->text(FS_CHANNEL_COL).toLatin1().data()) - 1; + + a = popup->exec(ppt, 0); + if (a) { + int index = a->data().toInt(); + if (index != drumchannels[channel]) { + sendDrumChannelChange(index, channel); + drumchannels[channel] = index; + item->setText(FS_DRUM_CHANNEL_COL, index == 0 ? "No" : "Yes" ); + } + } + } +#if 0 + else if (col == FS_DRUM_CHANNEL_COL) { + Q3PopupMenu* popup = new Q3PopupMenu(this); + QPoint ppt = channelListView->itemRect(item).bottomLeft(); + Q3ListView* listView = item->listView(); + ppt += QPoint(listView->header()->sectionPos(col), listView->header()->height()); + ppt = listView->mapToGlobal(ppt); + popup->insertItem("Yes", 1); + popup->insertItem("No", 0); + byte channel = atoi(item->text(FS_CHANNEL_COL).toLatin1().data()) - 1; + + int index = popup->exec(ppt, 0); + if (index != drumchannels[channel] && index !=-1) { + sendDrumChannelChange(index, channel); + drumchannels[channel] = index; + item->setText(FS_DRUM_CHANNEL_COL, index == 0 ? "No" : "Yes" ); + } + } +#endif + } + +//--------------------------------------------------------- +// getSoundFontId +//--------------------------------------------------------- + +int FluidSynthGui::getSoundFontId(QString q) + { + int id = -1; + for (std::list::iterator it = stack.begin(); it != stack.end(); it++) { + if (q == it->name) + id = it->id; + } + return id; + } + +//--------------------------------------------------------- +// sendChannelChange +// Tell the client to set a soundfont to a specific fluid channel +//--------------------------------------------------------- + +void FluidSynthGui::sendChannelChange(byte font_id, byte channel) + { + byte data[3]; + data[0] = FS_SOUNDFONT_CHANNEL_SET; + data[1] = font_id; + data[2] = channel; + sendSysex(data, 3); + } + +//--------------------------------------------------------- +// sendDrumChannelChange +// Tell the client to set a specific channel to drum channel (equiv to midichan 10) +//--------------------------------------------------------- +void FluidSynthGui::sendDrumChannelChange(byte onoff, byte channel) + { + byte data[3]; + data[0] = FS_DRUMCHANNEL_SET; + data[1] = onoff; + data[2] = channel; + sendSysex(data, 3); + if (FS_DEBUG) + printf("Sent FS_DRUMCHANNEL_SET for channel %d, status: %d\n", channel, onoff); + } + +void FluidSynthGui::popClicked() + { + byte data[2]; + data[0] = FS_SOUNDFONT_POP; + data[1] = currentlySelectedFont; + sendSysex(data,2); + } + +void FluidSynthGui::sfItemClicked(QTreeWidgetItem* item, int /*column*/) + { + if (item != 0) { + currentlySelectedFont = atoi(item->text(FS_ID_COL).toLatin1().data()); + Pop->setEnabled(true); + } + else { + currentlySelectedFont = -1; + Pop->setEnabled(false); + } + } + +#if 0 + + + +void FluidSynthGui::readData (int fd) + { + unsigned char buffer[512]; + int n = ::read(fd, buffer, 512); +// dataInput(buffer, n); + } + +#endif diff --git a/attic/muse_qt4_evolution/synti/fluidsynth/fluidsynthgui.h b/attic/muse_qt4_evolution/synti/fluidsynth/fluidsynthgui.h new file mode 100644 index 00000000..9884e636 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/fluidsynth/fluidsynthgui.h @@ -0,0 +1,136 @@ +/* + * MusE FLUID Synth softsynth plugin + * + * Copyright (C) 2004 Mathias Lundgren (lunar_shuttle@users.sourcforge.net) + * + * $Id: fluidsynthgui.h,v 1.15 2005/10/05 21:51:04 lunar_shuttle Exp $ + * + */ + +#ifndef __MUSE_FLUIDSYNTHGUI_H__ +#define __MUSE_FLUIDSYNTHGUI_H__ + +#include "ui_fluidsynthgui.h" +#include "libsynti/gui.h" +#include + +struct FluidChannel; +#define FS_DEBUG 0 //Turn on/off debug + +#define FS_MAX_NR_OF_CHANNELS 16 +#define FS_UNSPECIFIED_FONT 126 +#define FS_UNSPECIFIED_ID 127 +#define FS_UNSPECIFIED_PRESET 129 +#define FS_CHANNEL_COL 0 +#define FS_ID_COL 0 +#define FS_SFNAME_COL 1 +#define FS_SF_ID_COL 1 +#define FS_DRUM_CHANNEL_COL 2 + +#define FS_SFDATALEN 1 +#define FS_VERSION_MAJOR 0 +#define FS_VERSION_MINOR 4 +#define FS_INIT_DATA_HEADER_SIZE 4 +#define FS_INIT_CHANNEL_SECTION 255 + +// Predefined init-values for fluidsynth +#define FS_PREDEF_VOLUME 0.2 +#define FS_PREDEF_REVERB_LEVEL 0.25 +#define FS_PREDEF_REVERB_ROOMSIZE 0.3 +#define FS_PREDEF_REVERB_DAMPING 0.3 +#define FS_PREDEF_REVERB_WIDTH 0.2 +#define FS_PREDEF_CHORUS_NUM 3 +#define FS_PREDEF_CHORUS_TYPE 1 +#define FS_PREDEF_CHORUS_SPEED 0.5 +#define FS_PREDEF_CHORUS_DEPTH 0.3 +#define FS_PREDEF_CHORUS_LEVEL 0.5 +typedef unsigned char byte; + + +//Various messages the gui and the client uses to communicate +enum { + FS_LASTDIR_CHANGE = 1, + FS_PUSH_FONT + }; + +enum { + //FS_GAIN_SET, + FS_SEND_SOUNDFONTDATA = 4, + FS_SEND_CHANNELINFO, //Used by synth to send info about all channels, on init + FS_SOUNDFONT_CHANNEL_SET, + FS_SOUNDFONT_POP, + FS_SEND_DRUMCHANNELINFO, //Used by synth to send drumchannel status about all channels, on init + FS_DRUMCHANNEL_SET, //Used by gui to set drumchannel status for specific channel + FS_FONT_SUCCESSFULLY_LOADED // synth tells gui it loaded a font successfully, and gives it it's external id + }; + +enum + { + FS_DUMP_INFO = 240, + FS_ERROR, + FS_INIT_DATA + }; + +struct FluidGuiSoundFont + { + QString filename; + QString name; + byte id; + }; + +//--------------------------------------------------------- +// FluidSynthGui +//--------------------------------------------------------- + +class FluidSynthGui : public QDialog, Ui::FLUIDSynthGuiBase, public MessGui + { + Q_OBJECT + private: + virtual void processEvent(const MidiEvent& ev); + void sendLastdir(QString); + void sendLoadFont(QString); + void sendChannelChange(byte font_id, byte channel); + void sendDrumChannelChange(byte onoff, byte channel); + void updateSoundfontTreeWidget(); + void updateChannelTreeWidget(); + + QString getSoundFontName(int id); + int getSoundFontId(QString q); + QString lastdir; + std::list stack; + byte channels[FS_MAX_NR_OF_CHANNELS]; //Array of bytes, for mapping soundfonts to individual channels + byte drumchannels[FS_MAX_NR_OF_CHANNELS]; // Array of bytes for setting channels to drumchannels or not (equiv to midichan 10) + + int currentlySelectedFont; //Font currently selected in sfListView. -1 if none selected + QString pendingFont; + + private slots: + void loadClicked(); + void readMessage(int); + void changeGain(int); + void dumpInfo(); + void channelItemClicked(QTreeWidgetItem* item, int column); + void toggleReverb(bool); + void changeReverbLevel (int); + void changeReverbRoomSize(int val); + void changeReverbWidth(int val); + void changeReverbDamping(int val); + void toggleChorus(bool); + void changeChorusNumber(int); + void changeChorusType(int); + void changeChorusSpeed(int); + void changeChorusDepth(int); + void changeChorusLevel(int); + void popClicked(); + void sfItemClicked(QTreeWidgetItem* item, int column); + + public: +// virtual void sysexReceived (const unsigned char *, int); +// virtual void controllerReceived(int, int, int); + + FluidSynthGui(); + ~FluidSynthGui(); +}; + + +#endif /* __MUSE_FLUIDSYNTHGUI_H__ */ diff --git a/attic/muse_qt4_evolution/synti/fluidsynth/fluidsynthgui.ui b/attic/muse_qt4_evolution/synti/fluidsynth/fluidsynthgui.ui new file mode 100644 index 00000000..558f4133 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/fluidsynth/fluidsynthgui.ui @@ -0,0 +1,641 @@ + + + + + FLUIDSynthGuiBase + + + + 0 + 0 + 656 + 514 + + + + FLUID Synth + + + + + + + 8 + + + 6 + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 8 + + + 6 + + + + + <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Loaded Soundfonts</span></p></body></html> + + + Qt::AutoText + + + Qt::AlignHCenter + + + + + + + 2 + + + true + + + + 0 + + + + + 1 + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 8 + + + 6 + + + + + <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Channel Setup</span></p></body></html> + + + Qt::AlignHCenter + + + + + + + 3 + + + true + + + + 0 + + + + + 1 + + + + + 2 + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 8 + + + 6 + + + + + Chorus + + + + + + + 0 + + + 6 + + + + + Number + + + Qt::AlignCenter + + + + + + + 127 + + + + + + + Type + + + Qt::AlignCenter + + + + + + + + Sine + + + + + Triangle + + + + + + + + + + 0 + + + 6 + + + + + Speed + + + Qt::AlignCenter + + + + + + + 16383 + + + 16 + + + 1638 + + + Qt::Horizontal + + + 1638 + + + + + + + + + 0 + + + 6 + + + + + Depth + + + Qt::AlignCenter + + + + + + + 16383 + + + 16 + + + 1638 + + + Qt::Horizontal + + + 1638 + + + + + + + + + 0 + + + 6 + + + + + Level + + + Qt::AlignCenter + + + + + + + 16383 + + + 16 + + + 1638 + + + Qt::Horizontal + + + 1638 + + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 8 + + + 6 + + + + + 0 + + + 6 + + + + + Load + + + + + + + false + + + Delete + + + + + + + Dump Info + + + + + + + + + + + + + + + + 8 + + + 6 + + + + + <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Gain</p></body></html> + + + + + + + 0 + + + 127 + + + 5 + + + 13 + + + true + + + Qt::Horizontal + + + 7 + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 8 + + + 6 + + + + + Reverb + + + + + + + 0 + + + 6 + + + + + 0 + + + 6 + + + + + Room Size + + + Qt::AlignCenter + + + + + + + Damping + + + Qt::AlignCenter + + + + + + + Width + + + Qt::AlignCenter + + + + + + + Level + + + Qt::AlignCenter + + + + + + + + + 0 + + + 6 + + + + + 16383 + + + 16 + + + 1638 + + + Qt::Horizontal + + + 1638 + + + + + + + 16383 + + + 16 + + + 1638 + + + Qt::Horizontal + + + 1638 + + + + + + + 16383 + + + 16 + + + 1638 + + + Qt::Horizontal + + + 1638 + + + + + + + 16383 + + + 16 + + + 1638 + + + Qt::Horizontal + + + 1638 + + + + + + + + + + + + 11 + 36 + 260 + 17 + + + + + + + 11 + 59 + 260 + 17 + + + + + + + 11 + 82 + 260 + 17 + + + + + + + 11 + 105 + 260 + 17 + + + + + + + + + + + + diff --git a/attic/muse_qt4_evolution/synti/fluidsynth/fluidsynti.cpp b/attic/muse_qt4_evolution/synti/fluidsynth/fluidsynti.cpp new file mode 100644 index 00000000..57e72262 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/fluidsynth/fluidsynti.cpp @@ -0,0 +1,1174 @@ +/* + * MusE FLUID Synth softsynth plugin + * + * Copyright (C) 2004 Mathias Lundgren (lunar_shuttle@users.sourcforge.net) + * + * $Id: fluidsynti.cpp,v 1.28 2005/12/18 14:09:54 wschweer Exp $ + * + */ + +#include "fluidsynti.h" +#include "muse/midi.h" + +#include +#include + + +FluidCtrl FluidSynth::fluidCtrl[] = { + { "Gain", FS_GAIN ,0, 127}, + { "Master reverb on/off", FS_REVERB_ON , 0, 1}, + { "Master reverb level", FS_REVERB_LEVEL, 0, 16384 }, + { "Master reverb size", FS_REVERB_ROOMSIZE, 0, 16384 }, // Interval: [0,1] + { "Master reverb damping", FS_REVERB_DAMPING, 0, 16384 }, // Interval: [0,1] + { "Master reverb width", FS_REVERB_WIDTH, 0, 16384 }, // Interval: [0,100] + { "Master chorus on/off", FS_CHORUS_ON, 0, 1}, + { "Master chorus num delay lines", FS_CHORUS_NUM, 0, 10 }, //Default: 3 + { "Master chorus type", FS_CHORUS_TYPE, 0, 1 }, + { "Master chorus speed", FS_CHORUS_SPEED, 0, 16384 }, // (0.291,5) Hz + { "Master chorus depth", FS_CHORUS_DEPTH, 0, 16384 }, // [0,40] + { "Master chorus level", FS_CHORUS_LEVEL, 0, 16384 }, // [0,1] + { "Modulation", CTRL_MODULATION, 0, 127 }, + { "Portamento time", CTRL_PORTAMENTO_TIME, 0, 127 }, + { "Volume", CTRL_VOLUME, 0, 127 }, + { "Pan", CTRL_PANPOT, 0, 127 }, + { "Expression", CTRL_EXPRESSION, 0, 127 }, + { "Sustain", CTRL_SUSTAIN, 0, 127 }, + { "Portamento", CTRL_PORTAMENTO, 0, 127 }, + { "Soft Pedal", CTRL_SOFT_PEDAL, 0, 127 }, + { "Variation", CTRL_VARIATION_SEND, 0, 127 }, + { "Channel reverb send", CTRL_REVERB_SEND, 0, 127 }, + { "Channel chorus send", CTRL_CHORUS_SEND, 0, 127 }, + { "Pitch", CTRL_PITCH, -8192, 8191 } + }; + +static int NUM_CONTROLLER = sizeof(FluidSynth::fluidCtrl)/sizeof(*(FluidSynth::fluidCtrl)); + +// +// Fluidsynth +// +FluidSynth::FluidSynth(int sr) : Mess(2) + { + setSampleRate(sr); + fluid_settings_t* s = new_fluid_settings(); + fluid_settings_setnum(s, "synth.sample-rate", float(sampleRate())); + fluidsynth = new_fluid_synth(s); + if (!fluidsynth) { + printf("Error while creating fluidsynth!\n"); + return; + } + + //Set up channels: + for (int i=0; ishow(); + gui->setWindowTitle(name); + + lastdir= ""; + currentlyLoadedFonts = 0; + nrOfSoundfonts = 0; + sendChannelData(); + cho_on = false; + cho_num = FS_PREDEF_CHORUS_NUM; + cho_type = FS_PREDEF_CHORUS_TYPE; + cho_level = FS_PREDEF_CHORUS_LEVEL; + cho_speed = FS_PREDEF_CHORUS_SPEED; + cho_depth = FS_PREDEF_CHORUS_DEPTH; + setController(0, FS_GAIN, (int)(fluidCtrl[0].max*FS_PREDEF_VOLUME)); + setController(0, FS_REVERB_ON, 0); + setController(0, FS_REVERB_LEVEL, (int)(fluidCtrl[2].max*FS_PREDEF_REVERB_LEVEL)); + setController(0, FS_REVERB_ROOMSIZE, (int)(fluidCtrl[3].max*FS_PREDEF_REVERB_ROOMSIZE)); + setController(0, FS_REVERB_DAMPING, (int)(fluidCtrl[4].max*FS_PREDEF_REVERB_DAMPING)); + setController(0, FS_REVERB_WIDTH, (int)(fluidCtrl[5].max*FS_PREDEF_REVERB_WIDTH)); + setController(0, FS_CHORUS_ON, 0); + setController(0, FS_CHORUS_NUM, FS_PREDEF_CHORUS_NUM); + //setController(0, FS_CHORUS_TYPE, FS_PREDEF_CHORUS_TYPE); //? + setController(0, FS_CHORUS_SPEED, (int)(fluidCtrl[9].max*FS_PREDEF_CHORUS_SPEED)); + setController(0, FS_CHORUS_DEPTH, (int)(fluidCtrl[10].max*FS_PREDEF_CHORUS_DEPTH)); + setController(0, FS_CHORUS_LEVEL, (int)(fluidCtrl[11].max*FS_PREDEF_CHORUS_LEVEL)); + return false; + } + +//--------------------------------------------------------- +// process +// called from host +//--------------------------------------------------------- + +void FluidSynth::process(float** ports, int offset, int len) + { + //Process messages from the gui + while (gui->fifoSize()) { + MidiEvent ev = gui->readEvent(); + if (ev.type() == ME_SYSEX) { + sysex(ev.len(), ev.data()); + sendEvent(ev); + } + else if (ev.type() == ME_CONTROLLER) { + setController(ev.channel(), ev.dataA(), ev.dataB(), true); + sendEvent(ev); + } + else { + if (FS_DEBUG) + printf("FluidSynth::process(): unknown event, type: %d\n", ev.type()); + } + } + + if (fluid_synth_write_float(fluidsynth, len, ports[0], offset, 1, ports[1], offset, 1)) { + M_ERROR("Error writing from synth!"); + return; + } + } + +//--------------------------------------------------------- +// getInitData +// Prepare data that will restore the synth's state on load +//--------------------------------------------------------- +void FluidSynth::getInitData(int* n, const unsigned char** data) + { + // Data setup: + // FS_INIT_DATA (1 byte) + // FluidSynth version (2 bytes, x.y) + // n = Number of soundfonts (1 byte) + // Lastdir (variable size) + // + // FS_FONTS_BEGIN + // n blocks with font path (variable size) + // n bytes with font external id + // + // for all channels (16), 1 byte each for external id + 1 byte for preset + 1 byte for bankno + // which is mapped to internal id after all fonts are loaded. + // + // reverb + chorus on/off (2 bytes) + if (FS_DEBUG) + printf("FluidSynth::getInitData()\n"); + + //Calculate length: + int len = FS_INIT_DATA_HEADER_SIZE + strlen(lastdir.c_str()) + 1; //header size + for (std::list::const_iterator it = stack.begin(); it!=stack.end(); it++) { + len+=strlen(it->filename.c_str()) + 2; + } + //Add length for lastdir and channels: + len+=strlen(lastdir.c_str())+1; + len+=(FS_MAX_NR_OF_CHANNELS*4); // 4 bytes: ext+int id + bankno + drumchannel status + // + reverb + len+=2; + + if (FS_DEBUG) + printf("Total length of init sysex: %d\n", len); + byte* d = new byte[len]; + + // Header: + d[0] = FS_INIT_DATA; + d[1] = FS_VERSION_MAJOR; + d[2] = FS_VERSION_MINOR; + d[3] = stack.size(); + + //Lastdir: + byte* chptr = d + FS_INIT_DATA_HEADER_SIZE; + memcpy(chptr, lastdir.c_str(), strlen(lastdir.c_str())+1); + + //For each font... + chptr+=strlen(lastdir.c_str())+1; + for (std::list::const_iterator it =stack.begin(); it!=stack.end(); it++) { + memcpy(chptr, it->filename.c_str(), strlen(it->filename.c_str())+1); + chptr = chptr + 1 + strlen(it->filename.c_str()); + } + + //For each font again... + *chptr = FS_INIT_CHANNEL_SECTION; + chptr++; + for (std::list::const_iterator it =stack.begin(); it!=stack.end(); it++) { + *chptr = it->extid; + chptr++; + } + + //External id:s & preset for all channels: + for(int i=0; iwriteEvent(ev); + } + +//----------------------------------- +// pushSoundfont - load a soundfont +//----------------------------------- +bool FluidSynth::pushSoundfont (const char* filename, int extid) + { + pthread_attr_t* attributes = (pthread_attr_t*) malloc(sizeof(pthread_attr_t)); + pthread_attr_init(attributes); + pthread_attr_setdetachstate(attributes, PTHREAD_CREATE_DETACHED); + + FS_Helper* helper = new FS_Helper; + helper->fptr = this; + helper->filename = filename; + helper->id = extid; + + if (pthread_create(&fontThread, attributes, FluidSynth::fontLoadThread, (void*) helper)) + perror("creating thread failed:"); + + pthread_attr_destroy(attributes); + return true; + } + +//--------------------------------------------------------- +// fontLoadThread +// helper thread to load soundfont in the +// background +//--------------------------------------------------------- + +void* FluidSynth::fontLoadThread(void* t) + { + //Init vars + FS_Helper* h = (FS_Helper*) t; + FluidSynth* fptr = h->fptr; + const char* filename = h->filename.c_str(); + pthread_mutex_t* sfloader_mutex = &(fptr->_sfloader_mutex); + + //Let only one loadThread have access to the fluidsynth-object at the time + pthread_mutex_lock(sfloader_mutex); + int rv = fluid_synth_sfload(fptr->fluidsynth, filename, 1); + + if (rv ==-1) { + fptr->sendError(fluid_synth_error(fptr->fluidsynth)); + if (FS_DEBUG) + std::cerr << DEBUG_ARGS << "error loading soundfont: " << fluid_synth_error(fptr->fluidsynth) << std::endl; + + //Unlock the mutex, or else we might be stuck here forever... + pthread_mutex_unlock(sfloader_mutex); + delete h; + pthread_exit(0); + } + + //Deal with internal and external id etc. + if (FS_DEBUG) + printf("Soundfont %s loaded, index %d\n", filename, rv); + + FluidSoundFont font; + font.filename = h->filename;//strdup(filename); + + font.intid = rv; + if (h->id == FS_UNSPECIFIED_ID) { + font.extid = fptr->getNextAvailableExternalId(); + if (FS_DEBUG) + printf("Font got extid %d\n",font.extid); + } + else + font.extid = h->id; + if (FS_DEBUG) + printf("Font has external id: %d int id:%d\n", font.extid, font.intid); + + //Strip off the filename + QFileInfo fi(filename); + font.name = fi.baseName().toLatin1().data(); + fptr->stack.push_front(font); + fptr->currentlyLoadedFonts++; + + //Cleanup & unlock: + pthread_mutex_unlock(sfloader_mutex); + delete h; + + if (FS_DEBUG) + printf("Currently loaded fonts: %d Nr of soundfonts: %d\n",fptr->currentlyLoadedFonts, fptr->nrOfSoundfonts); + //Check whether this was the last font or not. If so, run initSynth(); + if (fptr->nrOfSoundfonts <= fptr->currentlyLoadedFonts) { + if (FS_DEBUG) + printf("This was the last font, rewriting channel settings...\n"); + fptr->rewriteChannelSettings(); + //Update data in GUI-window. + fptr->sendSoundFontData(); + fptr->sendChannelData(); + fptr->sendFontSuccessfullyLoaded(filename, font.extid); + } + + pthread_exit(0); + } + +//--------------------------------------------------------- +// playNote +// called from host +//--------------------------------------------------------- + +bool FluidSynth::playNote(int channel, int pitch, int velo) + { + if (channels[channel].font_intid == FS_UNSPECIFIED_FONT) + return false; + if (velo) { + if (fluid_synth_noteon(fluidsynth, channel, pitch, velo)) { + if (FS_DEBUG) + std::cerr << DEBUG_ARGS << "error processing noteon event: " << fluid_synth_error(fluidsynth); + } + } + else { + if (fluid_synth_noteoff(fluidsynth, channel, pitch)) + if (FS_DEBUG) + std::cerr << DEBUG_ARGS << "error processing noteoff event: " << fluid_synth_error(fluidsynth) << std::endl; + } + return false; + } + +//--------------------------------------------------------- +// sendSoundFontData +//--------------------------------------------------------- +void FluidSynth::sendSoundFontData() + { + int ndatalen = 2; //2 bytes for command and length + + //Calculate length in chars of all strings in the soundfontstack in one string + for (std::list::iterator it = stack.begin(); it != stack.end(); it++) { + ndatalen += 1 + strlen(it->name.c_str()); + ndatalen += FS_SFDATALEN; //unsigned char for ID + } + byte ndata[ndatalen]; + *ndata = FS_SEND_SOUNDFONTDATA; //The command + *(ndata + 1) = (unsigned char)stack.size (); //Nr of Soundfonts + + // Copy the stuff to ndatalen: + char* chunk_start = (char*)(ndata + 2); + int chunk_len, name_len; + for (std::list::iterator it = stack.begin(); it != stack.end(); ++it) { + name_len = strlen(it->name.c_str()) + 1; + chunk_len = name_len + FS_SFDATALEN; + memcpy(chunk_start, it->name.c_str(), name_len); //First, store the fontname + *(chunk_start + name_len) = it->extid; //The GUI only needs to know about the external id, store that here + chunk_start += chunk_len; + } + sendSysex(ndatalen, ndata); + } + +//--------------------------------------------------------- +// sendChannelData +//--------------------------------------------------------- +void FluidSynth::sendChannelData() + { + int chunk_size = 2; + int chdata_length = (chunk_size * FS_MAX_NR_OF_CHANNELS) +1 ; //Command and the 2 channels * 16 + byte chdata[chdata_length]; + byte* chdptr; + chdata[0] = FS_SEND_CHANNELINFO; + chdptr = (chdata + 1); + for (int i=0; i::iterator it = stack.begin(); it != stack.end(); it++) + printf("Font: %s\tintid: %d\textid %d\tfilename:%s\n", it->name.c_str(), it->intid, it->extid, it->filename.c_str()); + printf("Reverb on: %d, width: %f, size: %f level: %f damp: %f\n",rev_on, rev_width, rev_size, rev_level, rev_damping); + printf("-----------------------------------------------------\n"); + } + +//--------------------------------------------------------- +// guiVisible +//--------------------------------------------------------- + +bool FluidSynth::guiVisible() const + { + return gui->isVisible(); + } + + +//--------------------------------------------------------- +// showGui +//--------------------------------------------------------- + +void FluidSynth::showGui(bool val) + { + gui->setShown(val); + } + +//--------------------------------------------------------- +// setController +//--------------------------------------------------------- + +bool FluidSynth::setController(int channel, int id, int val) + { + setController(channel, id, val, false); + return false; + } + +//--------------------------------------------------------- +// setController +//--------------------------------------------------------- + +void FluidSynth::setController(int channel, int id, int val, bool fromGui) + { + // + // Channelless controllers + // + int err = 0; + switch (id) { + case FS_GAIN: { + fluid_synth_set_gain(fluidsynth, (float) val/25); //gives val an interval of approximately[0,5] + //Forward to gui if not from Gui + if (!fromGui) { + MidiEvent ev(0, 0, ME_CONTROLLER, FS_GAIN, val); + gui->writeEvent(ev); + } + break; + } + case FS_REVERB_ON: { + rev_on = val; + fluid_synth_set_reverb_on(fluidsynth, val); // 0 or 1 + //if (rev_on) + // fluid_synth_set_reverb(fluidsynth, rev_size, rev_damping, rev_width, rev_level); + if (!fromGui) { + MidiEvent ev(0, 0, ME_CONTROLLER, FS_REVERB_ON, val); + gui->writeEvent(ev); + } + break; + } + case FS_REVERB_LEVEL: + //Interval: 0-2 + rev_level = (double)2*val/16384; //[0,2] + //if (rev_on) + fluid_synth_set_reverb(fluidsynth, rev_size, rev_damping, rev_width, rev_level); + if (!fromGui) { + MidiEvent ev(0, 0, ME_CONTROLLER, FS_REVERB_LEVEL, val); + gui->writeEvent(ev); + } + break; + case FS_REVERB_WIDTH: // + rev_width = (double)val/164; //[0,100] + //if (rev_on) + fluid_synth_set_reverb(fluidsynth, rev_size, rev_damping, rev_width, rev_level); + if (!fromGui) { + MidiEvent ev(0, 0, ME_CONTROLLER, FS_REVERB_WIDTH, val); + gui->writeEvent(ev); + } + break; + case FS_REVERB_DAMPING: //[0,1] + rev_damping = (double)val/16384; + //if (rev_on) + fluid_synth_set_reverb(fluidsynth, rev_size, rev_damping, rev_width, rev_level); + if (!fromGui) { + MidiEvent ev(0, 0, ME_CONTROLLER, FS_REVERB_DAMPING, val); + gui->writeEvent(ev); + } + break; + case FS_REVERB_ROOMSIZE: //[0,1] + rev_size = (double)val/16384; + //if (rev_on) + fluid_synth_set_reverb(fluidsynth, rev_size, rev_damping, rev_width, rev_level); + if (!fromGui) { + MidiEvent ev(0, 0, ME_CONTROLLER, FS_REVERB_ROOMSIZE, val); + gui->writeEvent(ev); + } + break; + case FS_CHORUS_ON: {// 0 or 1 + cho_on = val; + fluid_synth_set_chorus_on(fluidsynth, val); + if (!fromGui) { + MidiEvent ev(0, 0, ME_CONTROLLER, FS_CHORUS_ON, val); + gui->writeEvent(ev); + } + break; + } + case FS_CHORUS_NUM: {//Number of delay lines + cho_num = val; + fluid_synth_set_chorus(fluidsynth, cho_num, cho_level, cho_speed, cho_depth, cho_type); + if (!fromGui) { + MidiEvent ev(0, 0, ME_CONTROLLER, FS_CHORUS_NUM, val); + gui->writeEvent(ev); + } + break; + } + case FS_CHORUS_TYPE: {//? + cho_type = val; + fluid_synth_set_chorus(fluidsynth, cho_num, cho_level, cho_speed, cho_depth, cho_type); + if (!fromGui) { + MidiEvent ev(0, 0, ME_CONTROLLER, FS_CHORUS_TYPE, val); + gui->writeEvent(ev); + } + break; + } + case FS_CHORUS_SPEED: {//(0.291,5) Hz + cho_speed = (double)(0.291 + (double)val/3479); + fluid_synth_set_chorus(fluidsynth, cho_num, cho_level, cho_speed, cho_depth, cho_type); + if (!fromGui) { + MidiEvent ev(0, 0, ME_CONTROLLER, FS_CHORUS_SPEED, val); + gui->writeEvent(ev); + } + break; + } + case FS_CHORUS_DEPTH: { //[0,40] + cho_depth = (double) val*40/16383; + fluid_synth_set_chorus(fluidsynth, cho_num, cho_level, cho_speed, cho_depth, cho_type); + if (!fromGui) { + MidiEvent ev(0, 0, ME_CONTROLLER, FS_CHORUS_DEPTH, val); + gui->writeEvent(ev); + } + break; + } + case FS_CHORUS_LEVEL: { //[0,1] + cho_level = (double) val/16383; + fluid_synth_set_chorus(fluidsynth, cho_num, cho_level, cho_speed, cho_depth, cho_type); + if (!fromGui) { + MidiEvent ev(0, 0, ME_CONTROLLER, FS_CHORUS_LEVEL, val); + gui->writeEvent(ev); + } + break; + } + // + // Controllers that depend on channels + // + case CTRL_PITCH: + err = fluid_synth_pitch_bend (fluidsynth, channel, val); + break; + case CTRL_PROGRAM: { + //Check if MusE is trying to set a preset on an unspecified font. If so, ignore. + if (FS_DEBUG) + printf("Program select : channel %d val %d\n",channel, val); + byte font_intid = channels[channel].font_intid; + + if (font_intid == FS_UNSPECIFIED_ID || font_intid == FS_UNSPECIFIED_FONT) + return; + + byte banknum = ((val >> 16) & 0xff); + byte patch = (val & 0xff); + //printf("val: %d banknum: %x patch: %d\n", val, banknum, patch); + + err = fluid_synth_program_select(fluidsynth, channel, font_intid , banknum, patch); + if (err) + printf("FluidSynth::setController() - Error changing program on soundfont %s, channel: %d\n", fluid_synth_error(fluidsynth), channel); + else { + channels[channel].preset = val;//setChannelPreset(val, channel); + channels[channel].banknum = banknum; + } + break; + } + default: + if (FS_DEBUG) + printf("Setting controller on channel: %d with id: 0x%x to val: %d\n",channel, id, val); + err = fluid_synth_cc(fluidsynth, channel, id, val); + break; + } + + if (err) + printf ("FluidSynth::setController() - error processing controller event: %s\n", fluid_synth_error(fluidsynth)); + } + +//--------------------------------------------------------- +// getControllerInfo +//--------------------------------------------------------- +int FluidSynth::getControllerInfo(int id, const char** name, int* controller, int* min, int* max) + { + if (id >= NUM_CONTROLLER) + return 0; + *controller = fluidCtrl[id].num; + *name = fluidCtrl[id].name; + *min = fluidCtrl[id].min; + *max = fluidCtrl[id].max; + if (FS_DEBUG) + printf("FluidSynth::getControllerInfo() id: %d name: %s controller: %d min: %d max: %d\n",id,*name,*controller,*min,*max); + return ++id; + } + +//--------------------------------------------------------- +// sendError +//--------------------------------------------------------- +void FluidSynth::sendError(const char *errorMessage) + { + int len = 2 + strlen(errorMessage); + unsigned char data[len]; + *data = FS_ERROR; + memcpy(data + 1, errorMessage, len - 1); + sendSysex(len, data); + } + +//--------------------------------------------------------- +// getNextAvailableExternalId +//--------------------------------------------------------- + +int FluidSynth::getNextAvailableExternalId() + { + unsigned char place[FS_MAX_NR_OF_CHANNELS]; + for(int i=0; i::iterator it = stack.begin(); it != stack.end(); it++) + place[it->extid] = 1; + + int i=0; + while (i < FS_MAX_NR_OF_CHANNELS && place[i] == 1) + i++; + + return i; + } + +//--------------------------------------------------------- +// sfChannelChange +//--------------------------------------------------------- + +void FluidSynth::sfChannelChange(byte extid, byte channel) + { + if (FS_DEBUG) + printf("FluidSynth::sfChannelChange()-Setting channel %d to font with extid %d intid %d\n",channel, extid, getFontInternalIdByExtId(extid)); + channels[channel].font_extid = extid; + channels[channel].font_intid = getFontInternalIdByExtId(extid); + } + +//--------------------------------------------------------- +// getFontInternalIdByExtId +//--------------------------------------------------------- +byte FluidSynth::getFontInternalIdByExtId(byte ext_id) + { + for (std::list::iterator it = stack.begin(); it !=stack.end(); it++) { + if (it->extid == ext_id) + return it->intid; + } + return FS_UNSPECIFIED_FONT; + } + +//--------------------------------------------------------- +// sendLastDir +//--------------------------------------------------------- +void FluidSynth::sendLastdir(const char* lastdir) + { + int n = strlen(lastdir) + 2; + byte d[n]; + d[0] = FS_LASTDIR_CHANGE; + memcpy(d+1,lastdir, strlen(lastdir)+1); + + MidiEvent ev(0, ME_SYSEX, d, n); + gui->writeEvent(ev); + } + +//--------------------------------------------------------- +// sendLastDir +//--------------------------------------------------------- +void FluidSynth::sendFontSuccessfullyLoaded(const char* filename, byte extid) + { + // extid first, then filename: + int n = strlen(filename) + 3; + byte d[n]; + d[0] = FS_FONT_SUCCESSFULLY_LOADED; + d[1] = extid; + memcpy(d+2, filename, strlen(filename)+1); + MidiEvent ev(0, ME_SYSEX, d, n); + gui->writeEvent(ev); + } +//--------------------------------------------------------- +// rewriteChannelSettings +//--------------------------------------------------------- +void FluidSynth::rewriteChannelSettings() + { + //Walk through the channels, remap internal ID:s to external ID:s (something that actually only needs to be done at + //startup, since the fonts aren't loaded yet at that time and it isn't possible to give them a correct internal id + //since they don't have any at that time, this can probably be fixed in a smarter way (but it works..)) + for (int i=0; iget_name(preset); + } + } + +//--------------------------------------------------------- +// getPatchInfo +//--------------------------------------------------------- +const MidiPatch* FluidSynth::getPatchInfo(int i, const MidiPatch* patch) const + { + if (channels[i].font_intid == FS_UNSPECIFIED_FONT) + return 0; + //else if (channels[i].preset == FS_UNSPECIFIED_PRESET) + // return 0; + else { + //printf("Getpatchname, channel: %d\n",channel); + if (!patch) + //Deliver first patch + return getFirstPatch(i); + else + //Deliver next patch + return getNextPatch(i, patch); + } + } + +//--------------------------------------------------------- +// getFirstPatch +//--------------------------------------------------------- +const MidiPatch* FluidSynth::getFirstPatch (int channel) const + { + static MidiPatch midiPatch; + + midiPatch.typ = 0; + midiPatch.lbank = 0; + + fluid_preset_t* preset; + int font_id = channels[channel].font_intid; + if (font_id == FS_UNSPECIFIED_FONT) + return 0; + + fluid_sfont_t* sfont = fluid_synth_get_sfont_by_id(fluidsynth, font_id); + + if (!channels[channel].drumchannel) { + for (unsigned bank = 0; bank < 128; ++bank) { + for (unsigned patch = 0; patch < 128; ++patch) { + preset = sfont->get_preset (sfont, bank, patch); + if (preset) { + midiPatch.hbank = bank; + midiPatch.prog = patch; + midiPatch.name = preset->get_name (preset); + return &midiPatch; + } + } + } + return 0; + } + else { //This is a drumchannel + int bank = 128; + for (unsigned patch = 0; patch < 128; ++patch) { + preset = sfont->get_preset (sfont, bank, patch); + if (preset) { + midiPatch.hbank = bank; + midiPatch.prog = patch; + midiPatch.name = preset->get_name(preset); + return &midiPatch; + } + } + } + return 0; + } + +//--------------------------------------------------------- +// getNextPatch +//--------------------------------------------------------- +const MidiPatch* FluidSynth::getNextPatch (int channel, const MidiPatch* patch) const + { + static MidiPatch midiPatch; + //First check if there actually is any soundfont associated to the channel. If not, don't bother + int font_id = channels[channel].font_intid; + if (font_id == FS_UNSPECIFIED_FONT) + return 0; + if (patch == 0) + return getFirstPatch(channel); + + midiPatch.typ = 0; + midiPatch.lbank = 0; + + if (font_id == FS_UNSPECIFIED_FONT) + return 0; + //printf("Font has internal id: %d\n",font_id); + fluid_preset_t* preset; + fluid_sfont_t* sfont = fluid_synth_get_sfont_by_id(fluidsynth, font_id); + + if (!channels[channel].drumchannel) { + unsigned prog = patch->prog + 1; + + for (unsigned bank = patch->hbank; bank < 128; ++bank) { + for ( ; prog < 128; ++prog) { + preset = sfont->get_preset (sfont, bank, prog); + if (preset) { + //printf("Preset info: bank: %d prog: %d name: %s\n", bank, prog, preset->get_name(preset)); + midiPatch.hbank = bank; + midiPatch.prog = prog; + midiPatch.name = preset->get_name (preset); + return &midiPatch; + } + } + prog = 0; // Reset if we "come around" + } + } + else { //This is a drum channel + unsigned bank = 128; + unsigned prog = patch->prog; + for (prog = patch->prog + 1; prog < 128; ++prog) { + preset = sfont->get_preset (sfont, bank, prog); + if (preset) { + //printf("Preset info: bank: %d prog: %d name: %s\n",bank, prog, preset->get_name(preset)); + midiPatch.hbank = bank; + midiPatch.prog = prog; + midiPatch.name = preset->get_name (preset); + return &midiPatch; + } + } + } + return 0; + } + +//--------------------------------------------------------- +// popSoundfont +//--------------------------------------------------------- + +bool FluidSynth::popSoundfont (int ext_id) + { + bool success = false; + int int_id = getFontInternalIdByExtId(ext_id); + + if (int_id == FS_UNSPECIFIED_FONT) { + std::cerr << DEBUG_ARGS << "Internal error! Request for deletion of Soundfont that is not registered!" << std::endl; + } + else + { + //Try to unload soundfont + int err = fluid_synth_sfunload(fluidsynth, int_id, 0); + if (err != -1) {//Success + //Check all channels that the font is used in + for (int i=0; i::iterator it =stack.begin(); it !=stack.end(); it++) { + if (it->intid == int_id) { + stack.erase(it); + break; + } + } + //Resend fontdata & re-initialize + sendSoundFontData(); + sendChannelData(); + rewriteChannelSettings(); + success = true; + currentlyLoadedFonts--; + } + else //OK, there was trouble + std::cerr << DEBUG_ARGS << "Error unloading soundfont!" << fluid_synth_error(fluidsynth) << std::endl; + } + if (FS_DEBUG) + printf("Removed soundfont with ext it: %d\n",ext_id); + return success; + } + +//--------------------------------------------------------- +// instantiate +// construct a new synthesizer instance +//--------------------------------------------------------- + +class QWidget; + +static Mess* instantiate(int sr, const char* name) + { + printf("fluidsynth sampleRate %d\n", sr); + FluidSynth* synth = new FluidSynth(sr); + if (synth->init(name)) { + delete synth; + synth = 0; + } + return synth; + } + +extern "C" + { + static MESS descriptor = { + "FluidSynth", + "Mathias Lundgren (lunar_shuttle@users.sf.net)", + "0.1", //Version string + MESS_MAJOR_VERSION, MESS_MINOR_VERSION, + instantiate, + }; + const MESS* mess_descriptor() { return &descriptor; } + } + diff --git a/attic/muse_qt4_evolution/synti/fluidsynth/fluidsynti.h b/attic/muse_qt4_evolution/synti/fluidsynth/fluidsynti.h new file mode 100644 index 00000000..c66b1faf --- /dev/null +++ b/attic/muse_qt4_evolution/synti/fluidsynth/fluidsynti.h @@ -0,0 +1,141 @@ +/* + * MusE FLUID Synth softsynth plugin + * + * Copyright (C) 2004 Mathias Lundgren (lunar_shuttle@users.sourcforge.net) + * + * $Id: fluidsynti.h,v 1.20 2006/01/06 22:48:09 wschweer Exp $ + * + */ + +#ifndef __MUSE_FLUIDSYNTI_H__ +#define __MUSE_FLUIDSYNTI_H__ + +#include +#include +#include +#include "fluidsynthgui.h" +#include "libsynti/mess.h" +#include "muse/debug.h" +#include "libsynti/midievent.h" +#include "muse/midictrl.h" + +#define FS_DEBUG_DATA 0 //Turn on/off debug print of midi data sent to fluidsynth + +typedef unsigned char byte; + +struct FluidSoundFont + { + std::string filename; + std::string name; + byte extid, intid; + }; + +struct FluidCtrl { + const char* name; + int num; + int min, max; + //int val; + }; + +// NRPN-controllers: +static const int FS_GAIN = 0 + CTRL_NRPN14_OFFSET; +static const int FS_REVERB_ON = 1 + CTRL_NRPN14_OFFSET; +static const int FS_REVERB_LEVEL = 2 + CTRL_NRPN14_OFFSET; +static const int FS_REVERB_ROOMSIZE = 3 + CTRL_NRPN14_OFFSET; +static const int FS_REVERB_DAMPING = 4 + CTRL_NRPN14_OFFSET; +static const int FS_REVERB_WIDTH = 5 + CTRL_NRPN14_OFFSET; +static const int FS_CHORUS_ON = 6 + CTRL_NRPN14_OFFSET; +static const int FS_CHORUS_NUM = 7 + CTRL_NRPN14_OFFSET; +static const int FS_CHORUS_TYPE = 8 + CTRL_NRPN14_OFFSET; +static const int FS_CHORUS_SPEED = 9 + CTRL_NRPN14_OFFSET; +static const int FS_CHORUS_DEPTH = 10 + CTRL_NRPN14_OFFSET; +static const int FS_CHORUS_LEVEL = 11 + CTRL_NRPN14_OFFSET; + +// FluidChannel is used to map different soundfonts to different fluid-channels +// This is to be able to select different presets from specific soundfonts, since +// Fluidsynth has a quite strange way of dealing with fontloading and channels +// We also need this since getFirstPatch and getNextPatch only tells us which channel is +// used, so this works as a connection between soundfonts and fluid-channels (one channel +// can only have one soundfont, but one soundfont can have many channels) + +struct FluidChannel + { + byte font_extid, font_intid, preset, drumchannel; + byte banknum; // hbank + }; + +class FluidSynth : public Mess { + private: + bool pushSoundfont (const char*, int); + void sendSysex(int l, const unsigned char* d); + void sendLastdir(const char*); + void sfChannelChange(unsigned char font_id, unsigned char channel); + void parseInitData(int n, const byte* d); + + byte getFontInternalIdByExtId (byte channel); + + void debug(const char* msg) { if (FS_DEBUG) printf("Debug: %s\n",msg); } + void dumpInfo(); //Prints out debug info + + FluidChannel channels[FS_MAX_NR_OF_CHANNELS]; + std::string lastdir; + pthread_t fontThread; + const MidiPatch * getFirstPatch (int channel) const; + const MidiPatch* getNextPatch (int, const MidiPatch *) const; + + //For reverb and chorus: + double rev_size, rev_damping, rev_width, rev_level, cho_level, cho_speed, cho_depth; + bool rev_on, cho_on; + int cho_num, cho_type; + +public: + FluidSynth(int sr); + ~FluidSynth(); + bool init(const char*); + virtual void process(float**, int, int); + virtual bool playNote(int channel, int pitch, int velo); + virtual bool sysex(int, const unsigned char*); + virtual bool setController(int, int, int); + void setController(int, int , int, bool); + virtual void getInitData(int*, const unsigned char**); + virtual const char* getPatchName(int, int, int) const; + virtual const MidiPatch* getPatchInfo(int i, const MidiPatch* patch) const; + virtual int getControllerInfo(int, const char**, int*, int*, int*); + virtual bool processEvent(const MidiEvent&); + + virtual bool hasGui() const { return true; } + virtual bool guiVisible() const; + virtual void showGui(bool val); + + void sendError(const char*); + void sendSoundFontData(); + void sendChannelData(); + void sendFontSuccessfullyLoaded(const char* filename, byte extid); + void rewriteChannelSettings(); //used because fluidsynth does some very nasty things when loading a font! + bool popSoundfont (int ext_id); + + int getNextAvailableExternalId(); + + fluid_synth_t* fluidsynth; + FluidSynthGui* gui; + pthread_mutex_t _sfloader_mutex; + int currentlyLoadedFonts; //To know whether or not to run the init-parameters + std::list stack; + int nrOfSoundfonts; + + void initInternal(); + + static FluidCtrl fluidCtrl[]; + static void* fontLoadThread(void* t); + + }; + +struct FS_Helper //Only used to pass parameters when calling the loading thread + { + FluidSynth* fptr; + std::string filename; + int id; + }; + + +#endif /* __MUSE_FLUIDSYNTI_H__ */ diff --git a/attic/muse_qt4_evolution/synti/libsynti/CMakeLists.txt b/attic/muse_qt4_evolution/synti/libsynti/CMakeLists.txt new file mode 100644 index 00000000..c30048dc --- /dev/null +++ b/attic/muse_qt4_evolution/synti/libsynti/CMakeLists.txt @@ -0,0 +1,39 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +include(${PROJECT_SOURCE_DIR}/pch.txt) + +add_library(synti + ${PROJECT_BINARY_DIR}/all-pic.h.pch + mess.cpp + mess2.cpp + gui.cpp + mono.cpp + poly.cpp + midievent.cpp + ) + +# +# -fPIC is necessary for 64 bit systems +# +set_target_properties( synti + PROPERTIES COMPILE_FLAGS "-fPIC -include ${PROJECT_BINARY_DIR}/all-pic.h" + ) + diff --git a/attic/muse_qt4_evolution/synti/libsynti/evdata.h b/attic/muse_qt4_evolution/synti/libsynti/evdata.h new file mode 100644 index 00000000..29f6441e --- /dev/null +++ b/attic/muse_qt4_evolution/synti/libsynti/evdata.h @@ -0,0 +1,66 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: evdata.h,v 1.1 2004/02/13 13:55:03 wschweer Exp $ +// +// (C) Copyright 1999-2003 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __EVDATA_H__ +#define __EVDATA_H__ + +#include + +//--------------------------------------------------------- +// EvData +// variable len event data (sysex, meta etc.) +//--------------------------------------------------------- + +class EvData { + int* refCount; + + public: + unsigned char* data; + int dataLen; + + EvData() { + data = 0; + dataLen = 0; + refCount = new int(1); + } + EvData(const EvData& ed) { + data = ed.data; + dataLen = ed.dataLen; + refCount = ed.refCount; + (*refCount)++; + } + + EvData& operator=(const EvData& ed) { + if (data == ed.data) + return *this; + if (--(*refCount) == 0) { + delete refCount; + delete[] data; + } + data = ed.data; + dataLen = ed.dataLen; + refCount = ed.refCount; + (*refCount)++; + return *this; + } + + ~EvData() { + if (--(*refCount) == 0) { + delete[] data; + delete refCount; + } + } + void setData(const unsigned char* p, int l) { + data = new unsigned char[l]; + memcpy(data, p, l); + dataLen = l; + } + }; + +#endif + diff --git a/attic/muse_qt4_evolution/synti/libsynti/gui.cpp b/attic/muse_qt4_evolution/synti/libsynti/gui.cpp new file mode 100644 index 00000000..30fd177b --- /dev/null +++ b/attic/muse_qt4_evolution/synti/libsynti/gui.cpp @@ -0,0 +1,124 @@ +//========================================================= +// MusE +// Linux Music Editor +// software synthesizer helper library +// $Id: gui.cpp,v 1.7 2005/05/11 14:18:48 wschweer Exp $ +// +// (C) Copyright 2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include "gui.h" +#include "muse/midi.h" + +#include + +//--------------------------------------------------------- +// MessGui +//--------------------------------------------------------- + +MessGui::MessGui() + { + // + // prepare for interprocess communication: + // + int filedes[2]; // 0 - reading 1 - writing + if (pipe(filedes) == -1) { + perror("thread:creating pipe4"); + exit(-1); + } + readFd = filedes[0]; + writeFd = filedes[1]; + wFifoSize = 0; + wFifoWindex = 0; + wFifoRindex = 0; + rFifoSize = 0; + rFifoWindex = 0; + rFifoRindex = 0; + } + +//--------------------------------------------------------- +// MessGui +//--------------------------------------------------------- + +MessGui::~MessGui() + { + } + +//--------------------------------------------------------- +// readMessage +//--------------------------------------------------------- + +void MessGui::readMessage() + { + char c; + while (rFifoSize) { + ::read(readFd, &c, 1); + processEvent(rFifo[rFifoRindex]); + rFifoRindex = (rFifoRindex + 1) % EVENT_FIFO_SIZE; + --rFifoSize; + } + } + +//--------------------------------------------------------- +// sendController +//--------------------------------------------------------- + +void MessGui::sendController(int ch, int idx, int val) + { + sendEvent(MidiEvent(0, ch, ME_CONTROLLER, idx, val)); + } + +//--------------------------------------------------------- +// sendSysex +//--------------------------------------------------------- + +void MessGui::sendSysex(unsigned char* p, int n) + { + sendEvent(MidiEvent(0, ME_SYSEX, p, n)); + } + +//--------------------------------------------------------- +// writeEvent +// send an event to synti gui +//--------------------------------------------------------- + +void MessGui::writeEvent(const MidiEvent& ev) + { + if (rFifoSize == EVENT_FIFO_SIZE) { + printf("event synti->gui fifo overflow\n"); + return; + } + rFifo[rFifoWindex] = ev; + rFifoWindex = (rFifoWindex + 1) % EVENT_FIFO_SIZE; + ++rFifoSize; + write(writeFd, "x", 1); // wakeup GUI + } + +//--------------------------------------------------------- +// sendEvent +//--------------------------------------------------------- + +void MessGui::sendEvent(const MidiEvent& ev) + { + if (wFifoSize == EVENT_FIFO_SIZE) { + printf("event gui->synti fifo overflow\n"); + return; + } + wFifo[wFifoWindex] = ev; + wFifoWindex = (wFifoWindex + 1) % EVENT_FIFO_SIZE; + ++wFifoSize; + } + +//--------------------------------------------------------- +// readEvent +// read event from synti gui +//--------------------------------------------------------- + +MidiEvent MessGui::readEvent() + { + MidiEvent ev = wFifo[wFifoRindex]; + wFifoRindex = (wFifoRindex + 1) % EVENT_FIFO_SIZE; + --wFifoSize; + return ev; + } + diff --git a/attic/muse_qt4_evolution/synti/libsynti/gui.h b/attic/muse_qt4_evolution/synti/libsynti/gui.h new file mode 100644 index 00000000..27bebe3f --- /dev/null +++ b/attic/muse_qt4_evolution/synti/libsynti/gui.h @@ -0,0 +1,72 @@ +//========================================================= +// MusE +// Linux Music Editor +// software synthesizer helper library +// $Id: gui.h,v 1.5 2005/05/11 14:18:48 wschweer Exp $ +// +// (C) Copyright 2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __SYNTH_GUI_H__ +#define __SYNTH_GUI_H__ + +#include "midievent.h" + +const int EVENT_FIFO_SIZE = 256; +class QWidget; + +//--------------------------------------------------------- +// MessGui +// manage IO from synti-GUI to Host +//--------------------------------------------------------- + +class MessGui { + int writeFd; + + // Event Fifo synti -> GUI + MidiEvent rFifo[EVENT_FIFO_SIZE]; + volatile int rFifoSize; + int rFifoWindex; + int rFifoRindex; + + // Event Fifo GUI -> synti + MidiEvent wFifo[EVENT_FIFO_SIZE]; + volatile int wFifoSize; + int wFifoWindex; + int wFifoRindex; + + protected: + int readFd; + void readMessage(); + void sendEvent(const MidiEvent& ev); + void sendController(int ch, int idx, int val); + void sendSysex(unsigned char*, int); + + virtual void processEvent(const MidiEvent&) {}; + + public: + MessGui(); + virtual ~MessGui(); + + void writeEvent(const MidiEvent&); + int fifoSize() const { return wFifoSize; } + MidiEvent readEvent(); + }; + +//--------------------------------------------------------- +// SynthGuiCtrl +//--------------------------------------------------------- + +struct SynthGuiCtrl { + enum EditorType { SLIDER, SWITCH, COMBOBOX }; + QWidget* editor; + QWidget* label; + EditorType type; + + SynthGuiCtrl() {} + SynthGuiCtrl(QWidget* w, QWidget* l, const EditorType t) + : editor(w), label(l), type(t) {} + }; + +#endif + diff --git a/attic/muse_qt4_evolution/synti/libsynti/mess.cpp b/attic/muse_qt4_evolution/synti/libsynti/mess.cpp new file mode 100644 index 00000000..49f030f8 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/libsynti/mess.cpp @@ -0,0 +1,123 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mess.cpp,v 1.3 2005/05/11 14:18:48 wschweer Exp $ +// (C) Copyright 2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include "mess.h" +#include "muse/midi.h" + +static const int FIFO_SIZE = 32; + +//--------------------------------------------------------- +// MessP +// private data for class Mess +//--------------------------------------------------------- + +struct MessP { + // Event Fifo synti -> Host: + MidiEvent fifo[FIFO_SIZE]; + volatile int fifoSize; + int fifoWindex; + int fifoRindex; + }; + +//--------------------------------------------------------- +// Mess +//--------------------------------------------------------- + +Mess::Mess(int n) + { + _channels = n; + _sampleRate = 44100; + d = new MessP; + d->fifoSize = 0; + d->fifoWindex = 0; + d->fifoRindex = 0; + } + +//--------------------------------------------------------- +// Mess +//--------------------------------------------------------- + +Mess::~Mess() + { + delete d; + } + +//--------------------------------------------------------- +// getGeometry +// dummy +//--------------------------------------------------------- + +void Mess::getGeometry(int* x, int* y, int* w, int* h) const + { + x = 0; + y = 0; + w = 0; + h = 0; + } + +//--------------------------------------------------------- +// sendEvent +// send Event synti -> host +//--------------------------------------------------------- + +void Mess::sendEvent(MidiEvent ev) + { + if (d->fifoSize == FIFO_SIZE) { + printf("event synti->host fifo overflow\n"); + return; + } + d->fifo[d->fifoWindex] = ev; + d->fifoWindex = (d->fifoWindex + 1) % FIFO_SIZE; + ++(d->fifoSize); + } + +//--------------------------------------------------------- +// receiveEvent +// called from host +//--------------------------------------------------------- + +MidiEvent Mess::receiveEvent() + { + MidiEvent ev = d->fifo[d->fifoRindex]; + d->fifoRindex = (d->fifoRindex + 1) % FIFO_SIZE; + --(d->fifoSize); + return ev; + } + +//--------------------------------------------------------- +// eventsPending +// called from host: +// while (eventsPending()) { +// receiveEvent(); +// ... +//--------------------------------------------------------- + +int Mess::eventsPending() const + { + return d->fifoSize; + } + +//--------------------------------------------------------- +// processEvent +// return true if synti is busy +//--------------------------------------------------------- + +bool Mess::processEvent(const MidiEvent& ev) + { + switch(ev.type()) { + case ME_NOTEON: + return playNote(ev.channel(), ev.dataA(), ev.dataB()); + case ME_NOTEOFF: + return playNote(ev.channel(), ev.dataA(), 0); + case ME_SYSEX: + return sysex(ev.len(), ev.data()); + case ME_CONTROLLER: + return setController(ev.channel(), ev.dataA(), ev.dataB()); + } + return false; + } + diff --git a/attic/muse_qt4_evolution/synti/libsynti/mess.h b/attic/muse_qt4_evolution/synti/libsynti/mess.h new file mode 100644 index 00000000..c407d17e --- /dev/null +++ b/attic/muse_qt4_evolution/synti/libsynti/mess.h @@ -0,0 +1,105 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mess.h,v 1.6 2005/05/11 14:18:48 wschweer Exp $ +// (C) Copyright 2001-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MESS_H__ +#define __MESS_H__ + +#define MESS_MAJOR_VERSION 3 +#define MESS_MINOR_VERSION 1 + +#include "midievent.h" + +class QWidget; +class MessP; + +//--------------------------------------------------------- +// MidiPatch +//--------------------------------------------------------- + +#define MP_TYPE_GM 1 +#define MP_TYPE_GS 2 +#define MP_TYPE_XG 4 +#define MP_TYPE_LBANK 8 +#define MP_TYPE_HBANK 16 + +struct MidiPatch { + signed char typ; // 1 - GM 2 - GS 4 - XG 8 - LBANK 16 - HBANK + signed char hbank, lbank, prog; + const char* name; + }; + +//--------------------------------------------------------- +// Mess +// MusE experimental software synth +// Instance virtual interface class +//--------------------------------------------------------- + +class Mess { + MessP* d; + + int _sampleRate; + int _channels; // 1 - mono, 2 - stereo + + public: + Mess(int channels); + virtual ~Mess(); + + int channels() const { return _channels; } + int sampleRate() const { return _sampleRate; } + void setSampleRate(int r) { _sampleRate = r; } + + virtual void process(float** data, int offset, int len) = 0; + + // The synti has to (re-)implement processEvent() or provide + // the playNote()/setControll()/sysex() functions. + // The even routines return true if synti is busy and the + // event must be send again. + + virtual bool processEvent(const MidiEvent&); + virtual bool setController(int, int, int) { return false; } + virtual bool playNote(int, int, int) { return false; } + virtual bool sysex(int, const unsigned char*) { return false; } + + virtual void getInitData(int*, const unsigned char**) {} + virtual int getControllerInfo(int, const char**, int*, int*, int*) {return 0;} + virtual const char* getPatchName(int, int, int) const { return "?"; } + virtual const MidiPatch* getPatchInfo(int, const MidiPatch*) const { return 0; } + + // synthesizer -> host communication + void sendEvent(MidiEvent); // called from synti + MidiEvent receiveEvent(); // called from host + int eventsPending() const; + + // GUI interface routines + virtual bool hasGui() const { return false; } + virtual bool guiVisible() const { return false; } + virtual void showGui(bool) {} + virtual void getGeometry(int* x, int* y, int* w, int* h) const; + virtual void setGeometry(int, int, int, int) {} + }; + +//--------------------------------------------------------- +// MESS +// Class descriptor +//--------------------------------------------------------- + +struct MESS { + const char* name; + const char* description; + const char* version; + int majorMessVersion, minorMessVersion; + // QWidget* parent allows for a threaded GUI using the Qt Library + // can be ignored by synti + Mess* (*instantiate)(int sr, const char* name); + }; + +extern "C" { + const MESS* mess_descriptor(); + } + +#endif + diff --git a/attic/muse_qt4_evolution/synti/libsynti/mess2.cpp b/attic/muse_qt4_evolution/synti/libsynti/mess2.cpp new file mode 100644 index 00000000..588edac9 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/libsynti/mess2.cpp @@ -0,0 +1,128 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id:$ +// (C) Copyright 2007 Werner Schweer (ws@seh.de) +//========================================================= + +#include "mess2.h" + +QList Mess2::ctrl; + +//--------------------------------------------------------- +// Mess2 +//--------------------------------------------------------- + +Mess2::Mess2(int channels) + : Mess(channels) + { + initData = 0; + } + +//--------------------------------------------------------- +// Mess2 +//--------------------------------------------------------- + +Mess2::~Mess2() + { + if (initData) + delete[] initData; + } + +//--------------------------------------------------------- +// addController +//--------------------------------------------------------- + +void Mess2::addController(const char* name, int id, int min, int max, int init) + { + SynthCtrl* c = new SynthCtrl(name, id, min, max, init); + ctrl.append(c); + } + +//--------------------------------------------------------- +// controllerIdx +//--------------------------------------------------------- + +int Mess2::controllerIdx(const char* name) + { + for (int i = 0; i < ctrl.size(); ++i) { + if (strcmp(ctrl[i]->name, name) == 0) + return i; + } + return -1; + } + +//--------------------------------------------------------- +// controllerIdx +//--------------------------------------------------------- + +int Mess2::controllerIdx(int ctrlId) + { + for (int i = 0; i < ctrl.size(); ++i) { + if (ctrl[i]->ctrl == ctrlId) + return i; + } + return -1; + } + +//--------------------------------------------------------- +// controllerId +//--------------------------------------------------------- + +int Mess2::controllerId(int idx) + { + if (idx < 0 || idx >= ctrl.size()) { + printf("controllId::illegal controller index %d\n", idx); + return -1; + } + return ctrl[idx]->ctrl; + } + +//--------------------------------------------------------- +// controllerName +//--------------------------------------------------------- + +const char* Mess2::controllerName(int idx) + { + if (idx < 0 || idx >= ctrl.size()) { + printf("controllerName::illegal controller index %d\n", idx); + return "?"; + } + return ctrl[idx]->name; + } + +//--------------------------------------------------------- +// getInitData +//--------------------------------------------------------- + +void Mess2::getInitData(int* bytes, const unsigned char** data) + { + if (initData) + delete[] initData; + int n = ctrl.size() * sizeof(int); + initData = new unsigned char[n]; + int* p = (int*)initData; + foreach(SynthCtrl* c, ctrl) { + *p++ = c->val; + } + *data = initData; + *bytes = n; + } + +//--------------------------------------------------------- +// getControllerInfo +//--------------------------------------------------------- + +int Mess2::getControllerInfo(int idx, const char** name, int* id, int* min, int* max) + { + if (idx < 0 || idx >= ctrl.size()) + return 0; + *name = ctrl[idx]->name; + *id = ctrl[idx]->ctrl; + *min = ctrl[idx]->min; + *max = ctrl[idx]->max; + ++idx; + return (idx >= ctrl.size()) ? 0 : idx; + } + + diff --git a/attic/muse_qt4_evolution/synti/libsynti/mess2.h b/attic/muse_qt4_evolution/synti/libsynti/mess2.h new file mode 100644 index 00000000..207eb6c3 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/libsynti/mess2.h @@ -0,0 +1,57 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id:$ +// (C) Copyright 2007 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MESS2_H__ +#define __MESS2_H__ + +#include "mess.h" + +//--------------------------------------------------------- +// SynthCtlr +//--------------------------------------------------------- + +struct SynthCtrl { + const char* name; + int ctrl; + int min; + int max; + int init; + int val; + SynthCtrl(const char* n, int i, int a, int b, int c) + : name(n), ctrl(i), min(a), max(b), init(c) + {} + }; + +//--------------------------------------------------------- +// Mess2 +// MusE experimental software synth +// extended interface +//--------------------------------------------------------- + +class Mess2 : public Mess { + unsigned char* initData; + + void getInitData(int*, const unsigned char**); + int getControllerInfo(int, const char**, int*, int*, int*); + + protected: + static QList ctrl; + + static void addController(const char* name, + int ctrl, int min = 0, int max = 16384, int init = 0); + static int controllerIdx(const char* name); + static int controllerId(int idx); + static int controllerIdx(int id); + static const char* controllerName(int idx); + + public: + Mess2(int channels); + virtual ~Mess2(); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/synti/libsynti/midievent.cpp b/attic/muse_qt4_evolution/synti/libsynti/midievent.cpp new file mode 100644 index 00000000..7c1e14fd --- /dev/null +++ b/attic/muse_qt4_evolution/synti/libsynti/midievent.cpp @@ -0,0 +1,21 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mpevent.cpp,v 1.3 2005/05/11 14:18:48 wschweer Exp $ +// +// (C) Copyright 2002-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include "midievent.h" + +//--------------------------------------------------------- +// MidiEvent +//--------------------------------------------------------- + +MidiEvent::MidiEvent(unsigned t, int tpe, const unsigned char* data, int len) + { + _time = t; + edata.setData(data, len); + _type = tpe; + } + diff --git a/attic/muse_qt4_evolution/synti/libsynti/midievent.h b/attic/muse_qt4_evolution/synti/libsynti/midievent.h new file mode 100644 index 00000000..a435d257 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/libsynti/midievent.h @@ -0,0 +1,55 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mpevent.h,v 1.3 2005/05/11 14:18:48 wschweer Exp $ +// +// (C) Copyright 1999-2002 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MIDIEVENT_H__ +#define __MIDIEVENT_H__ + +#include "evdata.h" + +//--------------------------------------------------------- +// MidiEvent +//--------------------------------------------------------- + +class MidiEvent { + unsigned _time; + EvData edata; + unsigned char _channel, _type; + int _a, _b; + + public: + MidiEvent() {} + MidiEvent(unsigned tm, int c, int t, int a, int b) + : _time(tm), _channel(c & 0xf), _type(t), _a(a), _b(b) {} + MidiEvent(unsigned t, int type, const unsigned char* data, int len); + MidiEvent(unsigned t, int tpe, EvData d) : _time(t), edata(d), _type(tpe) {} + + ~MidiEvent() {} + + int channel() const { return _channel; } + int type() const { return _type; } + int dataA() const { return _a; } + int dataB() const { return _b; } + unsigned time() const { return _time; } + + void setChannel(int val) { _channel = val; } + void setType(int val) { _type = val; } + void setA(int val) { _a = val; } + void setB(int val) { _b = val; } + void setTime(unsigned val) { _time = val; } + + const EvData& eventData() const { return edata; } + unsigned char* data() const { return edata.data; } + int len() const { return edata.dataLen; } + void setData(const EvData& e) { edata = e; } + void setData(const unsigned char* p, int len) { edata.setData(p, len); } + bool isNote() const { return _type == 0x90; } + bool isNoteOff() const { return (_type == 0x80)||(_type == 0x90 && _b == 0); } + }; + +#endif + diff --git a/attic/muse_qt4_evolution/synti/libsynti/mono.cpp b/attic/muse_qt4_evolution/synti/libsynti/mono.cpp new file mode 100644 index 00000000..14a23aca --- /dev/null +++ b/attic/muse_qt4_evolution/synti/libsynti/mono.cpp @@ -0,0 +1,47 @@ +//========================================================= +// MusE +// Linux Music Editor +// software synthesizer helper library +// $Id: mono.cpp,v 1.2 2004/04/15 13:46:18 wschweer Exp $ +// +// (C) Copyright 2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include "mono.h" + +//--------------------------------------------------------- +// playNote +//--------------------------------------------------------- + +bool MessMono::playNote(int channel, int pitch, int velo) + { + if (velo == 0) { + if (pitchStack.empty()) + return false; + if (pitchStack.back().pitch == pitch) { + pitchStack.pop_back(); + if (pitchStack.empty()) { + note(channel, pitch, 0); + return false; + } + PitchVelo pv = pitchStack.back(); + note(pv.channel, pv.pitch, pv.velo); // change pitch + return false; + } + for (std::list::iterator i = pitchStack.begin(); + i != pitchStack.end(); ++i) { + if ((*i).pitch == pitch) { + pitchStack.erase(i); + return false; + } + } + // no noteon found + // emergency stop: + note(channel, pitch, velo); + return false; + } + pitchStack.push_back(PitchVelo(channel, pitch, velo)); + note(channel, pitch, velo); + return false; + } + diff --git a/attic/muse_qt4_evolution/synti/libsynti/mono.h b/attic/muse_qt4_evolution/synti/libsynti/mono.h new file mode 100644 index 00000000..f2f8bdf7 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/libsynti/mono.h @@ -0,0 +1,47 @@ +//========================================================= +// MusE +// Linux Music Editor +// software synthesizer helper library +// $Id: mono.h,v 1.4 2004/04/15 13:46:18 wschweer Exp $ +// +// (C) Copyright 2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __SYNTH_MONO_H__ +#define __SYNTH_MONO_H + +#include +#include "mess.h" + +//--------------------------------------------------------- +// PitchVelo +//--------------------------------------------------------- + +struct PitchVelo { + signed char channel; + signed char pitch; + signed char velo; + PitchVelo(signed char a, signed char b, signed char c) + : channel(a), pitch(b), velo(c) {} + }; + +//--------------------------------------------------------- +// MessMono +// implements some functions for monophone +// synthesizer +//--------------------------------------------------------- + +class MessMono : public Mess { + std::list pitchStack; + + protected: + virtual bool playNote(int channel, int pitch, int velo); + virtual void note(int channel, int pitch, int velo) = 0; + + public: + MessMono() : Mess(1) {} + virtual ~MessMono() {} + }; + +#endif + diff --git a/attic/muse_qt4_evolution/synti/libsynti/poly.cpp b/attic/muse_qt4_evolution/synti/libsynti/poly.cpp new file mode 100644 index 00000000..e76fe966 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/libsynti/poly.cpp @@ -0,0 +1,35 @@ +//========================================================= +// MusE +// Linux Music Editor +// software synthesizer helper library +// $Id: poly.cpp,v 1.3 2004/06/01 14:25:50 wschweer Exp $ +// +// (C) Copyright 2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include "poly.h" +#include "muse/midictrl.h" + +//--------------------------------------------------------- +// playNote +//--------------------------------------------------------- + +bool MessPoly::playNote(int /*channel*/, int /*pitch*/, int /*velo*/) + { + return false; + } + +//--------------------------------------------------------- +// setController +//--------------------------------------------------------- + +bool MessPoly::setController(int /*channel*/, int num, int /*val*/) + { + switch(num) { + case CTRL_VOLUME: + case CTRL_EXPRESSION: + break; + } + return false; + } + diff --git a/attic/muse_qt4_evolution/synti/libsynti/poly.h b/attic/muse_qt4_evolution/synti/libsynti/poly.h new file mode 100644 index 00000000..b990b198 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/libsynti/poly.h @@ -0,0 +1,39 @@ +//========================================================= +// MusE +// Linux Music Editor +// software synthesizer helper library +// $Id: poly.h,v 1.2 2004/04/15 13:46:18 wschweer Exp $ +// +// (C) Copyright 2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __SYNTH_POLY_H__ +#define __SYNTH_POLY_H + +#include +#include "mess.h" + +//--------------------------------------------------------- +// MessPoly +// implements some functions for monophone +// synthesizer +//--------------------------------------------------------- + +class MessPoly : public Mess { + float volume; + float expression; + + // cached values: + float mainLevel; + + protected: + virtual bool playNote(int channel, int pitch, int velo); + virtual bool setController(int, int, int); + + public: + MessPoly() : Mess(1) {} + virtual ~MessPoly() {} + }; + +#endif + diff --git a/attic/muse_qt4_evolution/synti/mus/CMakeLists.txt b/attic/muse_qt4_evolution/synti/mus/CMakeLists.txt new file mode 100644 index 00000000..f7d8a0ad --- /dev/null +++ b/attic/muse_qt4_evolution/synti/mus/CMakeLists.txt @@ -0,0 +1,28 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +add_executable ( mus mus.cpp ) +install_targets ( /bin mus ) +target_link_libraries(mus + synti + ${QT_LIBRARIES} + ${JACK_LIB} + ) + diff --git a/attic/muse_qt4_evolution/synti/mus/mus.cpp b/attic/muse_qt4_evolution/synti/mus/mus.cpp new file mode 100644 index 00000000..a112b450 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/mus/mus.cpp @@ -0,0 +1,276 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "all.h" +#include +#include +#include + +#include "config.h" +#include "libsynti/mess.h" +#include "jackaudio.h" +#include + +static const char* versionString = "1.0"; +static bool debug = false; + +static int sampleRate; +static int segmentSize; + +static Mess* mess; +static const int MAX_OUTPORTS = 8; +static jack_port_t* inPort; +static jack_port_t* outPorts[MAX_OUTPORTS]; +static float* outBuffer[MAX_OUTPORTS]; + +//--------------------------------------------------------- +// processAudio +// JACK callback +//--------------------------------------------------------- + +static int processAudio(jack_nframes_t nFrames, void*) + { + int nch = mess->channels(); + for (int i = 0; i < nch; ++i) { + outBuffer[i] = (float*)jack_port_get_buffer(outPorts[i], nFrames); +#ifdef JACK107 + jack_midi_clear_buffer(outBuffer[i]); +#endif +#ifdef JACK103 + jack_midi_clear_buffer(outBuffer[i], nFrames); +#endif + // memset(outBuffer[i], 0, sizeof(float) * nFrames); + } + while(mess->eventsPending()) + mess->processEvent(mess->receiveEvent()); + + void* midi = jack_port_get_buffer(inPort, nFrames); +#ifdef JACK107 + int n = jack_midi_get_event_count(midi); +#endif +#ifdef JACK103 + int n = jack_midi_get_event_count(midi, nFrames); +#endif + unsigned offset = 0; + + for (int i = 0; i < n; ++i) { + jack_midi_event_t event; + +#ifdef JACK107 + jack_midi_event_get(&event, midi, i); +#endif +#ifdef JACK103 + jack_midi_event_get(&event, midi, i, nFrames); +#endif + mess->process(outBuffer, offset, event.time - offset); + offset = event.time; + MidiEvent e; + e.setType(event.buffer[0] & 0xf0); + e.setChannel(event.buffer[0] & 0xf); + e.setA(event.buffer[1]); + e.setB(event.buffer[2]); + mess->processEvent(e); + } + if (offset < nFrames) + mess->process(outBuffer, offset, nFrames - offset); + return 0; + } + +//--------------------------------------------------------- +// jackError +//--------------------------------------------------------- + +static void jackError(const char* s) + { + fprintf(stderr, "JACK ERROR: %s\n", s); + } + +//--------------------------------------------------------- +// noJackError +//--------------------------------------------------------- + +static void noJackError(const char* /* s */) + { + } + +//--------------------------------------------------------- +// printVersion +//--------------------------------------------------------- + +static void printVersion(const char* programName) + { + printf("%s: Version %s\n", programName, versionString); + } + +//--------------------------------------------------------- +// usage +//--------------------------------------------------------- + +static void usage(const char* programName) + { + fprintf(stderr, "%s: usage MusE-synthesizer-plugin-name\n" + " options: -v print version\n" + " -d debug mode on\n", + programName + ); + } + +//--------------------------------------------------------- +// main +//--------------------------------------------------------- + +int main(int argc, char* argv[]) + { + new QApplication(argc, argv); + int c; + while ((c = getopt(argc, argv, "vd")) != EOF) { + switch (c) { + case 'v': + printVersion(argv[0]); + return 0; + case 'd': + debug = true; + break; + default: + usage(argv[0]); + return -1; + } + } + argc -= optind; + if (argc != 1) { + usage(argv[0]); + return -1; + } + // + // load synthesizer plugin + // + QDir pluginDir(INSTPREFIX "/lib/" INSTALL_NAME "/synthi"); + if (!pluginDir.exists()) { + fprintf(stderr, "plugin directory <%s> not found\n", + pluginDir.path().toLocal8Bit().data()); + return -2; + } + QString pluginName(argv[1]); + if (!pluginName.endsWith(".so", Qt::CaseInsensitive)) + pluginName += ".so"; + if (!pluginDir.exists(pluginName)) { + fprintf(stderr, "plugin <%s> in directory <%s> not found\n", + pluginName.toLocal8Bit().data(), + pluginDir.path().toLocal8Bit().data()); + return -3; + } + QString path = pluginDir.filePath(pluginName); + void* handle = dlopen(path.toLocal8Bit().data(), RTLD_LAZY); + if (handle == 0) { + fprintf(stderr, "%s: dlopen(%s) failed: %s\n", + argv[0], path.toLocal8Bit().data(), dlerror()); + return -4; + } + typedef const MESS* (*MESS_Function)(); + MESS_Function msynth = (MESS_Function)dlsym(handle, "mess_descriptor"); + if (!msynth) { + fprintf(stderr, + "%s: Unable to find msynth_descriptor() function in plugin\n" + "Are you sure this is a MESS plugin file?\n%s", + argv[0], dlerror()); + return -5; + } + const MESS* descr = msynth(); + if (descr == 0) { + fprintf(stderr, "%s: instantiate: no MESS descr found\n", + argv[0]); + return 6; + } + // + // initialize JACK + // + if (debug) { + fprintf(stderr, "init JACK audio\n"); + jack_set_error_function(jackError); + } + else + jack_set_error_function(noJackError); + + jack_client_t* client; + int i = 0; + QString instanceName; + QString s(pluginName.left(pluginName.size()-3)); + s += "-%1"; + static const int MAX_INSTANCES = 100; + for (i = 0; i < MAX_INSTANCES; ++i) { + instanceName = s.arg(i); + const char* jackIdString = strdup(instanceName.toLocal8Bit().data()); + client = jack_client_new(jackIdString); + if (client) + break; + } + if (i == MAX_INSTANCES) { + fprintf(stderr, "%s: too many instances of the synth! (>%d)\n", + argv[0], MAX_INSTANCES); + return -7; + } + jack_set_error_function(jackError); + if (debug) + fprintf(stderr, "init Jack Audio: register device\n"); + // jackAudio = new JackAudio(client, jackIdString); + if (debug) + fprintf(stderr, "init Jack Audio: register client\n"); + + jack_set_process_callback(client, processAudio, 0); +// jack_set_sync_callback(_client, processSync, 0); +// jack_on_shutdown(_client, processShutdown, 0); +// jack_set_buffer_size_callback(_client, bufsize_callback, 0); +// jack_set_sample_rate_callback(_client, srate_callback, 0); +// jack_set_port_registration_callback(_client, registration_callback, 0); +// jack_set_graph_order_callback(_client, graph_callback, 0); +// jack_set_freewheel_callback (_client, freewheel_callback, 0); +// jack_set_timebase_callback(_client, 0, timebase_callback, 0); + + sampleRate = jack_get_sample_rate(client); + segmentSize = jack_get_buffer_size(client); + // + // instantiate Synthesizer + // + mess = descr->instantiate(sampleRate, instanceName.toLocal8Bit().data()); + if (mess == 0) { + fprintf(stderr, "%s: instantiate failed\n", + argv[0]); + } + + int channels = mess->channels(); + if (channels > MAX_OUTPORTS) { + channels = MAX_OUTPORTS; + fprintf(stderr, "%s: too many outports %d > %d\n", + argv[0], channels, MAX_OUTPORTS); + } + for (int i = 0; i < channels; ++i) { + char portName[64]; + snprintf(portName, 64, "audioOut-%d", i); + outPorts[i] = jack_port_register(client, portName, + JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0); + } + inPort = jack_port_register(client, "midiIn", + JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0); + if (mess->hasGui()) + mess->showGui(true); + jack_activate(client); + qApp->exec(); + } + diff --git a/attic/muse_qt4_evolution/synti/organ/CMakeLists.txt b/attic/muse_qt4_evolution/synti/organ/CMakeLists.txt new file mode 100644 index 00000000..01540c88 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/organ/CMakeLists.txt @@ -0,0 +1,50 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +QT4_WRAP_CPP ( organ_mocs organgui.h ) +QT4_WRAP_UI ( organ_uis organgui.ui ) + +add_library ( organ SHARED + organ.cpp + organgui.cpp + reverb.cpp + routing.cpp + organgui.h + ${organ_mocs} + ${organ_uis} + ) + +# - tell cmake to name target organ.so instead of +# liborgan.so +# - use precompiled header files +# +set_target_properties ( organ + PROPERTIES PREFIX "" + COMPILE_FLAGS "-O2 -include ${PROJECT_BINARY_DIR}/all-pic.h" + ) + +target_link_libraries(organ + synti + awl + ${QT_LIBRARIES} + ) + +install_targets ( /${CMAKE_INSTALL_LIBDIR}/${MusE_INSTALL_NAME}/synthi/ organ ) + diff --git a/attic/muse_qt4_evolution/synti/organ/organ.cpp b/attic/muse_qt4_evolution/synti/organ/organ.cpp new file mode 100644 index 00000000..7c83a463 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/organ/organ.cpp @@ -0,0 +1,621 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: organ.cpp,v 1.23 2005/12/16 15:36:51 wschweer Exp $ +// +// Parts of this file taken from: +// Organ - Additive Organ Synthesizer Voice +// Copyright (C) 1999, 2000 David A. Bartold +// Some information was gathered form the "beatrix" organ +// from Fredrik Kilander +// +// (C) Copyright 2001-2007 Werner Schweer (ws@seh.de) +//========================================================= + +#include "muse/midi.h" +#include "libsynti/midievent.h" + +#include "organ.h" +#include "organgui.h" +#include "reverb.h" + +float* Organ::attackEnv; +float* Organ::releaseEnv; +int Organ::envSize; +float* Organ::waveTable; +int Organ::useCount; +double Organ::cb2amp_tab[MAX_ATTENUATION]; +float Organ::keyCompression[NO_VOICES]; + +//--------------------------------------------------------- +// dBToGain +//--------------------------------------------------------- + +static double dBToGain(double dB) + { + return pow(10.0, (dB / 20.0)); + } + +//--------------------------------------------------------- +// cb2amp +// convert centibel to amplification (0 - 96dB) +//--------------------------------------------------------- + +double Organ::cb2amp(int cb) + { + if (cb < 0) + return 1.0; + if (cb >= MAX_ATTENUATION) + return 0.0; + return cb2amp_tab[cb]; + } + +static const unsigned SHIFT = 16; +static const double RESO = 256.0 * 256.0 * 256.0 * 256.0; +static const unsigned resolution = 256 * 256; // 16 Bit + +//--------------------------------------------------------- +// Organ +//--------------------------------------------------------- + +Organ::Organ(int sr) + : Mess2(2) + { + setSampleRate(sr); + gui = 0; + reverb = new Reverb(); + + ++useCount; + if (useCount > 1) + return; + + // centibels to amplitude conversion + for (int i = 0; i < MAX_ATTENUATION; i++) + cb2amp_tab[i] = pow(10.0, double(i) / -200.0); + + // Initialize sine table. + waveTable = new float[resolution]; + for (unsigned i = 0; i < resolution; i++) + waveTable[i] = sin (double(i) * 2.0 * M_PI / double(resolution)); + + // Initialize envelope tables + + envSize = sr * 4 / 1000; // 4 msec + attackEnv = new float[envSize]; + releaseEnv = new float[envSize]; + + for (int i = 0; i < envSize; ++i) { + attackEnv[i] = float(i) / float(envSize); + releaseEnv[i] = float(i) / float(envSize); + } + + // Initialize key compression table + + keyCompression[ 0] = 1.0; + keyCompression[ 1] = 1.0; + keyCompression[ 2] = dBToGain(-1.1598); + keyCompression[ 3] = dBToGain(-2.0291); + keyCompression[ 4] = dBToGain(-2.4987); + keyCompression[ 5] = dBToGain(-2.9952); + keyCompression[ 6] = dBToGain(-3.5218); + keyCompression[ 7] = dBToGain(-4.0823); + keyCompression[ 8] = dBToGain(-4.6815); + keyCompression[ 9] = dBToGain(-4.9975); + keyCompression[10] = dBToGain(-4.9998); + + /* Linear interpolation from u to v. */ + + static const float u = -5.0; + static const float v = -9.0; + static const float m = 1.0 / (NO_VOICES - 12); + for (int i = 11; i < NO_VOICES; i++) { + keyCompression[i] = dBToGain(u + ((v - u) * float(i - 11) * m)); + } + + // Initialize controller table + + addController("drawbar16", DRAWBAR0, 0, 8, 8); + addController("drawbar513", DRAWBAR1, 0, 8, 8); + addController("drawbar8", DRAWBAR2, 0, 8, 8); + addController("drawbar4", DRAWBAR3, 0, 8, 0); + addController("drawbar223", DRAWBAR4, 0, 8, 0); + addController("drawbar2", DRAWBAR5, 0, 8, 0); + addController("drawbar135", DRAWBAR6, 0, 8, 0); + addController("drawbar113", DRAWBAR7, 0, 8, 0); + addController("drawbar1", DRAWBAR8, 0, 8, 0); + addController("reverbOn", REVERB_ON, 0, 1, 0); + addController("reverbRoomSize", REVERB_ROOM_SIZE, 0, 127, 60); + addController("reverbMix", REVERB_MIX, 0, 127, 100); + addController("vibratoOn", VIBRATO_ON, 0, 1, 1); + addController("vibratoFreq", VIBRATO_FREQ, 0, 127, 100); + addController("vibratoDepth", VIBRATO_DEPTH, 0, 127, 50); + addController("volume", CTRL_VOLUME, 0, 127, 100); + addController("percOn", PERC_ON, 0, 1, 1); + addController("percGain", PERC_GAIN, 0, 127, 60); + addController("percDecay", PERC_DECAY, 0, 127, 60); + addController("percHarmony", PERC_HARMONY, 0, 8, 3); + addController("rotaryOn", ROTARY_ON, 0, 1, 0); + addController("rot1Freq", ROT1_FREQ, 0, 127, 100); + addController("rot1Depth", ROT1_DEPTH, 0, 127, 50); + addController("rot2Freq", ROT2_FREQ, 0, 127, 100); + addController("rot2Depth", ROT2_DEPTH, 0, 127, 50); + } + +//--------------------------------------------------------- +// ~Organ +//--------------------------------------------------------- + +Organ::~Organ() + { + if (gui) + delete gui; + delete reverb; + + --useCount; + if (useCount == 0) { + delete[] waveTable; + delete[] attackEnv; + delete[] releaseEnv; + } + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +bool Organ::init(const char* name) + { + gui = new OrganGui; + gui->hide(); + gui->setWindowTitle(QString(name)); + + // + // Initialize controller + // + int idx = 0; + foreach(SynthCtrl* c, ctrl) { + setController(c->ctrl, c->init); // init synti + gui->setParamIdx(idx, c->init); // init gui + ++idx; + } + + // see: http://www.dairiki.org/HammondWiki/GearRatio + static const int gearA[12] = { 85, 71,67,35,69,12,37,49,48,11,67,54 }; + static const int gearB[12] = { 104,82,73,36,67,11,32,40,37, 8,46,35 }; + static const int teeth[] = { 2, 4, 8, 16, 32, 64, 128, 192 }; + + vibratoAccu = 0; + rot1AccuL = 0; + rot1AccuR = 0x80000000; + rot2AccuL = 0; + rot2AccuR = 0x80000000; + + for (int i = 0; i < NO_WHEELS; ++i) { + int note = i % 12; + int octave = i / 12; + if (octave == 7) + note += 5; + // in 60Hz organs, the motor turns at 1200 RPM (20 revolutions /sec) + double freq = 20.0 * teeth[octave] * gearA[note] / gearB[note]; + wheels[i].frameStep = lrint(freq * RESO / double(sampleRate())); + wheels[i].accu = 0; + wheels[i].refCount = 0; + wheels[i].active = false; + for (int k = 0; k < NO_BUSES; ++k) + wheels[i].envCount[k] = 0; + } + keyCompressionValue = 1.0; + keyCompressionCount = 0; + percGain = 0.0; + return false; + } + +//--------------------------------------------------------- +// process +//--------------------------------------------------------- + +void Organ::process(float** ports, int offset, int sampleCount) + { + // + // get and process all pending events from the + // synthesizer GUI + // + while (gui->fifoSize()) { + MidiEvent ev = gui->readEvent(); + if (ev.type() == ME_CONTROLLER) { + setController(ev.dataA(), ev.dataB()); + sendEvent(ev); + } + else + printf("Organ::process(): unknown event\n"); + } + + float* buffer1 = ports[0] + offset; + float* buffer2 = ports[1] + offset; + memset(buffer1, 0, sizeof(float) * sampleCount); + memset(buffer2, 0, sizeof(float) * sampleCount); + + float vibrato[sampleCount]; + + if (vibratoOn) { + // + // compute partial vibrato sinus + // + for (int i = 0; i < sampleCount; ++i) { + vibratoAccu += vibratoStep; + vibrato[i] = waveTable[vibratoAccu >> SHIFT] * vibratoDepth; + } + } + + foreach (Wheel* w, activeWheels) { + for (int i = 0; i < sampleCount; ++i) { + + unsigned step = w->frameStep; + if (vibratoOn) + step += unsigned(step * vibrato[i]); + + w->accu += step; + + int idx = w->accu >> SHIFT; + float val1 = waveTable[idx]; + idx = (idx + 1) & 0xffff; + float val2 = waveTable[idx]; + float val = val1 + (val2 - val1) * double(w->accu & 0xffff)/double(0x10000); + + for (int k = 0; k < NO_BUSES; ++k) { + int* envCnt = &(w->envCount[k]); + float v; + if (*envCnt > 0) { + (*envCnt)--; + float gain = w->gain[k] - w->deltaGain[k] * w->env[k][*envCnt]; + v = val * gain; + if ((*envCnt == 0) && (w->refCount == 0)) { + int idx = activeWheels.indexOf(w); + if (idx != -1) { + activeWheels.removeAt(idx); + w->active = false; + } + } + } + else { + v = val * w->gain[k]; + } + buffer1[i] += v * drawBarGain[k]; + if (k == percussionBus) + buffer2[i] += v; + } + } + } + if (percussionOn) { + for (int i = 0; i < sampleCount; ++i) { + buffer1[i] = buffer1[i] * volume * keyCompressionValue + + buffer2[i] * percGain; + percGain *= percussionEnvDecay; + if (keyCompressionCount) { + keyCompressionValue += keyCompressionDelta; + --keyCompressionCount; + } + } + } + else { + for (int i = 0; i < sampleCount; ++i) { + buffer1[i] *= volume * keyCompressionValue; + if (keyCompressionCount) { + keyCompressionValue += keyCompressionDelta; + --keyCompressionCount; + } + } + } + memcpy(buffer2, buffer1, sizeof(float) * sampleCount); + if (reverbOn) + reverb->process(buffer1, buffer2, sampleCount); + } + +//--------------------------------------------------------- +// changeKeyCompression +//--------------------------------------------------------- + +void Organ::changeKeyCompression() + { + float kc = keyCompression[pressedKeys.size()]; + keyCompressionCount = int(sampleRate() * .005); // 5 msec envelope + if (keyCompressionCount < 2) + keyCompressionCount = 2; + keyCompressionDelta = (kc - keyCompressionValue) / keyCompressionCount; + } + +//--------------------------------------------------------- +// playNote +//--------------------------------------------------------- + +bool Organ::playNote(int /*channel*/, int pitch, int velo) + { + if (pitch < 36 || pitch > 97) + return false; + if (velo == 0) { + int idx = pressedKeys.indexOf(pitch); + if (idx == -1) { + printf("Organ: noteoff %d not found\n", pitch); + return false; + } + pressedKeys.removeAt(idx); + } + else { + if (pressedKeys.isEmpty()) + percGain = percGainInit; + pressedKeys.append(pitch); + } + changeKeyCompression(); + + for (int k = 0; k < NO_ELEMENTS; ++k) { + const Elem* e = &routing[pitch - 36][k]; + if (e->bus == -1) + break; + Wheel* w = &wheels[int(e->wheel)]; + int bus = e->bus; + float level = e->level; + + if (velo) { + if (!w->active) { + // activate wheel + for (int k = 0; k < NO_BUSES; ++k) { + w->gain[k] = 0.0; + w->envCount[k] = 0; + } + activeWheels.append(w); + w->active = true; + } + float deltaGain = level; + + if (w->envCount[bus]) { + deltaGain += w->deltaGain[bus] * w->env[bus][w->envCount[bus]]; + } + w->env[bus] = attackEnv; + w->deltaGain[bus] = deltaGain; + w->gain[bus] += level; + w->refCount++; + } + else { + float deltaGain = -level; + + if (w->envCount[bus]) { + deltaGain += w->deltaGain[bus] * w->env[bus][w->envCount[bus]]; + } + w->env[bus] = releaseEnv; + w->deltaGain[bus] = deltaGain; + w->gain[bus] -= level; + if (w->refCount) + w->refCount--; + } + w->envCount[bus] = envSize; + } + return false; + } + +//--------------------------------------------------------- +// percussionChanged +//--------------------------------------------------------- + +void Organ::percussionChanged() + { + percussionEnvDecay = exp(log(0.001/percGainInit) / (percDecay * double(sampleRate()))); + } + +//--------------------------------------------------------- +// setController +//--------------------------------------------------------- + +void Organ::setController(int ctrlId, int data) + { + int ctrlIdx = controllerIdx(ctrlId); + if (ctrlIdx != -1) + ctrl[ctrlIdx]->val = data; + switch (ctrlId) { + case DRAWBAR0 ... DRAWBAR8: + { + int db = ctrlId - DRAWBAR0; + drawBarGain[db] = float(data) / 8.0; + } + break; + case REVERB_ROOM_SIZE: + reverb->setRoomSize(float(data) / 127.0); + break; + + case REVERB_MIX: + reverb->setMix(float(data) / 127.0); + break; + + case REVERB_ON: + reverbOn = data != 0; + break; + + case VIBRATO_ON: + vibratoOn = data != 0; + break; + + case VIBRATO_FREQ: + vibratoFreq = float(data) * 6.0 / 127.0 + 4; + vibratoStep = lrint(vibratoFreq * RESO / double(sampleRate())); + break; + + case VIBRATO_DEPTH: + vibratoDepth = float(data) / 127.0 * .01; + break; + + case PERC_ON: + percussionOn = data != 0; + break; + + case PERC_GAIN: // 0.01 - 0.4 + percGainInit = float(data) * .39 / 127.0 + 0.01; + percussionChanged(); + break; + + case PERC_DECAY: // 0.5 - 4.5 sec + percDecay = float(data) * 4.0 / 127.0 + 0.5; + percussionChanged(); + break; + + case PERC_HARMONY: + percussionBus = data; + break; + + case ROTARY_ON: + rotaryOn = data != 0; + break; + + case ROT1_FREQ: + rot1Freq = float(data) * 6.0 / 127.0 + 0.67; + rot1Step = lrint(rot1Freq * RESO / double(sampleRate())); + break; + + case ROT1_DEPTH: + rot1Depth = float(data) / 127.0 * 1.0; + break; + + case ROT2_FREQ: + rot1Freq = float(data) * 5.0 / 127.0 + 0.5; + rot1Step = lrint(rot1Freq * RESO / double(sampleRate())); + break; + + case ROT2_DEPTH: + rot2Depth = float(data) / 127.0 * 1.0; + break; + + case CTRL_VOLUME: + data &= 0x7f; + volume = data == 0 ? 0.0 : cb2amp(int(200 * log10((127.0 * 127)/(data*data)))); + volume *= .04; + break; + + case CTRL_ALL_SOUNDS_OFF: + foreach(Wheel* w, activeWheels) { + for (int k = 0; k < NO_ELEMENTS; ++k) { + w->gain[k] = 0.0; + w->envCount[k] = 0; + } + w->refCount = 0; + } + pressedKeys.clear(); + break; + + case CTRL_RESET_ALL_CTRL: +// for (int i = 0; i < NUM_CONTROLLER; ++i) +// setController(0, synthCtrl[i].num, synthCtrl[i].val); + break; + default: + fprintf(stderr, "Organ:set unknown Ctrl 0x%x to 0x%x\n", ctrlId, data); + return; + } + } + +//--------------------------------------------------------- +// setController +//--------------------------------------------------------- + +bool Organ::setController(int channel, int ctrlId, int data) + { + MidiEvent ev(0, channel, ME_CONTROLLER, ctrlId, data); + gui->writeEvent(ev); + setController(ctrlId, data); + return false; + } + +//--------------------------------------------------------- +// sysex +//--------------------------------------------------------- + +bool Organ::sysex(int n, const unsigned char* data) + { + int nn = ctrl.size() * sizeof(int); + if (nn != n) { + printf("unknown sysex %d %02x %02x\n", n, data[0], data[1]); + return false; + } + const int* s = (const int*) data; + for (int i = 0; i < ctrl.size(); ++i) { + setController(0, ctrl[i]->ctrl, *s); + setController(ctrl[i]->ctrl, *s); + s++; + } + return false; + } + +//--------------------------------------------------------- +// MESS +//--------------------------------------------------------- + +//--------------------------------------------------------- +// guiVisible +//--------------------------------------------------------- + +bool Organ::guiVisible() const + { + return gui->isVisible(); + } + +//--------------------------------------------------------- +// showGui +//--------------------------------------------------------- + +void Organ::showGui(bool val) + { + gui->setShown(val); + } + +//--------------------------------------------------------- +// getGeometry +//--------------------------------------------------------- + +void Organ::getGeometry(int* x, int* y, int* w, int* h) const + { + QPoint pos(gui->pos()); + QSize size(gui->size()); + *x = pos.x(); + *y = pos.y(); + *w = size.width(); + *h = size.height(); + } + +//--------------------------------------------------------- +// setGeometry +//--------------------------------------------------------- + +void Organ::setGeometry(int x, int y, int w, int h) + { + gui->resize(QSize(w, h)); + gui->move(QPoint(x, y)); + } + +//--------------------------------------------------------- +// instantiate +// construct a new synthesizer instance +//--------------------------------------------------------- + +static Mess* instantiate(int sr, const char* name) + { + Organ* synth = new Organ(sr); + if (synth->init(name)) { + delete synth; + synth = 0; + } + return synth; + } + +//--------------------------------------------------------- +// msynth_descriptor +// Return a descriptor of the requested plugin type. +//--------------------------------------------------------- + +extern "C" { + static MESS descriptor = { + "Organ", + "Organ; based on David A. Bartold's LADSPA plugin", + "0.1", // version string + MESS_MAJOR_VERSION, MESS_MINOR_VERSION, + instantiate, + }; + + const MESS* mess_descriptor() { return &descriptor; } + } + diff --git a/attic/muse_qt4_evolution/synti/organ/organ.h b/attic/muse_qt4_evolution/synti/organ/organ.h new file mode 100644 index 00000000..971e6cc9 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/organ/organ.h @@ -0,0 +1,151 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: organ.h,v 1.5 2004/04/15 13:46:18 wschweer Exp $ +// +// Parts of this file taken from: +// Organ - Additive Organ Synthesizer Voice +// Copyright (c) 1999, 2000 David A. Bartold +// +// (C) Copyright 2001-2007 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __ORGAN_H__ +#define __ORGAN_H__ + +#include "muse/midictrl.h" +#include "libsynti/mess2.h" + +static const int NO_VOICES = 128; // max polyphony +static const int NO_KEYS = 97 - 36; +class OrganGui; +class Reverb; + +static const int MAX_ATTENUATION = 960; +static const int NO_BUSES = 9; +static const int NO_WHEELS = 91; +static const int NO_ELEMENTS = 194; + +enum { + DRAWBAR0 = CTRL_RPN14_OFFSET, DRAWBAR1, DRAWBAR2, + DRAWBAR3, DRAWBAR4, DRAWBAR5, DRAWBAR6, DRAWBAR7, DRAWBAR8, + REVERB_ON, REVERB_ROOM_SIZE, REVERB_MIX, + VIBRATO_ON, VIBRATO_FREQ, VIBRATO_DEPTH, + PERC_ON, PERC_GAIN, PERC_DECAY, PERC_HARMONY, + ROTARY_ON, ROT1_FREQ, ROT1_DEPTH, ROT2_FREQ, ROT2_DEPTH + }; + +//--------------------------------------------------------- +// Wheel +//--------------------------------------------------------- + +struct Wheel { + unsigned frameStep; + unsigned accu; + + int refCount; + bool active; + float gain[NO_BUSES]; + + // envelopes: + float* env[NO_BUSES]; + int envCount[NO_BUSES]; + float deltaGain[NO_BUSES]; + }; + +//--------------------------------------------------------- +// Elem +//--------------------------------------------------------- + +struct Elem { + char wheel; + char bus; + float level; + + Elem() { bus = -1; } + Elem(char w, char b, float l) : wheel(w), bus(b), level(l) {} + }; + +//--------------------------------------------------------- +// Organ +//--------------------------------------------------------- + +class Organ : public Mess2 { + static int useCount; + + static float* waveTable; + static double cb2amp_tab[MAX_ATTENUATION]; + static double cb2amp(int cb); + static Elem routing[NO_KEYS][NO_ELEMENTS]; + static float* attackEnv; + static float* releaseEnv; + static int envSize; + static float keyCompression[NO_VOICES]; + + OrganGui* gui; + Reverb* reverb; + bool reverbOn; + double volume; + + unsigned vibratoStep; + unsigned vibratoAccu; + + bool vibratoOn; + double vibratoFreq; + double vibratoDepth; + + // key compression + float keyCompressionDelta; + float keyCompressionValue; + int keyCompressionCount; + + // percussion + int percussionBus; // usually drawbar 3 or drawbar 4 + bool percussionOn; + double percDecay; + double percussionEnvDecay; + double percGain; + double percGainInit; + + // rotary speaker emulation + bool rotaryOn; + double rot1Freq; // horn: 0,67 - 6,7 + double rot1Depth; + double rot2Freq; // drum: 0,5 - 5,5 + double rot2Depth; + unsigned rot1Step; + unsigned rot1AccuL; + unsigned rot1AccuR; + unsigned rot2Step; + unsigned rot2AccuL; + unsigned rot2AccuR; + + float drawBarGain[NO_BUSES]; + Wheel wheels[NO_WHEELS]; + QList pressedKeys; + QList activeWheels; + + void setController(int ctrl, int val); + void changeKeyCompression(); + void percussionChanged(); + + virtual void process(float**, int, int); + virtual bool playNote(int channel, int pitch, int velo); + virtual bool setController(int channel, int ctrl, int val); + virtual bool sysex(int, const unsigned char*); + + virtual bool guiVisible() const; + virtual void showGui(bool); + virtual bool hasGui() const { return true; } + virtual void getGeometry(int* x, int* y, int* w, int* h) const; + virtual void setGeometry(int x, int y, int w, int h); + + public: + friend class OrganGui; + Organ(int sampleRate); + ~Organ(); + bool init(const char* name); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/synti/organ/organgui.cpp b/attic/muse_qt4_evolution/synti/organ/organgui.cpp new file mode 100644 index 00000000..c00d23fb --- /dev/null +++ b/attic/muse_qt4_evolution/synti/organ/organgui.cpp @@ -0,0 +1,184 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: organgui.cpp,v 1.21 2005/12/16 15:36:51 wschweer Exp $ +// +// This is a simple GUI implemented with QT for +// organ software synthesizer. +// +// (C) Copyright 2001-2007 Werner Schweer (ws@seh.de) +//========================================================= + +#include "organgui.h" +#include "muse/midi.h" +#include "muse/midictrl.h" +#include "awl/knob.h" + +//--------------------------------------------------------- +// OrganGui +//--------------------------------------------------------- + +OrganGui::OrganGui() + : QWidget(0), + MessGui() + { + setupUi(this); + QSocketNotifier* s = new QSocketNotifier(readFd, QSocketNotifier::Read); + connect(s, SIGNAL(activated(int)), SLOT(readMessage(int))); + + map = new QSignalMapper(this); + QList wl = findChildren(); + foreach(QWidget* w, wl) { + int idx = Mess2::controllerIdx(w->objectName().toAscii().data()); + if (idx == -1) + continue; + w->setProperty("ctrlIdx", idx); + map->setMapping(w, w); + const char* cname = w->metaObject()->className(); + if (strcmp(cname, "QSlider") == 0) { + QSlider* slider = (QSlider*)w; + w->setProperty("ctrlType", 0); + connect(slider, SIGNAL(valueChanged(int)), map, SLOT(map())); + } + else if (strcmp(cname, "QCheckBox") == 0) { + w->setProperty("ctrlType", 1); + connect(w, SIGNAL(toggled(bool)), map, SLOT(map())); + } + else if (strcmp(cname, "QGroupBox") == 0) { + w->setProperty("ctrlType", 2); + connect(w, SIGNAL(toggled(bool)), map, SLOT(map())); + } + else if (strcmp(cname, "Awl::Knob") == 0) { + w->setProperty("ctrlType", 3); + connect(w, SIGNAL(valueChanged(double,int)), map, SLOT(map())); + } + else if (strcmp(cname, "QPushButton") == 0) { + w->setProperty("ctrlType", 4); + connect(w, SIGNAL(toggled(bool)), map, SLOT(map())); + } + else if (strcmp(cname, "Awl::Drawbar") == 0) { + Awl::Drawbar* drawbar = (Awl::Drawbar*)w; + w->setProperty("ctrlType", 5); + connect(drawbar, SIGNAL(valueChanged(double,int)), map, SLOT(map())); + } + else + printf("Gui Element <%s> not supported\n", cname); + } + ignoreControllerChange = false; + connect(map, SIGNAL(mapped(QWidget*)), this, SLOT(ctrlChanged(QWidget*))); + } + +//--------------------------------------------------------- +// ctrlChanged +//--------------------------------------------------------- + +void OrganGui::ctrlChanged(QWidget* w) + { + if (ignoreControllerChange) + return; + int ctrlIdx = w->property("ctrlIdx").toInt(); + int ctrlType = w->property("ctrlType").toInt(); + int value = 0; + + switch(ctrlType) { + case 0: // QSlider + value = ((QSlider*)w)->value(); + break; + case 1: + value = ((QCheckBox*)w)->isChecked(); + break; + case 2: + value = ((QGroupBox*)w)->isChecked(); + break; + case 3: + value = lrint(((Awl::Knob*)w)->value()); + break; + case 4: + value = ((QPushButton*)w)->isChecked(); + break; + case 5: + value = lrint(((Awl::Drawbar*)w)->value()); + break; + default: + printf("OrganGui::ctrlChanged: illegal ctrlType %d\n", ctrlType); + break; + } + int id = Mess2::controllerId(ctrlIdx); + sendController(0, id, value); // to synth + } + +//--------------------------------------------------------- +// setParam +//--------------------------------------------------------- + +void OrganGui::setParam(int ctrlId, int val) + { + int ctrlIdx = Mess2::controllerIdx(ctrlId); + if (ctrlIdx == -1) + return; + setParamIdx(ctrlIdx, val); + } + +//--------------------------------------------------------- +// setParamIdx +// set controller value in gui +//--------------------------------------------------------- + +void OrganGui::setParamIdx(int ctrlIdx, int val) + { + const char* name = Organ::controllerName(ctrlIdx); + if (name == 0) + return; + ignoreControllerChange = true; + QList wl = findChildren(name); + + foreach(QWidget* w, wl) { + int ctrlType = w->property("ctrlType").toInt(); + switch(ctrlType) { + case 0: + ((QSlider*)w)->setValue(val); + break; + case 1: + ((QCheckBox*)w)->setChecked(val); + break; + case 2: + ((QGroupBox*)w)->setChecked(val); + break; + case 3: + ((Awl::Knob*)w)->setValue(double(val)); + break; + case 4: + ((QPushButton*)w)->setChecked(val); + break; + case 5: + ((Awl::Drawbar*)w)->setValue(double(val)); + break; + default: + printf("OrganGui::setParamIdx: illegal ctrlType %d\n", ctrlType); + break; + } + } + ignoreControllerChange = false; + } + +//--------------------------------------------------------- +// processEvent +//--------------------------------------------------------- + +void OrganGui::processEvent(const MidiEvent& ev) + { + if (ev.type() == ME_CONTROLLER) + setParam(ev.dataA(), ev.dataB()); + else + printf("OrganGui::illegal event type received\n"); + } + +//--------------------------------------------------------- +// readMessage +//--------------------------------------------------------- + +void OrganGui::readMessage(int) + { + MessGui::readMessage(); + } + diff --git a/attic/muse_qt4_evolution/synti/organ/organgui.h b/attic/muse_qt4_evolution/synti/organ/organgui.h new file mode 100644 index 00000000..c691b1a1 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/organ/organgui.h @@ -0,0 +1,48 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: organgui.h,v 1.8 2005/10/04 21:37:44 lunar_shuttle Exp $ +// +// (C) Copyright 2001-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __ORGANGUI_H__ +#define __ORGANGUI_H__ + +#include "ui_organgui.h" +#include "organ.h" +#include "libsynti/gui.h" +#include "libsynti/midievent.h" + +class QSignalMapper; + +#define NUM_GUI_CONTROLLER 18 + +//--------------------------------------------------------- +// OrganGui +//--------------------------------------------------------- + +class OrganGui : public QWidget, public Ui::OrganGuiBase, public MessGui { + Q_OBJECT + + bool ignoreControllerChange; + + QSignalMapper* map; + virtual void processEvent(const MidiEvent&); + + protected: + void setParam(int, int); + void setParamIdx(int ctrlIdx, int val); + + private slots: + void ctrlChanged(QWidget*); + void readMessage(int); + + public: + friend class Organ; + friend class Mess2; + OrganGui(); + }; + +#endif + diff --git a/attic/muse_qt4_evolution/synti/organ/organgui.ui b/attic/muse_qt4_evolution/synti/organ/organgui.ui new file mode 100644 index 00000000..297042c7 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/organ/organgui.ui @@ -0,0 +1,791 @@ + + OrganGuiBase + + + + 0 + 0 + 611 + 342 + + + + + 0 + 0 + + + + MusE: Organ + + + QWidget { +background-color: rgb(93,106,121); +color: rgb(240, 240, 240); +} +QLabel#name { +font-size: 64px; +font-weight: bold; +} +Awl--Drawbar { +font-size: 10px; +} +Awl--Knob { +font-size: 10px; +} + +QGroupBox::indicator:checked { +background-color: yellow; +} +QGroupBox::indicator:unchecked { +background-color: gray; +} +QCheckBox::indicator:checked:disabled { +background-color: darkGray; +} +QCheckBox::indicator:unchecked:disabled { +background-color: gray; +} +QCheckBox::indicator:checked:enabled { +background-color: yellow; +} +QCheckBox::indicator:unchecked:enabled { +background-color: gray; +} + + + + + + + + + + 0 + 0 + + + + + -1 + 75 + true + + + + O-1 + + + Qt::AlignCenter + + + + + + + Percussion + + + true + + + + + + + 0 + 0 + + + + 5 + + + + 255 + 255 + 0 + + + + 127.000000000000000 + + + 8.000000000000000 + + + 20.000000000000000 + + + + + + + + 0 + 0 + + + + 5 + + + + 255 + 255 + 0 + + + + 127.000000000000000 + + + 8.000000000000000 + + + 20.000000000000000 + + + + + + + + 0 + 0 + + + + 5 + + + + 255 + 255 + 0 + + + + 8.000000000000000 + + + 1.000000000000000 + + + 1.000000000000000 + + + + + + + Gain + + + Qt::AlignCenter + + + + + + + Decay + + + Qt::AlignCenter + + + + + + + Harmony + + + Qt::AlignCenter + + + + + + + + + + Reverb + + + true + + + + + + + 0 + 0 + + + + 5 + + + + 255 + 255 + 0 + + + + 127.000000000000000 + + + 8.000000000000000 + + + 20.000000000000000 + + + + + + + + 0 + 0 + + + + Room + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + Mix + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + 5 + + + + 255 + 255 + 0 + + + + 127.000000000000000 + + + 8.000000000000000 + + + 20.000000000000000 + + + + + + + + + + Vibrato + + + true + + + + + + + 0 + 0 + + + + 5 + + + + 255 + 255 + 0 + + + + 127.000000000000000 + + + 8.000000000000000 + + + 20.000000000000000 + + + + + + + + 0 + 0 + + + + 5 + + + + 255 + 255 + 0 + + + + 127.000000000000000 + + + 8.000000000000000 + + + 20.000000000000000 + + + + + + + + 0 + 0 + + + + Freq + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + Depth + + + Qt::AlignCenter + + + + + + + + + + + + + + + 0 + 0 + + + + UPPER MANUAL + + + + + + 4.000000000000000 + + + + 60 + 60 + 60 + + + + + + + + 5.000000000000000 + + + + 60 + 60 + 60 + + + + + + + + + 0 + 150 + + + + 8.000000000000000 + + + + 240 + 240 + 240 + + + + + + + + 8.000000000000000 + + + + 240 + 240 + 240 + + + + + + + + 8.000000000000000 + + + + 128 + 102 + 86 + + + + + + + + 0.000000000000000 + + + + 240 + 240 + 240 + + + + + + + + 5.000000000000000 + + + + 128 + 102 + 86 + + + + + + + + 2.000000000000000 + + + + 128 + 102 + 86 + + + + + + + + 0.000000000000000 + + + + 240 + 240 + 240 + + + + + + + + + + + RotarySpeaker (test) + + + true + + + + + + + 0 + 0 + + + + 5 + + + + 255 + 255 + 0 + + + + 127.000000000000000 + + + 8.000000000000000 + + + 20.000000000000000 + + + + + + + + 0 + 0 + + + + 5 + + + + 255 + 255 + 0 + + + + 127.000000000000000 + + + 8.000000000000000 + + + 20.000000000000000 + + + + + + + + 0 + 0 + + + + f1 + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + depth1 + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + 5 + + + + 255 + 255 + 0 + + + + 127.000000000000000 + + + 8.000000000000000 + + + 20.000000000000000 + + + + + + + + 0 + 0 + + + + 5 + + + + 255 + 255 + 0 + + + + 127.000000000000000 + + + 8.000000000000000 + + + 20.000000000000000 + + + + + + + + 0 + 0 + + + + f2 + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + depth2 + + + Qt::AlignCenter + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Awl::Knob + QWidget +
awl/knob.h
+
+ + Awl::Drawbar + Awl::Slider +
awl/drawbar.h
+
+
+ + +
diff --git a/attic/muse_qt4_evolution/synti/organ/reverb.cpp b/attic/muse_qt4_evolution/synti/organ/reverb.cpp new file mode 100644 index 00000000..72775bc5 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/organ/reverb.cpp @@ -0,0 +1,163 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// based on "freeverb" written by Jezar at Dreampoint, +// June 2000 +// +// (C) Copyright 2007 Werner Schweer (ws@seh.de) +//========================================================= + +#include "reverb.h" + +//--------------------------------------------------------- +// Reverb +//--------------------------------------------------------- + +Reverb::Reverb() + { + // Tie the components to their buffers + combL[0].setbuffer(bufcombL1,combtuningL1); + combR[0].setbuffer(bufcombR1,combtuningR1); + combL[1].setbuffer(bufcombL2,combtuningL2); + combR[1].setbuffer(bufcombR2,combtuningR2); + combL[2].setbuffer(bufcombL3,combtuningL3); + combR[2].setbuffer(bufcombR3,combtuningR3); + combL[3].setbuffer(bufcombL4,combtuningL4); + combR[3].setbuffer(bufcombR4,combtuningR4); + combL[4].setbuffer(bufcombL5,combtuningL5); + combR[4].setbuffer(bufcombR5,combtuningR5); + combL[5].setbuffer(bufcombL6,combtuningL6); + combR[5].setbuffer(bufcombR6,combtuningR6); + combL[6].setbuffer(bufcombL7,combtuningL7); + combR[6].setbuffer(bufcombR7,combtuningR7); + combL[7].setbuffer(bufcombL8,combtuningL8); + combR[7].setbuffer(bufcombR8,combtuningR8); + allpassL[0].setbuffer(bufallpassL1,allpasstuningL1); + allpassR[0].setbuffer(bufallpassR1,allpasstuningR1); + allpassL[1].setbuffer(bufallpassL2,allpasstuningL2); + allpassR[1].setbuffer(bufallpassR2,allpasstuningR2); + allpassL[2].setbuffer(bufallpassL3,allpasstuningL3); + allpassR[2].setbuffer(bufallpassR3,allpasstuningR3); + allpassL[3].setbuffer(bufallpassL4,allpasstuningL4); + allpassR[3].setbuffer(bufallpassR4,allpasstuningR4); + + // Set default values + allpassL[0].setfeedback(0.5f); + allpassR[0].setfeedback(0.5f); + allpassL[1].setfeedback(0.5f); + allpassR[1].setfeedback(0.5f); + allpassL[2].setfeedback(0.5f); + allpassR[2].setfeedback(0.5f); + allpassL[3].setfeedback(0.5f); + allpassR[3].setfeedback(0.5f); + + setRoomSize(.5); + setMix(.5); + setdamp(.5); + setwidth(initialwidth); + + // Buffer will be full of rubbish - so we MUST mute them + + for (int i = 0; i < numcombs; i++) { + combL[i].mute(); + combR[i].mute(); + } + for (int i=0;i= bufsize) + bufidx = 0; + return output; + } + void mute() { + memset(buffer, 0, sizeof(float) * bufsize); + } + void setfeedback(float val) { feedback = val; } + float getfeedback() { return feedback; } + }; + +//--------------------------------------------------------- +// comb +//--------------------------------------------------------- + +class comb + { + float feedback; + float filterstore; + float damp1; + float damp2; + float *buffer; + int bufsize; + int bufidx; + + public: + comb() { + filterstore = 0; + bufidx = 0; + } + void setbuffer(float *buf, int size) { + buffer = buf; + bufsize = size; + } + float process(float input) { + float output = buffer[bufidx]; + undenormalise(output); + filterstore = (output*damp2) + (filterstore*damp1); + undenormalise(filterstore); + buffer[bufidx] = input + (filterstore*feedback); + if (++bufidx >= bufsize) + bufidx = 0; + return output; + } + void mute() { + for (int i=0; i +#include + +#include "synti/libsynti/mono.h" + +#define RESOLUTION 16384 + +//--------------------------------------------------------- +// S1 - simple mono demo synthesizer +//--------------------------------------------------------- + +class S1 : public MessMono { + static int useCount; + static float *wave_table; + + int gate; + float freq; + unsigned accu; + float sample; + + virtual void note(int channel, int pitch, int velo); + virtual void process(float** buffer, int offset, int n); + + public: + S1(); + ~S1(); + }; + +float* S1::wave_table; +int S1::useCount = 0; + +//--------------------------------------------------------- +// S1 +//--------------------------------------------------------- + +S1::S1() : MessMono() + { + if (useCount++ == 0) { + // + // create sinus wave table + // + wave_table = new float[RESOLUTION]; + for (int i = 0; i < RESOLUTION; i++) + wave_table[i] = sin ((i * 2.0 * M_PI) / RESOLUTION) / 6.0; + } + gate = 0; + } + +//--------------------------------------------------------- +// ~S1 +//--------------------------------------------------------- + +S1::~S1() + { + if (--useCount == 0) + delete[] wave_table; + } + +//--------------------------------------------------------- +// noteon +// process note on +//--------------------------------------------------------- + +void S1::note(int /*channel*/, int pitch, int velo) + { + if (velo == 0) { + // + // note off + // + if (sample == 0.0) + gate = 0; + else if (sample > 0.0) + gate = 2; + else if (sample < 0.0) + gate = 3; + } + else { + // + // note on + // + accu = 0; + gate = 1; + freq = 8.176 * exp(float(pitch)*log(2.0)/12.0); + } + } + +//--------------------------------------------------------- +// write +// synthesize n samples into buffer+offset +//--------------------------------------------------------- + +void S1::process(float** buffer, int offset, int n) + { + if (gate == 0) + return; + float* p = buffer[0] + offset; + unsigned freq_256 = (int) (freq * ((double) RESOLUTION) / sampleRate() * 256.0); + for (int i = 0; i < n; i++) { + accu += freq_256; + while (accu >= RESOLUTION * 256) + accu -= RESOLUTION * 256; + sample = wave_table[accu >> 8]; + // + // stop on zero crossing + // if in decay state + // + if (gate == 2 && sample <= 0.0) { + gate = 0; + break; + } + else if (gate == 3 && sample >= 0.0) { + gate = 0; + break; + } + p[i] += sample; + } + } + +//--------------------------------------------------------- +// inst +//--------------------------------------------------------- + +static Mess* instantiate(int sr, const char*) + { + S1* s1 = new S1(); + s1->setSampleRate(sr); + return s1; + } + +extern "C" { + static MESS descriptor = { + "S1", + "S1 MusE Demo Software Synthesizer", + "0.2", // version string + MESS_MAJOR_VERSION, MESS_MINOR_VERSION, + instantiate + }; + + const MESS* mess_descriptor() { return &descriptor; } + } + diff --git a/attic/muse_qt4_evolution/synti/simpledrums/CMakeLists.txt b/attic/muse_qt4_evolution/synti/simpledrums/CMakeLists.txt new file mode 100644 index 00000000..b29bab02 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/simpledrums/CMakeLists.txt @@ -0,0 +1,52 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +QT4_WRAP_CPP ( simpledrums_mocs simpledrumsgui.h ssplugingui.h ) +QT4_WRAP_UI ( simpledrums_uis simpledrumsguibase.ui sspluginchooserbase.ui ) + +add_library ( simpledrums SHARED + simpledrums.cpp + simpledrumsgui.cpp + simpledrums.h + ssplugin.cpp + ssplugingui.cpp + ssplugin.h + common.h + ${simpledrums_mocs} + ${simpledrums_uis} + ) + +# - tell cmake to name target simpledrums.so instead of +# libsimpledrums.so +# - use precompiled header files +# +set_target_properties ( simpledrums + PROPERTIES PREFIX "" + COMPILE_FLAGS "-O6 -include ${PROJECT_BINARY_DIR}/all-pic.h" + ) + +target_link_libraries(simpledrums + synti +# awl + ${QT_LIBRARIES} + ) + +install_targets ( /${CMAKE_INSTALL_LIBDIR}/${MusE_INSTALL_NAME}/synthi/ simpledrums ) + diff --git a/attic/muse_qt4_evolution/synti/simpledrums/COPYING b/attic/muse_qt4_evolution/synti/simpledrums/COPYING new file mode 100644 index 00000000..5c3cefc2 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/simpledrums/COPYING @@ -0,0 +1,3 @@ +COPYING +--------------------------------------- +This software is licensed under GNU GPL. diff --git a/attic/muse_qt4_evolution/synti/simpledrums/README b/attic/muse_qt4_evolution/synti/simpledrums/README new file mode 100644 index 00000000..468640b1 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/simpledrums/README @@ -0,0 +1,43 @@ +-------------------------------------- +Simpledrums v 0.2, by Mathias Lundgren +-------------------------------------- + +Simpledrums is a simple MESS-synth sampler (MusE Experimental Soft +Synth) aiming at becoming a simple, tightly integrated sampler for +MusE, specifically aimed at drumsamples. + +Features: +- 16 channels/samples (1 sample/channel) +- Simple controls for each individual channel: volume, balance, noteoff-ignore, channel on/off +- Main volume +- 4 LADSPA send-effects can be used, 4 effect taps for each individual channel +- All channel parameters are controllable via the GUI, or by MusE:s controller handling (controller pane in pianoroll/drumeditor) +- All effect parameters can be controlled via the GUI, or by Sysex messages (f.ex. turn effect on/off, modify effect parameters) +- Complete synth state (fx-parameters, samples etc) is saved together with MusE project, and restored later when loaded +- Samples automatically resampled when loaded (if needed) + +That's all folks! + +------------- +Known issues: +------------- +- Not the prettiest gui in the world +- All samples are read directly into memory (no caching) +- Some obscure LADSPA-effects make SimpleSynth segfault +- More... + +------------- +Future plans: +------------- +- Fix all the known issues! ;-) +- Sample loops +- Sample offset variation w respect to note velocity +- Treble/eq-controller for each individual channel +- Treble level variation w respect to note velocity +- More... + +Mathias Lundgren, (lunar_shuttle@users.sourceforge.net), 2004 +Plugin management code based on Werner Schweers plugin management handling for MusE + +(C) Copyright Mathias Lundgren, Werner Schweer 2000-2004 +Licensed under the GNU General Public License diff --git a/attic/muse_qt4_evolution/synti/simpledrums/ReleaseNotes.txt b/attic/muse_qt4_evolution/synti/simpledrums/ReleaseNotes.txt new file mode 100644 index 00000000..e0d633d8 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/simpledrums/ReleaseNotes.txt @@ -0,0 +1,18 @@ +RELEASE NOTES: +-------------- +????-??-?? ver 0.2 +- Support for 4 LADSPA sendeffects added +- Resampling of samples when loading (libsamplerate) +- Synth state is saved to/restored from project file +- Channel settings: balance, volume, effect tap for each sendeffect +- Effect settings: all LADSPA parameters controllable and saved to MusE project, effect master volume, effect on/off +- Support for mono + stereo samples +- Support for stereo + mono LADSPA effects +- Bugfixes, GUI-improvements etc... + +2004-11-09 ver 0.1 +- Simpledrums initial release +- 16 channels (1 sample for each channel) with parameters: volume, balance, noteoff-ignore + +(C) Copyright Mathias Lundgren, Werner Schweer 2000-2004 +Licensed under the GNU General Public License diff --git a/attic/muse_qt4_evolution/synti/simpledrums/common.h b/attic/muse_qt4_evolution/synti/simpledrums/common.h new file mode 100644 index 00000000..e4763540 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/simpledrums/common.h @@ -0,0 +1,110 @@ +// +// C++ Interface: common +// +// Description: +// +// +// Author: Mathias Lundgren , (C) 2004 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef __MUSE_TESTO_COMMON_H__ +#define __MUSE_TESTO_COMMON_H__ + +#include "muse/midictrl.h" + +#define SS_VERSIONSTRING "1.0" + +#define SS_DEBUG 0 +#define SS_DEBUG_INIT 0 +#define SS_TRACE_FUNC 0 +#define SS_DEBUG_MIDI 0 +#define SS_DEBUG_LADSPA 0 +#define SS_DEBUG_STATE 0 + +#define SS_DBG(string) if (SS_DEBUG) fprintf(stderr, "%s:%d:%s: %s\n", __FILE__ , __LINE__ , __PRETTY_FUNCTION__, string); +#define SS_DBG2(string1, string2) if (SS_DEBUG) fprintf(stderr, "%s:%d:%s: %s: %s\n", __FILE__ , __LINE__ , __PRETTY_FUNCTION__, string1, string2); +#define SS_DBG_I(string1, int) if (SS_DEBUG) fprintf(stderr, "%s:%d:%s: %s: %d\n", __FILE__ , __LINE__ , __PRETTY_FUNCTION__, string1, int); + +#define SS_TRACE_IN if (SS_TRACE_FUNC) fprintf (stderr, "->%s:%d\n", __PRETTY_FUNCTION__, __LINE__); +#define SS_TRACE_OUT if (SS_TRACE_FUNC) fprintf (stderr, "<-%s:%d\n", __PRETTY_FUNCTION__, __LINE__); +#define SS_ERROR(string) fprintf(stderr, "SimpleDrums error: %s\n", string) +#define SS_DBG_LADSPA(string1) if (SS_DEBUG_LADSPA) fprintf(stderr, "%s:%d:%s: %s\n", __FILE__ , __LINE__ , __PRETTY_FUNCTION__, string1); +#define SS_DBG_LADSPA2(string1, string2) if (SS_DEBUG_LADSPA) fprintf(stderr, "%s:%d:%s: %s: %s\n", __FILE__ , __LINE__ , __PRETTY_FUNCTION__, string1, string2); + +#define SS_SYSEX_INIT_DATA_VERSION 1 + +#define SS_NR_OF_CHANNELS 16 +#define SS_AUDIO_CHANNELS 2 +#define SS_NR_OF_SENDEFFECTS 4 + +// Controller-related: +#define SS_CHANNEL_CTRL_VOLUME 0 +#define SS_CHANNEL_CTRL_PAN 1 +#define SS_CHANNEL_CTRL_NOFF 2 +#define SS_CHANNEL_CTRL_ONOFF 3 +#define SS_CHANNEL_SENDFX1 4 +#define SS_CHANNEL_SENDFX2 5 +#define SS_CHANNEL_SENDFX3 6 +#define SS_CHANNEL_SENDFX4 7 + +#define SS_PLUGIN_RETURN 0 +#define SS_PLUGIN_ONOFF 1 + +#define SS_NR_OF_MASTER_CONTROLLERS 1 +#define SS_NR_OF_CHANNEL_CONTROLLERS 8 +#define SS_NR_OF_PLUGIN_CONTROLLERS 2 + +#define SS_NR_OF_CONTROLLERS (SS_NR_OF_MASTER_CONTROLLERS + (SS_NR_OF_CHANNELS * SS_NR_OF_CHANNEL_CONTROLLERS) + (SS_NR_OF_PLUGIN_CONTROLLERS*SS_NR_OF_SENDEFFECTS)) +#define SS_FIRST_MASTER_CONTROLLER CTRL_NRPN14_OFFSET +#define SS_FIRST_CHANNEL_CONTROLLER (SS_FIRST_MASTER_CONTROLLER + SS_NR_OF_MASTER_CONTROLLERS) +#define SS_LAST_MASTER_CONTROLLER (SS_FIRST_CHANNEL_CONTROLLER - 1) +#define SS_LAST_CHANNEL_CONTROLLER (SS_FIRST_CHANNEL_CONTROLLER -1 + (SS_NR_OF_CHANNEL_CONTROLLERS * SS_NR_OF_CHANNELS)) + +#define SS_FIRST_PLUGIN_CONTROLLER (SS_LAST_CHANNEL_CONTROLLER + 1) +#define SS_LAST_PLUGIN_CONTROLLER (SS_FIRST_PLUGIN_CONTROLLER -1 + SS_NR_OF_SENDEFFECTS*SS_NR_OF_PLUGIN_CONTROLLERS) + +#define SS_MASTER_CTRL_VOLUME SS_FIRST_MASTER_CONTROLLER + +#define SS_CHANNEL_VOLUME_CONTROLLER(int) (SS_FIRST_CHANNEL_CONTROLLER + (SS_NR_OF_CHANNEL_CONTROLLERS * int) + SS_CHANNEL_CTRL_VOLUME) +#define SS_CHANNEL_PAN_CONTROLLER(int) (SS_FIRST_CHANNEL_CONTROLLER + (SS_NR_OF_CHANNEL_CONTROLLERS * int) + SS_CHANNEL_CTRL_PAN) +#define SS_CHANNEL_NOFF_CONTROLLER(int) (SS_FIRST_CHANNEL_CONTROLLER + (SS_NR_OF_CHANNEL_CONTROLLERS * int) + SS_CHANNEL_CTRL_NOFF) +#define SS_CHANNEL_ONOFF_CONTROLLER(int) (SS_FIRST_CHANNEL_CONTROLLER + (SS_NR_OF_CHANNEL_CONTROLLERS * int) + SS_CHANNEL_CTRL_ONOFF) +#define SS_CHANNEL_SENDFX_CONTROLLER(int1,int2) (SS_FIRST_CHANNEL_CONTROLLER + (SS_NR_OF_CHANNEL_CONTROLLERS * int1) + SS_CHANNEL_SENDFX1 + int2) + +#define SS_PLUGIN_RETURNLEVEL_CONTROLLER(int) (SS_FIRST_PLUGIN_CONTROLLER + (int * SS_NR_OF_PLUGIN_CONTROLLERS)) +#define SS_PLUGIN_ONOFF_CONTROLLER(int) (SS_FIRST_PLUGIN_CONTROLLER + (int * SS_NR_OF_PLUGIN_CONTROLLERS) + 1) + +#define SS_LOWEST_NOTE 36 +#define SS_HIGHEST_NOTE (SS_LOWEST_NOTE + SS_NR_OF_CHANNELS) + +#define SS_PLUGIN_PARAM_MIN 0 +#define SS_PLUGIN_PARAM_MAX 127 + +typedef unsigned char byte; + +enum { + SS_SYSEX_LOAD_SAMPLE = 0, // gui -> synth: tell synth to load sample + SS_SYSEX_INIT_DATA, // synth reinitialization, the position of this (1) in the enum must not be changed since this value is written into proj file + SS_SYSEX_LOAD_SAMPLE_OK, // synth -> gui: tell gui sample loaded OK + SS_SYSEX_LOAD_SAMPLE_ERROR, // synth -> gui: tell gui sample ! loaded OK + SS_SYSEX_CLEAR_SAMPLE, // gui -> synth: tell synth to clear sample + SS_SYSEX_CLEAR_SAMPLE_OK, // synth->gui: confirm sample cleared OK + SS_SYSEX_LOAD_SENDEFFECT, // gui -> synth: tell synth to load laspa-effect + SS_SYSEX_LOAD_SENDEFFECT_OK,// synth->gui: plugin loaded ok + SS_SYSEX_LOAD_SENDEFFECT_ERROR, // synth->gui: plugin _not_ loaded ok + SS_SYSEX_CLEAR_SENDEFFECT, // gui->synth: clear plugin + SS_SYSEX_CLEAR_SENDEFFECT_OK,// synth->gui: plugin cleared + SS_SYSEX_SET_PLUGIN_PARAMETER, //gui->synth: set plugin parameter + SS_SYSEX_SET_PLUGIN_PARAMETER_OK, // synth->gui: set plugin parameter (update gui) + SS_SYSEX_ERRORMSG, // synth -> gui: general error message from synth + SS_SYSEX_GET_INIT_DATA, // gui->synth: request init data + SS_SYSEX_SEND_INIT_DATA // synth->gui: give gui init data + }; + +extern int SS_samplerate; +extern float SS_map_pluginparam2logdomain(int pluginparam_val); +extern int SS_map_logdomain2pluginparam(float pluginparam_log); +#endif + diff --git a/attic/muse_qt4_evolution/synti/simpledrums/simpledrums.cpp b/attic/muse_qt4_evolution/synti/simpledrums/simpledrums.cpp new file mode 100644 index 00000000..93be946d --- /dev/null +++ b/attic/muse_qt4_evolution/synti/simpledrums/simpledrums.cpp @@ -0,0 +1,1719 @@ +// +// C++ Implementation: simplesynth +// +// Description: +// +// +// Author: Mathias Lundgren , (C) 2004 +// +// Copyright: See COPYING file that comes with this distribution +// +// + +#include "muse/midictrl.h" +#include "muse/midi.h" +#include "libsynti/midievent.h" +#include "simpledrums.h" +// #include +#include + +const char* SimpleSynth::synth_state_descr[] = + { + "SS_INITIALIZING", + "SS_LOADING_SAMPLE", + "SS_CLEARING_SAMPLE", + "SS_RUNNING" + }; + +const char* SimpleSynth::channel_state_descr[] = + { + "SS_CHANNEL_INACTIVE", + "SS_SAMPLE_PLAYING" + }; + +#define SWITCH_SYNTH_STATE(state)\ +synth_state = state; \ +if (SS_DEBUG_STATE) \ + fprintf (stderr, "SS STATE: %s\n", SimpleSynth::synth_state_descr[state]); + +#define SWITCH_CHAN_STATE(ch, s)\ +channels[ch].state = s; \ +if (SS_DEBUG_STATE) \ + fprintf (stderr, "SS CHAN %d STATE: %s\n", ch, SimpleSynth::channel_state_descr[s]); + +#define SS_CHANNEL_VOLUME_QUOT 100.0 +#define SS_MASTER_VOLUME_QUOT 100.0 +int SS_samplerate; + +#define SS_LOG_MAX 0 +#define SS_LOG_MIN -10 +#define SS_LOG_OFFSET SS_LOG_MIN + + +// +// Map plugin parameter on domain [SS_PLUGIN_PARAM_MIN, SS_PLUGIN_PARAM_MAX] to domain [SS_LOG_MIN, SS_LOG_MAX] (log domain) +// +float SS_map_pluginparam2logdomain(int pluginparam_val) + { + float scale = (float) (SS_LOG_MAX - SS_LOG_MIN)/ (float) SS_PLUGIN_PARAM_MAX; + float scaled = (float) pluginparam_val * scale; + float mapped = scaled + SS_LOG_OFFSET; + return mapped; + } +// +// Map plugin parameter on domain to domain [SS_LOG_MIN, SS_LOG_MAX] to [SS_PLUGIN_PARAM_MIN, SS_PLUGIN_PARAM_MAX] (from log-> [0,127]) +// (inverse func to the above) +int SS_map_logdomain2pluginparam(float pluginparam_log) + { + float mapped = pluginparam_log - SS_LOG_OFFSET; + float scale = (float) SS_PLUGIN_PARAM_MAX / (float) (SS_LOG_MAX - SS_LOG_MIN); + int scaled = (int) round(mapped * scale); + return scaled; + } + +//--------------------------------------------------------- +// SimpleSynth +//--------------------------------------------------------- +SimpleSynth::SimpleSynth(int sr) + : Mess(SS_AUDIO_CHANNELS) + { + SS_TRACE_IN + SS_samplerate = sr; + SS_initPlugins(); + + simplesynth_ptr = this; + master_vol = 100.0 / SS_MASTER_VOLUME_QUOT; + master_vol_ctrlval = 100; + + //initialize + for (int i=0; idata; + delete channels[i].sample; + } + } + simplesynth_ptr = NULL; + + SS_DBG("Deleting pluginlist"); + //Cleanup plugins: + for (iPlugin i = plugins.begin(); i != plugins.end(); ++i) { + delete (*i); + } + plugins.clear(); + + SS_DBG("Deleting sendfx buffers"); + //Delete sendfx buffers: + for (int i=0; i